golib/gdb/sqldb/db_query_test.go
2023-06-15 21:22:51 +08:00

110 lines
2.4 KiB
Go

//
// db_query_test.go
// Copyright (C) 2022 tiglog <me@tiglog.com>
//
// Distributed under terms of the MIT license.
//
package sqldb_test
import (
"testing"
"time"
"hexq.cn/tiglog/golib/gtest"
"hexq.cn/tiglog/golib/gdb/sqldb"
)
func dbQueryTest(db *sqldb.Engine, t *testing.T) {
query := sqldb.NewQueryBuild("person", db)
// query one
var p1 Person
query.Where("id=?")
err := query.One(&p1, 1)
gtest.Nil(t, err)
gtest.Equal(t, int64(1), p1.Id)
// query all
var ps1 []Person
query = sqldb.NewQueryBuild("person", db)
query.Where("id > ?")
err = query.All(&ps1, 1)
gtest.Nil(t, err)
gtest.True(t, len(ps1) > 0)
// fmt.Println(ps1)
if len(ps1) > 0 {
var val int64 = 2
gtest.Equal(t, val, ps1[0].Id)
}
// insert
query = sqldb.NewQueryBuild("person", db)
query.AddFields("first_name", "last_name", "email")
id, err := query.Insert("三", "张", "zs@bar.com")
gtest.Nil(t, err)
gtest.Greater(t, int64(0), id)
// fmt.Println(id)
// named insert
query = sqldb.NewQueryBuild("person", db)
query.AddFields("first_name", "last_name", "email")
row, err := query.NamedInsert(&Person{
FirstName: "四",
LastName: "李",
Email: "ls@bar.com",
AddedAt: time.Now().Unix(),
})
gtest.Nil(t, err)
gtest.Equal(t, int64(1), row)
// update
query = sqldb.NewQueryBuild("person", db)
query.Where("email=?")
n, err := query.Update("first_name=?", "哈哈", "ls@bar.com")
gtest.Nil(t, err)
gtest.Equal(t, int64(1), n)
// named update map
query = sqldb.NewQueryBuild("person", db)
query.Where("email=:email")
n, err = query.NamedUpdate("first_name=:first_name", map[string]interface{}{
"email": "ls@bar.com",
"first_name": "中华人民共和国",
})
gtest.Nil(t, err)
gtest.Equal(t, int64(1), n)
// named update struct
query = sqldb.NewQueryBuild("person", db)
query.Where("email=:email")
var p = &Person{
Email: "ls@bar.com",
LastName: "中华人民共和国,救民于水火",
}
n, err = query.NamedUpdate("last_name=:last_name", p)
gtest.Nil(t, err)
gtest.Equal(t, int64(1), n)
// count
query = sqldb.NewQueryBuild("person", db)
n, err = query.Count()
gtest.Nil(t, err)
// fmt.Println(n)
gtest.Greater(t, int64(0), n)
// delete
query = sqldb.NewQueryBuild("person", db)
n, err = query.Delete()
gtest.NotNil(t, err)
gtest.Equal(t, int64(0), n)
n, err = query.Where("id=?").Delete(2)
gtest.Nil(t, err)
gtest.Equal(t, int64(1), n)
}
func TestQuery(t *testing.T) {
RunDbTest(t, dbQueryTest)
}