110 lines
2.4 KiB
Go
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"
|
|
|
|
"git.hexq.cn/tiglog/golib/gtest"
|
|
|
|
"git.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)
|
|
}
|