@@ -814,19 +814,6 @@ func handleSingleRowReturning(db *gorm.DB) {
814
814
}
815
815
}
816
816
817
- // Simplified RETURNING clause addition for single row operations
818
- func addReturningClause (db * gorm.DB , fields []* schema.Field ) {
819
- if len (fields ) == 0 {
820
- return
821
- }
822
-
823
- columns := make ([]clause.Column , len (fields ))
824
- for idx , field := range fields {
825
- columns [idx ] = clause.Column {Name : field .DBName }
826
- }
827
- db .Statement .AddClauseIfNotExists (clause.Returning {Columns : columns })
828
- }
829
-
830
817
// Handle bulk RETURNING results for PL/SQL operations
831
818
func getBulkReturningValues (db * gorm.DB , rowCount int ) {
832
819
if db .Statement .Schema == nil {
@@ -946,6 +933,11 @@ func handleLastInsertId(db *gorm.DB, result sql.Result) {
946
933
}
947
934
}
948
935
}
936
+
937
+ // This replaces expressions (clause.Expr) in bulk insert values
938
+ // with appropriate NULL placeholders based on the column's data type. This ensures that
939
+ // PL/SQL array binding remains consistent and avoids unsupported expressions during
940
+ // FORALL bulk operations.
949
941
func sanitizeCreateValuesForBulkArrays (stmt * gorm.Statement , cv * clause.Values ) {
950
942
for r := range cv .Values {
951
943
for c , col := range cv .Columns {
@@ -955,7 +947,7 @@ func sanitizeCreateValuesForBulkArrays(stmt *gorm.Statement, cv *clause.Values)
955
947
if f := findFieldByDBName (stmt .Schema , col .Name ); f != nil {
956
948
switch f .DataType {
957
949
case schema .Int , schema .Uint :
958
- cv.Values [r ][c ] = sql.NullInt64 {} // NULL
950
+ cv.Values [r ][c ] = sql.NullInt64 {}
959
951
case schema .Float :
960
952
cv.Values [r ][c ] = sql.NullFloat64 {}
961
953
case schema .String :
0 commit comments