upload all files

This commit is contained in:
2026-01-07 21:21:28 +08:00
parent 09d49d22c9
commit 8f53d867a2
220 changed files with 419218 additions and 0 deletions

237
Modules/dbActions.cpp Normal file
View File

@@ -0,0 +1,237 @@
#include <sqlite3.h>
#include <iostream>
#include <algorithm>
#include "Logger.h"
#include <cctype>
bool db_exec(sqlite3* targetDB, const char* command) {
char* errMsg = nullptr;
int rc = sqlite3_exec(targetDB, command, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
postLog("[SQLite] SQL error: " + std::string(errMsg), 4);
sqlite3_free(errMsg);
return false;
}
return true;
}
bool db_addItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value) {
if (!targetDB) {
postLog("[SQLite] targetDB is null.", 3);
return false;
}
char* sql = nullptr;
if (targetTable == "users") {
sql = sqlite3_mprintf(
"INSERT INTO users (userId, %Q) VALUES (%d, %Q);",
sector.c_str(),
id,
value.c_str()
);
}
else if (targetTable == "salaryForm") {
sql = sqlite3_mprintf(
"INSERT INTO salaryForm (teacherId, %Q) VALUES (%d, %Q);",
sector.c_str(),
id,
value.c_str()
);
}
else if (targetTable == "teacherInfo") {
sql = sqlite3_mprintf(
"INSERT INTO teacherInfo (teacherId, %Q) VALUES (%d, %Q);",
sector.c_str(),
id,
value.c_str()
);
}
else {
postLog("[SQLite] Unknown target table.", 3);
return false;
}
if (!sql) {
postLog("[SQLite] Failed to allocate SQL string.", 3);
return false;
}
char* errMsg = nullptr;
int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg);
sqlite3_free(sql);
if (rc != SQLITE_OK) {
postLog(std::string("[SQLite] Failed to add item: ") + (errMsg ? errMsg : "unknown error"), 3);
if (errMsg) sqlite3_free(errMsg);
return false;
}
return true;
}
bool db_updateItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value) {
if (!targetDB) {
postLog("[SQLite] targetDB is null.", 3);
return false;
}
char* sql = nullptr;
if (targetTable == "users"){
sql = sqlite3_mprintf(
"UPDATE users SET %s=\'%s\' WHERE userId=%d;",
sector.c_str(),
value.c_str(),
id
);
}
else if (targetTable == "salaryForm") {
sql = sqlite3_mprintf(
"UPDATE salaryForm SET %s=\'%s\' WHERE teacherId=%d;",
sector.c_str(),
value.c_str(),
id
);
}
else if (targetTable == "teacherInfo") {
sql = sqlite3_mprintf(
"UPDATE teacherInfo SET %s=\'%s\' WHERE teacherId=%d;",
sector.c_str(),
value.c_str(),
id
);
}
else {
postLog("[SQLite] Unknown target table.", 3);
return false;
}
if (!sql) {
postLog("[SQLite] Failed to allocate SQL string.", 3);
return false;
}
char* errMsg = nullptr;
int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg);
sqlite3_free(sql);
if (rc != SQLITE_OK) {
postLog(std::string("[SQLite] Failed to add item: ") + (errMsg ? errMsg : "unknown error"), 3);
if (errMsg) sqlite3_free(errMsg);
return false;
}
return true;
}
bool db_rmItem(sqlite3* targetDB, std::string targetTable, int id) {
if (!targetDB) {
postLog("[SQLite] targetDB is null.", 3);
return false;
}
char* sql = sqlite3_mprintf(
"DELETE FROM %s WHERE teacherId = %d;",
targetTable.c_str(),
id
);
if (!sql) {
postLog("[SQLite] Failed to allocate SQL string.", 3);
return false;
}
char* errMsg = nullptr;
int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg);
sqlite3_free(sql);
if (rc != SQLITE_OK) {
postLog(std::string("[SQLite] Failed to remove item: ") + (errMsg ? errMsg : "unknown error"), 3);
if (errMsg) sqlite3_free(errMsg);
return false;
}
return true;
}
std::string db_getItem(sqlite3* sourceDB, std::string sourceTable, std::string itemType, int itemID) {
if (!sourceDB) {
postLog("[SQLite] sourceDB is null.", 3);
return "";
}
std::string command;
if (sourceTable == "users") {
command = "SELECT " + itemType + " FROM users WHERE userId = " + std::to_string(itemID) + ";";
} else if (sourceTable == "salaryForm") {
command = "SELECT " + itemType + " FROM salaryForm WHERE teacherId = " + std::to_string(itemID) + ";";
}
else if (sourceTable == "teacherInfo") {
command = "SELECT " + itemType + " FROM teacherInfo WHERE teacherId = " + std::to_string(itemID) + ";";
}
else {
postLog("[SQLite] Unknown table in db_getItem.", 3);
return "";
}
sqlite3_stmt* stmt = nullptr;
int rc = sqlite3_prepare_v2(sourceDB, command.c_str(), -1, &stmt, nullptr);
if (rc != SQLITE_OK) {
postLog(std::string("[SQLite] Precompiling failed: ") + sqlite3_errmsg(sourceDB), 3);
if (stmt) sqlite3_finalize(stmt);
return "";
}
std::string result;
rc = sqlite3_step(stmt);
if (rc == SQLITE_ROW) {
const unsigned char* txt = sqlite3_column_text(stmt, 0);
if (txt) result = reinterpret_cast<const char*>(txt);
} else if (rc == SQLITE_DONE) {
postLog("[SQLite] Failed to find specific ID [" + std::to_string(itemID) + "]", 3);
result = "err: no specific id";
} else {
postLog(std::string("[SQLite] Step error: ") + sqlite3_errmsg(sourceDB), 4);
}
sqlite3_finalize(stmt);
return result;
}
std::string db_findIdBy(sqlite3* sourceDB, std::string sourceTable, std::string itemType, std::string value) {
if (!sourceDB) {
postLog("[SQLite] sourceDB is null.", 3);
return "0";
}
const std::string idCol = (sourceTable == "users") ? "userId" : "teacherId";
std::string sql = "SELECT " + idCol + " FROM " + sourceTable + " WHERE " + itemType + " = ?;";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(sourceDB, sql.c_str(), -1, &stmt, nullptr) != SQLITE_OK) {
postLog(std::string("[SQLite] Precompiling failed: ") + sqlite3_errmsg(sourceDB), 3);
return "0";
}
// Bind the value: numeric vs text
bool isNumber = !value.empty() && std::all_of(value.begin(), value.end(), [](unsigned char ch){
return std::isdigit(ch) != 0;
});
if (isNumber) {
sqlite3_bind_int(stmt, 1, std::stoi(value));
} else {
sqlite3_bind_text(stmt, 1, value.c_str(), -1, SQLITE_TRANSIENT);
}
std::string result;
int rc = sqlite3_step(stmt);
if (rc == SQLITE_ROW) {
const unsigned char* txt = sqlite3_column_text(stmt, 0);
if (txt) result = reinterpret_cast<const char*>(txt);
} else if (rc == SQLITE_DONE) {
postLog("[SQLite] Failed to find specific ID by content [" + itemType + ":" + value + "]", 3);
result = "0";
} else {
postLog(std::string("[SQLite] Step error: ") + sqlite3_errmsg(sourceDB), 4);
}
sqlite3_finalize(stmt);
return result;
}