-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlhelpers.go
94 lines (71 loc) · 1.54 KB
/
sqlhelpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package dbresolver
import (
"crypto/sha256"
"database/sql"
"encoding/hex"
"errors"
"fmt"
)
type Row []interface{}
type Rows []*Row
func ToRows(rows *sql.Rows) (Rows, error) {
defer rows.Close()
// Get column names
columns, err := rows.Columns()
if err != nil {
return nil, err
}
var results Rows
// Create a slice to hold the values for each row
for rows.Next() {
values := make(Row, len(columns))
valuePtrs := make(Row, len(columns))
for i := range values {
valuePtrs[i] = &values[i]
}
if err := rows.Scan(valuePtrs...); err != nil {
return nil, err
}
results = append(results, &values)
}
if err := rows.Err(); err != nil {
return nil, err
}
return results, nil
}
func ToRow(rows *sql.Rows) (*Row, error) {
defer rows.Close()
columns, err := rows.Columns()
if err != nil {
return nil, err
}
values := make(Row, len(columns))
valuePtrs := make(Row, len(columns))
for i := range values {
valuePtrs[i] = &values[i]
}
if rows.Next() {
values := make(Row, len(columns))
valuePtrs := make(Row, len(columns))
for i := range values {
valuePtrs[i] = &values[i]
}
err = rows.Scan(valuePtrs...)
if err != nil {
return nil, err
}
return &values, nil
}
if err := rows.Err(); err != nil {
return nil, err
}
return nil, errors.New("something_went_wrong")
}
func HashValues(values ...interface{}) string {
hasher := sha256.New()
for _, value := range values {
strValue := fmt.Sprintf("%v", value)
hasher.Write([]byte(strValue))
}
return hex.EncodeToString(hasher.Sum(nil))
}