From ff00bb140ee738e3b802d77f07f9098924f3de6a Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sat, 11 Oct 2025 20:59:20 +0500 Subject: feat: database --- internal/database.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 internal/database.go (limited to 'internal') diff --git a/internal/database.go b/internal/database.go new file mode 100644 index 0000000..353c117 --- /dev/null +++ b/internal/database.go @@ -0,0 +1,58 @@ +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) Close() error { + return d.db.Close() +} -- cgit v1.2.3