Add some requesters

This commit is contained in:
2025-11-22 22:57:54 +08:00
parent 19ff49c917
commit e219e04a48
5704 changed files with 408479 additions and 111 deletions

View File

@@ -5,15 +5,16 @@ import (
"fmt"
"log"
"strings"
"time"
_ "github.com/go-sql-driver/mysql"
)
// ConnectDatabase connects to MySQL and returns a *sql.DB handle.
// The caller is responsible for calling db.Close() when done.
func ConnectDatabase(host string, port int, user string, pass string, dbName string) (*sql.DB, error) {
func ConnectDatabase(driver, host string, port int, user string, pass string, dbName string) (*sql.DB, error) {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", user, pass, host, port, dbName)
db, err := sql.Open("mysql", dsn)
db, err := sql.Open(driver, dsn)
if err != nil {
return nil, fmt.Errorf("[Error] Failed to connect to MySQL: %v", err)
}
@@ -23,6 +24,11 @@ func ConnectDatabase(host string, port int, user string, pass string, dbName str
return nil, fmt.Errorf("[Error] Failed to ping MySQL: %v", err)
}
// Set connection pool parameters
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(15 * time.Minute)
return db, nil
}
@@ -35,21 +41,11 @@ func CloseDatabase(db *sql.DB) {
}
}
// DatabaseExists checks if a database exists
func DatabaseExists(db *sql.DB, dbName string) bool {
var count int
err := db.QueryRow("SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name = ?", dbName).Scan(&count)
if err != nil {
log.Printf("[Warning] Failed to check database existence: %v", err)
return false
}
return count > 0
}
// TableExists checks if a table exists in the current database
func TableExists(db *sql.DB, tableName string) bool {
func TableExists(db *sql.DB, dbPrefix, tableName string) bool {
var count int
err := db.QueryRow("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ?", tableName).Scan(&count)
queryTableName := dbPrefix + tableName
err := db.QueryRow("SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ?", queryTableName).Scan(&count)
if err != nil {
log.Printf("[Warning] Failed to check table existence: %v", err)
return false
@@ -57,38 +53,13 @@ func TableExists(db *sql.DB, tableName string) bool {
return count > 0
}
// CreateDatabase creates a new database
func CreateDatabase(db *sql.DB, dbName string) error {
if !isValidName(dbName) {
return fmt.Errorf("invalid database name: %s", dbName)
}
_, err := db.Exec(fmt.Sprintf("CREATE DATABASE `%s`", dbName))
if err != nil {
log.Printf("[Warning] Failed to create database: %v", err)
return err
}
return nil
}
// DropDatabase drops a database
func DropDatabase(db *sql.DB, dbName string) error {
if !isValidName(dbName) {
return fmt.Errorf("invalid database name: %s", dbName)
}
_, err := db.Exec(fmt.Sprintf("DROP DATABASE `%s`", dbName))
if err != nil {
log.Printf("[Warning] Failed to drop database: %v", err)
return err
}
return nil
}
// CreateTable creates a new table in the current database
func CreateTable(db *sql.DB, tableName string, tableDef string) error {
func CreateTable(db *sql.DB, dbPrefix, tableName string, tableDef string) error {
if !isValidName(tableName) {
return fmt.Errorf("invalid table name: %s", tableName)
}
_, err := db.Exec(fmt.Sprintf("CREATE TABLE `%s` (%s)", tableName, tableDef))
queryTableName := dbPrefix + tableName
_, err := db.Exec(fmt.Sprintf("CREATE TABLE `%s` (%s)", queryTableName, tableDef))
if err != nil {
log.Printf("[Warning] Failed to create table: %v", err)
return err
@@ -97,11 +68,12 @@ func CreateTable(db *sql.DB, tableName string, tableDef string) error {
}
// DropTable drops a table from the current database
func DropTable(db *sql.DB, tableName string) error {
func DropTable(db *sql.DB, dbPrefix, tableName string) error {
if !isValidName(tableName) {
return fmt.Errorf("invalid table name: %s", tableName)
}
_, err := db.Exec(fmt.Sprintf("DROP TABLE `%s`", tableName))
queryTableName := dbPrefix + tableName
_, err := db.Exec(fmt.Sprintf("DROP TABLE `%s`", queryTableName))
if err != nil {
log.Printf("[Warning] Failed to drop table: %v", err)
return err
@@ -110,7 +82,7 @@ func DropTable(db *sql.DB, tableName string) error {
}
// InsertRow inserts a new row into a table
func InsertRow(db *sql.DB, tableName string, rowData map[string]interface{}) error {
func InsertRow(db *sql.DB, dbPrefix, tableName string, rowData map[string]interface{}) error {
if !isValidName(tableName) {
return fmt.Errorf("invalid table name: %s", tableName)
}
@@ -125,8 +97,9 @@ func InsertRow(db *sql.DB, tableName string, rowData map[string]interface{}) err
params = append(params, val)
}
queryTableName := dbPrefix + tableName
placeholders := strings.Repeat("?, ", len(params)-1) + "?"
query := fmt.Sprintf("INSERT INTO `%s` (%s) VALUES (%s)", tableName, strings.Join(cols, ", "), placeholders)
query := fmt.Sprintf("INSERT INTO `%s` (%s) VALUES (%s)", queryTableName, strings.Join(cols, ", "), placeholders)
_, err := db.Exec(query, params...)
if err != nil {
@@ -137,7 +110,7 @@ func InsertRow(db *sql.DB, tableName string, rowData map[string]interface{}) err
}
// UpdateRow updates a row in a table
func UpdateRow(db *sql.DB, tableName string, rowData map[string]interface{}, where string, whereArgs ...interface{}) error {
func UpdateRow(db *sql.DB, dbPrefix, tableName string, rowData map[string]interface{}, where string, whereArgs ...interface{}) error {
if !isValidName(tableName) {
return fmt.Errorf("invalid table name: %s", tableName)
}
@@ -146,7 +119,8 @@ func UpdateRow(db *sql.DB, tableName string, rowData map[string]interface{}, whe
log.Printf("[Warning] Failed to build update query: %v", err)
return err
}
query := fmt.Sprintf("UPDATE `%s` SET %s WHERE %s", tableName, setCols, where)
queryTableName := dbPrefix + tableName
query := fmt.Sprintf("UPDATE `%s` SET %s WHERE %s", queryTableName, setCols, where)
_, err = db.Exec(query, append(setVals, whereArgs...)...)
if err != nil {
log.Printf("[Warning] Failed to update row: %v", err)
@@ -176,11 +150,12 @@ func buildUpdateQuery(rowData map[string]interface{}) (string, []interface{}, er
}
// DeleteRow deletes a row from a table
func DeleteRow(db *sql.DB, tableName string, where string, whereArgs ...interface{}) error {
func DeleteRow(db *sql.DB, dbPrefix, tableName string, where string, whereArgs ...interface{}) error {
if !isValidName(tableName) {
return fmt.Errorf("invalid table name: %s", tableName)
}
query := fmt.Sprintf("DELETE FROM `%s` WHERE %s", tableName, where)
queryTableName := dbPrefix + tableName
query := fmt.Sprintf("DELETE FROM `%s` WHERE %s", queryTableName, where)
_, err := db.Exec(query, whereArgs...)
if err != nil {
log.Printf("[Warning] Failed to delete row: %v", err)
@@ -198,7 +173,7 @@ func isValidName(s string) bool {
// QueryRows queries rows from a table with optional WHERE clause.
// Example: rows, err := QueryRows(db, "users", "*", "age > ? AND status = ?", 18, "active")
func QueryRows(db *sql.DB, tableName string, columns string, where string, whereArgs ...interface{}) (*sql.Rows, error) {
func QueryRows(db *sql.DB, dbPrefix, tableName string, columns string, where string, whereArgs ...interface{}) (*sql.Rows, error) {
if !isValidName(tableName) {
return nil, fmt.Errorf("invalid table name: %s", tableName)
}
@@ -208,11 +183,12 @@ func QueryRows(db *sql.DB, tableName string, columns string, where string, where
columns = "*"
}
queryTableName := dbPrefix + tableName
var query string
if where != "" {
query = fmt.Sprintf("SELECT %s FROM `%s` WHERE %s", columns, tableName, where)
query = fmt.Sprintf("SELECT %s FROM `%s` WHERE %s", columns, queryTableName, where)
} else {
query = fmt.Sprintf("SELECT %s FROM `%s`", columns, tableName)
query = fmt.Sprintf("SELECT %s FROM `%s`", columns, queryTableName)
}
rows, err := db.Query(query, whereArgs...)