Skip to content

Commit 8d9a771

Browse files
authored
add global value convertor for mysql and sqlite go sdk (#1955)
Signed-off-by: Patrick <[email protected]>
1 parent 09c7e5c commit 8d9a771

File tree

5 files changed

+40
-12
lines changed

5 files changed

+40
-12
lines changed

sdk/go/internal/db/driver.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package db
2+
3+
import (
4+
"database/sql/driver"
5+
)
6+
7+
// GlobalParameterConverter is a global valueConverter instance to convert parameters.
8+
var GlobalParameterConverter = &valueConverter{}
9+
10+
var _ driver.ValueConverter = (*valueConverter)(nil)
11+
12+
// valueConverter is a no-op value converter.
13+
type valueConverter struct{}
14+
15+
func (c *valueConverter) ConvertValue(v any) (driver.Value, error) {
16+
return driver.Value(v), nil
17+
}

sdk/go/mysql/internals.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,9 @@ func toOutboundMysqlParameterValue(x any) C.outbound_mysql_parameter_value_t {
216216
case int64:
217217
*(*C.int64_t)(unsafe.Pointer(&ret.val)) = int64(v)
218218
ret.tag = paramValueInt64
219+
case int:
220+
*(*C.int64_t)(unsafe.Pointer(&ret.val)) = int64(v)
221+
ret.tag = paramValueInt64
219222
case uint8:
220223
*(*C.uint8_t)(unsafe.Pointer(&ret.val)) = uint8(v)
221224
ret.tag = paramValueUint8

sdk/go/mysql/mysql.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"errors"
88
"io"
99
"reflect"
10+
11+
spindb "github.com/fermyon/spin/sdk/go/internal/db"
1012
)
1113

1214
// Open returns a new connection to the database.
@@ -60,6 +62,7 @@ type stmt struct {
6062
}
6163

6264
var _ driver.Stmt = (*stmt)(nil)
65+
var _ driver.ColumnConverter = (*stmt)(nil)
6366

6467
// Close closes the statement.
6568
func (s *stmt) Close() error {
@@ -92,6 +95,11 @@ func (s *stmt) Exec(args []driver.Value) (driver.Result, error) {
9295
return &result{}, err
9396
}
9497

98+
// ColumnConverter returns GlobalParameterConverter to prevent using driver.DefaultParameterConverter.
99+
func (s *stmt) ColumnConverter(_ int) driver.ValueConverter {
100+
return spindb.GlobalParameterConverter
101+
}
102+
95103
type result struct{}
96104

97105
func (r result) LastInsertId() (int64, error) {

sdk/go/pg/pg.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ import (
77
"errors"
88
"io"
99
"reflect"
10-
)
1110

12-
// globalValueConv a valueConv instance
13-
var globalValueConv = &valueConv{}
11+
spindb "github.com/fermyon/spin/sdk/go/internal/db"
12+
)
1413

1514
// Open returns a new connection to the database.
1615
func Open(address string) *sql.DB {
@@ -96,16 +95,9 @@ func (s *stmt) Exec(args []driver.Value) (driver.Result, error) {
9695
return &result{rowsAffected: int64(n)}, err
9796
}
9897

99-
// ColumnConverter return globalValueConv to don't use driver.DefaultParameterConverter
98+
// ColumnConverter returns GlobalParameterConverter to prevent using driver.DefaultParameterConverter.
10099
func (s *stmt) ColumnConverter(_ int) driver.ValueConverter {
101-
return globalValueConv
102-
}
103-
104-
// valueConv a convertor not convert value
105-
type valueConv struct{}
106-
107-
func (c *valueConv) ConvertValue(v any) (driver.Value, error) {
108-
return driver.Value(v), nil
100+
return spindb.GlobalParameterConverter
109101
}
110102

111103
type result struct {

sdk/go/sqlite/sqlite.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"database/sql/driver"
77
"errors"
88
"io"
9+
10+
spindb "github.com/fermyon/spin/sdk/go/internal/db"
911
)
1012

1113
// Open returns a new connection to the database.
@@ -135,6 +137,7 @@ type stmt struct {
135137
}
136138

137139
var _ driver.Stmt = (*stmt)(nil)
140+
var _ driver.ColumnConverter = (*stmt)(nil)
138141

139142
// Close closes the statement.
140143
func (s *stmt) Close() error {
@@ -167,6 +170,11 @@ func (s *stmt) Exec(args []driver.Value) (driver.Result, error) {
167170
return &result{}, err
168171
}
169172

173+
// ColumnConverter returns GlobalParameterConverter to prevent using driver.DefaultParameterConverter.
174+
func (s *stmt) ColumnConverter(_ int) driver.ValueConverter {
175+
return spindb.GlobalParameterConverter
176+
}
177+
170178
type result struct{}
171179

172180
func (r result) LastInsertId() (int64, error) {

0 commit comments

Comments
 (0)