diff --git a/engine.go b/engine.go index a27b6bdf..533e1930 100644 --- a/engine.go +++ b/engine.go @@ -924,6 +924,7 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { k := strings.ToUpper(key) ctx.tagName = k + ctx.params = []string{} pStart := strings.Index(k, "(") if pStart == 0 { @@ -1223,8 +1224,10 @@ func (engine *Engine) Sync(beans ...interface{}) error { } if !isExist { session := engine.NewSession() - session.Statement.setRefValue(v) defer session.Close() + if err := session.Statement.setRefValue(v); err != nil { + return err + } err = session.addColumn(col.Name) if err != nil { return err @@ -1234,8 +1237,10 @@ func (engine *Engine) Sync(beans ...interface{}) error { for name, index := range table.Indexes { session := engine.NewSession() - session.Statement.setRefValue(v) defer session.Close() + if err := session.Statement.setRefValue(v); err != nil { + return err + } if index.Type == core.UniqueType { //isExist, err := session.isIndexExist(table.Name, name, true) isExist, err := session.isIndexExist2(tableName, index.Cols, true) @@ -1244,8 +1249,11 @@ func (engine *Engine) Sync(beans ...interface{}) error { } if !isExist { session := engine.NewSession() - session.Statement.setRefValue(v) defer session.Close() + if err := session.Statement.setRefValue(v); err != nil { + return err + } + err = session.addUnique(tableName, name) if err != nil { return err @@ -1258,8 +1266,11 @@ func (engine *Engine) Sync(beans ...interface{}) error { } if !isExist { session := engine.NewSession() - session.Statement.setRefValue(v) defer session.Close() + if err := session.Statement.setRefValue(v); err != nil { + return err + } + err = session.addIndex(tableName, name) if err != nil { return err diff --git a/rows.go b/rows.go index a91d08b7..47bc322f 100644 --- a/rows.go +++ b/rows.go @@ -34,7 +34,10 @@ func newRows(session *Session, bean interface{}) (*Rows, error) { var sqlStr string var args []interface{} - rows.session.Statement.setRefValue(rValue(bean)) + if err := rows.session.Statement.setRefValue(rValue(bean)); err != nil { + return nil, err + } + if len(session.Statement.TableName()) <= 0 { return nil, ErrTableNotFound } @@ -113,7 +116,9 @@ func (rows *Rows) Scan(bean interface{}) error { } dataStruct := rValue(bean) - rows.session.Statement.setRefValue(dataStruct) + if err := rows.session.Statement.setRefValue(dataStruct); err != nil { + return err + } _, err := rows.session.row2Bean(rows.rows, rows.fields, len(rows.fields), bean, &dataStruct, rows.session.Statement.RefTable) return err diff --git a/session_delete.go b/session_delete.go index 1c458fe1..0c1e705e 100644 --- a/session_delete.go +++ b/session_delete.go @@ -83,7 +83,9 @@ func (session *Session) Delete(bean interface{}) (int64, error) { defer session.Close() } - session.Statement.setRefValue(rValue(bean)) + if err := session.Statement.setRefValue(rValue(bean)); err != nil { + return 0, err + } var table = session.Statement.RefTable // handle before delete processors diff --git a/session_find.go b/session_find.go index 61862edd..16c6ff4f 100644 --- a/session_find.go +++ b/session_find.go @@ -41,13 +41,17 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) if sliceElementType.Kind() == reflect.Ptr { if sliceElementType.Elem().Kind() == reflect.Struct { pv := reflect.New(sliceElementType.Elem()) - session.Statement.setRefValue(pv.Elem()) + if err := session.Statement.setRefValue(pv.Elem()); err != nil { + return err + } } else { tp = tpNonStruct } } else if sliceElementType.Kind() == reflect.Struct { pv := reflect.New(sliceElementType) - session.Statement.setRefValue(pv.Elem()) + if err := session.Statement.setRefValue(pv.Elem()); err != nil { + return err + } } else { tp = tpNonStruct } diff --git a/session_get.go b/session_get.go index bf61963c..c7c03d90 100644 --- a/session_get.go +++ b/session_get.go @@ -26,7 +26,9 @@ func (session *Session) Get(bean interface{}) (bool, error) { } if beanValue.Elem().Kind() == reflect.Struct { - session.Statement.setRefValue(beanValue.Elem()) + if err := session.Statement.setRefValue(beanValue.Elem()); err != nil { + return false, err + } } var sqlStr string @@ -81,7 +83,9 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, bean interface{}, sqlS return true, err } dataStruct := rValue(bean) - session.Statement.setRefValue(dataStruct) + if err := session.Statement.setRefValue(dataStruct); err != nil { + return false, err + } _, err = session.row2Bean(rawRows, fields, len(fields), bean, &dataStruct, session.Statement.RefTable) case reflect.Slice: err = rawRows.ScanSlice(bean) diff --git a/session_insert.go b/session_insert.go index 5b607b1f..2c8ad782 100644 --- a/session_insert.go +++ b/session_insert.go @@ -67,7 +67,9 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error return 0, errors.New("could not insert a empty slice") } - session.Statement.setRefValue(sliceValue.Index(0)) + if err := session.Statement.setRefValue(sliceValue.Index(0)); err != nil { + return 0, err + } if len(session.Statement.TableName()) <= 0 { return 0, ErrTableNotFound @@ -217,19 +219,19 @@ func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (", session.Engine.Quote(session.Statement.TableName()), session.Engine.QuoteStr(), - strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + strings.Join(colNames, session.Engine.QuoteStr()+", "+session.Engine.QuoteStr()), session.Engine.QuoteStr()) statement = fmt.Sprintf(sql, session.Engine.Quote(session.Statement.TableName()), session.Engine.QuoteStr(), - strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + strings.Join(colNames, session.Engine.QuoteStr()+", "+session.Engine.QuoteStr()), session.Engine.QuoteStr(), strings.Join(colMultiPlaces, temp)) } else { statement = fmt.Sprintf(sql, session.Engine.Quote(session.Statement.TableName()), session.Engine.QuoteStr(), - strings.Join(colNames, session.Engine.QuoteStr() + ", " + session.Engine.QuoteStr()), + strings.Join(colNames, session.Engine.QuoteStr()+", "+session.Engine.QuoteStr()), session.Engine.QuoteStr(), strings.Join(colMultiPlaces, "),(")) } @@ -297,7 +299,9 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { } func (session *Session) innerInsert(bean interface{}) (int64, error) { - session.Statement.setRefValue(rValue(bean)) + if err := session.Statement.setRefValue(rValue(bean)); err != nil { + return 0, err + } if len(session.Statement.TableName()) <= 0 { return 0, ErrTableNotFound } @@ -325,8 +329,8 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { // remove the expr columns for i, colName := range colNames { if colName == v.colName { - colNames = append(colNames[:i], colNames[i + 1:]...) - args = append(args[:i], args[i + 1:]...) + colNames = append(colNames[:i], colNames[i+1:]...) + args = append(args[:i], args[i+1:]...) } } @@ -335,11 +339,11 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { exprColVals = append(exprColVals, v.expr) } - colPlaces := strings.Repeat("?, ", len(colNames) - len(exprColumns)) + colPlaces := strings.Repeat("?, ", len(colNames)-len(exprColumns)) if len(exprColVals) > 0 { colPlaces = colPlaces + strings.Join(exprColVals, ", ") } else { - colPlaces = colPlaces[0 : len(colPlaces) - 2] + colPlaces = colPlaces[0 : len(colPlaces)-2] } sqlStr := fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)", diff --git a/session_schema.go b/session_schema.go index 21fa2996..19c0cbf5 100644 --- a/session_schema.go +++ b/session_schema.go @@ -27,7 +27,9 @@ func (session *Session) Ping() error { // CreateTable create a table according a bean func (session *Session) CreateTable(bean interface{}) error { v := rValue(bean) - session.Statement.setRefValue(v) + if err := session.Statement.setRefValue(v); err != nil { + return err + } defer session.resetStatement() if session.IsAutoClose { @@ -40,7 +42,9 @@ func (session *Session) CreateTable(bean interface{}) error { // CreateIndexes create indexes func (session *Session) CreateIndexes(bean interface{}) error { v := rValue(bean) - session.Statement.setRefValue(v) + if err := session.Statement.setRefValue(v); err != nil { + return err + } defer session.resetStatement() if session.IsAutoClose { @@ -60,7 +64,9 @@ func (session *Session) CreateIndexes(bean interface{}) error { // CreateUniques create uniques func (session *Session) CreateUniques(bean interface{}) error { v := rValue(bean) - session.Statement.setRefValue(v) + if err := session.Statement.setRefValue(v); err != nil { + return err + } defer session.resetStatement() if session.IsAutoClose { @@ -104,7 +110,9 @@ func (session *Session) createAll() error { // DropIndexes drop indexes func (session *Session) DropIndexes(bean interface{}) error { v := rValue(bean) - session.Statement.setRefValue(v) + if err := session.Statement.setRefValue(v); err != nil { + return err + } defer session.resetStatement() if session.IsAutoClose { diff --git a/session_update.go b/session_update.go index 0f2d1b5c..1d77d294 100644 --- a/session_update.go +++ b/session_update.go @@ -169,7 +169,9 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 var isMap = t.Kind() == reflect.Map var isStruct = t.Kind() == reflect.Struct if isStruct { - session.Statement.setRefValue(v) + if err := session.Statement.setRefValue(v); err != nil { + return 0, err + } if len(session.Statement.TableName()) <= 0 { return 0, ErrTableNotFound