@@ -75,8 +75,29 @@ func (b *Builder) buildInsert(inScope *scope, i *ast.Insert) (outScope *scope) {
75
75
if len (columns ) == 0 && len (destScope .cols ) > 0 && rt != nil {
76
76
schema := rt .Schema ()
77
77
columns = make ([]string , len (schema ))
78
- for i , col := range schema {
79
- columns [i ] = col .Name
78
+ for index , col := range schema {
79
+ // Tables with any generated column must always supply a column list, so this is always an error
80
+ if col .Generated != nil {
81
+ b .handleErr (sql .ErrGeneratedColumnValue .New (col .Name , rt .Name ()))
82
+ }
83
+ columns [index ] = col .Name
84
+ }
85
+ if ir , ok := i .Rows .(* ast.AliasedValues ); ok {
86
+ // Handle any empty VALUES() tuples when no column list was specified
87
+ for valueIdx , valueRow := range ir .Values {
88
+ if len (valueRow ) == 0 {
89
+ // VALUES() clause is empty in conjunction with empty column list, so we need to
90
+ // insert default val for respective columns.
91
+ ir .Values [valueIdx ] = make ([]ast.Expr , len (schema ))
92
+ for j , col := range schema {
93
+ if col .Default == nil && ! col .AutoIncrement {
94
+ b .handleErr (sql .ErrInsertIntoNonNullableDefaultNullColumn .New (col .Name ))
95
+ }
96
+
97
+ ir.Values [valueIdx ][j ] = & ast.Default {}
98
+ }
99
+ }
100
+ }
80
101
}
81
102
}
82
103
}
@@ -210,8 +231,6 @@ func (b *Builder) buildInsertValues(inScope *scope, v *ast.AliasedValues, column
210
231
literalOnly = true
211
232
exprTuples := make ([][]sql.Expression , len (v .Values ))
212
233
for i , vt := range v .Values {
213
- // noExprs is an edge case where we fill VALUES with nil expressions
214
- //noExprs := len(vt) == 0
215
234
// triggerUnknownTable is an edge case where we ignored an unresolved
216
235
// table error and do not have a schema for resolving defaults
217
236
triggerUnknownTable := (len (columnNames ) == 0 && len (vt ) > 0 ) && (len (b .TriggerCtx ().UnresolvedTables ) > 0 )
0 commit comments