예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
0
//-------------------------------------------------------------------------------------
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;
}
예제 #4
0
//-------------------------------------------------------------------------------------
bool DBInterfaceMysql::detach()
{
	if(mysql())
	{
		::mysql_close(mysql());
		pMysql_ = NULL;
	}

	return true;
}
예제 #5
0
//-------------------------------------------------------------------------------------
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;
}
예제 #6
0
/*
 *  执行修改语句,向数据库中新增数据
 */
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;
        }
    }
}
예제 #7
0
파일: grab.cpp 프로젝트: zhengxiexie/m
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;
}
예제 #8
0
//-------------------------------------------------------------------------------------
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);
}
예제 #9
0
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;
}
예제 #10
0
파일: grab.cpp 프로젝트: zhengxiexie/m
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;
}
예제 #11
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;
}
예제 #12
0
	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;
}
예제 #15
0
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;
  }
}
예제 #16
0
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);
}
예제 #17
0
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;
    }
}
예제 #18
0
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;
}
예제 #19
0
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);
}
예제 #21
0
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);
}
예제 #22
0
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);
}
예제 #23
0
파일: grab.cpp 프로젝트: zhengxiexie/m
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;
}
예제 #24
0
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();
}
예제 #25
0
	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"));
}
예제 #27
0
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());
}
예제 #28
0
//-------------------------------------------------------------------------------------
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;
}
예제 #29
0
//-------------------------------------------------------------------------------------
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;
}
예제 #30
0
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());
}