class AutoMysqlDeinit { public: AutoMysqlDeinit(MYSQL* pCon) : m_pCon(pCon) {} ~AutoMysqlDeinit() { if(m_pCon) { mysql_close(m_pCon); m_pCon = nullptr; } mysql_library_end(); } private: MYSQL* m_pCon; }; class AutoResultFree { public: AutoResultFree(MYSQL_RES* pRes) : m_pRes(pRes) {} ~AutoResultFree() { if(m_pRes) { mysql_free_result(m_pRes); m_pRes = nullptr; } } private: MYSQL_RES* m_pRes; }; long Run(const char* szHost, const char* szUser, const char* szPwd, const char* szDb, unsigned int nPort) { std::ofstream out("$kldb.txt"); auto* pCon = mysql_init(nullptr); if(!pCon) { out << "mysql_init() failed" << std::endl; return 1; } AutoMysqlDeinit amd(pCon); auto* pCon2 = mysql_real_connect(pCon, szHost, szUser, szPwd, szDb, nPort, nullptr, CLIENT_MULTI_STATEMENTS); if(pCon != pCon2) { out << "mysql_real_connect() failed" << std::endl; return 2; } const char szQuery[] = "DROP TEMPORARY TABLE IF EXISTS `__ttmp_test_host_product_table`; " "CREATE TEMPORARY TABLE IF NOT EXISTS `__ttmp_test_host_product_table` ( `hostid` INT, `productname` VARCHAR(32) UNICODE, `bitmask` INT ) " "ENGINE=InnoDB DEFAULT CHARACTER SET `ascii` COLLATE `ascii_general_ci`;"; out << "~~ Execute query " << szQuery << std::endl; const auto nRes = mysql_real_query(pCon, szQuery, strlen(szQuery)); if(nRes) { out << "mysql_real_query() failed" << std::endl; return 3; } out << "~~ Query ok, result: " << nRes << std::endl; do { auto* pRes = mysql_store_result(pCon); AutoResultFree arf(pRes); } while (!mysql_next_result(pCon)); const char szQuery2[] = "SELECT hostid FROM `__ttmp_test_host_product_table`"; out << "~~ Execute query " << szQuery2 << std::endl; const auto nRes2 = mysql_real_query(pCon, szQuery2, strlen(szQuery2)); if(nRes2) { const unsigned nError = mysql_errno(pCon); const char* szError = mysql_error(pCon); const char* szSqlState = mysql_sqlstate(pCon); out << "~~ Error code: " << nError << " Error msg: " << szError << " Sql state: " << szSqlState << std::endl; return 4; } do { auto* pRes = mysql_store_result(pCon); AutoResultFree arf(pRes); } while(!mysql_next_result(pCon)); return 0; }