Skip to content

Commit

Permalink
gen4 planner bugfix: issue when merging subqueries (#13025)
Browse files Browse the repository at this point in the history
Signed-off-by: Andres Taylor <andres@planetscale.com>
  • Loading branch information
systay committed May 5, 2023
1 parent 3106f92 commit 0d10d6f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion go/vt/vtgate/planbuilder/operators/merging.go
Expand Up @@ -194,7 +194,7 @@ func (jm *joinMerger) mergeTables(r1, r2 *ShardedRouting, op1, op2 *Route) (*Rou
VindexPreds: append(r1.VindexPreds, r2.VindexPreds...),
keyspace: r1.keyspace,
RouteOpCode: r1.RouteOpCode,
SeenPredicates: r1.SeenPredicates,
SeenPredicates: append(r1.SeenPredicates, r2.SeenPredicates...),
}
if r1.SelectedVindex() == r2.SelectedVindex() {
tr.Selected = r1.Selected
Expand Down
38 changes: 38 additions & 0 deletions go/vt/vtgate/planbuilder/testdata/select_cases.json
Expand Up @@ -7943,5 +7943,43 @@
"user.user"
]
}
},
{
"comment": "merge subquery using MAX and join into single route",
"query": "select 1 from user join music_extra on user.id = music_extra.user_id where music_extra.music_id = (select max(music_id) from music_extra where user_id = user.id)",
"v3-plan": {
"QueryType": "SELECT",
"Original": "select 1 from user join music_extra on user.id = music_extra.user_id where music_extra.music_id = (select max(music_id) from music_extra where user_id = user.id)",
"Instructions": {
"OperatorType": "Route",
"Variant": "Scatter",
"Keyspace": {
"Name": "user",
"Sharded": true
},
"FieldQuery": "select 1 from `user` join music_extra on `user`.id = music_extra.user_id where 1 != 1",
"Query": "select 1 from `user` join music_extra on `user`.id = music_extra.user_id where music_extra.music_id = (select max(music_id) from music_extra where user_id = `user`.id)",
"Table": "`user`, music_extra"
}
},
"gen4-plan": {
"QueryType": "SELECT",
"Original": "select 1 from user join music_extra on user.id = music_extra.user_id where music_extra.music_id = (select max(music_id) from music_extra where user_id = user.id)",
"Instructions": {
"OperatorType": "Route",
"Variant": "Scatter",
"Keyspace": {
"Name": "user",
"Sharded": true
},
"FieldQuery": "select 1 from `user`, music_extra where 1 != 1",
"Query": "select 1 from `user`, music_extra where music_extra.music_id = (select max(music_id) from music_extra where user_id = `user`.id) and `user`.id = music_extra.user_id",
"Table": "`user`, music_extra"
},
"TablesUsed": [
"user.music_extra",
"user.user"
]
}
}
]

0 comments on commit 0d10d6f

Please sign in to comment.