Add mssql ci test (#1203)
* add mssql ci test * fix mssql ci * check test databases * fix ci * fix postgres schema tests * fix ci on postgres * fix insert map bug * fix insert map bug * fix bug * fix insert map bug * fix create schema on tests * fix mssql tests * fix insert return id bugs on mssql * add head comments
This commit is contained in:
parent
971629c4f2
commit
17b9cc7330
|
@ -19,9 +19,15 @@ jobs:
|
||||||
# CircleCI PostgreSQL images available at: https://hub.docker.com/r/circleci/postgres/
|
# CircleCI PostgreSQL images available at: https://hub.docker.com/r/circleci/postgres/
|
||||||
- image: circleci/postgres:9.6.2-alpine
|
- image: circleci/postgres:9.6.2-alpine
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: root
|
POSTGRES_USER: circleci
|
||||||
POSTGRES_DB: xorm_test
|
POSTGRES_DB: xorm_test
|
||||||
|
|
||||||
|
- image: microsoft/mssql-server-linux:latest
|
||||||
|
environment:
|
||||||
|
ACCEPT_EULA: Y
|
||||||
|
SA_PASSWORD: yourStrong(!)Password
|
||||||
|
MSSQL_PID: Developer
|
||||||
|
|
||||||
working_directory: /go/src/github.com/go-xorm/xorm
|
working_directory: /go/src/github.com/go-xorm/xorm
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
|
@ -43,6 +49,8 @@ jobs:
|
||||||
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic
|
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic
|
||||||
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic
|
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic
|
||||||
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic
|
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic
|
||||||
- run: gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt > coverage.txt
|
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -coverprofile=coverage6-1.txt -covermode=atomic
|
||||||
|
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic
|
||||||
|
- run: gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-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 > coverage.txt
|
||||||
|
|
||||||
- run: bash <(curl -s https://codecov.io/bash)
|
- run: bash <(curl -s https://codecov.io/bash)
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"github.com/go-xorm/core"
|
"github.com/go-xorm/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TableNameWithSchema will automatically add schema prefix on table name
|
// tbNameWithSchema will automatically add schema prefix on table name
|
||||||
func (engine *Engine) tbNameWithSchema(v string) string {
|
func (engine *Engine) tbNameWithSchema(v string) string {
|
||||||
// Add schema name as prefix of table name.
|
// Add schema name as prefix of table name.
|
||||||
// Only for postgres database.
|
// Only for postgres database.
|
||||||
|
|
|
@ -154,58 +154,30 @@ func TestProcessors(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
_, err = testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.True(t, p.Id > 0, "Inserted ID not set")
|
||||||
panic(err)
|
assert.True(t, p.B4InsertFlag > 0, "B4InsertFlag not set")
|
||||||
} else {
|
assert.True(t, p.AfterInsertedFlag > 0, "B4InsertFlag not set")
|
||||||
if p.B4InsertFlag == 0 {
|
assert.True(t, p.B4InsertViaExt > 0, "B4InsertFlag not set")
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
assert.True(t, p.AfterInsertedViaExt > 0, "AfterInsertedViaExt not set")
|
||||||
}
|
|
||||||
if p.AfterInsertedFlag == 0 {
|
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
|
||||||
}
|
|
||||||
if p.B4InsertViaExt == 0 {
|
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
|
||||||
}
|
|
||||||
if p.AfterInsertedViaExt == 0 {
|
|
||||||
t.Error(errors.New("AfterInsertedViaExt not set"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p2 := &ProcessorsStruct{}
|
p2 := &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(p.Id).Get(p2)
|
has, err := testEngine.ID(p.Id).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.True(t, has)
|
||||||
panic(err)
|
assert.True(t, p2.B4InsertFlag > 0, "B4InsertFlag not set")
|
||||||
} else {
|
assert.True(t, p2.AfterInsertedFlag == 0, "AfterInsertedFlag is set")
|
||||||
if p2.B4InsertFlag == 0 {
|
assert.True(t, p2.B4InsertViaExt > 0, "B4InsertViaExt not set")
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
assert.True(t, p2.AfterInsertedViaExt == 0, "AfterInsertedViaExt is set")
|
||||||
}
|
assert.True(t, p2.BeforeSetFlag == 9, fmt.Sprintf("BeforeSetFlag is %d not 9", p2.BeforeSetFlag))
|
||||||
if p2.AfterInsertedFlag != 0 {
|
assert.True(t, p2.AfterSetFlag == 9, fmt.Sprintf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
||||||
t.Error(errors.New("AfterInsertedFlag is set"))
|
|
||||||
}
|
|
||||||
if p2.B4InsertViaExt == 0 {
|
|
||||||
t.Error(errors.New("B4InsertViaExt not set"))
|
|
||||||
}
|
|
||||||
if p2.AfterInsertedViaExt != 0 {
|
|
||||||
t.Error(errors.New("AfterInsertedViaExt is set"))
|
|
||||||
}
|
|
||||||
if p2.BeforeSetFlag != 9 {
|
|
||||||
t.Error(fmt.Errorf("BeforeSetFlag is %d not 9", p2.BeforeSetFlag))
|
|
||||||
}
|
|
||||||
if p2.AfterSetFlag != 9 {
|
|
||||||
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test find processors
|
// test find processors
|
||||||
var p2Find []*ProcessorsStruct
|
var p2Find []*ProcessorsStruct
|
||||||
err = testEngine.Find(&p2Find)
|
err = testEngine.Find(&p2Find)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if len(p2Find) != 1 {
|
if len(p2Find) != 1 {
|
||||||
err = errors.New("Should get 1")
|
err = errors.New("Should get 1")
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -229,16 +201,13 @@ func TestProcessors(t *testing.T) {
|
||||||
if p21.AfterSetFlag != 9 {
|
if p21.AfterSetFlag != 9 {
|
||||||
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p21.BeforeSetFlag))
|
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p21.BeforeSetFlag))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test find map processors
|
// test find map processors
|
||||||
var p2FindMap = make(map[int64]*ProcessorsStruct)
|
var p2FindMap = make(map[int64]*ProcessorsStruct)
|
||||||
err = testEngine.Find(&p2FindMap)
|
err = testEngine.Find(&p2FindMap)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if len(p2FindMap) != 1 {
|
if len(p2FindMap) != 1 {
|
||||||
err = errors.New("Should get 1")
|
err = errors.New("Should get 1")
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -266,7 +235,6 @@ func TestProcessors(t *testing.T) {
|
||||||
if p22.AfterSetFlag != 9 {
|
if p22.AfterSetFlag != 9 {
|
||||||
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p22.BeforeSetFlag))
|
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p22.BeforeSetFlag))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test update processors
|
// test update processors
|
||||||
|
@ -289,10 +257,8 @@ func TestProcessors(t *testing.T) {
|
||||||
p = p2 // reset
|
p = p2 // reset
|
||||||
|
|
||||||
_, err = testEngine.Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
_, err = testEngine.Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -305,14 +271,12 @@ func TestProcessors(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt == 0 {
|
if p.AfterUpdatedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
p2 = &ProcessorsStruct{}
|
p2 = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(p.Id).Get(p2)
|
has, err = testEngine.ID(p.Id).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.True(t, has)
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.B4UpdateFlag == 0 {
|
if p2.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -331,7 +295,6 @@ func TestProcessors(t *testing.T) {
|
||||||
if p2.AfterSetFlag != 9 {
|
if p2.AfterSetFlag != 9 {
|
||||||
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test delete processors
|
// test delete processors
|
||||||
|
@ -353,10 +316,7 @@ func TestProcessors(t *testing.T) {
|
||||||
|
|
||||||
p = p2 // reset
|
p = p2 // reset
|
||||||
_, err = testEngine.Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
_, err = testEngine.Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -369,7 +329,6 @@ func TestProcessors(t *testing.T) {
|
||||||
if p.AfterDeletedViaExt == 0 {
|
if p.AfterDeletedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt not set"))
|
t.Error(errors.New("AfterDeletedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test insert multi
|
// test insert multi
|
||||||
|
@ -377,13 +336,9 @@ func TestProcessors(t *testing.T) {
|
||||||
pslice = append(pslice, &ProcessorsStruct{})
|
pslice = append(pslice, &ProcessorsStruct{})
|
||||||
pslice = append(pslice, &ProcessorsStruct{})
|
pslice = append(pslice, &ProcessorsStruct{})
|
||||||
cnt, err := testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(&pslice)
|
cnt, err := testEngine.Before(b4InsertFunc).After(afterInsertFunc).Insert(&pslice)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 2, cnt, "incorrect insert count")
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if cnt != 2 {
|
|
||||||
t.Error(errors.New("incorrect insert count"))
|
|
||||||
}
|
|
||||||
for _, elem := range pslice {
|
for _, elem := range pslice {
|
||||||
if elem.B4InsertFlag == 0 {
|
if elem.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
|
@ -398,15 +353,12 @@ func TestProcessors(t *testing.T) {
|
||||||
t.Error(errors.New("AfterInsertedViaExt not set"))
|
t.Error(errors.New("AfterInsertedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for _, elem := range pslice {
|
for _, elem := range pslice {
|
||||||
p = &ProcessorsStruct{}
|
p = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(elem.Id).Get(p)
|
_, err = testEngine.ID(elem.Id).Get(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.B4InsertFlag == 0 {
|
if p2.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -426,7 +378,6 @@ func TestProcessors(t *testing.T) {
|
||||||
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
t.Error(fmt.Errorf("AfterSetFlag is %d not 9", p2.BeforeSetFlag))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,24 +385,17 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
err := testEngine.DropTables(&ProcessorsStruct{})
|
err := testEngine.DropTables(&ProcessorsStruct{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(&ProcessorsStruct{})
|
err = testEngine.CreateTables(&ProcessorsStruct{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// test insert processors with tx rollback
|
// test insert processors with tx rollback
|
||||||
session := testEngine.NewSession()
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p := &ProcessorsStruct{}
|
p := &ProcessorsStruct{}
|
||||||
b4InsertFunc := func(bean interface{}) {
|
b4InsertFunc := func(bean interface{}) {
|
||||||
|
@ -470,10 +414,8 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
_, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4InsertFlag == 0 {
|
if p.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -486,13 +428,10 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterInsertedViaExt != 0 {
|
if p.AfterInsertedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterInsertedViaExt is set"))
|
t.Error(errors.New("AfterInsertedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
err = session.Rollback()
|
err = session.Rollback()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4InsertFlag == 0 {
|
if p.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -505,36 +444,31 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterInsertedViaExt != 0 {
|
if p.AfterInsertedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterInsertedViaExt is set"))
|
t.Error(errors.New("AfterInsertedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
|
|
||||||
p2 := &ProcessorsStruct{}
|
p2 := &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(p.Id).Get(p2)
|
_, err = testEngine.ID(p.Id).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.Id > 0 {
|
if p2.Id > 0 {
|
||||||
err = errors.New("tx got committed upon insert!?")
|
err = errors.New("tx got committed upon insert!?")
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test insert processors with tx commit
|
// test insert processors with tx commit
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p = &ProcessorsStruct{}
|
p = &ProcessorsStruct{}
|
||||||
_, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
_, err = session.Before(b4InsertFunc).After(afterInsertFunc).Insert(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4InsertFlag == 0 {
|
if p.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -547,13 +481,10 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterInsertedViaExt != 0 {
|
if p.AfterInsertedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterInsertedViaExt is set"))
|
t.Error(errors.New("AfterInsertedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4InsertFlag == 0 {
|
if p.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -566,14 +497,12 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterInsertedViaExt == 0 {
|
if p.AfterInsertedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterInsertedViaExt not set"))
|
t.Error(errors.New("AfterInsertedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
p2 = &ProcessorsStruct{}
|
p2 = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(p.Id).Get(p2)
|
_, err = testEngine.ID(p.Id).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.B4InsertFlag == 0 {
|
if p2.B4InsertFlag == 0 {
|
||||||
t.Error(errors.New("B4InsertFlag not set"))
|
t.Error(errors.New("B4InsertFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -586,17 +515,16 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p2.AfterInsertedViaExt != 0 {
|
if p2.AfterInsertedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterInsertedViaExt is set"))
|
t.Error(errors.New("AfterInsertedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
insertedId := p2.Id
|
insertedId := p2.Id
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test update processors with tx rollback
|
// test update processors with tx rollback
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b4UpdateFunc := func(bean interface{}) {
|
b4UpdateFunc := func(bean interface{}) {
|
||||||
if v, ok := (bean).(*ProcessorsStruct); ok {
|
if v, ok := (bean).(*ProcessorsStruct); ok {
|
||||||
|
@ -617,10 +545,8 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
p = p2 // reset
|
p = p2 // reset
|
||||||
|
|
||||||
_, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
_, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -633,12 +559,10 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt != 0 {
|
if p.AfterUpdatedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Rollback()
|
err = session.Rollback()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -651,16 +575,13 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt != 0 {
|
if p.AfterUpdatedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
session.Close()
|
session.Close()
|
||||||
|
|
||||||
p2 = &ProcessorsStruct{}
|
p2 = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(insertedId).Get(p2)
|
_, err = testEngine.ID(insertedId).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.B4UpdateFlag != 0 {
|
if p2.B4UpdateFlag != 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag is set"))
|
t.Error(errors.New("B4UpdateFlag is set"))
|
||||||
}
|
}
|
||||||
|
@ -673,36 +594,30 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p2.AfterUpdatedViaExt != 0 {
|
if p2.AfterUpdatedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test update processors with tx rollback
|
// test update processors with tx rollback
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p = &ProcessorsStruct{Id: insertedId}
|
p = &ProcessorsStruct{Id: insertedId}
|
||||||
|
|
||||||
_, err = session.Update(p)
|
_, err = session.Update(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
if p.AfterUpdatedFlag != 0 {
|
if p.AfterUpdatedFlag != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedFlag is set"))
|
t.Error(errors.New("AfterUpdatedFlag is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -715,25 +630,21 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterInsertedFlag != 0 {
|
if p.AfterInsertedFlag != 0 {
|
||||||
t.Error(errors.New("AfterInsertedFlag set"))
|
t.Error(errors.New("AfterInsertedFlag set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
session.Close()
|
session.Close()
|
||||||
|
|
||||||
// test update processors with tx commit
|
// test update processors with tx commit
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p = &ProcessorsStruct{}
|
p = &ProcessorsStruct{}
|
||||||
|
|
||||||
_, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
_, err = session.ID(insertedId).Before(b4UpdateFunc).After(afterUpdateFunc).Update(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -746,12 +657,10 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt != 0 {
|
if p.AfterUpdatedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
t.Error(errors.New("AfterUpdatedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -764,14 +673,12 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt == 0 {
|
if p.AfterUpdatedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
p2 = &ProcessorsStruct{}
|
p2 = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(insertedId).Get(p2)
|
_, err = testEngine.ID(insertedId).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4UpdateFlag == 0 {
|
if p.B4UpdateFlag == 0 {
|
||||||
t.Error(errors.New("B4UpdateFlag not set"))
|
t.Error(errors.New("B4UpdateFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -784,16 +691,14 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedViaExt == 0 {
|
if p.AfterUpdatedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
t.Error(errors.New("AfterUpdatedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test delete processors with tx rollback
|
// test delete processors with tx rollback
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b4DeleteFunc := func(bean interface{}) {
|
b4DeleteFunc := func(bean interface{}) {
|
||||||
if v, ok := (bean).(*ProcessorsStruct); ok {
|
if v, ok := (bean).(*ProcessorsStruct); ok {
|
||||||
|
@ -814,10 +719,8 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
p = &ProcessorsStruct{} // reset
|
p = &ProcessorsStruct{} // reset
|
||||||
|
|
||||||
_, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
_, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -830,12 +733,9 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterDeletedViaExt != 0 {
|
if p.AfterDeletedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt is set"))
|
t.Error(errors.New("AfterDeletedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Rollback()
|
err = session.Rollback()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -848,15 +748,13 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterDeletedViaExt != 0 {
|
if p.AfterDeletedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt is set"))
|
t.Error(errors.New("AfterDeletedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
|
|
||||||
p2 = &ProcessorsStruct{}
|
p2 = &ProcessorsStruct{}
|
||||||
_, err = testEngine.ID(insertedId).Get(p2)
|
_, err = testEngine.ID(insertedId).Get(p2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p2.B4DeleteFlag != 0 {
|
if p2.B4DeleteFlag != 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag is set"))
|
t.Error(errors.New("B4DeleteFlag is set"))
|
||||||
}
|
}
|
||||||
|
@ -869,24 +767,20 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p2.AfterDeletedViaExt != 0 {
|
if p2.AfterDeletedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt is set"))
|
t.Error(errors.New("AfterDeletedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// --
|
// --
|
||||||
|
|
||||||
// test delete processors with tx commit
|
// test delete processors with tx commit
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p = &ProcessorsStruct{}
|
p = &ProcessorsStruct{}
|
||||||
|
|
||||||
_, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
_, err = session.ID(insertedId).Before(b4DeleteFunc).After(afterDeleteFunc).Delete(p)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -899,12 +793,10 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterDeletedViaExt != 0 {
|
if p.AfterDeletedViaExt != 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt is set"))
|
t.Error(errors.New("AfterDeletedViaExt is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -917,37 +809,30 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterDeletedViaExt == 0 {
|
if p.AfterDeletedViaExt == 0 {
|
||||||
t.Error(errors.New("AfterDeletedViaExt not set"))
|
t.Error(errors.New("AfterDeletedViaExt not set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
|
|
||||||
// test delete processors with tx commit
|
// test delete processors with tx commit
|
||||||
session = testEngine.NewSession()
|
session = testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
err = session.Begin()
|
err = session.Begin()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p = &ProcessorsStruct{Id: insertedId}
|
p = &ProcessorsStruct{Id: insertedId}
|
||||||
fmt.Println("delete")
|
|
||||||
_, err = session.Delete(p)
|
_, err = session.Delete(p)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
if p.AfterDeletedFlag != 0 {
|
if p.AfterDeletedFlag != 0 {
|
||||||
t.Error(errors.New("AfterDeletedFlag is set"))
|
t.Error(errors.New("AfterDeletedFlag is set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
err = session.Commit()
|
err = session.Commit()
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
if p.B4DeleteFlag == 0 {
|
if p.B4DeleteFlag == 0 {
|
||||||
t.Error(errors.New("B4DeleteFlag not set"))
|
t.Error(errors.New("B4DeleteFlag not set"))
|
||||||
}
|
}
|
||||||
|
@ -960,7 +845,6 @@ func TestProcessorsTx(t *testing.T) {
|
||||||
if p.AfterUpdatedFlag != 0 {
|
if p.AfterUpdatedFlag != 0 {
|
||||||
t.Error(errors.New("AfterUpdatedFlag set"))
|
t.Error(errors.New("AfterUpdatedFlag set"))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
session.Close()
|
session.Close()
|
||||||
// --
|
// --
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-xorm/core"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,11 +22,27 @@ func TestDelete(t *testing.T) {
|
||||||
|
|
||||||
assert.NoError(t, testEngine.Sync2(new(UserinfoDelete)))
|
assert.NoError(t, testEngine.Sync2(new(UserinfoDelete)))
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
var err error
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Begin()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = session.Exec("SET IDENTITY_INSERT userinfo_delete ON")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
user := UserinfoDelete{Uid: 1}
|
user := UserinfoDelete{Uid: 1}
|
||||||
cnt, err := testEngine.Insert(&user)
|
cnt, err := session.Insert(&user)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
cnt, err = testEngine.Delete(&UserinfoDelete{Uid: user.Uid})
|
cnt, err = testEngine.Delete(&UserinfoDelete{Uid: user.Uid})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
@ -40,7 +57,7 @@ func TestDelete(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
cnt, err = testEngine.Where("id=?", user.Uid).Delete(&UserinfoDelete{})
|
cnt, err = testEngine.Where("`id`=?", user.Uid).Delete(&UserinfoDelete{})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,14 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if session.engine.dialect.DBType() == core.MSSQL {
|
if session.engine.dialect.DBType() == core.MSSQL {
|
||||||
sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s WHERE %s", tableName, condSQL)
|
sqlStr = fmt.Sprintf("SELECT TOP 1 * FROM %s WHERE %s", tableName, condSQL)
|
||||||
} else {
|
} else {
|
||||||
sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL)
|
sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL)
|
||||||
}
|
}
|
||||||
args = condArgs
|
args = condArgs
|
||||||
} else {
|
} else {
|
||||||
if session.engine.dialect.DBType() == core.MSSQL {
|
if session.engine.dialect.DBType() == core.MSSQL {
|
||||||
sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s", tableName)
|
sqlStr = fmt.Sprintf("SELECT TOP 1 * FROM %s", tableName)
|
||||||
} else {
|
} else {
|
||||||
sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName)
|
sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName)
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,11 @@ func TestGetVar(t *testing.T) {
|
||||||
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money))
|
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money))
|
||||||
|
|
||||||
var money2 float64
|
var money2 float64
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
has, err = testEngine.SQL("SELECT TOP 1 money FROM " + testEngine.TableName("get_var", true)).Get(&money2)
|
||||||
|
} else {
|
||||||
has, err = testEngine.SQL("SELECT money FROM " + testEngine.TableName("get_var", true) + " LIMIT 1").Get(&money2)
|
has, err = testEngine.SQL("SELECT money FROM " + testEngine.TableName("get_var", true) + " LIMIT 1").Get(&money2)
|
||||||
|
}
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, true, has)
|
assert.Equal(t, true, has)
|
||||||
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money2))
|
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money2))
|
||||||
|
@ -156,14 +160,23 @@ func TestGetStruct(t *testing.T) {
|
||||||
|
|
||||||
assert.NoError(t, testEngine.Sync2(new(UserinfoGet)))
|
assert.NoError(t, testEngine.Sync2(new(UserinfoGet)))
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
if testEngine.Dialect().DBType() == core.MSSQL {
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
_, err = testEngine.Exec("SET IDENTITY_INSERT userinfo_get ON")
|
err = session.Begin()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = session.Exec("SET IDENTITY_INSERT userinfo_get ON")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
cnt, err := testEngine.Insert(&UserinfoGet{Uid: 2})
|
cnt, err := session.Insert(&UserinfoGet{Uid: 2})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, cnt)
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
user := UserinfoGet{Uid: 2}
|
user := UserinfoGet{Uid: 2}
|
||||||
has, err := testEngine.Get(&user)
|
has, err := testEngine.Get(&user)
|
||||||
|
|
|
@ -373,21 +373,30 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
|
|
||||||
var sqlStr string
|
var sqlStr string
|
||||||
var tableName = session.statement.TableName()
|
var tableName = session.statement.TableName()
|
||||||
|
var output string
|
||||||
|
if session.engine.dialect.DBType() == core.MSSQL && len(table.AutoIncrement) > 0 {
|
||||||
|
output = fmt.Sprintf(" OUTPUT Inserted.%s", table.AutoIncrement)
|
||||||
|
}
|
||||||
if len(colPlaces) > 0 {
|
if len(colPlaces) > 0 {
|
||||||
sqlStr = fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)",
|
sqlStr = fmt.Sprintf("INSERT INTO %s (%v%v%v)%s VALUES (%v)",
|
||||||
session.engine.Quote(tableName),
|
session.engine.Quote(tableName),
|
||||||
session.engine.QuoteStr(),
|
session.engine.QuoteStr(),
|
||||||
strings.Join(colNames, session.engine.Quote(", ")),
|
strings.Join(colNames, session.engine.Quote(", ")),
|
||||||
session.engine.QuoteStr(),
|
session.engine.QuoteStr(),
|
||||||
|
output,
|
||||||
colPlaces)
|
colPlaces)
|
||||||
} else {
|
} else {
|
||||||
if session.engine.dialect.DBType() == core.MYSQL {
|
if session.engine.dialect.DBType() == core.MYSQL {
|
||||||
sqlStr = fmt.Sprintf("INSERT INTO %s VALUES ()", session.engine.Quote(tableName))
|
sqlStr = fmt.Sprintf("INSERT INTO %s VALUES ()", session.engine.Quote(tableName))
|
||||||
} else {
|
} else {
|
||||||
sqlStr = fmt.Sprintf("INSERT INTO %s DEFAULT VALUES", session.engine.Quote(tableName))
|
sqlStr = fmt.Sprintf("INSERT INTO %s%s DEFAULT VALUES", session.engine.Quote(tableName), output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(table.AutoIncrement) > 0 && session.engine.dialect.DBType() == core.POSTGRES {
|
||||||
|
sqlStr = sqlStr + " RETURNING " + session.engine.Quote(table.AutoIncrement)
|
||||||
|
}
|
||||||
|
|
||||||
handleAfterInsertProcessorFunc := func(bean interface{}) {
|
handleAfterInsertProcessorFunc := func(bean interface{}) {
|
||||||
if session.isAutoCommit {
|
if session.isAutoCommit {
|
||||||
for _, closure := range session.afterClosures {
|
for _, closure := range session.afterClosures {
|
||||||
|
@ -459,9 +468,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
aiValue.Set(int64ToIntValue(id, aiValue.Type()))
|
aiValue.Set(int64ToIntValue(id, aiValue.Type()))
|
||||||
|
|
||||||
return 1, nil
|
return 1, nil
|
||||||
} else if session.engine.dialect.DBType() == core.POSTGRES && len(table.AutoIncrement) > 0 {
|
} else if len(table.AutoIncrement) > 0 && (session.engine.dialect.DBType() == core.POSTGRES || session.engine.dialect.DBType() == core.MSSQL) {
|
||||||
//assert table.AutoIncrement != ""
|
|
||||||
sqlStr = sqlStr + " RETURNING " + session.engine.Quote(table.AutoIncrement)
|
|
||||||
res, err := session.queryBytes(sqlStr, args...)
|
res, err := session.queryBytes(sqlStr, args...)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -481,7 +488,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(res) < 1 {
|
if len(res) < 1 {
|
||||||
return 0, errors.New("insert no error but not returned id")
|
return 0, errors.New("insert successfully but not returned id")
|
||||||
}
|
}
|
||||||
|
|
||||||
idByte := res[0][table.AutoIncrement]
|
idByte := res[0][table.AutoIncrement]
|
||||||
|
@ -660,6 +667,10 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) insertMapInterface(m map[string]interface{}) (int64, error) {
|
func (session *Session) insertMapInterface(m map[string]interface{}) (int64, error) {
|
||||||
|
if len(m) == 0 {
|
||||||
|
return 0, ErrParamsType
|
||||||
|
}
|
||||||
|
|
||||||
var columns = make([]string, 0, len(m))
|
var columns = make([]string, 0, len(m))
|
||||||
for k := range m {
|
for k := range m {
|
||||||
columns = append(columns, k)
|
columns = append(columns, k)
|
||||||
|
@ -669,8 +680,12 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
|
||||||
qm := strings.Repeat("?,", len(columns))
|
qm := strings.Repeat("?,", len(columns))
|
||||||
qm = "(" + qm[:len(qm)-1] + ")"
|
qm = "(" + qm[:len(qm)-1] + ")"
|
||||||
|
|
||||||
tableName := session.statement.AltTableName
|
tableName := session.statement.TableName()
|
||||||
var sql = "INSERT INTO `" + tableName + "` (`" + strings.Join(columns, "`,`") + "`) VALUES " + qm
|
if len(tableName) <= 0 {
|
||||||
|
return 0, ErrTableNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
var sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES %s", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)
|
||||||
var args = make([]interface{}, 0, len(m))
|
var args = make([]interface{}, 0, len(m))
|
||||||
for _, colName := range columns {
|
for _, colName := range columns {
|
||||||
args = append(args, m[colName])
|
args = append(args, m[colName])
|
||||||
|
@ -692,6 +707,10 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) insertMapString(m map[string]string) (int64, error) {
|
func (session *Session) insertMapString(m map[string]string) (int64, error) {
|
||||||
|
if len(m) == 0 {
|
||||||
|
return 0, ErrParamsType
|
||||||
|
}
|
||||||
|
|
||||||
var columns = make([]string, 0, len(m))
|
var columns = make([]string, 0, len(m))
|
||||||
for k := range m {
|
for k := range m {
|
||||||
columns = append(columns, k)
|
columns = append(columns, k)
|
||||||
|
@ -701,8 +720,12 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
|
||||||
qm := strings.Repeat("?,", len(columns))
|
qm := strings.Repeat("?,", len(columns))
|
||||||
qm = "(" + qm[:len(qm)-1] + ")"
|
qm = "(" + qm[:len(qm)-1] + ")"
|
||||||
|
|
||||||
tableName := session.statement.AltTableName
|
tableName := session.statement.TableName()
|
||||||
var sql = "INSERT INTO `" + tableName + "` (`" + strings.Join(columns, "`,`") + "`) VALUES " + qm
|
if len(tableName) <= 0 {
|
||||||
|
return 0, ErrTableNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
var sql = fmt.Sprintf("INSERT INTO %s (`%s`) VALUES %s", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)
|
||||||
var args = make([]interface{}, 0, len(m))
|
var args = make([]interface{}, 0, len(m))
|
||||||
for _, colName := range columns {
|
for _, colName := range columns {
|
||||||
args = append(args, m[colName])
|
args = append(args, m[colName])
|
||||||
|
|
|
@ -145,41 +145,22 @@ func TestInsert(t *testing.T) {
|
||||||
user := Userinfo{0, "xiaolunwen", "dev", "lunny", time.Now(),
|
user := Userinfo{0, "xiaolunwen", "dev", "lunny", time.Now(),
|
||||||
Userdetail{Id: 1}, 1.78, []byte{1, 2, 3}, true}
|
Userdetail{Id: 1}, 1.78, []byte{1, 2, 3}, true}
|
||||||
cnt, err := testEngine.Insert(&user)
|
cnt, err := testEngine.Insert(&user)
|
||||||
fmt.Println(user.Uid)
|
assert.NoError(t, err)
|
||||||
if err != nil {
|
assert.EqualValues(t, 1, cnt, "insert not returned 1")
|
||||||
t.Error(err)
|
assert.True(t, user.Uid > 0, "not return id error")
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if cnt != 1 {
|
|
||||||
err = errors.New("insert not returned 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.Uid <= 0 {
|
|
||||||
err = errors.New("not return id error")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
user.Uid = 0
|
user.Uid = 0
|
||||||
cnt, err = testEngine.Insert(&user)
|
cnt, err = testEngine.Insert(&user)
|
||||||
|
// Username is unique, so this should return error
|
||||||
|
assert.Error(t, err, "insert should fail but no error returned")
|
||||||
|
assert.EqualValues(t, 0, cnt, "insert not returned 1")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = errors.New("insert failed but no return error")
|
panic("should return err")
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if cnt != 0 {
|
|
||||||
err = errors.New("insert not returned 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInsertAutoIncr(t *testing.T) {
|
func TestInsertAutoIncr(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
assertSync(t, new(Userinfo))
|
assertSync(t, new(Userinfo))
|
||||||
|
|
||||||
// auto increment insert
|
// auto increment insert
|
||||||
|
@ -214,20 +195,14 @@ func TestInsertDefault(t *testing.T) {
|
||||||
|
|
||||||
di := new(DefaultInsert)
|
di := new(DefaultInsert)
|
||||||
err := testEngine.Sync2(di)
|
err := testEngine.Sync2(di)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var di2 = DefaultInsert{Name: "test"}
|
var di2 = DefaultInsert{Name: "test"}
|
||||||
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("Status")).Insert(&di2)
|
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("Status")).Insert(&di2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
has, err := testEngine.Desc("(id)").Get(di)
|
has, err := testEngine.Desc("(id)").Get(di)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if !has {
|
if !has {
|
||||||
err = errors.New("error with no data")
|
err = errors.New("error with no data")
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
|
|
@ -207,7 +207,7 @@ func TestQueryStringNoParam(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, len(records))
|
assert.EqualValues(t, 1, len(records))
|
||||||
assert.EqualValues(t, "1", records[0]["id"])
|
assert.EqualValues(t, "1", records[0]["id"])
|
||||||
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
assert.EqualValues(t, "false", records[0]["msg"])
|
assert.EqualValues(t, "false", records[0]["msg"])
|
||||||
} else {
|
} else {
|
||||||
assert.EqualValues(t, "0", records[0]["msg"])
|
assert.EqualValues(t, "0", records[0]["msg"])
|
||||||
|
@ -217,7 +217,7 @@ func TestQueryStringNoParam(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, len(records))
|
assert.EqualValues(t, 1, len(records))
|
||||||
assert.EqualValues(t, "1", records[0]["id"])
|
assert.EqualValues(t, "1", records[0]["id"])
|
||||||
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
assert.EqualValues(t, "false", records[0]["msg"])
|
assert.EqualValues(t, "false", records[0]["msg"])
|
||||||
} else {
|
} else {
|
||||||
assert.EqualValues(t, "0", records[0]["msg"])
|
assert.EqualValues(t, "0", records[0]["msg"])
|
||||||
|
@ -244,7 +244,7 @@ func TestQuerySliceStringNoParam(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, len(records))
|
assert.EqualValues(t, 1, len(records))
|
||||||
assert.EqualValues(t, "1", records[0][0])
|
assert.EqualValues(t, "1", records[0][0])
|
||||||
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
assert.EqualValues(t, "false", records[0][1])
|
assert.EqualValues(t, "false", records[0][1])
|
||||||
} else {
|
} else {
|
||||||
assert.EqualValues(t, "0", records[0][1])
|
assert.EqualValues(t, "0", records[0][1])
|
||||||
|
@ -254,7 +254,7 @@ func TestQuerySliceStringNoParam(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, len(records))
|
assert.EqualValues(t, 1, len(records))
|
||||||
assert.EqualValues(t, "1", records[0][0])
|
assert.EqualValues(t, "1", records[0][0])
|
||||||
if testEngine.Dialect().URI().DbType == core.POSTGRES {
|
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
assert.EqualValues(t, "false", records[0][1])
|
assert.EqualValues(t, "false", records[0][1])
|
||||||
} else {
|
} else {
|
||||||
assert.EqualValues(t, "0", records[0][1])
|
assert.EqualValues(t, "0", records[0][1])
|
||||||
|
|
|
@ -60,63 +60,37 @@ func TestExtends(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
err := testEngine.DropTables(&tempUser2{})
|
err := testEngine.DropTables(&tempUser2{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(&tempUser2{})
|
err = testEngine.CreateTables(&tempUser2{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu := &tempUser2{tempUser{0, "extends"}, "dev depart"}
|
tu := &tempUser2{tempUser{0, "extends"}, "dev depart"}
|
||||||
_, err = testEngine.Insert(tu)
|
_, err = testEngine.Insert(tu)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu2 := &tempUser2{}
|
tu2 := &tempUser2{}
|
||||||
_, err = testEngine.Get(tu2)
|
_, err = testEngine.Get(tu2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu3 := &tempUser2{tempUser{0, "extends update"}, ""}
|
tu3 := &tempUser2{tempUser{0, "extends update"}, ""}
|
||||||
_, err = testEngine.ID(tu2.TempUser.Id).Update(tu3)
|
_, err = testEngine.ID(tu2.TempUser.Id).Update(tu3)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.DropTables(&tempUser4{})
|
err = testEngine.DropTables(&tempUser4{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(&tempUser4{})
|
err = testEngine.CreateTables(&tempUser4{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu8 := &tempUser4{tempUser2{tempUser{0, "extends"}, "dev depart"}}
|
tu8 := &tempUser4{tempUser2{tempUser{0, "extends"}, "dev depart"}}
|
||||||
_, err = testEngine.Insert(tu8)
|
_, err = testEngine.Insert(tu8)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu9 := &tempUser4{}
|
tu9 := &tempUser4{}
|
||||||
_, err = testEngine.Get(tu9)
|
_, err = testEngine.Get(tu9)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if tu9.TempUser2.TempUser.Username != tu8.TempUser2.TempUser.Username || tu9.TempUser2.Departname != tu8.TempUser2.Departname {
|
if tu9.TempUser2.TempUser.Username != tu8.TempUser2.TempUser.Username || tu9.TempUser2.Departname != tu8.TempUser2.Departname {
|
||||||
err = errors.New(fmt.Sprintln("not equal for", tu8, tu9))
|
err = errors.New(fmt.Sprintln("not equal for", tu8, tu9))
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -125,36 +99,22 @@ func TestExtends(t *testing.T) {
|
||||||
|
|
||||||
tu10 := &tempUser4{tempUser2{tempUser{0, "extends update"}, ""}}
|
tu10 := &tempUser4{tempUser2{tempUser{0, "extends update"}, ""}}
|
||||||
_, err = testEngine.ID(tu9.TempUser2.TempUser.Id).Update(tu10)
|
_, err = testEngine.ID(tu9.TempUser2.TempUser.Id).Update(tu10)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.DropTables(&tempUser3{})
|
err = testEngine.DropTables(&tempUser3{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(&tempUser3{})
|
err = testEngine.CreateTables(&tempUser3{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu4 := &tempUser3{&tempUser{0, "extends"}, "dev depart"}
|
tu4 := &tempUser3{&tempUser{0, "extends"}, "dev depart"}
|
||||||
_, err = testEngine.Insert(tu4)
|
_, err = testEngine.Insert(tu4)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
tu5 := &tempUser3{}
|
tu5 := &tempUser3{}
|
||||||
_, err = testEngine.Get(tu5)
|
_, err = testEngine.Get(tu5)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if tu5.Temp == nil {
|
if tu5.Temp == nil {
|
||||||
err = errors.New("error get data extends")
|
err = errors.New("error get data extends")
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
@ -169,22 +129,12 @@ func TestExtends(t *testing.T) {
|
||||||
|
|
||||||
tu6 := &tempUser3{&tempUser{0, "extends update"}, ""}
|
tu6 := &tempUser3{&tempUser{0, "extends update"}, ""}
|
||||||
_, err = testEngine.ID(tu5.Temp.Id).Update(tu6)
|
_, err = testEngine.ID(tu5.Temp.Id).Update(tu6)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
users := make([]tempUser3, 0)
|
users := make([]tempUser3, 0)
|
||||||
err = testEngine.Find(&users)
|
err = testEngine.Find(&users)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 1, len(users), "error get data not 1")
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if len(users) != 1 {
|
|
||||||
err = errors.New("error get data not 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
assertSync(t, new(Userinfo), new(Userdetail))
|
assertSync(t, new(Userinfo), new(Userdetail))
|
||||||
|
|
||||||
|
@ -249,10 +199,7 @@ func TestExtends(t *testing.T) {
|
||||||
Join("LEFT", qt(ud), qt(ui)+"."+qt("detail_id")+" = "+qt(ud)+"."+qt(uiid)).
|
Join("LEFT", qt(ud), qt(ui)+"."+qt("detail_id")+" = "+qt(ud)+"."+qt(uiid)).
|
||||||
NoCascade().
|
NoCascade().
|
||||||
Find(&infos2)
|
Find(&infos2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
fmt.Println(infos2)
|
fmt.Println(infos2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,25 +244,16 @@ func TestExtends2(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
err := testEngine.DropTables(&Message{}, &MessageUser{}, &MessageType{})
|
err := testEngine.DropTables(&Message{}, &MessageUser{}, &MessageType{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(&Message{}, &MessageUser{}, &MessageType{})
|
err = testEngine.CreateTables(&Message{}, &MessageUser{}, &MessageType{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var sender = MessageUser{Name: "sender"}
|
var sender = MessageUser{Name: "sender"}
|
||||||
var receiver = MessageUser{Name: "receiver"}
|
var receiver = MessageUser{Name: "receiver"}
|
||||||
var msgtype = MessageType{Name: "type"}
|
var msgtype = MessageType{Name: "type"}
|
||||||
_, err = testEngine.Insert(&sender, &receiver, &msgtype)
|
_, err = testEngine.Insert(&sender, &receiver, &msgtype)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
msg := Message{
|
msg := Message{
|
||||||
MessageBase: MessageBase{
|
MessageBase: MessageBase{
|
||||||
|
@ -326,15 +264,24 @@ func TestExtends2(t *testing.T) {
|
||||||
Uid: sender.Id,
|
Uid: sender.Id,
|
||||||
ToUid: receiver.Id,
|
ToUid: receiver.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
// MSSQL deny insert identity column excep declare as below
|
||||||
if testEngine.Dialect().DBType() == core.MSSQL {
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
_, err = testEngine.Exec("SET IDENTITY_INSERT message ON")
|
err = session.Begin()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = session.Exec("SET IDENTITY_INSERT message ON")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
cnt, err := session.Insert(&msg)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
_, err = testEngine.Insert(&msg)
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
if err != nil {
|
err = session.Commit()
|
||||||
t.Error(err)
|
assert.NoError(t, err)
|
||||||
panic(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapper = testEngine.GetTableMapper().Obj2Table
|
var mapper = testEngine.GetTableMapper().Obj2Table
|
||||||
|
@ -344,23 +291,14 @@ func TestExtends2(t *testing.T) {
|
||||||
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
||||||
|
|
||||||
list := make([]Message, 0)
|
list := make([]Message, 0)
|
||||||
err = testEngine.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
err = session.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
||||||
Join("LEFT", []string{userTableName, "receiver"}, "`receiver`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("ToUid")+"`").
|
Join("LEFT", []string{userTableName, "receiver"}, "`receiver`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("ToUid")+"`").
|
||||||
Join("LEFT", []string{typeTableName, "type"}, "`type`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
Join("LEFT", []string{typeTableName, "type"}, "`type`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
||||||
Find(&list)
|
Find(&list)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
if len(list) != 1 {
|
assert.EqualValues(t, 1, len(list), fmt.Sprintln("should have 1 message, got", len(list)))
|
||||||
err = errors.New(fmt.Sprintln("should have 1 message, got", len(list)))
|
assert.EqualValues(t, msg.Id, list[0].Id, fmt.Sprintln("should message equal", list[0], msg))
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if list[0].Id != msg.Id {
|
|
||||||
err = errors.New(fmt.Sprintln("should message equal", list[0], msg))
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExtends3(t *testing.T) {
|
func TestExtends3(t *testing.T) {
|
||||||
|
@ -396,13 +334,25 @@ func TestExtends3(t *testing.T) {
|
||||||
Uid: sender.Id,
|
Uid: sender.Id,
|
||||||
ToUid: receiver.Id,
|
ToUid: receiver.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
// MSSQL deny insert identity column excep declare as below
|
||||||
if testEngine.Dialect().DBType() == core.MSSQL {
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
_, err = testEngine.Exec("SET IDENTITY_INSERT message ON")
|
err = session.Begin()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = session.Exec("SET IDENTITY_INSERT message ON")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
_, err = testEngine.Insert(&msg)
|
_, err = session.Insert(&msg)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
var mapper = testEngine.GetTableMapper().Obj2Table
|
var mapper = testEngine.GetTableMapper().Obj2Table
|
||||||
var quote = testEngine.Quote
|
var quote = testEngine.Quote
|
||||||
userTableName := quote(testEngine.TableName(mapper("MessageUser"), true))
|
userTableName := quote(testEngine.TableName(mapper("MessageUser"), true))
|
||||||
|
@ -410,7 +360,7 @@ func TestExtends3(t *testing.T) {
|
||||||
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
||||||
|
|
||||||
list := make([]MessageExtend3, 0)
|
list := make([]MessageExtend3, 0)
|
||||||
err = testEngine.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
err = session.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
||||||
Join("LEFT", []string{userTableName, "receiver"}, "`receiver`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("ToUid")+"`").
|
Join("LEFT", []string{userTableName, "receiver"}, "`receiver`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("ToUid")+"`").
|
||||||
Join("LEFT", []string{typeTableName, "type"}, "`type`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
Join("LEFT", []string{typeTableName, "type"}, "`type`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
||||||
Find(&list)
|
Find(&list)
|
||||||
|
@ -478,14 +428,23 @@ func TestExtends4(t *testing.T) {
|
||||||
Content: "test",
|
Content: "test",
|
||||||
Uid: sender.Id,
|
Uid: sender.Id,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
|
// MSSQL deny insert identity column excep declare as below
|
||||||
if testEngine.Dialect().DBType() == core.MSSQL {
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
_, err = testEngine.Exec("SET IDENTITY_INSERT message ON")
|
err = session.Begin()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = session.Exec("SET IDENTITY_INSERT message ON")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
_, err = testEngine.Insert(&msg)
|
_, err = session.Insert(&msg)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapper = testEngine.GetTableMapper().Obj2Table
|
var mapper = testEngine.GetTableMapper().Obj2Table
|
||||||
|
@ -495,7 +454,7 @@ func TestExtends4(t *testing.T) {
|
||||||
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
|
||||||
|
|
||||||
list := make([]MessageExtend4, 0)
|
list := make([]MessageExtend4, 0)
|
||||||
err = testEngine.Table(msgTableName).Join("LEFT", userTableName, userTableName+".`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
err = session.Table(msgTableName).Join("LEFT", userTableName, userTableName+".`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
|
||||||
Join("LEFT", typeTableName, typeTableName+".`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
Join("LEFT", typeTableName, typeTableName+".`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Id")+"`").
|
||||||
Find(&list)
|
Find(&list)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
go test -db=mssql -conn_str="server=192.168.1.58;user id=sa;password=123456;database=xorm_test"
|
go test -db=mssql -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test"
|
4
types.go
4
types.go
|
@ -1,3 +1,7 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -309,16 +309,24 @@ func TestCustomType2(t *testing.T) {
|
||||||
_, err = testEngine.Exec("delete from " + testEngine.Quote(tableName))
|
_, err = testEngine.Exec("delete from " + testEngine.Quote(tableName))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
session := testEngine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
|
||||||
if testEngine.Dialect().DBType() == core.MSSQL {
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
return
|
err = session.Begin()
|
||||||
/*_, err = engine.Exec("set IDENTITY_INSERT " + tableName + " on")
|
assert.NoError(t, err)
|
||||||
if err != nil {
|
_, err = session.Exec("set IDENTITY_INSERT " + tableName + " on")
|
||||||
t.Fatal(err)
|
assert.NoError(t, err)
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = testEngine.Insert(&UserCus{1, "xlw", Registed})
|
cnt, err := session.Insert(&UserCus{1, "xlw", Registed})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
if testEngine.Dialect().DBType() == core.MSSQL {
|
||||||
|
err = session.Commit()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
user := UserCus{}
|
user := UserCus{}
|
||||||
exist, err := testEngine.ID(1).Get(&user)
|
exist, err := testEngine.ID(1).Get(&user)
|
||||||
|
|
52
xorm_test.go
52
xorm_test.go
|
@ -1,8 +1,14 @@
|
||||||
|
// Copyright 2018 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.
|
||||||
|
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -35,6 +41,48 @@ func createEngine(dbType, connStr string) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if !*cluster {
|
if !*cluster {
|
||||||
|
// create databases if not exist
|
||||||
|
var db *sql.DB
|
||||||
|
var err error
|
||||||
|
if strings.ToLower(dbType) != core.MSSQL {
|
||||||
|
db, err = sql.Open(dbType, connStr)
|
||||||
|
} else {
|
||||||
|
db, err = sql.Open(dbType, strings.Replace(connStr, "xorm_test", "master", -1))
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch strings.ToLower(dbType) {
|
||||||
|
case core.MSSQL:
|
||||||
|
if _, err = db.Exec("If(db_id(N'xorm_test') IS NULL) BEGIN CREATE DATABASE xorm_test; END;"); err != nil {
|
||||||
|
return fmt.Errorf("db.Exec: %v", err)
|
||||||
|
}
|
||||||
|
case core.POSTGRES:
|
||||||
|
rows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = 'xorm_test'"))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("db.Query: %v", err)
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
if !rows.Next() {
|
||||||
|
if _, err = db.Exec("CREATE DATABASE xorm_test"); err != nil {
|
||||||
|
return fmt.Errorf("CREATE DATABASE: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if *schema != "" {
|
||||||
|
if _, err = db.Exec("CREATE SCHEMA IF NOT EXISTS " + *schema); err != nil {
|
||||||
|
return fmt.Errorf("CREATE SCHEMA: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case core.MYSQL:
|
||||||
|
if _, err = db.Exec("CREATE DATABASE IF NOT EXISTS xorm_test"); err != nil {
|
||||||
|
return fmt.Errorf("db.Exec: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db.Close()
|
||||||
|
|
||||||
testEngine, err = NewEngine(dbType, connStr)
|
testEngine, err = NewEngine(dbType, connStr)
|
||||||
} else {
|
} else {
|
||||||
testEngine, err = NewEngineGroup(dbType, strings.Split(connStr, *splitter))
|
testEngine, err = NewEngineGroup(dbType, strings.Split(connStr, *splitter))
|
||||||
|
@ -95,7 +143,7 @@ func TestMain(m *testing.M) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ptrConnStr == nil {
|
if ptrConnStr == nil {
|
||||||
fmt.Println("you should indicate conn string")
|
log.Fatal("you should indicate conn string")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
connString = *ptrConnStr
|
connString = *ptrConnStr
|
||||||
|
@ -112,7 +160,7 @@ func TestMain(m *testing.M) {
|
||||||
fmt.Println("testing", dbType, connString)
|
fmt.Println("testing", dbType, connString)
|
||||||
|
|
||||||
if err := prepareEngine(); err != nil {
|
if err := prepareEngine(); err != nil {
|
||||||
fmt.Println(err)
|
log.Fatal(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue