Skip to content

Commit

Permalink
[release-18.0] Bugfix for Panic on Joined Queries with Non-Authoritat…
Browse files Browse the repository at this point in the history
…ive Tables in Vitess 19.0 (#17103) (#17115)

Signed-off-by: Rohit Nayak <[email protected]>
Co-authored-by: vitess-bot[bot] <108069721+vitess-bot[bot]@users.noreply.github.com>
Co-authored-by: Rohit Nayak <[email protected]>
  • Loading branch information
vitess-bot[bot] and rohit-nayak-ps authored Nov 5, 2024
1 parent 0d4bfbc commit e1f74ac
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
25 changes: 25 additions & 0 deletions go/vt/vtgate/planbuilder/testdata/from_cases.json
Original file line number Diff line number Diff line change
Expand Up @@ -964,6 +964,31 @@
]
}
},
{
"comment": "Ambiguous column is not a problem when we can merge and push down",
"query": "select foobar from user join music on user.id = music.user_id order by foobar",
"plan": {
"QueryType": "SELECT",
"Original": "select foobar from user join music on user.id = music.user_id order by foobar",
"Instructions": {
"OperatorType": "Route",
"Variant": "Scatter",
"Keyspace": {
"Name": "user",
"Sharded": true
},
"FieldQuery": "select foobar, weight_string(foobar) from `user`, music where 1 != 1",
"OrderBy": "(0|1) ASC",
"Query": "select foobar, weight_string(foobar) from `user`, music where `user`.id = music.user_id order by foobar asc",
"ResultColumns": 1,
"Table": "`user`, music"
},
"TablesUsed": [
"user.music",
"user.user"
]
}
},
{
"comment": "index hints, make sure they are not stripped.",
"query": "select user.col from user use index(a)",
Expand Down
10 changes: 9 additions & 1 deletion go/vt/vtgate/semantics/early_rewriter.go
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,15 @@ func (r *earlyRewriter) fillInQualifiers(cursor *sqlparser.CopyOnWriteCursor) {
if !found {
panic("uh oh")
}
tbl := r.tables.Tables[ts.TableOffset()]
offset := ts.TableOffset()
if offset < 0 {
// this is a column that is not coming from a table - it's an alias introduced in a SELECT expression
// Example: select (1+1) as foo from bar order by foo
// we don't want to add a qualifier to foo here
cursor.Replace(sqlparser.NewColName(col.Name.String()))
return
}
tbl := r.tables.Tables[offset]
tblName, err := tbl.Name()
if err != nil {
panic(err)
Expand Down
27 changes: 27 additions & 0 deletions go/vt/vtgate/semantics/early_rewriter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -735,6 +735,33 @@ func TestOrderByColumnName(t *testing.T) {
}
}

func TestOrderByNotAllColumnsAuthoritative(t *testing.T) {
schemaInfo := fakeSchemaInfo()
cDB := "db"
tcases := []struct {
sql string
expSQL string
deps TableSet
}{{
sql: "select foo from t3 join t order by foo",
expSQL: "select foo from t3 join t order by foo asc",
deps: None,
}}
for _, tcase := range tcases {
t.Run(tcase.sql, func(t *testing.T) {
ast, err := sqlparser.Parse(tcase.sql)
require.NoError(t, err)
selectStatement := ast.(sqlparser.SelectStatement)
semTable, err := Analyze(selectStatement, cDB, schemaInfo)

require.NoError(t, err)
assert.Equal(t, tcase.expSQL, sqlparser.String(selectStatement))
orderByExpr := selectStatement.GetOrderBy()[0].Expr
assert.Equal(t, tcase.deps, semTable.RecursiveDeps(orderByExpr))
})
}
}

func TestSemTableDependenciesAfterExpandStar(t *testing.T) {
schemaInfo := &FakeSI{Tables: map[string]*vindexes.Table{
"t1": {
Expand Down

0 comments on commit e1f74ac

Please sign in to comment.