add set quote policies methods for engine
This commit is contained in:
parent
0c1974f397
commit
352dcc9cac
28
.drone.yml
28
.drone.yml
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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 {
|
||||
|
|
10
tag_test.go
10
tag_test.go
|
@ -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")
|
||||
|
|
4
xorm.go
4
xorm.go
|
@ -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 {
|
||||
|
|
15
xorm_test.go
15
xorm_test.go
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue