Fix db2
This commit is contained in:
parent
815db53e9d
commit
2f60b3be0b
|
@ -311,8 +311,15 @@ func (session *Session) insertStruct(bean interface{}) (int64, error) {
|
||||||
var newArgs []interface{}
|
var newArgs []interface{}
|
||||||
var needCommit bool
|
var needCommit bool
|
||||||
var id int64
|
var id int64
|
||||||
|
var i = utils.IndexSlice(colNames, table.AutoIncrement)
|
||||||
|
if i > -1 {
|
||||||
|
id, err = convert.AsInt64(args[i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
if session.engine.dialect.URI().DBType == schemas.DB2 || session.engine.dialect.URI().DBType == schemas.ORACLE {
|
if session.engine.dialect.URI().DBType == schemas.DB2 || session.engine.dialect.URI().DBType == schemas.ORACLE {
|
||||||
if session.isAutoCommit { // if it's not in transaction
|
if id == 0 && session.isAutoCommit { // if it's not in transaction
|
||||||
if err := session.Begin(); err != nil {
|
if err := session.Begin(); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -320,21 +327,17 @@ func (session *Session) insertStruct(bean interface{}) (int64, error) {
|
||||||
}
|
}
|
||||||
_, err := session.exec(sqlStr, args...)
|
_, err := session.exec(sqlStr, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if needCommit {
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
i := utils.IndexSlice(colNames, table.AutoIncrement)
|
|
||||||
if i > -1 {
|
|
||||||
id, err = convert.AsInt64(args[i])
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if session.engine.dialect.URI().DBType == schemas.ORACLE {
|
if session.engine.dialect.URI().DBType == schemas.ORACLE {
|
||||||
sql = fmt.Sprintf("select %s.currval from dual", utils.SeqName(tableName))
|
sql = fmt.Sprintf("select %s.currval from dual", utils.SeqName(tableName))
|
||||||
} else if session.engine.dialect.URI().DBType == schemas.DB2 {
|
} else if session.engine.dialect.URI().DBType == schemas.DB2 {
|
||||||
sql = "select IDENTITY_VAL_LOCAL() as id FROM sysibm.sysdummy1"
|
sql = "select IDENTITY_VAL_LOCAL() as id FROM sysibm.sysdummy1"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
sql = sqlStr
|
sql = sqlStr
|
||||||
newArgs = args
|
newArgs = args
|
||||||
|
@ -343,6 +346,9 @@ func (session *Session) insertStruct(bean interface{}) (int64, error) {
|
||||||
if id == 0 {
|
if id == 0 {
|
||||||
err := session.queryRow(sql, newArgs...).Scan(&id)
|
err := session.queryRow(sql, newArgs...).Scan(&id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if needCommit {
|
||||||
|
session.Rollback()
|
||||||
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
if needCommit {
|
if needCommit {
|
||||||
|
|
Loading…
Reference in New Issue