package stats import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) type DatabaseConnection struct { db *sql.DB } func NewDatabaseConnection(driver string, source string) (db *DatabaseConnection, err error) { d, err := sql.Open("mysql", "kochan:kochan@/stats") if err != nil { return } db = &DatabaseConnection{db: d} return } func (d *DatabaseConnection) Query(query string, args ...any) ([]map[string]string, error) { data := []map[string]string{} rows, err := d.db.Query(query, args...) if err != nil { return data, err } defer rows.Close() columns, err := rows.Columns() if err != nil { return data, err } for rows.Next() { vals := make([]any, len(columns)) for i := range vals { vals[i] = new([]byte) } rows.Scan(vals...) record := make(map[string]string) for i, col := range columns { b := *vals[i].(*[]byte) record[col] = string(b) } data = append(data, record) } return data, nil } func (d *DatabaseConnection) Exec(query string, args ...any) (sql.Result, error) { return d.db.Exec(query, args...) } func (d *DatabaseConnection) QueryRow(query string, args ...any) *sql.Row { return d.db.QueryRow(query, args...) } func (d *DatabaseConnection) Ping() error { return d.db.Ping() } func (d *DatabaseConnection) Close() error { return d.db.Close() }