Fix #929 #1936

Merged
lunny merged 7 commits from lunny/insert_deleted into master 2021-07-03 12:26:50 +00:00
6 changed files with 61 additions and 2 deletions

View File

@ -1024,3 +1024,44 @@ func TestInsertIntSlice(t *testing.T) {
assert.True(t, has)
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)
}

View File

@ -17,7 +17,7 @@ func (statement *Statement) writeInsertOutput(buf *strings.Builder, table *schem
if _, err := buf.WriteString(" OUTPUT Inserted."); err != nil {
return err
}
if _, err := buf.WriteString(table.AutoIncrement); err != nil {
if err := statement.dialect.Quoter().QuoteTo(buf, table.AutoIncrement); err != nil {
return err
}
}

View File

@ -978,7 +978,7 @@ func (statement *Statement) joinColumns(cols []*schemas.Column, includeTableName
// CondDeleted returns the conditions whether a record is soft deleted.
func (statement *Statement) CondDeleted(col *schemas.Column) builder.Cond {
var colName = col.Name
var colName = statement.quote(col.Name)
if statement.JoinStr != "" {
var prefix string
if statement.TableAlias != "" {

View File

@ -11,6 +11,7 @@ import (
"sort"
"strconv"
"strings"
"time"
"xorm.io/xorm/internal/utils"
"xorm.io/xorm/schemas"
@ -497,6 +498,16 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac
}
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
}

View File

@ -296,5 +296,11 @@ func (parser *Parser) Parse(v reflect.Value) (*schemas.Table, error) {
table.AddColumn(col)
} // end for
deletedColumn := table.DeletedColumn()
// check columns
if deletedColumn != nil {
deletedColumn.Nullable = true
}
return table, nil
}

View File

@ -238,6 +238,7 @@ func UpdatedTagHandler(ctx *Context) error {
// DeletedTagHandler describes deleted tag handler
func DeletedTagHandler(ctx *Context) error {
ctx.col.IsDeleted = true
ctx.col.Nullable = true
return nil
}