#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include "mariadb/mysql.h" #include "Secret.h" // for database credentials using namespace std; string randStr(const int len, mt19937_64& rng) { string ans; for (int i = 0; i < len; i++) { ans += ('a' + rng() % 26); } return ans; } int main() { FILE* fpout = fopen("QueryLog.txt", "wt"); MYSQL mysql; mysql_library_init(0, nullptr, nullptr); mysql_thread_init(); MYSQL* pmsRet = mysql_init(&mysql); assert(pmsRet); pmsRet = mysql_real_connect(&mysql, ConnProp::_cpHost, ConnProp::_cpUser, ConnProp::_cpPasswd, ConnProp::_cpDB, ConnProp::_cpPort, nullptr, CLIENT_COMPRESS | CLIENT_LOCAL_FILES | CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS); assert(pmsRet); const int lastListID = 10; mt19937_64 rng; for (int i = 0; i < 3; i++) { string query; query = "INSERT INTO demo_upsert (Url, LastListID) VALUES "; for (int j = 0; j < 15000; j++) { if (j != 0) { query += ",\n"; } query += "('" + randStr(3, rng) + "', " + to_string(lastListID) + ")"; } query += " ON DUPLICATE KEY UPDATE LastListID=" + to_string(lastListID); fprintf(fpout, "%s;\n", query.c_str()); int iRet = mysql_real_query(&mysql, query.c_str(), query.size()); assert(iRet == 0); int64_t nAffected = mysql_affected_rows(&mysql); cout << nAffected << ' '; query = "UPDATE demo_upsert SET LastListID=NULL"; fprintf(fpout, "%s;\n", query.c_str()); iRet = mysql_real_query(&mysql, query.c_str(), query.size()); assert(iRet == 0); nAffected = mysql_affected_rows(&mysql); cout << nAffected << endl; } fclose(fpout); return 0; }