sql server doesn't accept to insert a blank datetime like `0001-01-01 00:00:00`. So that we have a break change here that deleted column should not have a notnull tag. Reviewed-on: https://gitea.com/xorm/xorm/pulls/1936 Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-committed-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
66fc59b71c
commit
962962bb64
|
@ -1024,3 +1024,44 @@ func TestInsertIntSlice(t *testing.T) {
|
||||||
assert.True(t, has)
|
assert.True(t, has)
|
||||||
assert.EqualValues(t, v3, v4)
|
assert.EqualValues(t, v3, v4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInsertDeleted(t *testing.T) {
|
||||||
|
assert.NoError(t, PrepareEngine())
|
||||||
|
|
||||||
|
type InsertDeletedStructNotRight struct {
|
||||||
|
ID uint64 `xorm:"'ID' pk autoincr"`
|
||||||
|
DeletedAt time.Time `xorm:"'DELETED_AT' deleted notnull"`
|
||||||
|
}
|
||||||
|
// notnull tag will be ignored
|
||||||
|
err := testEngine.Sync2(new(InsertDeletedStructNotRight))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
type InsertDeletedStruct struct {
|
||||||
|
ID uint64 `xorm:"'ID' pk autoincr"`
|
||||||
|
DeletedAt time.Time `xorm:"'DELETED_AT' deleted"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(InsertDeletedStruct)))
|
||||||
|
|
||||||
|
var v InsertDeletedStruct
|
||||||
|
_, err = testEngine.Insert(&v)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var v2 InsertDeletedStruct
|
||||||
|
has, err := testEngine.Get(&v2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
|
||||||
|
_, err = testEngine.ID(v.ID).Delete(new(InsertDeletedStruct))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var v3 InsertDeletedStruct
|
||||||
|
has, err = testEngine.Get(&v3)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.False(t, has)
|
||||||
|
|
||||||
|
var v4 InsertDeletedStruct
|
||||||
|
has, err = testEngine.Unscoped().Get(&v4)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ func (statement *Statement) writeInsertOutput(buf *strings.Builder, table *schem
|
||||||
if _, err := buf.WriteString(" OUTPUT Inserted."); err != nil {
|
if _, err := buf.WriteString(" OUTPUT Inserted."); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := buf.WriteString(table.AutoIncrement); err != nil {
|
if err := statement.dialect.Quoter().QuoteTo(buf, table.AutoIncrement); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -978,7 +978,7 @@ func (statement *Statement) joinColumns(cols []*schemas.Column, includeTableName
|
||||||
|
|
||||||
// CondDeleted returns the conditions whether a record is soft deleted.
|
// CondDeleted returns the conditions whether a record is soft deleted.
|
||||||
func (statement *Statement) CondDeleted(col *schemas.Column) builder.Cond {
|
func (statement *Statement) CondDeleted(col *schemas.Column) builder.Cond {
|
||||||
var colName = col.Name
|
var colName = statement.quote(col.Name)
|
||||||
if statement.JoinStr != "" {
|
if statement.JoinStr != "" {
|
||||||
var prefix string
|
var prefix string
|
||||||
if statement.TableAlias != "" {
|
if statement.TableAlias != "" {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"xorm.io/xorm/internal/utils"
|
"xorm.io/xorm/internal/utils"
|
||||||
"xorm.io/xorm/schemas"
|
"xorm.io/xorm/schemas"
|
||||||
|
@ -497,6 +498,16 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac
|
||||||
}
|
}
|
||||||
|
|
||||||
if col.IsDeleted {
|
if col.IsDeleted {
|
||||||
|
colNames = append(colNames, col.Name)
|
||||||
|
if !col.Nullable {
|
||||||
|
if col.SQLType.IsNumeric() {
|
||||||
|
args = append(args, 0)
|
||||||
|
} else {
|
||||||
|
args = append(args, time.Time{}.Format("2006-01-02 15:04:05"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
args = append(args, nil)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -296,5 +296,11 @@ func (parser *Parser) Parse(v reflect.Value) (*schemas.Table, error) {
|
||||||
table.AddColumn(col)
|
table.AddColumn(col)
|
||||||
} // end for
|
} // end for
|
||||||
|
|
||||||
|
deletedColumn := table.DeletedColumn()
|
||||||
|
// check columns
|
||||||
|
if deletedColumn != nil {
|
||||||
|
deletedColumn.Nullable = true
|
||||||
|
}
|
||||||
|
|
||||||
return table, nil
|
return table, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,6 +238,7 @@ func UpdatedTagHandler(ctx *Context) error {
|
||||||
// DeletedTagHandler describes deleted tag handler
|
// DeletedTagHandler describes deleted tag handler
|
||||||
func DeletedTagHandler(ctx *Context) error {
|
func DeletedTagHandler(ctx *Context) error {
|
||||||
ctx.col.IsDeleted = true
|
ctx.col.IsDeleted = true
|
||||||
|
ctx.col.Nullable = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue