Merge branch 'master' into patch-1
This commit is contained in:
commit
be0bce05c6
|
@ -1333,10 +1333,10 @@ func (engine *Engine) DropIndexes(bean interface{}) error {
|
|||
}
|
||||
|
||||
// Exec raw sql
|
||||
func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Result, error) {
|
||||
func (engine *Engine) Exec(sqlorArgs ...interface{}) (sql.Result, error) {
|
||||
session := engine.NewSession()
|
||||
defer session.Close()
|
||||
return session.Exec(sql, args...)
|
||||
return session.Exec(sqlorArgs...)
|
||||
}
|
||||
|
||||
// Query a raw sql and return records as []map[string][]byte
|
||||
|
|
|
@ -27,7 +27,7 @@ type Interface interface {
|
|||
Delete(interface{}) (int64, error)
|
||||
Distinct(columns ...string) *Session
|
||||
DropIndexes(bean interface{}) error
|
||||
Exec(string, ...interface{}) (sql.Result, error)
|
||||
Exec(sqlOrAgrs ...interface{}) (sql.Result, error)
|
||||
Exist(bean ...interface{}) (bool, error)
|
||||
Find(interface{}, ...interface{}) error
|
||||
FindAndCount(interface{}, ...interface{}) (int64, error)
|
||||
|
|
|
@ -88,10 +88,7 @@ func (m *Migrate) Migrate() error {
|
|||
}
|
||||
|
||||
if m.initSchema != nil && m.isFirstRun() {
|
||||
if err := m.runInitSchema(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return m.runInitSchema()
|
||||
}
|
||||
|
||||
for _, migration := range m.migrations {
|
||||
|
|
|
@ -17,17 +17,7 @@ import (
|
|||
|
||||
func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) {
|
||||
if len(sqlorArgs) > 0 {
|
||||
switch sqlorArgs[0].(type) {
|
||||
case string:
|
||||
return sqlorArgs[0].(string), sqlorArgs[1:], nil
|
||||
case *builder.Builder:
|
||||
return sqlorArgs[0].(*builder.Builder).ToSQL()
|
||||
case builder.Builder:
|
||||
bd := sqlorArgs[0].(builder.Builder)
|
||||
return bd.ToSQL()
|
||||
default:
|
||||
return "", nil, ErrUnSupportedType
|
||||
}
|
||||
return convertSQLOrArgs(sqlorArgs...)
|
||||
}
|
||||
|
||||
if session.statement.RawSQL != "" {
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/go-xorm/builder"
|
||||
"github.com/go-xorm/core"
|
||||
)
|
||||
|
||||
|
@ -193,11 +194,34 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er
|
|||
return session.DB().Exec(sqlStr, args...)
|
||||
}
|
||||
|
||||
func convertSQLOrArgs(sqlorArgs ...interface{}) (string, []interface{}, error) {
|
||||
switch sqlorArgs[0].(type) {
|
||||
case string:
|
||||
return sqlorArgs[0].(string), sqlorArgs[1:], nil
|
||||
case *builder.Builder:
|
||||
return sqlorArgs[0].(*builder.Builder).ToSQL()
|
||||
case builder.Builder:
|
||||
bd := sqlorArgs[0].(builder.Builder)
|
||||
return bd.ToSQL()
|
||||
}
|
||||
|
||||
return "", nil, ErrUnSupportedType
|
||||
}
|
||||
|
||||
// Exec raw sql
|
||||
func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) {
|
||||
func (session *Session) Exec(sqlorArgs ...interface{}) (sql.Result, error) {
|
||||
if session.isAutoClose {
|
||||
defer session.Close()
|
||||
}
|
||||
|
||||
if len(sqlorArgs) == 0 {
|
||||
return nil, ErrUnSupportedType
|
||||
}
|
||||
|
||||
sqlStr, args, err := convertSQLOrArgs(sqlorArgs...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return session.exec(sqlStr, args...)
|
||||
}
|
||||
|
|
|
@ -443,7 +443,7 @@ func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interfac
|
|||
}
|
||||
}
|
||||
|
||||
if col.IsDeleted || col.IsCreated {
|
||||
if (col.IsDeleted && !session.statement.unscoped) || col.IsCreated {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
@ -1133,6 +1133,54 @@ func TestCreatedUpdated2(t *testing.T) {
|
|||
assert.True(t, s2.UpdateAt.Unix() > s2.CreateAt.Unix())
|
||||
}
|
||||
|
||||
func TestDeletedUpdate(t *testing.T) {
|
||||
assert.NoError(t, prepareEngine())
|
||||
|
||||
type DeletedUpdatedStruct struct {
|
||||
Id int64
|
||||
Name string
|
||||
DeletedAt time.Time `xorm:"deleted"`
|
||||
}
|
||||
|
||||
assertSync(t, new(DeletedUpdatedStruct))
|
||||
|
||||
var s = DeletedUpdatedStruct{
|
||||
Name: "test",
|
||||
}
|
||||
cnt, err := testEngine.Insert(&s)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
cnt, err = testEngine.ID(s.Id).Delete(&DeletedUpdatedStruct{})
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
s.DeletedAt = time.Time{}
|
||||
cnt, err = testEngine.Unscoped().Nullable("deleted_at").Update(&s)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var s1 DeletedUpdatedStruct
|
||||
has, err := testEngine.ID(s.Id).Get(&s1)
|
||||
assert.EqualValues(t, true, has)
|
||||
|
||||
cnt, err = testEngine.ID(s.Id).Delete(&DeletedUpdatedStruct{})
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
cnt, err = testEngine.ID(s.Id).Cols("deleted_at").Update(&DeletedUpdatedStruct{})
|
||||
assert.EqualValues(t, "No content found to be updated", err.Error())
|
||||
assert.EqualValues(t, 0, cnt)
|
||||
|
||||
cnt, err = testEngine.ID(s.Id).Unscoped().Cols("deleted_at").Update(&DeletedUpdatedStruct{})
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
|
||||
var s2 DeletedUpdatedStruct
|
||||
has, err = testEngine.ID(s.Id).Get(&s2)
|
||||
assert.EqualValues(t, true, has)
|
||||
}
|
||||
|
||||
func TestUpdateMapCondition(t *testing.T) {
|
||||
assert.NoError(t, prepareEngine())
|
||||
|
||||
|
|
Loading…
Reference in New Issue