Skip to content

Commit

Permalink
simplify merging logic
Browse files Browse the repository at this point in the history
Signed-off-by: Andres Taylor <[email protected]>
  • Loading branch information
systay committed Aug 1, 2024
1 parent d4d64e8 commit 3dce816
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 14 deletions.
2 changes: 1 addition & 1 deletion go/vt/vtgate/planbuilder/operators/join_merging.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func mergeJoinInputs(ctx *plancontext.PlanningContext, lhs, rhs Operator, joinPr

// sharded routing is complex, so we handle it in a separate method
case a == sharded && b == sharded:
return tryMergeShardedRouting(ctx, lhsRoute, rhsRoute, m, joinPredicates, false /*isSubquery*/)
return tryMergeShardedRouting(ctx, lhsRoute, rhsRoute, m, joinPredicates)

default:
return nil
Expand Down
13 changes: 3 additions & 10 deletions go/vt/vtgate/planbuilder/operators/sharded_routing.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"vitess.io/vitess/go/mysql/collations"
"vitess.io/vitess/go/slice"
"vitess.io/vitess/go/vt/sqlparser"
"vitess.io/vitess/go/vt/vterrors"
"vitess.io/vitess/go/vt/vtgate/engine"
"vitess.io/vitess/go/vt/vtgate/evalengine"
"vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext"
Expand Down Expand Up @@ -639,9 +638,10 @@ func tryMergeShardedRouting(
routeA, routeB *Route,
m merger,
joinPredicates []sqlparser.Expr,
isSubquery bool,
) *Route {
sameKeyspace := routeA.Routing.Keyspace() == routeB.Routing.Keyspace()
if routeA.Routing.Keyspace() != routeB.Routing.Keyspace() {
return nil
}
tblA := routeA.Routing.(*ShardedRouting)
tblB := routeB.Routing.(*ShardedRouting)

Expand Down Expand Up @@ -670,13 +670,6 @@ func tryMergeShardedRouting(
return nil
}

if !sameKeyspace {
if isSubquery {
panic(vterrors.VT12001("cross-shard correlated subquery"))
}
return nil
}

canMerge := canMergeOnFilters(ctx, routeA, routeB, joinPredicates)
if !canMerge {
return nil
Expand Down
2 changes: 1 addition & 1 deletion go/vt/vtgate/planbuilder/operators/subquery_planning.go
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ func mergeSubqueryInputs(ctx *plancontext.PlanningContext, in, out Operator, joi

// sharded routing is complex, so we handle it in a separate method
case inner == sharded && outer == sharded:
return tryMergeShardedRouting(ctx, inRoute, outRoute, m, joinPredicates, true /*isSubquery*/)
return tryMergeShardedRouting(ctx, inRoute, outRoute, m, joinPredicates)

default:
return nil
Expand Down
4 changes: 2 additions & 2 deletions go/vt/vtgate/planbuilder/testdata/unsupported_cases.json
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@
},
{
"comment": "Cross keyspace query with subquery",
"query": "select 1 from user where id in (select id from t1)",
"plan": "VT12001: unsupported: cross-shard correlated subquery"
"query": "select 1 from user where id = (select id from t1 where user.foo = t1.bar)",
"plan": "VT12001: unsupported: correlated subquery is only supported for EXISTS"
},
{
"comment": "multi-shard union",
Expand Down

0 comments on commit 3dce816

Please sign in to comment.