From 2378ec2bdfafd289e639b07913a9f968a19d6d48 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 18 Mar 2024 08:56:44 +0100 Subject: [PATCH] add database helper --- database/database.go | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 database/database.go diff --git a/database/database.go b/database/database.go new file mode 100644 index 0000000..6aec4b2 --- /dev/null +++ b/database/database.go @@ -0,0 +1,57 @@ +package database + +import ( + "database/sql" + "gitnet.fr/deblan/database-anonymizer/data" + "gitnet.fr/deblan/database-anonymizer/logger" +) + +func GetRows(db *sql.DB, query string) map[int]map[string]data.Data { + rows, err := db.Query(query) + defer rows.Close() + logger.LogFatalExitIf(err) + + columns, err := rows.Columns() + logger.LogFatalExitIf(err) + + values := make([]any, len(columns)) + valuePointers := make([]any, len(columns)) + datas := make(map[int]map[string]data.Data) + + key := 0 + + for rows.Next() { + row := make(map[string]data.Data) + + for i := range columns { + valuePointers[i] = &values[i] + } + + if err := rows.Scan(valuePointers...); err != nil { + logger.LogFatalExitIf(err) + } + + for i, col := range columns { + value := values[i] + d := data.Data{IsVirtual: false} + + if value != nil { + switch v := value.(type) { + case []byte: + d.FromByte(v) + case string: + d.FromString(v) + case int64: + d.FromInt64(v) + } + } + + row[col] = d + } + + datas[key] = row + key = key + 1 + } + + return datas +}