deal with oracle's special handling of last inserted id
This commit is contained in:
parent
4061744821
commit
e56cd82358
@ -1,7 +1,9 @@
|
|||||||
package gorm
|
package gorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -144,6 +146,22 @@ func createCallback(scope *Scope) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println(scope.Dialect().GetName())
|
||||||
|
|
||||||
|
// deal with oracle special case handling of last insert id
|
||||||
|
oraModules := []string{"godror", "oci8", "ora"} // must be an asc sorted slice
|
||||||
|
insertAt := sort.SearchStrings(oraModules, scope.Dialect().GetName())
|
||||||
|
if insertAt < len(oraModules) && oraModules[insertAt] == scope.Dialect().GetName() {
|
||||||
|
var id uint32
|
||||||
|
scope.SQLVars = append(scope.SQLVars, sql.Out{Dest: &id})
|
||||||
|
scope.SQL = fmt.Sprintf("%s returning id into :%d", scope.SQL, len(scope.SQLVars))
|
||||||
|
if result, err := scope.SQLDB().Exec(scope.SQL, scope.SQLVars...); scope.Err(err) == nil {
|
||||||
|
scope.db.RowsAffected, _ = result.RowsAffected()
|
||||||
|
scope.Err(primaryField.Set(id))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// execute create sql: lastInsertID implemention for majority of dialects
|
// execute create sql: lastInsertID implemention for majority of dialects
|
||||||
if lastInsertIDReturningSuffix == "" && lastInsertIDOutputInterstitial == "" {
|
if lastInsertIDReturningSuffix == "" && lastInsertIDOutputInterstitial == "" {
|
||||||
if result, err := scope.SQLDB().Exec(scope.SQL, scope.SQLVars...); scope.Err(err) == nil {
|
if result, err := scope.SQLDB().Exec(scope.SQL, scope.SQLVars...); scope.Err(err) == nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user