Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions go/test/endtoend/vtgate/system_schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,19 +139,20 @@ func TestConnectWithSystemSchema(t *testing.T) {
connParams.DbName = dbname
conn, err := mysql.Connect(ctx, &connParams)
require.NoError(t, err)
exec(t, conn, `select @@max_allowed_packet from dual`)
conn.Close()
}
}

func TestUseSystemSchema(t *testing.T) {
defer cluster.PanicHandler(t)
ctx := context.Background()
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)
defer conn.Close()
for _, dbname := range []string{"information_schema", "mysql", "performance_schema", "sys"} {
conn, err := mysql.Connect(ctx, &vtParams)
require.NoError(t, err)

exec(t, conn, fmt.Sprintf("use %s", dbname))
conn.Close()
exec(t, conn, `select @@max_allowed_packet from dual`)
}
}

Expand Down
32 changes: 30 additions & 2 deletions go/vt/vtgate/planbuilder/plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,20 @@ func TestWithDefaultKeyspaceFromFile(t *testing.T) {
testFile(t, "call_cases.txt", testOutputTempDir, vschema, false)
}

func TestWithSystemSchemaAsDefaultKeyspace(t *testing.T) {
// We are testing this separately so we can set a default keyspace
testOutputTempDir, err := ioutil.TempDir("", "plan_test")
require.NoError(t, err)
defer os.RemoveAll(testOutputTempDir)
vschema := &vschemaWrapper{
v: loadSchema(t, "schema_test.json"),
keyspace: &vindexes.Keyspace{Name: "mysql"},
tabletType: topodatapb.TabletType_MASTER,
}

testFile(t, "sysschema_default.txt", testOutputTempDir, vschema, false)
}

func TestOtherPlanningFromFile(t *testing.T) {
// We are testing this separately so we can set a default keyspace
testOutputTempDir, err := ioutil.TempDir("", "plan_test")
Expand Down Expand Up @@ -367,8 +381,8 @@ func (vw *vschemaWrapper) FindTableOrVindex(tab sqlparser.TableName) (*vindexes.
if err != nil {
return nil, nil, destKeyspace, destTabletType, destTarget, err
}
if destKeyspace == "" && vw.keyspace != nil {
destKeyspace = vw.keyspace.Name
if destKeyspace == "" {
destKeyspace = vw.getActualKeyspace()
}
table, vindex, err := vw.v.FindTableOrVindex(destKeyspace, tab.Name.String(), topodatapb.TabletType_MASTER)
if err != nil {
Expand All @@ -377,6 +391,20 @@ func (vw *vschemaWrapper) FindTableOrVindex(tab sqlparser.TableName) (*vindexes.
return table, vindex, destKeyspace, destTabletType, destTarget, nil
}

func (vw *vschemaWrapper) getActualKeyspace() string {
if vw.keyspace == nil {
return ""
}
if !sqlparser.SystemSchema(vw.keyspace.Name) {
return vw.keyspace.Name
}
ks, err := vw.AnyKeyspace()
if err != nil {
return ""
}
return ks.Name
}

func (vw *vschemaWrapper) DefaultKeyspace() (*vindexes.Keyspace, error) {
return vw.v.Keyspaces["main"].Keyspace, nil
}
Expand Down
17 changes: 17 additions & 0 deletions go/vt/vtgate/planbuilder/testdata/sysschema_default.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# max_allowed_packet
"select @@max_allowed_packet from dual"
{
"QueryType": "SELECT",
"Original": "select @@max_allowed_packet from dual",
"Instructions": {
"OperatorType": "Route",
"Variant": "SelectReference",
"Keyspace": {
"Name": "main",
"Sharded": false
},
"FieldQuery": "select @@max_allowed_packet from dual where 1 != 1",
"Query": "select @@max_allowed_packet from dual",
"Table": "dual"
}
}
13 changes: 12 additions & 1 deletion go/vt/vtgate/vcursor_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ func (vc *vcursorImpl) FindTableOrVindex(name sqlparser.TableName) (*vindexes.Ta
return nil, nil, "", destTabletType, nil, err
}
if destKeyspace == "" {
destKeyspace = vc.keyspace
destKeyspace = vc.getActualKeyspace()
}
table, vindex, err := vc.vschema.FindTableOrVindex(destKeyspace, name.Name.String(), vc.tabletType)
if err != nil {
Expand All @@ -291,6 +291,17 @@ func (vc *vcursorImpl) FindTableOrVindex(name sqlparser.TableName) (*vindexes.Ta
return table, vindex, destKeyspace, destTabletType, dest, nil
}

func (vc *vcursorImpl) getActualKeyspace() string {
if !sqlparser.SystemSchema(vc.keyspace) {
return vc.keyspace
}
ks, err := vc.AnyKeyspace()
if err != nil {
return ""
}
return ks.Name
}

// DefaultKeyspace returns the default keyspace of the current request
// if there is one. If the keyspace specified in the target cannot be
// identified, it returns an error.
Expand Down