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