From ff6f3b7a8deb093f929a59a69cad237e89e5771a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 25 May 2015 17:49:28 +0800 Subject: [PATCH] bug fixed for auto condition on join --- session.go | 9 ++++++--- statement.go | 26 +++++++++++++++++++------- xorm.go | 2 +- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/session.go b/session.go index f4c56a49..b47d2780 100644 --- a/session.go +++ b/session.go @@ -1178,9 +1178,11 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) } if len(condiBean) > 0 { + var addedTableName = (len(session.Statement.JoinStr) > 0) colNames, args := buildConditions(session.Engine, table, condiBean[0], true, true, false, true, session.Statement.allUseBool, session.Statement.useAllCols, - session.Statement.unscoped, session.Statement.mustColumnMap) + session.Statement.unscoped, session.Statement.mustColumnMap, + session.Statement.TableName(), addedTableName) session.Statement.ConditionStr = strings.Join(colNames, " AND ") session.Statement.BeanArgs = args } else { @@ -3467,7 +3469,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 if len(condiBean) > 0 { condiColNames, condiArgs = buildConditions(session.Engine, session.Statement.RefTable, condiBean[0], true, true, false, true, session.Statement.allUseBool, session.Statement.useAllCols, - session.Statement.unscoped, session.Statement.mustColumnMap) + session.Statement.unscoped, session.Statement.mustColumnMap, session.Statement.TableName(), false) } var condition = "" @@ -3687,7 +3689,8 @@ func (session *Session) Delete(bean interface{}) (int64, error) { session.Statement.RefTable = table colNames, args := buildConditions(session.Engine, table, bean, true, true, false, true, session.Statement.allUseBool, session.Statement.useAllCols, - session.Statement.unscoped, session.Statement.mustColumnMap) + session.Statement.unscoped, session.Statement.mustColumnMap, + session.Statement.TableName(), false) var condition = "" var andStr = session.Engine.dialect.AndStr() diff --git a/statement.go b/statement.go index e55b5349..97ca9d82 100644 --- a/statement.go +++ b/statement.go @@ -498,8 +498,7 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{}, func buildConditions(engine *Engine, table *core.Table, bean interface{}, includeVersion bool, includeUpdated bool, includeNil bool, includeAutoIncr bool, allUseBool bool, useAllCols bool, unscoped bool, - mustColumnMap map[string]bool) ([]string, []interface{}) { - + mustColumnMap map[string]bool, tableName string, addedTableName bool) ([]string, []interface{}) { colNames := make([]string, 0) var args = make([]interface{}, 0) for _, col := range table.Columns() { @@ -516,6 +515,14 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{}, if engine.dialect.DBType() == core.MSSQL && col.SQLType.Name == core.Text { continue } + + var colName string + if addedTableName { + colName = engine.Quote(tableName)+"."+engine.Quote(col.Name) + } else { + colName = engine.Quote(col.Name) + } + fieldValuePtr, err := col.ValueOf(bean) if err != nil { engine.LogError(err) @@ -523,7 +530,8 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{}, } if col.IsDeleted && !unscoped { // tag "deleted" is enabled - colNames = append(colNames, fmt.Sprintf("(%v IS NULL or %v = '0001-01-01 00:00:00')", engine.Quote(col.Name), engine.Quote(col.Name))) + colNames = append(colNames, fmt.Sprintf("(%v IS NULL or %v = '0001-01-01 00:00:00')", + colName, colName)) } fieldValue := *fieldValuePtr @@ -545,7 +553,7 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{}, if fieldValue.IsNil() { if includeNil { args = append(args, nil) - colNames = append(colNames, fmt.Sprintf("%v %s ?", engine.Quote(col.Name), engine.dialect.EqStr())) + colNames = append(colNames, fmt.Sprintf("%v %s ?", colName, engine.dialect.EqStr())) } continue } else if !fieldValue.IsValid() { @@ -668,7 +676,7 @@ func buildConditions(engine *Engine, table *core.Table, bean interface{}, if col.IsPrimaryKey && engine.dialect.DBType() == "ql" { condi = "id() == ?" } else { - condi = fmt.Sprintf("%v %s ?", engine.Quote(col.Name), engine.dialect.EqStr()) + condi = fmt.Sprintf("%v %s ?", colName, engine.dialect.EqStr()) } colNames = append(colNames, condi) } @@ -1146,9 +1154,11 @@ func (statement *Statement) genGetSql(bean interface{}) (string, []interface{}) table = statement.RefTable } + var addedTableName = (len(statement.JoinStr) > 0) + colNames, args := buildConditions(statement.Engine, table, bean, true, true, false, true, statement.allUseBool, statement.useAllCols, - statement.unscoped, statement.mustColumnMap) + statement.unscoped, statement.mustColumnMap, statement.TableName(), addedTableName) statement.ConditionStr = strings.Join(colNames, " "+statement.Engine.dialect.AndStr()+" ") statement.BeanArgs = args @@ -1205,9 +1215,11 @@ func (statement *Statement) genCountSql(bean interface{}) (string, []interface{} table := statement.Engine.TableInfo(bean) statement.RefTable = table + var addedTableName = (len(statement.JoinStr) > 0) + colNames, args := buildConditions(statement.Engine, table, bean, true, true, false, true, statement.allUseBool, statement.useAllCols, - statement.unscoped, statement.mustColumnMap) + statement.unscoped, statement.mustColumnMap, statement.TableName(), addedTableName) statement.ConditionStr = strings.Join(colNames, " "+statement.Engine.Dialect().AndStr()+" ") statement.BeanArgs = args diff --git a/xorm.go b/xorm.go index d9c8330c..b045c533 100644 --- a/xorm.go +++ b/xorm.go @@ -17,7 +17,7 @@ import ( ) const ( - Version string = "0.4.3.0524" + Version string = "0.4.3.0525" ) func regDrvsNDialects() bool {