void CDatabaseItem::setConnected(bool isconnected) { #ifdef DEBUG qDebug("CDatabaseItem::setConnected(%s)", debug_string(booltostr(isconnected))); #endif if (isBlocked()) return; setBlocked(true); if (isconnected) is_connected = isconnected && mysql()->mysql()->mysqlSelectDb(text(0)); else is_connected = false; setPixmap(0, is_connected ? databaseConnectedIcon : databaseDisconnectedIcon); if (is_connected) { new CTableGroupItem(this, text(0), mysql()); setOpen(true); } else deleteChilds(); createWindowMenu(consoleWindow()->itemToolBar()); setBlocked(false); }
void CDatabaseItem::refreshWidget(bool b) { #ifdef DEBUG qDebug("CDatabaseItem::refreshWidget(%s)", debug_string(booltostr(b))); #endif if (isBlocked()) return; setBlocked(true); if (widget_id == int_type()) { CShowDatabaseGroupProperties * w = (CShowDatabaseGroupProperties *) widgetStack()->widget(int_type()); w->setMySQL(mysql()); w->setTitle(mysql()->connectionName()); if (b || widgetData.isEmpty()) { w->refresh(); w->saveData(&widgetData); } else w->loadData(widgetData); } else ((CDatabaseListViewItem *) QListViewItem::parent())->refreshWidget(b); widgetStack()->raiseWidget(widget_id); setBlocked(false); }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::execute(const char* strCommand, uint32 size, MemoryStream * resdata) { bool result = this->query(strCommand, size); if (!result) { return false; } if(resdata == NULL) { return true; } MYSQL_RES * pResult = mysql_store_result(mysql()); if(pResult) { if (resdata != NULL) { uint32 nrows = (uint32)mysql_num_rows(pResult); uint32 nfields = (uint32)mysql_num_fields(pResult); (*resdata) << nfields << nrows; MYSQL_ROW arow; while((arow = mysql_fetch_row(pResult)) != NULL) { unsigned long *lengths = mysql_fetch_lengths(pResult); for (uint32 i = 0; i < nfields; i++) { if (arow[i] == NULL) { std::string null = "NULL"; resdata->appendBlob(null.c_str(), null.size()); } else { resdata->appendBlob(arow[i], lengths[i]); } } } } mysql_free_result(pResult); } else { uint32 nfields = 0; uint64 affectedRows = mysql()->affected_rows; (*resdata) << ""; // errormsg (*resdata) << nfields; (*resdata) << affectedRows; } return true; }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::detach() { if(mysql()) { ::mysql_close(mysql()); pMysql_ = NULL; } return true; }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::write_query_result(MemoryStream * result) { if(result == NULL) { return true; } MYSQL_RES * pResult = mysql_store_result(mysql()); if(pResult) { uint32 nrows = (uint32)mysql_num_rows(pResult); uint32 nfields = (uint32)mysql_num_fields(pResult); (*result) << nfields << nrows; MYSQL_ROW arow; while((arow = mysql_fetch_row(pResult)) != NULL) { unsigned long *lengths = mysql_fetch_lengths(pResult); for (uint32 i = 0; i < nfields; ++i) { if (arow[i] == NULL) { result->appendBlob("NULL", strlen("NULL")); } else { result->appendBlob(arow[i], lengths[i]); } } } mysql_free_result(pResult); } else { uint32 nfields = 0; uint64 affectedRows = 0; if(mysql()) affectedRows = mysql()->affected_rows; (*result) << ""; // errormsg (*result) << nfields; (*result) << affectedRows; } return true; }
/* * 执行修改语句,向数据库中新增数据 */ bool MysqlTable::process_update_transaction(const char* db_name) { int size = this->update_transaction_sqls.size(); if(size == 0) { LOGD("[GWJ] %s: No UPDATE SQL in Transaction", __FUNCTION__); return false; } else { LOGD("[GWJ] %s: %d UPDATE SQLs in Transaction to Process", __FUNCTION__, size); DuokooMysql mysql(db_name); int count = mysql.queryInTransaction(this->update_transaction_sqls); if(count < 0) { LOGD("[GWJ] %s: Error", __FUNCTION__); // 此处是否需要回滚? // mysql.rollback(); return false; } else { LOGD("[GWJ] %s: OK", __FUNCTION__); return true; } } }
int Grab::getUserGrabEx(const string& user_id, string& num, int32_t& occupy) { int res(0); string query_sql; DuokooMysql mysql("grab_mysql"); query_sql="SELECT num FROM `MCP`.`mcp_content_user_grab` WHERE `user_id` = " + user_id + " AND `grab_id` = " + toString(_id); res=mysql.query(query_sql); if(res<0){ UB_LOG_NOTICE( "query sql[%s] failed, [%s], [%s:%d]", query_sql.c_str(), mysql.getErrDes().c_str(), __FILE__, __LINE__ ); return res; }else if(res>0){ UB_LOG_NOTICE( "user[%s] has already get a num[%s] in grab[%d]", user_id.c_str(), num.c_str(), _id ); num = mysql.getResult(0,0); } query_sql = "SELECT is_occupy from mcp_content_grab_num where num = '" + num + "'"; res = mysql.query(query_sql); if(res<0){ UB_LOG_NOTICE("query sql[%s] failed, [%s], [%s:%d]", query_sql.c_str(), mysql.getErrDes().c_str(), __FILE__, __LINE__ ); return res; }else if(res>0){ res = 0; occupy = atoi(mysql.getResult(0,0).c_str()); UB_LOG_NOTICE("occupy is %d"); } return res; }
//------------------------------------------------------------------------------------- void DBInterfaceMysql::getFields(TABLE_FIELDS& outs, const char* tablename) { std::string sqlname = ENTITY_TABLE_PERFIX"_"; sqlname += tablename; MYSQL_RES* result = mysql_list_fields(mysql(), sqlname.c_str(), NULL); if(result == NULL) { ERROR_MSG(boost::format("EntityTableMysql::loadFields:%1%\n") % getstrerror()); return; } unsigned int numFields; MYSQL_FIELD* fields; numFields = mysql_num_fields(result); fields = mysql_fetch_fields(result); for(unsigned int i=0; i<numFields; i++) { TABLE_FIELD& info = outs[fields[i].name]; info.name = fields[i].name; info.length = fields[i].length; info.maxlength = fields[i].max_length; info.flags = fields[i].flags; info.type = fields[i].type; } mysql_free_result(result); }
std::shared_ptr<MySQL> MySQL::Get(const Variant& link_identifier) { if (link_identifier.isNull()) { return GetDefaultConn(); } auto res = dyn_cast_or_null<MySQLResource>(link_identifier); return res ? res->mysql() : nullptr; }
int Grab::getGrabInfo(grab_t* grab_info) { UB_LOG_TRACE("Grab::getGrabInfo start"); string query_sql("SELECT `id`, `name`, `c_id`, `info`, `start_time`, `end_time`, `amount`, `probability` " "FROM `MCP`.`mcp_content_grab` " "WHERE `enable` = 1 AND `id` = " ); query_sql.append(toString(_id)); //DuokooMysql mysql; DuokooMysql mysql("grab_mysql"); int count=mysql.query(query_sql); if(count<0){ UB_LOG_FATAL( "sql[%s], [%s:%d]", query_sql.c_str(), __FILE__, __LINE__ ); return -5; }else if(count==0){ UB_LOG_FATAL( "Grab id[%d] has no record, [%s:%d]", _id, __FILE__, __LINE__ ); return -5; } _info.clear(); _info.id=atoi(mysql.getResult(0,0).c_str()); _info.name=mysql.getResult(0,1); _info.c_id=mysql.getResult(0,2); _info.info=mysql.getResult(0,3); _info.start_time=mysql.getResult(0,4); _info.end_time=mysql.getResult(0,5); _info.amount=atoi(mysql.getResult(0,6).c_str()); _info.probability=atof(mysql.getResult(0,7).c_str()); _info.send_amount=this->getSendAmount(); UB_LOG_NOTICE("name:[%s]",_info.name.c_str()); if(grab_info!=NULL){ *grab_info = _info; } UB_LOG_TRACE("Grab::getGrabInfo end"); return 0; }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::checkErrors() { std::string querycmd = fmt::format("SHOW TABLES LIKE \"tbl_{}\"", DBUtil::accountScriptName()); if(!query(querycmd.c_str(), querycmd.size(), true)) { ERROR_MSG(fmt::format("DBInterfaceMysql::checkErrors: {}, query is error!\n", querycmd)); return false; } bool foundAccountTable = false; MYSQL_RES * pResult = mysql_store_result(mysql()); if(pResult) { foundAccountTable = mysql_num_rows(pResult) > 0; mysql_free_result(pResult); } if(!foundAccountTable) { querycmd = "DROP TABLE `kbe_email_verification`, `kbe_accountinfos`"; try { query(querycmd.c_str(), querycmd.size(), false); } catch (...) { } } return true; }
bool doMsg(std::string& reply, const std::string& msg) { Cmd::Set setmsg; if (setmsg.ParseFromString(msg)) { const std::string& key = setmsg.key(); const std::string& value = setmsg.value(); LOG4CXX_INFO(logger, "<" << pthread_self() << "> set : " << setmsg.key() << ", " << setmsg.value().size()); RedisConnectionByKey redis(key, worker->cachePool()); if (redis) { redis->hmset("%s value %b flag %u touchtime %u", key.c_str(), value.data(), value.size(), 0, (unsigned int)time(0)); } else { LOG4CXX_WARN(logger, "set " << key << " .. redis is not ready"); } if (0 == s_cacheonly) { MySqlConnectionByKey mysql(key, worker->dbPool()); if (mysql) { try { mysqlpp::Query query = mysql->query(); query.reset(); query << "replace into " << getKVSTableName(key) << "(`key`, value, flag, touchtime) values(" << mysqlpp::quote << key << "," << mysqlpp::quote << value << "," << 0 << "," << time(0) << ")"; query.execute(); LOG4CXX_INFO(logger, "mysql " << key << "," << mysql->shard() << "," << getKVSTableName(key)); } catch (std::exception& err) { LOG4CXX_WARN(logger, "set " << key << " .. mysql error:" << err.what()); return false; } } else { LOG4CXX_WARN(logger, "set " << key << " .. mysql is not ready"); } } } reply = "OK"; return true; }
void CShowServerProperties::refresh() { #ifdef DEBUG qDebug("CShowServerProperties::refresh()"); #endif setTitle(mysql()->connectionName()); CProperties::refresh(); }
void CAdministrationWindow::CShowServerVariables::insertData() { CMySQLQuery *qry = new CMySQLQuery(mysql()->mysql()); bool notnew = mysql()->mysql()->version().major <= 3; if (!notnew) notnew = mysql()->mysql()->version().major == 4 && mysql()->mysql()->version().minor == 0 && mysql()->mysql()->version().relnum <= 2; qry->setEmitMessages(false); QString sql = "SHOW "; if (!notnew) sql += "GLOBAL "; sql += "VARIABLES"; if (qry->exec(sql)) while (qry->next()) insertItem(qry->row(0), qry->row(1)); delete qry; }
void CDatabaseItem::processMenu(int res) { #ifdef DEBUG qDebug("CDatabaseItem::processMenu(%d)", res); #endif if (isBlocked()) return; switch (res) { case MENU_CONNECT: setConnected(true); break; case MENU_DISCONNECT: setConnected(false); break; case MENU_DELETE: { if (myApp()->confirmCritical()) if ((QMessageBox::information(0, tr("Confirm Delete Database"), tr("Are you sure you want to Delete Database") + ":\'" + text(0) + "\' ?", tr("&Yes"), tr("&No")) != 0)) return; setBlocked(true); CMySQLQuery qry(mysql()->mysql()); qry.setEmitMessages(false); if (qry.execStaticQuery("DROP DATABASE IF EXISTS " + mysql()->mysql()->quote(text(0)))) { setVisible(false); setBlocked(false); delete this; } else setBlocked(false); } break; case MENU_NEW_WINDOW_FROM_HERE: databaseListView()->openInNewWindow(this); break; } }
void CUserAdminItem::doCreateUser() { #ifdef DEBUG qDebug("CUserAdminItem::doCreateUser()"); #endif CUserAdminWindow *p = new CUserAdminWindow(myApp()->workSpace(), mysql(), QString::null, QString::null, false); connect(p, SIGNAL(do_refresh()), this, SLOT(refresh())); myShowWindow(p); }
bool MysqlTable::process_query_sql(const char* db_name, bool need_seperate_page) { DuokooMysql mysql(db_name); // 先设定各个 SQL 元素 this->get_every_sql_elements(need_seperate_page); this->total_results = this->get_result_total_count(mysql); if(this->total_results == 0) { LOGD("[GWJ] %s: total_results is 0. No Records", __FUNCTION__); return false; } else if(this->total_results < 0) { this->total_results = 0; LOGD("[GWJ] %s: Get total_results Error!!", __FUNCTION__); return false; } string query; bool is_ok = this->get_whole_query_string(query); if(is_ok) { int count = mysql.query(query); if(count < 0) { LOGD("[GWJ] %s: Error[%s]", __FUNCTION__, query.c_str()); return false; } else if(count == 0) { LOGD("[GWJ] %s: No Records[%s]", __FUNCTION__, query.c_str()); return false; } this->fill_result_set(mysql, count); return true; } else { LOGD("[GWJ] %s: SQL Error!", __FUNCTION__); return false; } }
bool MySQLKDataDriver::_init() { string func_name(" [MySQLKDataDriver::MySQLKDataDriver]"); string default_host("127.0.0.1"); string default_usr("root"); string default_pwd(""); try { m_host = m_params.get<string>("host"); } catch(...) { m_host = default_host; HKU_WARN("Can't get mysql host! " << func_name); } try { m_port = m_params.get<int>("port"); } catch(...) { m_port = 3306; } try { m_usr = m_params.get<string>("usr"); } catch(...) { m_usr = default_usr; } try { m_pwd = m_params.get<string>("pwd"); } catch(...) { m_pwd = default_pwd; } shared_ptr<MYSQL> mysql(new MYSQL, MySQLCloser()); if (!mysql_init(mysql.get())) { HKU_ERROR(" Initial MySQL handle error!" << func_name); return false; } if (!mysql_real_connect(mysql.get(), m_host.c_str(), m_usr.c_str(), m_pwd.c_str(), NULL, m_port, NULL, 0) ) { HKU_ERROR(" Failed to connect to database!" << func_name); return false; } if (mysql_set_character_set(mysql.get(), "utf8")) { HKU_ERROR(" mysql_set_character_set error!" << func_name); return false; } m_mysql = mysql; return true; }
bool CUserAdminItem::displayUsers() { #ifdef DEBUG qDebug("CUserAdminItem::displayUsers()"); #endif //TODO: This needs to be modified to NOT use mysql.user for the users list. SHOW GRANTS FOR % is needed in the server. while (this->childCount() > 0) deleteChilds(); bool hasAccess = false; CMySQLQuery *q = new CMySQLQuery(mysql()->mysql()); q->setEmitMessages(false); q->setEmitErrors(false); if (q->exec("SELECT User, Host FROM mysql.user ORDER BY User")) { hasAccess = true; while (q->next()) new CUserItem(this, mysql(), q->row(0), q->row(1), userIcon); } delete q; return hasAccess; }
void CProcessListTable::DoubleClicked(int row, int col, int button, const QPoint &) { if (isBlocked() || button != 1 || col < 1) return; QString txt = text(row, 7); if (txt.isEmpty() || txt.isNull()) return; CQueryWindow *w = new CQueryWindow(myApp()->workSpace(), mysql(), CQueryWindow::QUERY, SQL_PANEL | RESULTS_PANEL); w->setQuery(txt); w->setFocus(); w->raise(); myShowWindow(w); }
void CUserAdminItem::setConnected(bool connected, bool refresh_toolbar) { #ifdef DEBUG qDebug("CUserAdminItem::setConnected(%s)", debug_string(booltostr(connected))); #endif if (isBlocked()) return; setBlocked(true); if (connected && !is_connected) { mysql()->mysql()->setEmitErrors(false); if (mysql()->mysql()->mysqlSelectDb("mysql")) is_connected = displayUsers(); else printAccessError(); mysql()->mysql()->setEmitErrors(true); } else is_connected = false; if (!is_connected && !connected) { while (this->childCount() > 0) deleteChilds(); } else if (is_connected) setOpen(true); setPixmap(0, getPixmapIcon(!is_connected ? "databaseUsersDisconnectedIcon" : "databaseUsersIcon")); if (refresh_toolbar) createWindowMenu(consoleWindow()->itemToolBar()); setBlocked(false); }
CUserAdminItem::CUserAdminItem(CDatabaseListView * parent, CMySQLServer *m, const QString &connection_name, bool connected) : CDatabaseListViewItem(parent, m, USER_ADMINISTRATION, "CUserAdminItem") { #ifdef DEBUG qDebug("CUserAdminItem::CUserAdminItem(CDatabaseListView *, CMySQLServer *, const QString &, bool)"); #endif is_connected = false; if (m == 0) { m_mysql = new CMySQLServer(connection_name, messagePanel()); mysql()->connect(); deletemysql = true; } init(connected, true); }
int Grab::getUserGrab(const string& user_id, string& num) { int res(0); string query_sql; //DuokooMysql mysql; DuokooMysql mysql("grab_mysql"); query_sql="SELECT num FROM `MCP`.`mcp_content_user_grab` WHERE `user_id` = " + user_id + " AND `grab_id` = " + toString(_id); res=mysql.query(query_sql); if(res<0){ UB_LOG_FATAL( "query sql[%s] failed, [%s], [%s:%d]", query_sql.c_str(), mysql.getErrDes().c_str(), __FILE__, __LINE__ ); }else if(res>0){ UB_LOG_NOTICE( "user[%s] has already get a num[%s] in grab[%d]", user_id.c_str(), num.c_str(), _id ); num = mysql.getResult(0,0); } return res; }
CDatabaseItem::CDatabaseItem(CDatabaseListView * parent, const QString &dbname, bool isconnected, const QString &connection_name, CMySQLServer *m) : CDatabaseListViewItem(parent, m, DATABASE, "CDatabaseItem") { #ifdef DEBUG qDebug("CDatabaseItem::CDatabaseItem(CDatabaseListView *, '%s', bool, const QString &, CMySQLServer *)", debug_string(dbname)); #endif if (m == 0) { m_mysql = new CMySQLServer(connection_name, messagePanel()); mysql()->connect(); deletemysql = true; } is_connected = isconnected; init(dbname); widget_id = int_type(); }
bool doMsg(std::string& reply, const std::string& msg) { const std::string& key = msg; RedisConnectionByKey redis(key, worker->cachePool()); if (redis) { redis->del(key); LOG4CXX_INFO(logger, "del " << key); } else { LOG4CXX_WARN(logger, "del " << key << " .. redis is not ready"); } if (0 == s_cacheonly) { MySqlConnectionByKey mysql(key, worker->dbPool()); if (mysql) { try { mysqlpp::Query query = mysql->query(); query.reset(); query << "delete from " << getKVSTableName(key) << " where `key`=" << mysqlpp::quote << key; query.execute(); LOG4CXX_INFO(logger, "mysql: del" << key << "," << mysql->shard() << "," << getKVSTableName(key)); reply = "OK"; } catch (std::exception& err) { LOG4CXX_WARN(logger, "del " << key << " .. mysql error:" << err.what()); return false; } } else { LOG4CXX_WARN(logger, "del " << key << " .. mysql is not ready"); } } return true; }
CServerStatusTable::CServerStatusTable(QWidget * parent, CMySQLServer *m) : CQueryTable(parent, 0, m, "CServerStatusTable") { verticalHeader()->hide(); setFocusStyle(QTable::FollowStyle); setSelectionMode(QTable::Single); setLeftMargin(0); setKeepColumnWidth(true); qry = new CMySQLQuery(m->mysql()); qry->setEmitMessages(false); setQuery(qry); setReadOnly(true); is_first = true; is_traditional = false; columnsWindow = new CTableFieldChooser(0, this, "CServerStatusTableColumnsWindow"); columnsWindow->setCaption("[" + mysql()->connectionName() + "] " + tr("Server Status Columns")); setCaption(tr("Server Status")); }
void CDatabaseItem::initMenuItems() { #ifdef DEBUG qDebug("CDatabaseItem::initMenuItems()"); #endif menu()->clear(); if (!is_connected) menu()->insertItem(databaseConnectIcon, tr("&Connect"), MENU_CONNECT); else menu()->insertItem(databaseDisconnectIcon, tr("&Disconnect"), MENU_DISCONNECT); menu()->insertSeparator(); menu()->insertItem(deleteIcon, tr("D&rop Database"), MENU_DELETE); menu()->insertSeparator(); menu()->insertItem(newWindowIcon, tr("New &Window from Here"), MENU_NEW_WINDOW_FROM_HERE); menu()->setItemEnabled(MENU_NEW_WINDOW_FROM_HERE, !mysql()->oneConnection()); }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::checkEnvironment() { std::string querycmd = "SHOW VARIABLES"; if(!query(querycmd.c_str(), querycmd.size(), true)) { ERROR_MSG(fmt::format("DBInterfaceMysql::checkEnvironment: {}, query is error!\n", querycmd)); return false; } bool lower_case_table_names = false; MYSQL_RES * pResult = mysql_store_result(mysql()); if(pResult) { MYSQL_ROW arow; while((arow = mysql_fetch_row(pResult)) != NULL) { std::string s = arow[0]; std::string v = arow[1]; if(s == "lower_case_table_names") { if(v != "1") { lower_case_table_names = true; } else { CRITICAL_MSG(fmt::format("DBInterfaceMysql::checkEnvironment: [my.cnf or my.ini]->lower_case_table_names != 0, curr={}!\n" "Windows use cmd('sc qc MySQL|find \".ini\"') to view the configuration directory.\n", v)); } } else if(s == "max_allowed_packet") { uint64 size; KBEngine::StringConv::str2value(size, v.c_str()); sql_max_allowed_packet_ = (size_t)size; } } mysql_free_result(pResult); } return lower_case_table_names; }
//------------------------------------------------------------------------------------- bool DBInterfaceMysql::getTableItemNames(const char* tablename, std::vector<std::string>& itemNames) { MYSQL_RES* result = mysql_list_fields(mysql(), tablename, NULL); if(result) { unsigned int numFields = mysql_num_fields(result); MYSQL_FIELD* fields = mysql_fetch_fields(result); for(unsigned int i = 0; i < numFields; i++) { itemNames.push_back(fields[i].name); } } else return false; mysql_free_result(result); return true; }
void CUserAdminItem::initMenuItems() { #ifdef DEBUG qDebug("CUserAdminItem::initMenuItems()"); #endif menu()->clear(); if (is_connected) menu()->insertItem(getPixmapIcon("databaseUsersDisconnectedIcon"), tr("&Disconnect"), MENU_DISCONNECT); else menu()->insertItem(getPixmapIcon("databaseUsersIcon"), tr("&Connect"), MENU_CONNECT); menu()->insertSeparator(); menu()->insertItem(getPixmapIcon("newUserIcon"), QObject::tr("&New User"), MENU_NEW); menu()->insertSeparator(); menu()->insertItem(getPixmapIcon("refreshIcon"), QObject::tr("&Refresh"), MENU_REFRESH); menu()->setItemEnabled(MENU_REFRESH, is_connected); menu()->insertSeparator(); menu()->insertItem(getPixmapIcon("newWindowIcon"), tr("New &Window from Here"), MENU_NEW_WINDOW_FROM_HERE); menu()->setItemEnabled(MENU_NEW_WINDOW_FROM_HERE, !mysql()->oneConnection()); }