From 40a9abb6ea963eb6f7c1344b44da4cb454b937cb Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Thu, 3 Sep 2020 07:54:27 +0200 Subject: [PATCH] only take on simple dual queries in the vtgate Signed-off-by: Andres Taylor --- go/vt/vtgate/planbuilder/select.go | 13 +++++++++---- .../planbuilder/testdata/select_cases.txt | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/go/vt/vtgate/planbuilder/select.go b/go/vt/vtgate/planbuilder/select.go index 2a5f0c97933..66e6d3e8c9a 100644 --- a/go/vt/vtgate/planbuilder/select.go +++ b/go/vt/vtgate/planbuilder/select.go @@ -146,7 +146,7 @@ func (pb *primitiveBuilder) processSelect(sel *sqlparser.Select, outer *symtab) } func handleDualSelects(sel *sqlparser.Select, vschema ContextVSchema) (engine.Primitive, error) { - if !isOnlyDual(sel.From) { + if !isOnlyDual(sel) { return nil, nil } @@ -191,11 +191,16 @@ func buildLockingPrimitive(sel *sqlparser.Select, vschema ContextVSchema) (engin }, nil } -func isOnlyDual(from sqlparser.TableExprs) bool { - if len(from) > 1 { +func isOnlyDual(sel *sqlparser.Select) bool { + if sel.Where != nil || sel.GroupBy != nil || sel.Having != nil || sel.Limit != nil || sel.OrderBy != nil { + // we can only deal with queries without any other subclauses - just SELECT and FROM, nothing else is allowed return false } - table, ok := from[0].(*sqlparser.AliasedTableExpr) + + if len(sel.From) > 1 { + return false + } + table, ok := sel.From[0].(*sqlparser.AliasedTableExpr) if !ok { return false } diff --git a/go/vt/vtgate/planbuilder/testdata/select_cases.txt b/go/vt/vtgate/planbuilder/testdata/select_cases.txt index 17aa01ebe0c..35750f6e37d 100644 --- a/go/vt/vtgate/planbuilder/testdata/select_cases.txt +++ b/go/vt/vtgate/planbuilder/testdata/select_cases.txt @@ -1349,6 +1349,24 @@ } } +# don't filter on the vtgate +"select 42 from dual where false" +{ + "QueryType": "SELECT", + "Original": "select 42 from dual where false", + "Instructions": { + "OperatorType": "Route", + "Variant": "SelectReference", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "FieldQuery": "select 42 from dual where 1 != 1", + "Query": "select 42 from dual where false", + "Table": "dual" + } +} + # testing SingleRow Projection with arithmetics "select 42+2" {