add set quote policies methods for engine

This commit is contained in:
Lunny Xiao 2019-10-01 14:19:15 +08:00
parent 0c1974f397
commit 352dcc9cac
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
16 changed files with 157 additions and 191 deletions

View File

@ -24,6 +24,8 @@ steps:
commands:
- "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -coverprofile=coverage1-1.txt -covermode=atomic"
- "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -cache=true -coverprofile=coverage1-2.txt -covermode=atomic"
- "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -col_quote=reserved -coverprofile=coverage1-3.txt -covermode=atomic"
- "go test -v -race -db=\"sqlite3\" -conn_str=\"./test.db\" -col_quote=reserved -cache=true -coverprofile=coverage1-4.txt -covermode=atomic"
when:
event:
- push
@ -38,7 +40,9 @@ steps:
commands:
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -coverprofile=coverage2-1.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic"
when:
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -col_quote=reserved -coverprofile=coverage2-3.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test\" -col_quote=reserved -cache=true -coverprofile=coverage2-4.txt -covermode=atomic"
when:
event:
- push
- pull_request
@ -54,6 +58,8 @@ steps:
commands:
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -coverprofile=coverage2.1-1.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -cache=true -coverprofile=coverage2.1-2.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -col_quote=reserved -coverprofile=coverage2.1-3.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(mysql)/xorm_test?charset=utf8mb4\" -col_quote=reserved -cache=true -coverprofile=coverage2.1-4.txt -covermode=atomic"
when:
event:
- push
@ -70,6 +76,8 @@ steps:
commands:
- "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -coverprofile=coverage3-1.txt -covermode=atomic"
- "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic"
- "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -col_quote=reserved -coverprofile=coverage3-3.txt -covermode=atomic"
- "go test -v -race -db=\"mymysql\" -conn_str=\"tcp:mysql:3306*xorm_test/root/\" -col_quote=reserved -cache=true -coverprofile=coverage3-4.txt -covermode=atomic"
when:
event:
- push
@ -84,6 +92,8 @@ steps:
commands:
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -coverprofile=coverage4-1.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -col_quote=reserved -coverprofile=coverage4-3.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -col_quote=reserved -cache=true -coverprofile=coverage4-4.txt -covermode=atomic"
when:
event:
- push
@ -98,6 +108,8 @@ steps:
commands:
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -col_quote=reserved -schema=xorm -coverprofile=coverage5-3.txt -covermode=atomic"
- "go test -v -race -db=\"postgres\" -conn_str=\"postgres://postgres:@pgsql/xorm_test?sslmode=disable\" -col_quote=reserved -schema=xorm -cache=true -coverprofile=coverage5-4.txt -covermode=atomic"
when:
event:
- push
@ -112,6 +124,8 @@ steps:
commands:
- "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -coverprofile=coverage6-1.txt -covermode=atomic"
- "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic"
- "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -col_quote=reserved -coverprofile=coverage6-3.txt -covermode=atomic"
- "go test -v -race -db=\"mssql\" -conn_str=\"server=mssql;user id=sa;password=yourStrong(!)Password;database=xorm_test\" -col_quote=reserved -cache=true -coverprofile=coverage6-4.txt -covermode=atomic"
when:
event:
- push
@ -126,6 +140,8 @@ steps:
commands:
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(tidb:4000)/xorm_test\" -ignore_select_update=true -coverprofile=coverage7-1.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(tidb:4000)/xorm_test\" -ignore_select_update=true -cache=true -coverprofile=coverage7-2.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(tidb:4000)/xorm_test\" -col_quote=reserved -ignore_select_update=true -coverprofile=coverage7-3.txt -covermode=atomic"
- "go test -v -race -db=\"mysql\" -conn_str=\"root:@tcp(tidb:4000)/xorm_test\" -col_quote=reserved -ignore_select_update=true -cache=true -coverprofile=coverage7-4.txt -covermode=atomic"
when:
event:
- push
@ -149,7 +165,15 @@ steps:
- test-tidb
commands:
- go get github.com/wadey/gocovmerge
- gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage2.1-1.txt coverage2.1-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt coverage6-1.txt coverage6-2.txt coverage7-1.txt coverage7-2.txt > coverage.txt
- >
gocovmerge coverage1-1.txt coverage1-2.txt coverage1-3.txt coverage1-4.txt
coverage2-1.txt coverage2-2.txt coverage2-3.txt coverage2-4.txt
coverage2.1-1.txt coverage2.1-2.txt coverage2.1-3.txt coverage2.1-4.txt
coverage3-1.txt coverage3-2.txt coverage3-3.txt coverage3-4.txt
coverage4-1.txt coverage4-2.txt coverage4-3.txt coverage4-4.txt
coverage5-1.txt coverage5-2.txt coverage5-3.txt coverage5-4.txt
coverage6-1.txt coverage6-2.txt coverage6-3.txt coverage6-4.txt
coverage7-1.txt coverage7-2.txt coverage7-3.txt coverage7-4.txt > coverage.txt
when:
event:
- push

View File

@ -533,7 +533,7 @@ func (db *mssql) ForUpdateSql(query string) string {
}
func (db *mssql) Filters() []core.Filter {
return []core.Filter{&core.IdFilter{}, &core.QuoteFilter{}}
return []core.Filter{&core.QuoteFilter{}}
}
type odbcDriver struct {

View File

@ -560,7 +560,7 @@ func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, chars
}
func (db *mysql) Filters() []core.Filter {
return []core.Filter{&core.IdFilter{}}
return []core.Filter{}
}
type mymysqlDriver struct {

View File

@ -847,7 +847,7 @@ func (db *oracle) GetIndexes(tableName string) (map[string]*core.Index, error) {
}
func (db *oracle) Filters() []core.Filter {
return []core.Filter{&core.QuoteFilter{}, &core.SeqFilter{Prefix: ":", Start: 1}, &core.IdFilter{}}
return []core.Filter{&core.QuoteFilter{}, &core.SeqFilter{Prefix: ":", Start: 1}}
}
type goracleDriver struct {

View File

@ -1160,7 +1160,7 @@ func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error)
}
func (db *postgres) Filters() []core.Filter {
return []core.Filter{&core.IdFilter{}, &core.QuoteFilter{}, &core.SeqFilter{Prefix: "$", Start: 1}}
return []core.Filter{&core.QuoteFilter{}, &core.SeqFilter{Prefix: "$", Start: 1}}
}
type pqDriver struct {

View File

@ -477,7 +477,7 @@ func (db *sqlite3) GetIndexes(tableName string) (map[string]*core.Index, error)
}
func (db *sqlite3) Filters() []core.Filter {
return []core.Filter{&core.IdFilter{}}
return []core.Filter{}
}
type sqlite3Driver struct {

View File

@ -17,9 +17,9 @@ type QuotePolicy int
// All QuotePolicies
const (
QuoteAddAlways QuotePolicy = iota
QuoteNoAdd
QuoteAddReserved
QuotePolicyAlways QuotePolicy = iota
QuotePolicyNone
QuotePolicyReserved
)
// Quoter represents an object has Quote method
@ -56,7 +56,7 @@ func (q *quoter) IsReserved(value string) bool {
}
func (q *quoter) needQuote(value string) bool {
return q.quotePolicy == QuoteAddAlways || (q.quotePolicy == QuoteAddReserved && q.IsReserved(value))
return q.quotePolicy == QuotePolicyAlways || (q.quotePolicy == QuotePolicyReserved && q.IsReserved(value))
}
func (q *quoter) WriteTo(w *builder.BytesWriter, name string) error {
@ -134,8 +134,8 @@ func (engine *Engine) SetColumnQuotePolicy(policy QuotePolicy) {
// quoteTo quotes string and writes into the buffer
func quoteTo(quoter Quoter, buf *strings.Builder, value string) {
left, right := quoter.Quotes()
if (quoter.QuotePolicy() == QuoteAddAlways) ||
(quoter.QuotePolicy() == QuoteAddReserved && quoter.IsReserved(value)) {
if (quoter.QuotePolicy() == QuotePolicyAlways) ||
(quoter.QuotePolicy() == QuotePolicyReserved && quoter.IsReserved(value)) {
realQuoteTo(left, right, buf, value)
return
}

View File

@ -27,7 +27,11 @@ func TestChangeQuotePolicy(t *testing.T) {
Name string
}
testEngine.SetColumnQuotePolicy(QuoteNoAdd)
testEngine.SetColumnQuotePolicy(QuotePolicyNone)
defer func() {
testEngine.SetColumnQuotePolicy(colQuotePolicy)
}()
assertSync(t, new(ChangeQuotePolicy))
var obj1 = ChangeQuotePolicy{
@ -63,7 +67,11 @@ func TestChangeQuotePolicy2(t *testing.T) {
Index int
}
testEngine.SetColumnQuotePolicy(QuoteAddReserved)
testEngine.SetColumnQuotePolicy(QuotePolicyReserved)
defer func() {
testEngine.SetColumnQuotePolicy(colQuotePolicy)
}()
assertSync(t, new(ChangeQuotePolicy2))
var obj1 = ChangeQuotePolicy2{

View File

@ -9,8 +9,8 @@ import (
"fmt"
"testing"
"xorm.io/builder"
"github.com/stretchr/testify/assert"
"xorm.io/builder"
)
func TestBuilder(t *testing.T) {
@ -122,7 +122,8 @@ func TestIn(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 3, cnt)
department := "`" + testEngine.GetColumnMapper().Obj2Table("Departname") + "`"
department := testEngine.Quote(colMapper.Obj2Table("Departname"), true)
idStr := testEngine.Quote(colMapper.Obj2Table("Id"), true)
var usrs []Userinfo
err = testEngine.Where(department+" = ?", "dev").Limit(3).Find(&usrs)
assert.NoError(t, err)
@ -137,13 +138,13 @@ func TestIn(t *testing.T) {
idsStr = idsStr[:len(idsStr)-1]
users := make([]Userinfo, 0)
err = testEngine.In("(id)", ids[0], ids[1], ids[2]).Find(&users)
err = testEngine.In(idStr, ids[0], ids[1], ids[2]).Find(&users)
assert.NoError(t, err)
fmt.Println(users)
assert.EqualValues(t, 3, len(users))
users = make([]Userinfo, 0)
err = testEngine.In("(id)", ids).Find(&users)
err = testEngine.In(idStr, ids).Find(&users)
assert.NoError(t, err)
fmt.Println(users)
assert.EqualValues(t, 3, len(users))
@ -161,7 +162,7 @@ func TestIn(t *testing.T) {
idsInterface = append(idsInterface, id)
}
err = testEngine.Where(department+" = ?", "dev").In("(id)", idsInterface...).Find(&users)
err = testEngine.Where(department+" = ?", "dev").In(idStr, idsInterface...).Find(&users)
assert.NoError(t, err)
fmt.Println(users)
assert.EqualValues(t, 3, len(users))
@ -175,11 +176,11 @@ func TestIn(t *testing.T) {
dev := testEngine.GetColumnMapper().Obj2Table("Dev")
err = testEngine.In("(id)", 1).In("(id)", 2).In(department, dev).Find(&users)
err = testEngine.In(idStr, 1).In(idStr, 2).In(department, dev).Find(&users)
assert.NoError(t, err)
fmt.Println(users)
cnt, err = testEngine.In("(id)", ids[0]).Update(&Userinfo{Departname: "dev-"})
cnt, err = testEngine.In(idStr, ids[0]).Update(&Userinfo{Departname: "dev-"})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -189,11 +190,11 @@ func TestIn(t *testing.T) {
assert.True(t, has)
assert.EqualValues(t, "dev-", user.Departname)
cnt, err = testEngine.In("(id)", ids[0]).Update(&Userinfo{Departname: "dev"})
cnt, err = testEngine.In(idStr, ids[0]).Update(&Userinfo{Departname: "dev"})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
cnt, err = testEngine.In("(id)", ids[1]).Delete(&Userinfo{})
cnt, err = testEngine.In(idStr, ids[1]).Delete(&Userinfo{})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
}

View File

@ -309,13 +309,14 @@ func TestOrderSameMapper(t *testing.T) {
assertSync(t, new(Userinfo))
idStr := testEngine.Quote("id", true)
users := make([]Userinfo, 0)
err := testEngine.OrderBy("(id) desc").Find(&users)
err := testEngine.OrderBy(idStr + " desc").Find(&users)
assert.NoError(t, err)
fmt.Println(users)
users2 := make([]Userinfo, 0)
err = testEngine.Asc("(id)", "Username").Desc("Height").Find(&users2)
err = testEngine.Asc(idStr, "Username").Desc("Height").Find(&users2)
assert.NoError(t, err)
fmt.Println(users2)
}

View File

@ -260,6 +260,8 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error
quoteJoin(session.engine.colQuoter, colNames),
strings.Join(colMultiPlaces, "),("))
}
fmt.Println("====", sql)
res, err := session.exec(sql, args...)
if err != nil {
return 0, err

View File

@ -201,28 +201,13 @@ func TestInsertDefault(t *testing.T) {
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("Status")).Insert(&di2)
assert.NoError(t, err)
has, err := testEngine.Desc("(id)").Get(di)
idStr := colMapper.Obj2Table("Id")
has, err := testEngine.Desc(idStr).Get(di)
assert.NoError(t, err)
if !has {
err = errors.New("error with no data")
t.Error(err)
panic(err)
}
if di.Status != -1 {
err = errors.New("inserted error data")
t.Error(err)
panic(err)
}
if di2.Updated.Unix() != di.Updated.Unix() {
err = errors.New("updated should equal")
t.Error(err, di.Updated, di2.Updated)
panic(err)
}
if di2.Created.Unix() != di.Created.Unix() {
err = errors.New("created should equal")
t.Error(err, di.Created, di2.Created)
panic(err)
}
assert.True(t, has, "error with no data")
assert.EqualValues(t, -1, di.Status, "inserted error data")
assert.EqualValues(t, di.Updated.Unix(), di2.Updated.Unix(), "updated should equal")
assert.EqualValues(t, di.Created.Unix(), di2.Created.Unix())
}
type DefaultInsert2 struct {
@ -237,53 +222,21 @@ func TestInsertDefault2(t *testing.T) {
di := new(DefaultInsert2)
err := testEngine.Sync2(di)
if err != nil {
t.Error(err)
}
assert.NoError(t, err)
var di2 = DefaultInsert2{Name: "test"}
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("CheckTime")).Insert(&di2)
if err != nil {
t.Error(err)
}
assert.NoError(t, err)
has, err := testEngine.Desc("(id)").Get(di)
if err != nil {
t.Error(err)
}
if !has {
err = errors.New("error with no data")
t.Error(err)
panic(err)
}
idStr := testEngine.Quote(testEngine.GetColumnMapper().Obj2Table("Id"), true)
has, err := testEngine.Desc(idStr).Get(di)
assert.NoError(t, err)
assert.True(t, has, "error with no data")
has, err = testEngine.NoAutoCondition().Desc("(id)").Get(&di2)
if err != nil {
t.Error(err)
}
if !has {
err = errors.New("error with no data")
t.Error(err)
panic(err)
}
if *di != di2 {
err = fmt.Errorf("%v is not equal to %v", di, di2)
t.Error(err)
panic(err)
}
/*if di2.Updated.Unix() != di.Updated.Unix() {
err = errors.New("updated should equal")
t.Error(err, di.Updated, di2.Updated)
panic(err)
}
if di2.Created.Unix() != di.Created.Unix() {
err = errors.New("created should equal")
t.Error(err, di.Created, di2.Created)
panic(err)
}*/
has, err = testEngine.NoAutoCondition().Desc(idStr).Get(&di2)
assert.NoError(t, err)
assert.True(t, has, "error with no data")
assert.EqualValues(t, *di, di2, fmt.Errorf("%v is not equal to %v", di, di2))
}
type CreatedInsert struct {
@ -321,19 +274,15 @@ func TestInsertCreated(t *testing.T) {
di := new(CreatedInsert)
err := testEngine.Sync2(di)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci := &CreatedInsert{}
_, err = testEngine.Insert(ci)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err := testEngine.Desc("(id)").Get(di)
if err != nil {
t.Fatal(err)
}
idStr := testEngine.Quote("Id", true)
has, err := testEngine.Desc(idStr).Get(di)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -344,18 +293,14 @@ func TestInsertCreated(t *testing.T) {
di2 := new(CreatedInsert2)
err = testEngine.Sync2(di2)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci2 := &CreatedInsert2{}
_, err = testEngine.Insert(ci2)
if err != nil {
t.Fatal(err)
}
has, err = testEngine.Desc("(id)").Get(di2)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err = testEngine.Desc(idStr).Get(di2)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -366,18 +311,14 @@ func TestInsertCreated(t *testing.T) {
di3 := new(CreatedInsert3)
err = testEngine.Sync2(di3)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci3 := &CreatedInsert3{}
_, err = testEngine.Insert(ci3)
if err != nil {
t.Fatal(err)
}
has, err = testEngine.Desc("(id)").Get(di3)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err = testEngine.Desc(idStr).Get(di3)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -388,18 +329,14 @@ func TestInsertCreated(t *testing.T) {
di4 := new(CreatedInsert4)
err = testEngine.Sync2(di4)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci4 := &CreatedInsert4{}
_, err = testEngine.Insert(ci4)
if err != nil {
t.Fatal(err)
}
has, err = testEngine.Desc("(id)").Get(di4)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err = testEngine.Desc(idStr).Get(di4)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -410,18 +347,14 @@ func TestInsertCreated(t *testing.T) {
di5 := new(CreatedInsert5)
err = testEngine.Sync2(di5)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci5 := &CreatedInsert5{}
_, err = testEngine.Insert(ci5)
if err != nil {
t.Fatal(err)
}
has, err = testEngine.Desc("(id)").Get(di5)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err = testEngine.Desc(idStr).Get(di5)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -432,20 +365,15 @@ func TestInsertCreated(t *testing.T) {
di6 := new(CreatedInsert6)
err = testEngine.Sync2(di6)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
oldTime := time.Now().Add(-time.Hour)
ci6 := &CreatedInsert6{Created: oldTime}
_, err = testEngine.Insert(ci6)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
has, err = testEngine.Desc("(id)").Get(di6)
if err != nil {
t.Fatal(err)
}
has, err = testEngine.Desc(idStr).Get(di6)
assert.NoError(t, err)
if !has {
t.Fatal(ErrNotExist)
}
@ -476,8 +404,7 @@ func (j JsonTime) MarshalJSON() ([]byte, error) {
func TestDefaultTime3(t *testing.T) {
type PrepareTask struct {
Id int `xorm:"not null pk autoincr INT(11)" json:"id"`
// ...
Id int `xorm:"not null pk autoincr INT(11)" json:"id"`
StartTime JsonTime `xorm:"not null default '2006-01-02 15:04:05' TIMESTAMP index" json:"start_time"`
EndTime JsonTime `xorm:"not null default '2006-01-02 15:04:05' TIMESTAMP" json:"end_time"`
Cuser string `xorm:"not null default '' VARCHAR(64) index" json:"cuser"`
@ -509,25 +436,18 @@ func TestCreatedJsonTime(t *testing.T) {
di5 := new(MyJsonTime)
err := testEngine.Sync2(di5)
if err != nil {
t.Fatal(err)
}
assert.NoError(t, err)
ci5 := &MyJsonTime{}
_, err = testEngine.Insert(ci5)
if err != nil {
t.Fatal(err)
}
has, err := testEngine.Desc("(id)").Get(di5)
if err != nil {
t.Fatal(err)
}
if !has {
t.Fatal(ErrNotExist)
}
if time.Time(ci5.Created).Unix() != time.Time(di5.Created).Unix() {
t.Fatal("should equal:", time.Time(ci5.Created).Unix(), time.Time(di5.Created).Unix())
}
fmt.Println("ci5:", ci5, "di5:", di5)
assert.NoError(t, err)
idStr := testEngine.Quote(colMapper.Obj2Table("Id"), true)
has, err := testEngine.Desc(idStr).Get(di5)
assert.NoError(t, err)
assert.True(t, has, ErrNotExist.Error())
assert.EqualValues(t, time.Time(ci5.Created).Unix(), time.Time(di5.Created).Unix(),
fmt.Sprintf("should equal: %v %v", time.Time(ci5.Created).Unix(), time.Time(di5.Created).Unix()))
var dis = make([]MyJsonTime, 0)
err = testEngine.Find(&dis)
@ -546,10 +466,7 @@ func TestInsertMulti2(t *testing.T) {
{Username: "xlw22", Departname: "dev", Alias: "lunny3", Created: time.Now()},
}
cnt, err := testEngine.Insert(&users)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.EqualValues(t, len(users), cnt)
users2 := []*Userinfo{
@ -573,10 +490,7 @@ func TestInsertTwoTable(t *testing.T) {
userinfo := Userinfo{Username: "xlw3", Departname: "dev", Alias: "lunny4", Created: time.Now(), Detail: userdetail}
cnt, err := testEngine.Insert(&userinfo, &userdetail)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
if userinfo.Uid <= 0 {
err = errors.New("not return id error")

View File

@ -18,12 +18,12 @@ var colStrTests = []struct {
onlyToDBColumnNdx int
expected string
}{
{"", -1, "`ID`, `IsDeleted`, `Caption`, `Code1`, `Code2`, `Code3`, `ParentID`, `Latitude`, `Longitude`"},
{"Code2", -1, "`ID`, `IsDeleted`, `Caption`, `Code1`, `Code3`, `ParentID`, `Latitude`, `Longitude`"},
{"", 1, "`ID`, `Caption`, `Code1`, `Code2`, `Code3`, `ParentID`, `Latitude`, `Longitude`"},
{"Code3", 1, "`ID`, `Caption`, `Code1`, `Code2`, `ParentID`, `Latitude`, `Longitude`"},
{"Longitude", 1, "`ID`, `Caption`, `Code1`, `Code2`, `Code3`, `ParentID`, `Latitude`"},
{"", 8, "`ID`, `IsDeleted`, `Caption`, `Code1`, `Code2`, `Code3`, `ParentID`, `Latitude`"},
{"", -1, "ID, IsDeleted, Caption, Code1, Code2, Code3, ParentID, Latitude, Longitude"},
{"Code2", -1, "ID, IsDeleted, Caption, Code1, Code3, ParentID, Latitude, Longitude"},
{"", 1, "ID, Caption, Code1, Code2, Code3, ParentID, Latitude, Longitude"},
{"Code3", 1, "ID, Caption, Code1, Code2, ParentID, Latitude, Longitude"},
{"Longitude", 1, "ID, Caption, Code1, Code2, Code3, ParentID, Latitude"},
{"", 8, "ID, IsDeleted, Caption, Code1, Code2, Code3, ParentID, Latitude"},
}
func TestColumnsStringGeneration(t *testing.T) {
@ -31,6 +31,11 @@ func TestColumnsStringGeneration(t *testing.T) {
return
}
testEngine.SetColumnQuotePolicy(QuotePolicyNone)
defer func() {
testEngine.SetColumnQuotePolicy(colQuotePolicy)
}()
var statement *Statement
for ndx, testCase := range colStrTests {

View File

@ -250,7 +250,7 @@ func TestTagDefault(t *testing.T) {
var defaultVal string
var isDefaultExist bool
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct")
tableName := tableMapper.Obj2Table("DefaultStruct")
for _, table := range tables {
if table.Name == tableName {
col := table.GetColumn("age")
@ -293,7 +293,7 @@ func TestTagDefault2(t *testing.T) {
var defaultVal string
var isDefaultExist bool
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct2")
tableName := tableMapper.Obj2Table("DefaultStruct2")
for _, table := range tables {
if table.Name == tableName {
col := table.GetColumn("name")
@ -322,7 +322,7 @@ func TestTagDefault3(t *testing.T) {
var defaultVal string
var isDefaultExist bool
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct3")
tableName := tableMapper.Obj2Table("DefaultStruct3")
for _, table := range tables {
if table.Name == tableName {
col := table.GetColumn("name")
@ -351,7 +351,7 @@ func TestTagDefault4(t *testing.T) {
var defaultVal string
var isDefaultExist bool
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct4")
tableName := tableMapper.Obj2Table("DefaultStruct4")
for _, table := range tables {
if table.Name == tableName {
col := table.GetColumn("created")
@ -387,7 +387,7 @@ func TestTagDefault5(t *testing.T) {
var defaultVal string
var isDefaultExist bool
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct5")
tableName := colMapper.Obj2Table("DefaultStruct5")
for _, table := range tables {
if table.Name == tableName {
col := table.GetColumn("created")

View File

@ -95,8 +95,8 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
tagHandlers: defaultTagHandlers,
cachers: make(map[string]core.Cacher),
defaultContext: context.Background(),
colQuoter: newQuoter(dialect, QuoteAddAlways),
tableQuoter: newQuoter(dialect, QuoteAddAlways),
colQuoter: newQuoter(dialect, QuotePolicyAlways),
tableQuoter: newQuoter(dialect, QuotePolicyAlways),
}
if uri.DbType == core.SQLITE {

View File

@ -35,9 +35,11 @@ var (
splitter = flag.String("splitter", ";", "the splitter on connstr for cluster")
schema = flag.String("schema", "", "specify the schema")
ignoreSelectUpdate = flag.Bool("ignore_select_update", false, "ignore select update if implementation difference, only for tidb")
colQuotePolicyStr = flag.String("col_quote", "always", "quote could be always, none, reversed")
tableMapper core.IMapper
colMapper core.IMapper
tableMapper core.IMapper
colMapper core.IMapper
colQuotePolicy QuotePolicy
)
func createEngine(dbType, connStr string) error {
@ -123,6 +125,15 @@ func createEngine(dbType, connStr string) error {
testEngine.SetMapper(core.LintGonicMapper)
}
}
if *colQuotePolicyStr == "none" {
colQuotePolicy = QuotePolicyNone
} else if *colQuotePolicyStr == "reserved" {
colQuotePolicy = QuotePolicyReserved
} else {
colQuotePolicy = QuotePolicyAlways
}
testEngine.SetColumnQuotePolicy(colQuotePolicy)
}
tableMapper = testEngine.GetTableMapper()