Skip to content

Commit

Permalink
fix(contrib/drivers/pgsql): fix insert error when data struct field h…
Browse files Browse the repository at this point in the history
…as nil in PgSQL (#3679)
  • Loading branch information
oldme-git authored Sep 9, 2024
1 parent 448df14 commit 803cb5a
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
9 changes: 6 additions & 3 deletions contrib/drivers/pgsql/pgsql_convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@ import (
"strings"

"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/text/gregex"
"github.com/gogf/gf/v2/text/gstr"
"github.com/gogf/gf/v2/util/gconv"
)

// ConvertValueForField converts value to database acceptable value.
func (d *Driver) ConvertValueForField(ctx context.Context, fieldType string, fieldValue interface{}) (interface{}, error) {
var (
fieldValueKind = reflect.TypeOf(fieldValue).Kind()
)
if g.IsNil(fieldValue) {
return d.Core.ConvertValueForField(ctx, fieldType, fieldValue)
}

var fieldValueKind = reflect.TypeOf(fieldValue).Kind()

if fieldValueKind == reflect.Slice {
// For pgsql, json or jsonb require '[]'
Expand Down
30 changes: 30 additions & 0 deletions contrib/drivers/pgsql/pgsql_z_unit_issue_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,33 @@ func Test_Issue3671(t *testing.T) {
t.AssertNil(err)
})
}

// https:/gogf/gf/issues/3668
func Test_Issue3668(t *testing.T) {
type Issue3668 struct {
Text interface{}
Number interface{}
}
var (
sqlText = gtest.DataContent("issues", "issue3668.sql")
table = fmt.Sprintf(`%s_%d`, TablePrefix+"issue3668", gtime.TimestampNano())
)
if _, err := db.Exec(ctx, fmt.Sprintf(sqlText, table)); err != nil {
gtest.Fatal(err)
}
defer dropTable(table)

gtest.C(t, func(t *gtest.T) {
var (
dao = db.Model(table)
data = Issue3668{
Text: "我们都是自然的婴儿,卧在宇宙的摇篮里",
Number: nil,
}
)
_, err := dao.Ctx(ctx).
Data(data).
Insert()
t.AssertNil(err)
})
}
4 changes: 4 additions & 0 deletions contrib/drivers/pgsql/testdata/issues/issue3668.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE TABLE "public"."%s" (
"text" varchar(255) COLLATE "pg_catalog"."default",
"number" int4
);

0 comments on commit 803cb5a

Please sign in to comment.