Skip to content

Commit 5741ff3

Browse files
authored
v0.0.2: update (#2)
1 parent 8b37d12 commit 5741ff3

File tree

4 files changed

+42
-34
lines changed

4 files changed

+42
-34
lines changed

Diff for: Makefile

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,5 @@ get::
55

66

77
tests::
8-
rm -rf test.db
9-
sqlite3 -batch test.db ""
10-
#go test -v ./...
11-
go test -modfile=go_test.mod ./... -v
8+
rm -rf tests/test.db
9+
go test -count=1 -modfile=go_test.mod ./... -v

Diff for: README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ The main reason that this module has been created was generic querying database
88
rows, err: = Db.Query("SELECT * FROM album")
99

1010
defer rows.Close()
11-
var data []RawStringType
11+
var data []go_sql_raw.RawSqlType
1212
for rows.Next() {
13-
rec := Rows2Map(rows)
13+
rec := go_sql_raw.Rows2Map(rows)
1414
data = append(data, rec)
1515
}
1616
```
1717

1818
check also [go_sql_raw_test.go](tests/go_sql_raw_test.go)
1919

2020
## TODO
21-
* type converting from DB to go in function `update`
21+
* update type converting from DB to go in function `convertType`
2222

2323
## Credits
2424
* module inspired by https://gist.github.com/SchumacherFM/69a167bec7dea644a20e

Diff for: go_sql_raw.go

+19-11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"log"
77
"strconv"
8+
"strings"
89
)
910

1011
type RawSqlType map[string]interface{}
@@ -40,17 +41,7 @@ func (s *mapRawSqlScan) update(rows *sql.Rows) error {
4041

4142
for i := 0; i < s.colCount; i++ {
4243
if rb, ok := s.cp[i].(*sql.RawBytes); ok {
43-
val := string(*rb)
44-
var parsed any
45-
switch s.colTypes[i].DatabaseTypeName() {
46-
case "DECIMAL":
47-
parsed, _ = strconv.ParseFloat(val, 64)
48-
case "INT":
49-
parsed, _ = strconv.ParseInt(val, 10, 64)
50-
default:
51-
parsed = val
52-
}
53-
s.row[s.colNames[i]] = parsed
44+
s.row[s.colNames[i]] = convertType(rb, s.colTypes[i].DatabaseTypeName())
5445
*rb = nil
5546
} else {
5647
return fmt.Errorf("Cannot convert index %d column %s to type *sql.RawBytes", i, s.colNames[i])
@@ -78,3 +69,20 @@ func newMapRawSqlScan(columnNames []string, columnTypes []*sql.ColumnType) *mapR
7869
}
7970
return s
8071
}
72+
73+
func convertType(rb *sql.RawBytes, databaseTypeName string) any {
74+
databaseTypeName = strings.ToUpper(databaseTypeName)
75+
76+
val := string(*rb)
77+
var parsed any
78+
79+
if strings.HasPrefix(databaseTypeName, "INT") {
80+
parsed, _ = strconv.ParseInt(val, 10, 64)
81+
} else if strings.HasPrefix(databaseTypeName, "DECIMAL") {
82+
parsed, _ = strconv.ParseFloat(val, 64)
83+
} else {
84+
parsed = val
85+
}
86+
87+
return parsed
88+
}

Diff for: tests/go_sql_raw_test.go

+18-16
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,13 @@ import (
66
_ "github.com/mattn/go-sqlite3"
77
"github.com/mysiar-org/go-sql-raw"
88
"github.com/stretchr/testify/assert"
9-
"strconv"
109
"testing"
1110
)
1211

1312
func Test(t *testing.T) {
14-
const file string = "test.db"
15-
db, err := sql.Open("sqlite3", file)
16-
chkError(err)
17-
_, err = db.Exec(dropTable())
18-
chkError(err)
19-
_, err = db.Exec(createTable())
13+
db := setupDb()
14+
rows, err := db.Query("SELECT * FROM album ORDER BY id")
2015
chkError(err)
21-
_, err = db.Exec(insertData())
22-
chkError(err)
23-
24-
var rows *sql.Rows
25-
rows, err = db.Query("SELECT * FROM album ORDER BY id")
2616

2717
var data []go_sql_raw.RawSqlType
2818
for rows.Next() {
@@ -36,15 +26,27 @@ func Test(t *testing.T) {
3626
var expectedTitle = []string{"Blue Train", "Giant Steps", "Jeru", "Sarah Vaughan", "Upadek"}
3727

3828
for idx, entry := range data {
39-
id, _ := strconv.ParseInt(fmt.Sprintf("%v", entry["id"]), 10, 64)
40-
assert.Equal(t, expectedIds[idx], id)
41-
price, _ := strconv.ParseFloat(fmt.Sprintf("%v", entry["price"]), 64)
42-
assert.Equal(t, expectedPrices[idx], price)
29+
assert.Equal(t, expectedIds[idx], entry["id"])
30+
assert.Equal(t, expectedPrices[idx], entry["price"])
4331
assert.Equal(t, expectedArtists[idx], entry["artist"])
4432
assert.Equal(t, expectedTitle[idx], entry["title"])
4533
}
4634
}
4735

36+
func setupDb() *sql.DB {
37+
const file string = "test.db"
38+
db, err := sql.Open("sqlite3", file)
39+
chkError(err)
40+
_, err = db.Exec(dropTable())
41+
chkError(err)
42+
_, err = db.Exec(createTable())
43+
chkError(err)
44+
_, err = db.Exec(insertData())
45+
chkError(err)
46+
47+
return db
48+
}
49+
4850
func dropTable() string {
4951
return "DROP TABLE IF EXISTS album"
5052
}

0 commit comments

Comments
 (0)