// // db_func_test.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package sqldb_test import ( "testing" "time" "git.hexq.cn/tiglog/golib/gdb/sqldb" "git.hexq.cn/tiglog/golib/gtest" ) // 经过测试,发现数据库里面使用 time 类型容易出现 timezone 不一致的情况 // 在存入数据库时,可能会导致时区丢失 // 因此,为了更好的兼容性,使用 int 时间戳会更合适 func dbFuncTest(db *sqldb.Engine, t *testing.T) { var err error fields := []string{"first_name", "last_name", "email"} p := &Person{ FirstName: "三", LastName: "张", Email: "zs@foo.com", } // InsertRecord 的用法 opt := sqldb.NewQueryOption("person").Fields(fields) rows, err := db.NamedInsertRecord(opt, p) gtest.Nil(t, err) gtest.True(t, rows > 0) // fmt.Println(rows) // GetRecord 的用法 var p3 Person opt = sqldb.NewQueryOption("person").Query("email=?").Args("zs@foo.com") err = db.GetRecord(&p3, opt) // fmt.Println(p3) gtest.Equal(t, "张", p3.LastName) gtest.Equal(t, "三", p3.FirstName) gtest.Equal(t, int64(0), p3.AddedAt) gtest.Nil(t, err) p2 := &Person{ FirstName: "四", LastName: "李", Email: "ls@foo.com", AddedAt: time.Now().Unix(), } fields2 := append(fields, "added_at") opt = sqldb.NewQueryOption("person").Fields(fields2) _, err = db.NamedInsertRecord(opt, p2) gtest.Nil(t, err) var p4 Person opt = sqldb.NewQueryOption("person") err = db.GetRecord(&p4, opt) gtest.NotNil(t, err) gtest.Equal(t, "", p4.FirstName) opt = sqldb.NewQueryOption("person").Query("first_name=?").Args("四") err = db.GetRecord(&p4, opt) gtest.Nil(t, err) gtest.Equal(t, time.Now().Unix(), p4.AddedAt) gtest.Equal(t, "ls@foo.com", p4.Email) // GetRecords var ps []Person opt = sqldb.NewQueryOption("person").Query("id > ?").Args(0) err = db.GetRecords(&ps, opt) gtest.Nil(t, err) gtest.Greater(t, int64(1), ps) var ps2 []Person opt = sqldb.NewQueryOption("person").Query("id=?").Args(1) err = db.GetRecords(&ps2, opt) gtest.Equal(t, 1, len(ps2)) if len(ps2) > 1 { gtest.Equal(t, int64(1), ps2[0].Id) } // DeleteRecords opt = sqldb.NewQueryOption("person").Query("id=?").Args(2) n, err := db.DeleteRecords(opt) gtest.Nil(t, err) gtest.Greater(t, int64(0), n) // UpdateRecords opt = sqldb.NewQueryOption("person").Set("first_name=?").Query("email=?").Args("哈哈", "zs@foo.com") n, err = db.UpdateRecords(opt) gtest.Nil(t, err) gtest.Greater(t, int64(0), n) // NamedUpdateRecords var p5 = ps[0] p5.FirstName = "中华人民共和国" opt = sqldb.NewQueryOption("person").Set("first_name=:first_name").Query("email=:email") n, err = db.NamedUpdateRecords(opt, p5) gtest.Nil(t, err) gtest.Greater(t, int64(0), n) var p6 Person opt = sqldb.NewQueryOption("person").Query("first_name=?").Args(p5.FirstName) err = db.GetRecord(&p6, opt) gtest.Nil(t, err) gtest.Greater(t, int64(0), p6.Id) gtest.Equal(t, p6.FirstName, p5.FirstName) } func TestFunc(t *testing.T) { RunDbTest(t, dbFuncTest) }