Skip to content

Commit 9c1623a

Browse files
authored
fix(engine/sqlite): Fix convert process for VALUES (#2737)
close #2331
1 parent cd93390 commit 9c1623a

File tree

11 files changed

+146
-12
lines changed

11 files changed

+146
-12
lines changed

internal/endtoend/testdata/insert_values/mysql/go/query.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/insert_values/mysql/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ CREATE TABLE foo (a text, b integer);
22

33
/* name: InsertValues :exec */
44
INSERT INTO foo (a, b) VALUES (?, ?);
5+
6+
/* name: InsertMultipleValues :exec */
7+
INSERT INTO foo (a, b) VALUES (?, ?), (?, ?);

internal/endtoend/testdata/insert_values/postgresql/pgx/v4/go/query.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/insert_values/postgresql/pgx/v4/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ CREATE TABLE foo (a text, b integer);
22

33
-- name: InsertValues :exec
44
INSERT INTO foo (a, b) VALUES ($1, $2);
5+
6+
/* name: InsertMultipleValues :exec */
7+
INSERT INTO foo (a, b) VALUES ($1, $2), ($3, $4);

internal/endtoend/testdata/insert_values/postgresql/pgx/v5/go/query.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/insert_values/postgresql/pgx/v5/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ CREATE TABLE foo (a text, b integer);
22

33
-- name: InsertValues :exec
44
INSERT INTO foo (a, b) VALUES ($1, $2);
5+
6+
/* name: InsertMultipleValues :exec */
7+
INSERT INTO foo (a, b) VALUES ($1, $2), ($3, $4);

internal/endtoend/testdata/insert_values/postgresql/stdlib/go/query.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/insert_values/postgresql/stdlib/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ CREATE TABLE foo (a text, b integer);
22

33
-- name: InsertValues :exec
44
INSERT INTO foo (a, b) VALUES ($1, $2);
5+
6+
/* name: InsertMultipleValues :exec */
7+
INSERT INTO foo (a, b) VALUES ($1, $2), ($3, $4);

internal/endtoend/testdata/insert_values/sqlite/go/query.sql.go

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/insert_values/sqlite/query.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@ CREATE TABLE foo (a text, b integer);
22

33
/* name: InsertValues :exec */
44
INSERT INTO foo (a, b) VALUES (?, ?);
5+
6+
/* name: InsertMultipleValues :exec */
7+
INSERT INTO foo (a, b) VALUES (?, ?), (?, ?);

internal/engine/sqlite/convert.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -882,27 +882,41 @@ func (c *cc) convertInsert_stmtContext(n *parser.Insert_stmtContext) ast.Node {
882882
insert.SelectStmt = ss
883883
}
884884
} else {
885+
var valuesLists ast.List
886+
var values *ast.List
887+
for _, cn := range n.GetChildren() {
888+
switch cn := cn.(type) {
889+
case antlr.TerminalNode:
890+
switch cn.GetSymbol().GetTokenType() {
891+
case parser.SQLiteParserVALUES_:
892+
values = &ast.List{}
893+
case parser.SQLiteParserOPEN_PAR:
894+
if values != nil {
895+
values = &ast.List{}
896+
}
897+
case parser.SQLiteParserCOMMA:
898+
case parser.SQLiteParserCLOSE_PAR:
899+
if values != nil {
900+
valuesLists.Items = append(valuesLists.Items, values)
901+
}
902+
}
903+
case parser.IExprContext:
904+
if values != nil {
905+
values.Items = append(values.Items, c.convert(cn))
906+
}
907+
}
908+
}
909+
885910
insert.SelectStmt = &ast.SelectStmt{
886911
FromClause: &ast.List{},
887912
TargetList: &ast.List{},
888-
ValuesLists: c.convertExprLists(n.AllExpr()),
913+
ValuesLists: &valuesLists,
889914
}
890915
}
891916

892917
return insert
893918
}
894919

895-
func (c *cc) convertExprLists(lists []parser.IExprContext) *ast.List {
896-
list := &ast.List{Items: []ast.Node{}}
897-
n := len(lists)
898-
inner := &ast.List{Items: []ast.Node{}}
899-
for i := 0; i < n; i++ {
900-
inner.Items = append(inner.Items, c.convert(lists[i]))
901-
}
902-
list.Items = append(list.Items, inner)
903-
return list
904-
}
905-
906920
func (c *cc) convertColumnNames(cols []parser.IColumn_nameContext) *ast.List {
907921
list := &ast.List{Items: []ast.Node{}}
908922
for _, c := range cols {

0 commit comments

Comments
 (0)