Skip to content

Commit c1ac30d

Browse files
authored
support insert DEFAULT VALUES (#981)
1 parent 40dba4f commit c1ac30d

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

server/ast/insert.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,14 @@ func nodeInsert(ctx *Context, node *tree.Insert) (*vitess.Insert, error) {
8989
if vSelect, ok := rows.(*vitess.Select); ok && len(vSelect.From) == 1 {
9090
if aliasedStmt, ok := vSelect.From[0].(*vitess.AliasedTableExpr); ok {
9191
if valsStmt, ok := aliasedStmt.Expr.(*vitess.ValuesStatement); ok {
92+
var vals vitess.Values
93+
if len(valsStmt.Rows) == 0 {
94+
vals = []vitess.ValTuple{{}}
95+
} else {
96+
vals = valsStmt.Rows
97+
}
9298
rows = &vitess.AliasedValues{
93-
Values: valsStmt.Rows,
99+
Values: vals,
94100
}
95101
}
96102
}

server/ast/select.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ func nodeSelect(ctx *Context, node *tree.Select) (vitess.SelectStatement, error)
3030
return nil, nil
3131
}
3232
if node.Select == nil {
33-
return nil, fmt.Errorf("internal: select clause should not be null")
33+
node.Select = &tree.ValuesClause{
34+
Rows: []tree.Exprs{},
35+
}
3436
}
3537
selectStmt, err := nodeSelectStatement(ctx, node.Select)
3638
if err != nil {

testing/go/insert_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,5 +150,23 @@ func TestInsert(t *testing.T) {
150150
},
151151
},
152152
},
153+
{
154+
Name: "implicit default values",
155+
SetUpScript: []string{
156+
"CREATE TABLE t (i INT DEFAULT 123, j INT default 456);",
157+
},
158+
Assertions: []ScriptTestAssertion{
159+
{
160+
Query: "INSERT INTO t DEFAULT VALUES;",
161+
SkipResultsCheck: true,
162+
},
163+
{
164+
Query: "SELECT * FROM t",
165+
Expected: []sql.Row{
166+
{123, 456},
167+
},
168+
},
169+
},
170+
},
153171
})
154172
}

0 commit comments

Comments
 (0)