golib/gdb/sqldb/db_func_test.go
2023-06-15 21:38:12 +08:00

115 lines
3.0 KiB
Go

//
// db_func_test.go
// Copyright (C) 2022 tiglog <me@tiglog.com>
//
// 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)
}