Skip to content

Commit 4b5e169

Browse files
author
Vinai Rachakonda
authored
Make some update queries determinate (#593)
Fix some query tests
1 parent a969820 commit 4b5e169

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

enginetest/update_queries.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,15 @@ var UpdateTests = []WriteQueryTest{
221221
},
222222
},
223223
{
224-
WriteQuery: `UPDATE one_pk INNER JOIN (SELECT * FROM two_pk) as t2 on one_pk.pk = t2.pk1 SET one_pk.c1 = t2.c1 + 1 where one_pk.pk < 1`,
224+
WriteQuery: `UPDATE one_pk INNER JOIN (SELECT * FROM two_pk order by pk1, pk2) as t2 on one_pk.pk = t2.pk1 SET one_pk.c1 = t2.c1 + 1 where one_pk.pk < 1`,
225225
ExpectedWriteResult: []sql.Row{{newUpdateResult(1, 1)}},
226226
SelectQuery: "SELECT * FROM one_pk where pk < 1",
227227
ExpectedSelect: []sql.Row{
228228
sql.NewRow(0, 1, 1, 2, 3, 4),
229229
},
230230
},
231231
{
232-
WriteQuery: `UPDATE one_pk INNER JOIN (SELECT * FROM two_pk) as t2 on one_pk.pk = t2.pk1 SET one_pk.c1 = one_pk.c1 + 1`,
232+
WriteQuery: `UPDATE one_pk INNER JOIN two_pk on one_pk.pk = two_pk.pk1 SET one_pk.c1 = one_pk.c1 + 1`,
233233
ExpectedWriteResult: []sql.Row{{newUpdateResult(2, 2)}},
234234
SelectQuery: "SELECT * FROM one_pk;",
235235
ExpectedSelect: []sql.Row{
@@ -240,7 +240,7 @@ var UpdateTests = []WriteQueryTest{
240240
},
241241
},
242242
{
243-
WriteQuery: `UPDATE one_pk INNER JOIN (SELECT * FROM two_pk) as t2 on one_pk.pk = t2.pk1 SET one_pk.c1 = one_pk.c1 + 1, one_pk.c2 = one_pk.c2 + 1`,
243+
WriteQuery: `UPDATE one_pk INNER JOIN two_pk on one_pk.pk = two_pk.pk1 SET one_pk.c1 = one_pk.c1 + 1, one_pk.c2 = one_pk.c2 + 1 ORDER BY one_pk.pk`,
244244
ExpectedWriteResult: []sql.Row{{newUpdateResult(2, 2)}},
245245
SelectQuery: "SELECT * FROM one_pk;",
246246
ExpectedSelect: []sql.Row{

sql/plan/join.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,3 +709,18 @@ func makeNullable(cols []*sql.Column) []*sql.Column {
709709
}
710710
return result
711711
}
712+
713+
func nodeHasJoin(node sql.Node) bool {
714+
hasJoinNode := false
715+
Inspect(node, func(node sql.Node) bool {
716+
switch node.(type) {
717+
case JoinNode:
718+
hasJoinNode = true
719+
return false
720+
default:
721+
return true
722+
}
723+
})
724+
725+
return hasJoinNode
726+
}

sql/plan/update_source.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ func (u *updateSourceIter) Close(ctx *sql.Context) error {
123123
}
124124

125125
func (u *UpdateSource) getChildSchema() (sql.Schema, error) {
126-
if j, ok := u.Child.(JoinNode); ok {
127-
return j.Schema(), nil
126+
if nodeHasJoin(u.Child) {
127+
return u.Child.Schema(), nil
128128
}
129129

130130
table, err := getUpdatable(u.Child)

0 commit comments

Comments
 (0)