2017-04-01 02:09:00 +00:00
// Copyright 2017 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
2020-03-27 07:13:04 +00:00
package integrations
2017-04-01 02:09:00 +00:00
import (
2022-06-04 12:43:47 +00:00
"context"
2017-12-13 15:04:41 +00:00
"database/sql"
2021-03-23 13:48:58 +00:00
"errors"
2017-04-01 02:09:00 +00:00
"fmt"
2021-07-07 06:00:16 +00:00
"math/big"
2017-04-01 02:09:00 +00:00
"testing"
"time"
2021-03-23 13:48:58 +00:00
"xorm.io/xorm"
2020-02-28 12:29:08 +00:00
"xorm.io/xorm/contexts"
2021-08-10 15:20:53 +00:00
"xorm.io/xorm/convert"
2021-08-24 05:46:08 +00:00
"xorm.io/xorm/dialects"
2020-02-24 08:53:18 +00:00
"xorm.io/xorm/schemas"
2020-03-27 07:13:04 +00:00
2021-07-07 09:00:58 +00:00
"github.com/shopspring/decimal"
2020-03-27 07:13:04 +00:00
"github.com/stretchr/testify/assert"
2017-04-01 02:09:00 +00:00
)
2022-06-04 12:43:47 +00:00
func TestShadowGetVar ( t * testing . T ) {
testEngine , err := xorm . NewEngine ( string ( schemas . MYSQL ) , "root:root@tcp(127.0.0.1:3306)/test?charset=utf8" )
assert . NoError ( t , err )
testEngine . ShowSQL ( true )
_ , err = testEngine . NewSession ( ) . Exec ( "CREATE DATABASE IF NOT EXISTS shadow_test" )
assert . NoError ( t , err )
type GetVar struct {
Id int64 ` xorm:"autoincr pk" `
Msg string ` xorm:"varchar(255)" `
Age int
Money float32
Created time . Time ` xorm:"created" `
}
testEngine . SetShadow ( dialects . NewTrueShadow ( ) )
assert . NoError ( t , testEngine . Context ( context . Background ( ) ) . Sync ( new ( GetVar ) ) )
data := GetVar {
Msg : "hi" ,
Age : 28 ,
Money : 1.5 ,
}
_ , err = testEngine . InsertOne ( & data )
assert . NoError ( t , err )
var msg string
has , err := testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "msg" ) . Get ( & msg )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "hi" , msg )
var age int
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) . Get ( & age )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 28 , age )
var ageMax int
has , err = testEngine . SQL ( "SELECT max(`age`) FROM " + testEngine . Quote ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) + " WHERE `id` = ?" , data . Id ) . Get ( & ageMax )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 28 , ageMax )
var age2 int64
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age2 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age2 )
var age3 int8
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) . Get ( & age3 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age3 )
var age4 int16
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age4 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age4 )
var age5 int32
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age5 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age5 )
var age6 int
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) . Get ( & age6 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age6 )
var age7 int64
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age7 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age7 )
var age8 int8
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) . Get ( & age8 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age8 )
var age9 int16
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age9 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age9 )
var age10 int32
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "age" ) .
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
Get ( & age10 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age10 )
var id sql . NullInt64
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "id" ) . Get ( & id )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , id . Valid )
var msgNull sql . NullString
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "msg" ) . Get ( & msgNull )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , msgNull . Valid )
assert . EqualValues ( t , data . Msg , msgNull . String )
var nullMoney sql . NullFloat64
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "money" ) . Get ( & nullMoney )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , nullMoney . Valid )
assert . EqualValues ( t , data . Money , nullMoney . Float64 )
var money float64
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Cols ( "money" ) . Get ( & money )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%.1f" , money ) )
var money2 float64
if testEngine . Dialect ( ) . URI ( ) . DBType == schemas . MSSQL {
has , err = testEngine . SQL ( "SELECT TOP 1 `money` FROM " + testEngine . Quote ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) ) . Get ( & money2 )
} else {
has , err = testEngine . SQL ( "SELECT `money` FROM " + testEngine . Quote ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) + " LIMIT 1" ) . Get ( & money2 )
}
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%.1f" , money2 ) )
var money3 float64
has , err = testEngine . SQL ( "SELECT `money` FROM " + testEngine . Quote ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) + " WHERE `money` > 20" ) . Get ( & money3 )
assert . NoError ( t , err )
assert . Equal ( t , false , has )
valuesString := make ( map [ string ] string )
has , err = testEngine . Table ( "get_var" ) . Get ( & valuesString )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 5 , len ( valuesString ) )
assert . Equal ( t , "1" , valuesString [ "id" ] )
assert . Equal ( t , "hi" , valuesString [ "msg" ] )
assert . Equal ( t , "28" , valuesString [ "age" ] )
assert . Equal ( t , "1.5" , valuesString [ "money" ] )
// for mymysql driver, interface{} will be []byte, so ignore it currently
if testEngine . DriverName ( ) != "mymysql" {
valuesInter := make ( map [ string ] interface { } )
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Where ( "`id` = ?" , 1 ) . Select ( "*" ) . Get ( & valuesInter )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 5 , len ( valuesInter ) )
assert . EqualValues ( t , 1 , valuesInter [ "id" ] )
assert . Equal ( t , "hi" , fmt . Sprintf ( "%s" , valuesInter [ "msg" ] ) )
assert . EqualValues ( t , 28 , valuesInter [ "age" ] )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%v" , valuesInter [ "money" ] ) )
}
valuesSliceString := make ( [ ] string , 5 )
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Get ( & valuesSliceString )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1" , valuesSliceString [ 0 ] )
assert . Equal ( t , "hi" , valuesSliceString [ 1 ] )
assert . Equal ( t , "28" , valuesSliceString [ 2 ] )
assert . Equal ( t , "1.5" , valuesSliceString [ 3 ] )
valuesSliceInter := make ( [ ] interface { } , 5 )
has , err = testEngine . Table ( testEngine . ContextTableName ( context . Background ( ) , "get_var" ) ) . Get ( & valuesSliceInter )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
v1 , err := convert . AsInt64 ( valuesSliceInter [ 0 ] )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , v1 )
assert . Equal ( t , "hi" , fmt . Sprintf ( "%s" , valuesSliceInter [ 1 ] ) )
v3 , err := convert . AsInt64 ( valuesSliceInter [ 2 ] )
assert . NoError ( t , err )
assert . EqualValues ( t , 28 , v3 )
v4 , err := convert . AsFloat64 ( valuesSliceInter [ 3 ] )
assert . NoError ( t , err )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%v" , v4 ) )
}
2017-04-01 02:09:00 +00:00
func TestGetVar ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2017-04-01 02:09:00 +00:00
type GetVar struct {
Id int64 ` xorm:"autoincr pk" `
Msg string ` xorm:"varchar(255)" `
Age int
Money float32
Created time . Time ` xorm:"created" `
}
2021-08-24 09:13:17 +00:00
assert . NoError ( t , testEngine . Sync ( new ( GetVar ) ) )
2017-04-01 02:09:00 +00:00
2022-04-22 02:16:35 +00:00
data := GetVar {
2017-04-01 02:09:00 +00:00
Msg : "hi" ,
Age : 28 ,
Money : 1.5 ,
}
2017-12-13 15:04:41 +00:00
_ , err := testEngine . InsertOne ( & data )
2017-04-01 02:09:00 +00:00
assert . NoError ( t , err )
var msg string
has , err := testEngine . Table ( "get_var" ) . Cols ( "msg" ) . Get ( & msg )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "hi" , msg )
var age int
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) . Get ( & age )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 28 , age )
2019-07-29 16:02:45 +00:00
var ageMax int
2021-08-24 05:46:08 +00:00
has , err = testEngine . SQL ( "SELECT max(`age`) FROM " + testEngine . Quote ( testEngine . TableName ( "get_var" , true ) ) + " WHERE `id` = ?" , data . Id ) . Get ( & ageMax )
2019-07-29 16:02:45 +00:00
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 28 , ageMax )
2017-05-23 04:06:22 +00:00
var age2 int64
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2017-05-23 04:06:22 +00:00
Get ( & age2 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age2 )
2019-07-29 15:32:32 +00:00
var age3 int8
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) . Get ( & age3 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age3 )
var age4 int16
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2019-07-29 15:32:32 +00:00
Get ( & age4 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age4 )
var age5 int32
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2019-07-29 15:32:32 +00:00
Get ( & age5 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age5 )
var age6 int
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) . Get ( & age6 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age6 )
var age7 int64
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2019-07-29 15:32:32 +00:00
Get ( & age7 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age7 )
var age8 int8
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) . Get ( & age8 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age8 )
var age9 int16
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2019-07-29 15:32:32 +00:00
Get ( & age9 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age9 )
var age10 int32
has , err = testEngine . Table ( "get_var" ) . Cols ( "age" ) .
2021-08-24 05:46:08 +00:00
Where ( "`age` > ?" , 20 ) .
And ( "`age` < ?" , 30 ) .
2019-07-29 15:32:32 +00:00
Get ( & age10 )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . EqualValues ( t , 28 , age10 )
2017-12-13 15:04:41 +00:00
var id sql . NullInt64
has , err = testEngine . Table ( "get_var" ) . Cols ( "id" ) . Get ( & id )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , id . Valid )
assert . EqualValues ( t , data . Id , id . Int64 )
var msgNull sql . NullString
has , err = testEngine . Table ( "get_var" ) . Cols ( "msg" ) . Get ( & msgNull )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , msgNull . Valid )
assert . EqualValues ( t , data . Msg , msgNull . String )
var nullMoney sql . NullFloat64
has , err = testEngine . Table ( "get_var" ) . Cols ( "money" ) . Get ( & nullMoney )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , true , nullMoney . Valid )
assert . EqualValues ( t , data . Money , nullMoney . Float64 )
2017-04-01 02:09:00 +00:00
var money float64
has , err = testEngine . Table ( "get_var" ) . Cols ( "money" ) . Get ( & money )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%.1f" , money ) )
2017-12-07 03:47:45 +00:00
var money2 float64
2020-03-07 08:51:30 +00:00
if testEngine . Dialect ( ) . URI ( ) . DBType == schemas . MSSQL {
2021-08-24 05:46:08 +00:00
has , err = testEngine . SQL ( "SELECT TOP 1 `money` FROM " + testEngine . Quote ( testEngine . TableName ( "get_var" , true ) ) ) . Get ( & money2 )
2019-01-22 15:59:58 +00:00
} else {
2021-08-24 05:46:08 +00:00
has , err = testEngine . SQL ( "SELECT `money` FROM " + testEngine . Quote ( testEngine . TableName ( "get_var" , true ) ) + " LIMIT 1" ) . Get ( & money2 )
2019-01-22 15:59:58 +00:00
}
2017-12-07 03:47:45 +00:00
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%.1f" , money2 ) )
2018-04-10 03:27:42 +00:00
var money3 float64
2021-08-24 05:46:08 +00:00
has , err = testEngine . SQL ( "SELECT `money` FROM " + testEngine . Quote ( testEngine . TableName ( "get_var" , true ) ) + " WHERE `money` > 20" ) . Get ( & money3 )
2018-04-10 03:27:42 +00:00
assert . NoError ( t , err )
assert . Equal ( t , false , has )
2022-04-22 02:16:35 +00:00
valuesString := make ( map [ string ] string )
2017-04-01 02:09:00 +00:00
has , err = testEngine . Table ( "get_var" ) . Get ( & valuesString )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 5 , len ( valuesString ) )
assert . Equal ( t , "1" , valuesString [ "id" ] )
assert . Equal ( t , "hi" , valuesString [ "msg" ] )
assert . Equal ( t , "28" , valuesString [ "age" ] )
assert . Equal ( t , "1.5" , valuesString [ "money" ] )
2017-07-25 09:51:20 +00:00
// for mymysql driver, interface{} will be []byte, so ignore it currently
2020-03-06 06:43:49 +00:00
if testEngine . DriverName ( ) != "mymysql" {
2022-04-22 02:16:35 +00:00
valuesInter := make ( map [ string ] interface { } )
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( "get_var" ) . Where ( "`id` = ?" , 1 ) . Select ( "*" ) . Get ( & valuesInter )
2017-07-25 09:51:20 +00:00
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 5 , len ( valuesInter ) )
assert . EqualValues ( t , 1 , valuesInter [ "id" ] )
assert . Equal ( t , "hi" , fmt . Sprintf ( "%s" , valuesInter [ "msg" ] ) )
assert . EqualValues ( t , 28 , valuesInter [ "age" ] )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%v" , valuesInter [ "money" ] ) )
}
2017-04-01 02:09:00 +00:00
2022-04-22 02:16:35 +00:00
valuesSliceString := make ( [ ] string , 5 )
2017-04-01 02:09:00 +00:00
has , err = testEngine . Table ( "get_var" ) . Get ( & valuesSliceString )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , "1" , valuesSliceString [ 0 ] )
assert . Equal ( t , "hi" , valuesSliceString [ 1 ] )
assert . Equal ( t , "28" , valuesSliceString [ 2 ] )
assert . Equal ( t , "1.5" , valuesSliceString [ 3 ] )
2022-04-22 02:16:35 +00:00
valuesSliceInter := make ( [ ] interface { } , 5 )
2017-04-01 02:09:00 +00:00
has , err = testEngine . Table ( "get_var" ) . Get ( & valuesSliceInter )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
2017-04-10 15:10:59 +00:00
2021-07-21 03:46:41 +00:00
v1 , err := convert . AsInt64 ( valuesSliceInter [ 0 ] )
2017-04-10 15:10:59 +00:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , v1 )
2017-04-01 02:09:00 +00:00
assert . Equal ( t , "hi" , fmt . Sprintf ( "%s" , valuesSliceInter [ 1 ] ) )
2017-04-10 15:10:59 +00:00
2021-07-21 03:46:41 +00:00
v3 , err := convert . AsInt64 ( valuesSliceInter [ 2 ] )
2017-04-10 15:10:59 +00:00
assert . NoError ( t , err )
assert . EqualValues ( t , 28 , v3 )
2021-07-21 03:46:41 +00:00
v4 , err := convert . AsFloat64 ( valuesSliceInter [ 3 ] )
2017-04-10 15:10:59 +00:00
assert . NoError ( t , err )
assert . Equal ( t , "1.5" , fmt . Sprintf ( "%v" , v4 ) )
}
2017-05-27 12:34:57 +00:00
func TestGetStruct ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2017-05-27 12:34:57 +00:00
type UserinfoGet struct {
Uid int ` xorm:"pk autoincr" `
IsMan bool
}
2021-08-24 09:13:17 +00:00
assert . NoError ( t , testEngine . Sync ( new ( UserinfoGet ) ) )
2017-05-27 12:34:57 +00:00
2019-01-22 15:59:58 +00:00
session := testEngine . NewSession ( )
defer session . Close ( )
2017-06-02 08:12:50 +00:00
var err error
2020-03-07 08:51:30 +00:00
if testEngine . Dialect ( ) . URI ( ) . DBType == schemas . MSSQL {
2019-01-22 15:59:58 +00:00
err = session . Begin ( )
assert . NoError ( t , err )
2021-08-24 05:46:08 +00:00
_ , err = session . Exec ( "SET IDENTITY_INSERT `userinfo_get` ON" )
2017-06-02 08:12:50 +00:00
assert . NoError ( t , err )
}
2019-01-22 15:59:58 +00:00
cnt , err := session . Insert ( & UserinfoGet { Uid : 2 } )
2017-05-27 12:34:57 +00:00
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
2020-03-07 08:51:30 +00:00
if testEngine . Dialect ( ) . URI ( ) . DBType == schemas . MSSQL {
2019-01-22 15:59:58 +00:00
err = session . Commit ( )
assert . NoError ( t , err )
}
2017-05-27 12:34:57 +00:00
user := UserinfoGet { Uid : 2 }
has , err := testEngine . Get ( & user )
assert . NoError ( t , err )
assert . True ( t , has )
type NoIdUser struct {
User string ` xorm:"unique" `
Remain int64
Total int64
}
2021-08-24 09:13:17 +00:00
assert . NoError ( t , testEngine . Sync ( & NoIdUser { } ) )
2017-05-27 12:34:57 +00:00
2017-10-16 07:28:13 +00:00
userCol := testEngine . GetColumnMapper ( ) . Obj2Table ( "User" )
2017-05-27 12:34:57 +00:00
_ , err = testEngine . Where ( "`" + userCol + "` = ?" , "xlw" ) . Delete ( & NoIdUser { } )
assert . NoError ( t , err )
cnt , err = testEngine . Insert ( & NoIdUser { "xlw" , 20 , 100 } )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
noIdUser := new ( NoIdUser )
has , err = testEngine . Where ( "`" + userCol + "` = ?" , "xlw" ) . Get ( noIdUser )
assert . NoError ( t , err )
assert . True ( t , has )
}
2017-06-15 02:12:30 +00:00
func TestGetSlice ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2017-06-15 02:12:30 +00:00
type UserinfoSlice struct {
Uid int ` xorm:"pk autoincr" `
IsMan bool
}
assertSync ( t , new ( UserinfoSlice ) )
var users [ ] UserinfoSlice
has , err := testEngine . Get ( & users )
assert . False ( t , has )
assert . Error ( t , err )
}
2017-08-07 08:51:14 +00:00
2021-07-07 11:16:36 +00:00
func TestGetMap ( t * testing . T ) {
assert . NoError ( t , PrepareEngine ( ) )
2021-08-24 05:46:08 +00:00
if testEngine . Dialect ( ) . Features ( ) . AutoincrMode == dialects . SequenceAutoincrMode {
t . SkipNow ( )
return
}
2021-07-07 11:16:36 +00:00
type UserinfoMap struct {
Uid int ` xorm:"pk autoincr" `
IsMan bool
}
assertSync ( t , new ( UserinfoMap ) )
tableName := testEngine . Quote ( testEngine . TableName ( "userinfo_map" , true ) )
2021-08-24 05:46:08 +00:00
_ , err := testEngine . Exec ( fmt . Sprintf ( "INSERT INTO %s (`is_man`) VALUES (NULL)" , tableName ) )
2021-07-07 11:16:36 +00:00
assert . NoError ( t , err )
2022-04-22 02:16:35 +00:00
valuesString := make ( map [ string ] string )
2021-07-07 11:16:36 +00:00
has , err := testEngine . Table ( "userinfo_map" ) . Get ( & valuesString )
assert . NoError ( t , err )
assert . Equal ( t , true , has )
assert . Equal ( t , 2 , len ( valuesString ) )
assert . Equal ( t , "1" , valuesString [ "uid" ] )
assert . Equal ( t , "" , valuesString [ "is_man" ] )
}
2017-08-07 08:51:14 +00:00
func TestGetError ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2017-08-07 08:51:14 +00:00
type GetError struct {
Uid int ` xorm:"pk autoincr" `
IsMan bool
}
assertSync ( t , new ( GetError ) )
2022-04-22 02:16:35 +00:00
info := new ( GetError )
2017-08-07 08:51:14 +00:00
has , err := testEngine . Get ( & info )
assert . False ( t , has )
assert . Error ( t , err )
has , err = testEngine . Get ( info )
assert . False ( t , has )
assert . NoError ( t , err )
}
2017-10-24 11:29:08 +00:00
func TestJSONString ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2017-10-24 11:29:08 +00:00
type JsonString struct {
Id int64
Content string ` xorm:"json" `
}
type JsonJson struct {
Id int64
Content [ ] string ` xorm:"json" `
}
assertSync ( t , new ( JsonJson ) )
_ , err := testEngine . Insert ( & JsonJson {
Content : [ ] string { "1" , "2" } ,
} )
assert . NoError ( t , err )
var js JsonString
has , err := testEngine . Table ( "json_json" ) . Get ( & js )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , js . Id )
2020-03-03 08:19:32 +00:00
assert . True ( t , ` ["1","2"] ` == js . Content || ` ["1", "2"] ` == js . Content )
2017-10-24 11:29:08 +00:00
var jss [ ] JsonString
err = testEngine . Table ( "json_json" ) . Find ( & jss )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , len ( jss ) )
2020-03-03 08:19:32 +00:00
assert . True ( t , ` ["1","2"] ` == jss [ 0 ] . Content || ` ["1", "2"] ` == jss [ 0 ] . Content )
2020-11-03 09:10:35 +00:00
type JsonAnonymousStruct struct {
Id int64
JsonString ` xorm:"'json_string' JSON LONGTEXT" `
}
assertSync ( t , new ( JsonAnonymousStruct ) )
_ , err = testEngine . Insert ( & JsonAnonymousStruct {
JsonString : JsonString {
Content : "1" ,
} ,
} )
assert . NoError ( t , err )
var jas JsonAnonymousStruct
has , err = testEngine . Get ( & jas )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , jas . Id )
assert . EqualValues ( t , "1" , jas . Content )
var jass [ ] JsonAnonymousStruct
err = testEngine . Find ( & jass )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , len ( jass ) )
assert . EqualValues ( t , "1" , jass [ 0 ] . Content )
type JsonStruct struct {
Id int64
JSON JsonString ` xorm:"'json_string' JSON LONGTEXT" `
}
assertSync ( t , new ( JsonStruct ) )
_ , err = testEngine . Insert ( & JsonStruct {
JSON : JsonString {
Content : "2" ,
} ,
} )
assert . NoError ( t , err )
var jst JsonStruct
has , err = testEngine . Get ( & jst )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , jst . Id )
assert . EqualValues ( t , "2" , jst . JSON . Content )
var jsts [ ] JsonStruct
err = testEngine . Find ( & jsts )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , len ( jsts ) )
assert . EqualValues ( t , "2" , jsts [ 0 ] . JSON . Content )
2017-10-24 11:29:08 +00:00
}
2018-04-08 13:54:24 +00:00
func TestGetActionMapping ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2018-04-08 13:54:24 +00:00
type ActionMapping struct {
ActionId string ` xorm:"pk" `
ActionName string ` xorm:"index" `
ScriptId string ` xorm:"unique" `
RollbackId string ` xorm:"unique" `
Env string
Tags string
Description string
UpdateTime time . Time ` xorm:"updated" `
DeleteTime time . Time ` xorm:"deleted" `
}
assertSync ( t , new ( ActionMapping ) )
2018-04-11 03:52:16 +00:00
_ , err := testEngine . Insert ( & ActionMapping {
ActionId : "1" ,
ScriptId : "2" ,
} )
assert . NoError ( t , err )
2022-04-22 02:16:35 +00:00
valuesSlice := make ( [ ] string , 2 )
2018-04-11 03:52:16 +00:00
has , err := testEngine . Table ( new ( ActionMapping ) ) .
2018-04-08 13:54:24 +00:00
Cols ( "script_id" , "rollback_id" ) .
2018-04-11 03:52:16 +00:00
ID ( "1" ) . Get ( & valuesSlice )
2018-04-08 13:54:24 +00:00
assert . NoError ( t , err )
2018-04-11 03:52:16 +00:00
assert . True ( t , has )
assert . EqualValues ( t , "2" , valuesSlice [ 0 ] )
assert . EqualValues ( t , "" , valuesSlice [ 1 ] )
2018-04-08 13:54:24 +00:00
}
2018-04-10 03:28:45 +00:00
func TestGetStructId ( t * testing . T ) {
type TestGetStruct struct {
Id int64
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2018-04-10 03:28:45 +00:00
assertSync ( t , new ( TestGetStruct ) )
_ , err := testEngine . Insert ( & TestGetStruct { } )
assert . NoError ( t , err )
_ , err = testEngine . Insert ( & TestGetStruct { } )
assert . NoError ( t , err )
type maxidst struct {
Id int64
}
2022-04-22 02:16:35 +00:00
// var id int64
2018-04-10 03:28:45 +00:00
var maxid maxidst
2021-08-24 05:46:08 +00:00
sql := "select max(`id`) as id from " + testEngine . Quote ( testEngine . TableName ( & TestGetStruct { } , true ) )
2018-04-10 03:28:45 +00:00
has , err := testEngine . SQL ( sql ) . Get ( & maxid )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 2 , maxid . Id )
}
2018-09-25 13:31:44 +00:00
func TestContextGet ( t * testing . T ) {
type ContextGetStruct struct {
Id int64
Name string
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2018-09-25 13:31:44 +00:00
assertSync ( t , new ( ContextGetStruct ) )
_ , err := testEngine . Insert ( & ContextGetStruct { Name : "1" } )
assert . NoError ( t , err )
sess := testEngine . NewSession ( )
defer sess . Close ( )
2020-02-28 12:29:08 +00:00
context := contexts . NewMemoryContextCache ( )
2018-09-25 13:31:44 +00:00
var c2 ContextGetStruct
has , err := sess . ID ( 1 ) . NoCache ( ) . ContextCache ( context ) . Get ( & c2 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , c2 . Id )
assert . EqualValues ( t , "1" , c2 . Name )
sql , args := sess . LastSQL ( )
assert . True ( t , len ( sql ) > 0 )
assert . True ( t , len ( args ) > 0 )
var c3 ContextGetStruct
has , err = sess . ID ( 1 ) . NoCache ( ) . ContextCache ( context ) . Get ( & c3 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , c3 . Id )
assert . EqualValues ( t , "1" , c3 . Name )
sql , args = sess . LastSQL ( )
assert . True ( t , len ( sql ) == 0 )
assert . True ( t , len ( args ) == 0 )
}
func TestContextGet2 ( t * testing . T ) {
type ContextGetStruct2 struct {
Id int64
Name string
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2018-09-25 13:31:44 +00:00
assertSync ( t , new ( ContextGetStruct2 ) )
_ , err := testEngine . Insert ( & ContextGetStruct2 { Name : "1" } )
assert . NoError ( t , err )
2020-02-28 12:29:08 +00:00
context := contexts . NewMemoryContextCache ( )
2018-09-25 13:31:44 +00:00
var c2 ContextGetStruct2
has , err := testEngine . ID ( 1 ) . NoCache ( ) . ContextCache ( context ) . Get ( & c2 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , c2 . Id )
assert . EqualValues ( t , "1" , c2 . Name )
var c3 ContextGetStruct2
has , err = testEngine . ID ( 1 ) . NoCache ( ) . ContextCache ( context ) . Get ( & c3 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 1 , c3 . Id )
assert . EqualValues ( t , "1" , c3 . Name )
}
2019-01-20 03:09:37 +00:00
type GetCustomTableInterface interface {
TableName ( ) string
}
type MyGetCustomTableImpletation struct {
Id int64 ` json:"id" `
Name string ` json:"name" `
}
const getCustomTableName = "GetCustomTableInterface"
2020-02-20 07:18:44 +00:00
func ( MyGetCustomTableImpletation ) TableName ( ) string {
2019-01-20 03:09:37 +00:00
return getCustomTableName
}
func TestGetCustomTableInterface ( t * testing . T ) {
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2021-08-24 09:13:17 +00:00
assert . NoError ( t , testEngine . Table ( getCustomTableName ) . Sync ( new ( MyGetCustomTableImpletation ) ) )
2019-01-20 03:09:37 +00:00
exist , err := testEngine . IsTableExist ( getCustomTableName )
assert . NoError ( t , err )
assert . True ( t , exist )
_ , err = testEngine . Insert ( & MyGetCustomTableImpletation {
Name : "xlw" ,
} )
assert . NoError ( t , err )
var c GetCustomTableInterface = new ( MyGetCustomTableImpletation )
has , err := testEngine . Get ( c )
assert . NoError ( t , err )
assert . True ( t , has )
}
2019-07-29 15:32:32 +00:00
func TestGetNullVar ( t * testing . T ) {
type TestGetNullVarStruct struct {
Id int64
Name string
Age int
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2019-07-29 15:32:32 +00:00
assertSync ( t , new ( TestGetNullVarStruct ) )
2021-08-24 05:46:08 +00:00
if testEngine . Dialect ( ) . Features ( ) . AutoincrMode == dialects . SequenceAutoincrMode {
t . SkipNow ( )
return
}
affected , err := testEngine . Exec ( "insert into " + testEngine . Quote ( testEngine . TableName ( new ( TestGetNullVarStruct ) , true ) ) + " (`name`,`age`) values (null,null)" )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
a , _ := affected . RowsAffected ( )
assert . EqualValues ( t , 1 , a )
var name string
2021-08-24 05:46:08 +00:00
has , err := testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "name" ) . Get ( & name )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "" , name )
var age int
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age )
var age2 int8
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age2 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age2 )
var age3 int16
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age3 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age3 )
var age4 int32
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age4 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age4 )
var age5 int64
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age5 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age5 )
var age6 uint
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age6 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age6 )
var age7 uint8
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age7 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age7 )
var age8 int16
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age8 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age8 )
var age9 int32
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age9 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age9 )
var age10 int64
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestGetNullVarStruct ) ) . Where ( "`id` = ?" , 1 ) . Cols ( "age" ) . Get ( & age10 )
2019-07-29 15:32:32 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 0 , age10 )
}
2019-08-05 09:05:42 +00:00
func TestCustomTypes ( t * testing . T ) {
type MyInt int
type MyString string
type TestCustomizeStruct struct {
Id int64
Name MyString
Age MyInt
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2019-08-05 09:05:42 +00:00
assertSync ( t , new ( TestCustomizeStruct ) )
2022-04-22 02:16:35 +00:00
s := TestCustomizeStruct {
2019-08-05 09:05:42 +00:00
Name : "test" ,
Age : 32 ,
}
_ , err := testEngine . Insert ( & s )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , s . Id )
var name MyString
has , err := testEngine . Table ( new ( TestCustomizeStruct ) ) . ID ( s . Id ) . Cols ( "name" ) . Get ( & name )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "test" , name )
var age MyInt
2021-08-24 05:46:08 +00:00
has , err = testEngine . Table ( new ( TestCustomizeStruct ) ) . ID ( s . Id ) . Select ( "`age`" ) . Get ( & age )
2019-08-05 09:05:42 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , 32 , age )
}
2019-10-05 06:36:18 +00:00
func TestGetViaMapCond ( t * testing . T ) {
type GetViaMapCond struct {
Id int64
Platform int
Index int
}
2020-03-27 07:13:04 +00:00
assert . NoError ( t , PrepareEngine ( ) )
2019-10-05 06:36:18 +00:00
assertSync ( t , new ( GetViaMapCond ) )
var (
r GetViaMapCond
platformStr = colMapper . Obj2Table ( "Platform" )
indexStr = colMapper . Obj2Table ( "Index" )
query = map [ string ] interface { } {
platformStr : 1 ,
indexStr : 1 ,
}
)
has , err := testEngine . Where ( query ) . Get ( & r )
assert . NoError ( t , err )
assert . False ( t , has )
}
2021-03-23 13:48:58 +00:00
func TestGetNil ( t * testing . T ) {
type GetNil struct {
Id int64
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetNil ) )
var gn * GetNil
has , err := testEngine . Get ( gn )
assert . True ( t , errors . Is ( err , xorm . ErrObjectIsNil ) )
assert . False ( t , has )
}
2021-07-07 06:00:16 +00:00
func TestGetBigFloat ( t * testing . T ) {
type GetBigFloat struct {
Id int64
Money * big . Float ` xorm:"numeric(22,2)" `
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetBigFloat ) )
{
2022-04-22 02:16:35 +00:00
gf := GetBigFloat {
2021-07-07 06:00:16 +00:00
Money : big . NewFloat ( 999999.99 ) ,
}
_ , err := testEngine . Insert ( & gf )
assert . NoError ( t , err )
var m big . Float
2021-08-24 05:46:08 +00:00
has , err := testEngine . Table ( "get_big_float" ) . Cols ( "money" ) . Where ( "`id`=?" , gf . Id ) . Get ( & m )
2021-07-07 06:00:16 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . True ( t , m . String ( ) == gf . Money . String ( ) , "%v != %v" , m . String ( ) , gf . Money . String ( ) )
2022-04-22 02:16:35 +00:00
// fmt.Println(m.Cmp(gf.Money))
// assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
2021-07-07 06:00:16 +00:00
}
type GetBigFloat2 struct {
2021-07-20 05:46:24 +00:00
Id int64
Money * big . Float ` xorm:"decimal(22,2)" `
Money2 big . Float ` xorm:"decimal(22,2)" `
2021-07-07 06:00:16 +00:00
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetBigFloat2 ) )
{
2022-04-22 02:16:35 +00:00
gf2 := GetBigFloat2 {
2021-07-20 05:46:24 +00:00
Money : big . NewFloat ( 9999999.99 ) ,
Money2 : * big . NewFloat ( 99.99 ) ,
2021-07-07 06:00:16 +00:00
}
_ , err := testEngine . Insert ( & gf2 )
assert . NoError ( t , err )
var m2 big . Float
2021-08-24 05:46:08 +00:00
has , err := testEngine . Table ( "get_big_float2" ) . Cols ( "money" ) . Where ( "`id`=?" , gf2 . Id ) . Get ( & m2 )
2021-07-07 06:00:16 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . True ( t , m2 . String ( ) == gf2 . Money . String ( ) , "%v != %v" , m2 . String ( ) , gf2 . Money . String ( ) )
2022-04-22 02:16:35 +00:00
// fmt.Println(m.Cmp(gf.Money))
// assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
2021-07-07 07:46:21 +00:00
var gf3 GetBigFloat2
has , err = testEngine . ID ( gf2 . Id ) . Get ( & gf3 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . True ( t , gf3 . Money . String ( ) == gf2 . Money . String ( ) , "%v != %v" , gf3 . Money . String ( ) , gf2 . Money . String ( ) )
2021-07-20 05:46:24 +00:00
assert . True ( t , gf3 . Money2 . String ( ) == gf2 . Money2 . String ( ) , "%v != %v" , gf3 . Money2 . String ( ) , gf2 . Money2 . String ( ) )
2021-07-07 07:46:21 +00:00
var gfs [ ] GetBigFloat2
err = testEngine . Find ( & gfs )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , len ( gfs ) )
assert . True ( t , gfs [ 0 ] . Money . String ( ) == gf2 . Money . String ( ) , "%v != %v" , gfs [ 0 ] . Money . String ( ) , gf2 . Money . String ( ) )
2021-07-20 05:46:24 +00:00
assert . True ( t , gfs [ 0 ] . Money2 . String ( ) == gf2 . Money2 . String ( ) , "%v != %v" , gfs [ 0 ] . Money2 . String ( ) , gf2 . Money2 . String ( ) )
2021-07-07 06:00:16 +00:00
}
}
2021-07-07 09:00:58 +00:00
func TestGetDecimal ( t * testing . T ) {
type GetDecimal struct {
Id int64
Money decimal . Decimal ` xorm:"decimal(22,2)" `
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetDecimal ) )
{
2022-04-22 02:16:35 +00:00
gf := GetDecimal {
2021-07-07 09:00:58 +00:00
Money : decimal . NewFromFloat ( 999999.99 ) ,
}
_ , err := testEngine . Insert ( & gf )
assert . NoError ( t , err )
var m decimal . Decimal
2021-08-24 05:46:08 +00:00
has , err := testEngine . Table ( "get_decimal" ) . Cols ( "money" ) . Where ( "`id`=?" , gf . Id ) . Get ( & m )
2021-07-07 09:00:58 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . True ( t , m . String ( ) == gf . Money . String ( ) , "%v != %v" , m . String ( ) , gf . Money . String ( ) )
2022-04-22 02:16:35 +00:00
// fmt.Println(m.Cmp(gf.Money))
// assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
2021-07-07 09:00:58 +00:00
}
type GetDecimal2 struct {
Id int64
Money * decimal . Decimal ` xorm:"decimal(22,2)" `
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetDecimal2 ) )
{
v := decimal . NewFromFloat ( 999999.99 )
2022-04-22 02:16:35 +00:00
gf := GetDecimal2 {
2021-07-07 09:00:58 +00:00
Money : & v ,
}
_ , err := testEngine . Insert ( & gf )
assert . NoError ( t , err )
var m decimal . Decimal
2021-08-24 05:46:08 +00:00
has , err := testEngine . Table ( "get_decimal2" ) . Cols ( "money" ) . Where ( "`id`=?" , gf . Id ) . Get ( & m )
2021-07-07 09:00:58 +00:00
assert . NoError ( t , err )
assert . True ( t , has )
assert . True ( t , m . String ( ) == gf . Money . String ( ) , "%v != %v" , m . String ( ) , gf . Money . String ( ) )
2022-04-22 02:16:35 +00:00
// fmt.Println(m.Cmp(gf.Money))
// assert.True(t, m.Cmp(gf.Money) == 0, "%v != %v", m.String(), gf.Money.String())
2021-07-07 09:00:58 +00:00
}
}
2022-04-22 02:16:35 +00:00
2021-07-11 01:30:33 +00:00
func TestGetTime ( t * testing . T ) {
type GetTimeStruct struct {
Id int64
CreateTime time . Time
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetTimeStruct ) )
2022-04-22 02:16:35 +00:00
gts := GetTimeStruct {
2021-07-18 16:21:46 +00:00
CreateTime : time . Now ( ) . In ( testEngine . GetTZLocation ( ) ) ,
2021-07-11 01:30:33 +00:00
}
_ , err := testEngine . Insert ( & gts )
assert . NoError ( t , err )
var gn time . Time
has , err := testEngine . Table ( "get_time_struct" ) . Cols ( colMapper . Obj2Table ( "CreateTime" ) ) . Get ( & gn )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , gts . CreateTime . Format ( time . RFC3339 ) , gn . Format ( time . RFC3339 ) )
}
2021-08-24 07:42:34 +00:00
func TestGetVars ( t * testing . T ) {
type GetVars struct {
Id int64
Name string
Age int
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetVars ) )
_ , err := testEngine . Insert ( & GetVars {
Name : "xlw" ,
Age : 42 ,
} )
assert . NoError ( t , err )
var name string
var age int
has , err := testEngine . Table ( new ( GetVars ) ) . Cols ( "name" , "age" ) . Get ( & name , & age )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "xlw" , name )
assert . EqualValues ( t , 42 , age )
}
2021-10-20 00:53:30 +00:00
func TestGetWithPrepare ( t * testing . T ) {
type GetVarsWithPrepare struct {
Id int64
Name string
Age int
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetVarsWithPrepare ) )
_ , err := testEngine . Insert ( & GetVarsWithPrepare {
Name : "xlw" ,
Age : 42 ,
} )
assert . NoError ( t , err )
var v1 GetVarsWithPrepare
has , err := testEngine . Prepare ( ) . ID ( 1 ) . Get ( & v1 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "xlw" , v1 . Name )
assert . EqualValues ( t , 42 , v1 . Age )
sess := testEngine . NewSession ( )
defer sess . Close ( )
var v2 GetVarsWithPrepare
has , err = sess . Prepare ( ) . ID ( 1 ) . Get ( & v2 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "xlw" , v2 . Name )
assert . EqualValues ( t , 42 , v2 . Age )
var v3 GetVarsWithPrepare
has , err = sess . Prepare ( ) . ID ( 1 ) . Get ( & v3 )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , "xlw" , v3 . Name )
assert . EqualValues ( t , 42 , v3 . Age )
err = sess . Begin ( )
assert . NoError ( t , err )
cnt , err := sess . Prepare ( ) . Insert ( & GetVarsWithPrepare {
Name : "xlw2" ,
Age : 12 ,
} )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
cnt , err = sess . Prepare ( ) . Insert ( & GetVarsWithPrepare {
Name : "xlw3" ,
Age : 13 ,
} )
assert . NoError ( t , err )
assert . EqualValues ( t , 1 , cnt )
err = sess . Commit ( )
assert . NoError ( t , err )
}
2022-04-22 02:16:35 +00:00
func TestGetBytesVars ( t * testing . T ) {
type GetBytesVars struct {
Id int64
Bytes1 [ ] byte
Bytes2 [ ] byte
}
assert . NoError ( t , PrepareEngine ( ) )
assertSync ( t , new ( GetBytesVars ) )
_ , err := testEngine . Insert ( [ ] GetBytesVars {
{
Bytes1 : [ ] byte ( "bytes1" ) ,
Bytes2 : [ ] byte ( "bytes2" ) ,
} ,
{
Bytes1 : [ ] byte ( "bytes1-1" ) ,
Bytes2 : [ ] byte ( "bytes2-2" ) ,
} ,
} )
assert . NoError ( t , err )
var gbv GetBytesVars
has , err := testEngine . Asc ( "id" ) . Get ( & gbv )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , [ ] byte ( "bytes1" ) , gbv . Bytes1 )
assert . EqualValues ( t , [ ] byte ( "bytes2" ) , gbv . Bytes2 )
has , err = testEngine . Desc ( "id" ) . NoAutoCondition ( ) . Get ( & gbv )
assert . NoError ( t , err )
assert . True ( t , has )
assert . EqualValues ( t , [ ] byte ( "bytes1-1" ) , gbv . Bytes1 )
assert . EqualValues ( t , [ ] byte ( "bytes2-2" ) , gbv . Bytes2 )
}