Skip to content

Commit 7a1ada7

Browse files
authored
Merge branch 'master' into kyle/docs-reorg-one
2 parents 2376ffb + 5c95eea commit 7a1ada7

File tree

6 files changed

+103
-4
lines changed

6 files changed

+103
-4
lines changed

internal/endtoend/testdata/update_inner_join/db/db.go

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

internal/endtoend/testdata/update_inner_join/db/models.go

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

internal/endtoend/testdata/update_inner_join/db/query.sql.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CREATE TABLE x (
2+
a text,
3+
b text
4+
);
5+
6+
CREATE TABLE y (
7+
a text,
8+
b text
9+
);
10+
11+
-- name: UpdateXWithY :exec
12+
UPDATE x INNER JOIN y ON y.a = x.a SET x.b = y.b;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"version": "1",
3+
"packages": [
4+
{
5+
"path": "db",
6+
"engine": "mysql",
7+
"schema": "query.sql",
8+
"queries": "query.sql"
9+
}
10+
]
11+
}

internal/engine/dolphin/convert.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -466,16 +466,29 @@ func (c *cc) convertTableRefsClause(n *pcast.TableRefsClause) *ast.List {
466466
}
467467

468468
func (c *cc) convertUpdateStmt(n *pcast.UpdateStmt) *ast.UpdateStmt {
469-
// Relation
470469
rels := c.convertTableRefsClause(n.TableRefs)
471470
if len(rels.Items) != 1 {
472471
panic("expected one range var")
473472
}
474-
rel := rels.Items[0]
475-
rangeVar, ok := rel.(*ast.RangeVar)
476-
if !ok {
473+
474+
var rangeVar *ast.RangeVar
475+
switch rel := rels.Items[0].(type) {
476+
477+
// Special case for joins in updates
478+
case *ast.JoinExpr:
479+
left, ok := rel.Larg.(*ast.RangeVar)
480+
if !ok {
481+
panic("expected range var")
482+
}
483+
rangeVar = left
484+
485+
case *ast.RangeVar:
486+
rangeVar = rel
487+
488+
default:
477489
panic("expected range var")
478490
}
491+
479492
// TargetList
480493
list := &ast.List{}
481494
for _, a := range n.List {

0 commit comments

Comments
 (0)