115 lines
3.0 KiB
Go
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)
|
|
}
|