From 6a47ef9b497180f51f5abe27bdaba2f6ec3564ad Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 2 Oct 2019 15:04:49 +0800 Subject: [PATCH 1/2] Don't warn when bool column default is 1 but not true (#1447) * don't warn when bool column default is 1 but not true * fix default case sensitive --- session_schema.go | 10 ++++++++-- session_schema_test.go | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/session_schema.go b/session_schema.go index 7ca89f26..5e576c29 100644 --- a/session_schema.go +++ b/session_schema.go @@ -344,9 +344,15 @@ func (session *Session) Sync2(beans ...interface{}) error { } } } + if col.Default != oriCol.Default { - engine.logger.Warnf("Table %s Column %s db default is %s, struct default is %s", - tbName, col.Name, oriCol.Default, col.Default) + if (col.SQLType.Name == core.Bool || col.SQLType.Name == core.Boolean) && + ((strings.EqualFold(col.Default, "true") && oriCol.Default == "1") || + (strings.EqualFold(col.Default, "false") && oriCol.Default == "0")) { + } else { + engine.logger.Warnf("Table %s Column %s db default is %s, struct default is %s", + tbName, col.Name, oriCol.Default, col.Default) + } } if col.Nullable != oriCol.Nullable { engine.logger.Warnf("Table %s Column %s db nullable is %v, struct nullable is %v", diff --git a/session_schema_test.go b/session_schema_test.go index 0badc338..4505381f 100644 --- a/session_schema_test.go +++ b/session_schema_test.go @@ -332,3 +332,16 @@ func TestSync2_2(t *testing.T) { assert.True(t, tableNames[table.Name]) } } + +func TestSync2_Default(t *testing.T) { + type TestSync2Default struct { + Id int64 + UserId int64 `xorm:"default(1)"` + IsMember bool `xorm:"default(true)"` + Name string `xorm:"default('my_name')"` + } + + assert.NoError(t, prepareEngine()) + assertSync(t, new(TestSync2Default)) + assert.NoError(t, testEngine.Sync2(new(TestSync2Default))) +} From 57a49c6c23bfbc06b697d7d6552627c464b64b14 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 5 Oct 2019 14:36:18 +0800 Subject: [PATCH 2/2] fix bug when query map condtion with no quote (#1449) --- session_get_test.go | 25 +++++++++++++++++++++++++ statement.go | 8 ++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/session_get_test.go b/session_get_test.go index f93068c8..fcef992e 100644 --- a/session_get_test.go +++ b/session_get_test.go @@ -618,3 +618,28 @@ func TestCustomTypes(t *testing.T) { assert.True(t, has) assert.EqualValues(t, 32, age) } + +func TestGetViaMapCond(t *testing.T) { + type GetViaMapCond struct { + Id int64 + Platform int + Index int + } + + assert.NoError(t, prepareEngine()) + assertSync(t, new(GetViaMapCond)) + + var ( + r GetViaMapCond + platformStr = colMapper.Obj2Table("Platform") + indexStr = colMapper.Obj2Table("Index") + query = map[string]interface{}{ + platformStr: 1, + indexStr: 1, + } + ) + + has, err := testEngine.Where(query).Get(&r) + assert.NoError(t, err) + assert.False(t, has) +} diff --git a/statement.go b/statement.go index ae396c4b..67e35213 100644 --- a/statement.go +++ b/statement.go @@ -149,8 +149,12 @@ func (statement *Statement) And(query interface{}, args ...interface{}) *Stateme cond := builder.Expr(query.(string), args...) statement.cond = statement.cond.And(cond) case map[string]interface{}: - cond := builder.Eq(query.(map[string]interface{})) - statement.cond = statement.cond.And(cond) + queryMap := query.(map[string]interface{}) + newMap := make(map[string]interface{}) + for k, v := range queryMap { + newMap[statement.Engine.Quote(k)] = v + } + statement.cond = statement.cond.And(builder.Eq(newMap)) case builder.Cond: cond := query.(builder.Cond) statement.cond = statement.cond.And(cond)