Delete Limit with start will return error because it's not supported by database (#1895)
Fix #1894 Reviewed-on: https://gitea.com/xorm/xorm/pulls/1895
This commit is contained in:
parent
12ec038853
commit
47003ff937
|
@ -43,6 +43,7 @@ jobs:
|
|||
TEST_COCKROACH_DBNAME: xorm_test
|
||||
TEST_COCKROACH_USERNAME: root
|
||||
TEST_COCKROACH_PASSWORD:
|
||||
IGNORE_TEST_DELETE_LIMIT: true
|
||||
run: sleep 20 && make test-cockroach
|
||||
|
||||
services:
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
package integrations
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -70,6 +71,63 @@ func TestDelete(t *testing.T) {
|
|||
assert.False(t, has)
|
||||
}
|
||||
|
||||
func TestDeleteLimit(t *testing.T) {
|
||||
assert.NoError(t, PrepareEngine())
|
||||
|
||||
if testEngine.Dialect().URI().DBType == schemas.MSSQL || os.Getenv("IGNORE_TEST_DELETE_LIMIT") == "true" {
|
||||
t.Skip()
|
||||
return
|
||||
}
|
||||
|
||||
type UserinfoDeleteLimit struct {
|
||||
Uid int64 `xorm:"id pk not null autoincr"`
|
||||
IsMan bool
|
||||
}
|
||||
|
||||
assert.NoError(t, testEngine.Sync2(new(UserinfoDeleteLimit)))
|
||||
|
||||
session := testEngine.NewSession()
|
||||
defer session.Close()
|
||||
|
||||
var err error
|
||||
if testEngine.Dialect().URI().DBType == schemas.MSSQL {
|
||||
err = session.Begin()
|
||||
assert.NoError(t, err)
|
||||
_, err = session.Exec("SET IDENTITY_INSERT userinfo_delete_limit ON")
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
user := UserinfoDeleteLimit{Uid: 1, IsMan: true}
|
||||
cnt, err := session.Insert(&user)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
user2 := UserinfoDeleteLimit{Uid: 2}
|
||||
cnt, err = session.Insert(&user2)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
if testEngine.Dialect().URI().DBType == schemas.MSSQL {
|
||||
err = session.Commit()
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
cnt, err = testEngine.Limit(1, 1).Delete(&UserinfoDeleteLimit{})
|
||||
assert.Error(t, err)
|
||||
assert.EqualValues(t, 0, cnt)
|
||||
|
||||
cnt, err = testEngine.Limit(1).Desc("id").Delete(&UserinfoDeleteLimit{})
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var users []UserinfoDeleteLimit
|
||||
err = testEngine.Find(&users)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, len(users))
|
||||
assert.EqualValues(t, 1, users[0].Uid)
|
||||
assert.EqualValues(t, true, users[0].IsMan)
|
||||
}
|
||||
|
||||
func TestDeleted(t *testing.T) {
|
||||
assert.NoError(t, PrepareEngine())
|
||||
|
||||
|
|
|
@ -20,6 +20,9 @@ func (statement *Statement) writeDeleteOrder(w *builder.BytesWriter) error {
|
|||
}
|
||||
|
||||
if statement.LimitN != nil && *statement.LimitN > 0 {
|
||||
if statement.Start > 0 {
|
||||
return fmt.Errorf("Delete with Limit start is unsupported")
|
||||
}
|
||||
limitNValue := *statement.LimitN
|
||||
if _, err := fmt.Fprintf(w, " LIMIT %d", limitNValue); err != nil {
|
||||
return err
|
||||
|
|
Loading…
Reference in New Issue