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
92 changes: 48 additions & 44 deletions go/vt/sqlparser/ast_funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,97 +215,101 @@ func (ct *ColumnType) DescribeType() string {

// SQLType returns the sqltypes type code for the given column
func (ct *ColumnType) SQLType() querypb.Type {
switch strings.ToLower(ct.Type) {
case keywordStrings[TINYINT]:
if ct.Unsigned {
return SQLTypeToQueryType(ct.Type, ct.Unsigned)
}

func SQLTypeToQueryType(typeName string, unsigned bool) querypb.Type {
switch keywordVals[strings.ToLower(typeName)] {
case TINYINT:
if unsigned {
return sqltypes.Uint8
}
return sqltypes.Int8
case keywordStrings[SMALLINT]:
if ct.Unsigned {
case SMALLINT:
if unsigned {
return sqltypes.Uint16
}
return sqltypes.Int16
case keywordStrings[MEDIUMINT]:
if ct.Unsigned {
case MEDIUMINT:
if unsigned {
return sqltypes.Uint24
}
return sqltypes.Int24
case keywordStrings[INT], keywordStrings[INTEGER]:
if ct.Unsigned {
case INT, INTEGER:
if unsigned {
return sqltypes.Uint32
}
return sqltypes.Int32
case keywordStrings[BIGINT]:
if ct.Unsigned {
case BIGINT:
if unsigned {
return sqltypes.Uint64
}
return sqltypes.Int64
case keywordStrings[BOOL], keywordStrings[BOOLEAN]:
case BOOL, BOOLEAN:
return sqltypes.Uint8
case keywordStrings[TEXT]:
case TEXT:
return sqltypes.Text
case keywordStrings[TINYTEXT]:
case TINYTEXT:
return sqltypes.Text
case keywordStrings[MEDIUMTEXT]:
case MEDIUMTEXT:
return sqltypes.Text
case keywordStrings[LONGTEXT]:
case LONGTEXT:
return sqltypes.Text
case keywordStrings[BLOB]:
case BLOB:
return sqltypes.Blob
case keywordStrings[TINYBLOB]:
case TINYBLOB:
return sqltypes.Blob
case keywordStrings[MEDIUMBLOB]:
case MEDIUMBLOB:
return sqltypes.Blob
case keywordStrings[LONGBLOB]:
case LONGBLOB:
return sqltypes.Blob
case keywordStrings[CHAR]:
case CHAR:
return sqltypes.Char
case keywordStrings[VARCHAR]:
case VARCHAR:
return sqltypes.VarChar
case keywordStrings[BINARY]:
case BINARY:
return sqltypes.Binary
case keywordStrings[VARBINARY]:
case VARBINARY:
return sqltypes.VarBinary
case keywordStrings[DATE]:
case DATE:
return sqltypes.Date
case keywordStrings[TIME]:
case TIME:
return sqltypes.Time
case keywordStrings[DATETIME]:
case DATETIME:
return sqltypes.Datetime
case keywordStrings[TIMESTAMP]:
case TIMESTAMP:
return sqltypes.Timestamp
case keywordStrings[YEAR]:
case YEAR:
return sqltypes.Year
case keywordStrings[FLOAT_TYPE]:
case FLOAT_TYPE:
return sqltypes.Float32
case keywordStrings[DOUBLE]:
case DOUBLE:
return sqltypes.Float64
case keywordStrings[DECIMAL]:
case DECIMAL, DECIMAL_TYPE:
return sqltypes.Decimal
case keywordStrings[BIT]:
case BIT:
return sqltypes.Bit
case keywordStrings[ENUM]:
case ENUM:
return sqltypes.Enum
case keywordStrings[SET]:
case SET:
return sqltypes.Set
case keywordStrings[JSON]:
case JSON:
return sqltypes.TypeJSON
case keywordStrings[GEOMETRY]:
case GEOMETRY:
return sqltypes.Geometry
case keywordStrings[POINT]:
case POINT:
return sqltypes.Geometry
case keywordStrings[LINESTRING]:
case LINESTRING:
return sqltypes.Geometry
case keywordStrings[POLYGON]:
case POLYGON:
return sqltypes.Geometry
case keywordStrings[GEOMETRYCOLLECTION]:
case GEOMETRYCOLLECTION:
return sqltypes.Geometry
case keywordStrings[MULTIPOINT]:
case MULTIPOINT:
return sqltypes.Geometry
case keywordStrings[MULTILINESTRING]:
case MULTILINESTRING:
return sqltypes.Geometry
case keywordStrings[MULTIPOLYGON]:
case MULTIPOLYGON:
return sqltypes.Geometry
}
return sqltypes.Null
Expand Down
2 changes: 2 additions & 0 deletions go/vt/sqlparser/keywords.go
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,7 @@ var keywords = []keyword{

// keywordStrings contains the reverse mapping of token to keyword strings
var keywordStrings = map[int]string{}
var keywordVals = map[string]int{}

// keywordLookupTable is a perfect hash map that maps **case insensitive** keyword names to their ids
var keywordLookupTable *caseInsensitiveTable
Expand Down Expand Up @@ -738,6 +739,7 @@ func init() {
panic(fmt.Sprintf("keyword %q must be lowercase in table", kw.name))
}
keywordStrings[kw.id] = kw.name
keywordVals[kw.name] = kw.id
}

keywordLookupTable = buildCaseInsensitiveTable(keywords)
Expand Down
13 changes: 12 additions & 1 deletion go/vt/vtgate/planbuilder/plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import (
"github.com/nsf/jsondiff"
"github.com/stretchr/testify/require"

"vitess.io/vitess/go/vt/servenv"

vtgatepb "vitess.io/vitess/go/vt/proto/vtgate"

"vitess.io/vitess/go/test/utils"
Expand Down Expand Up @@ -250,10 +252,19 @@ func TestPlan(t *testing.T) {
testFile(t, "flush_cases_no_default_keyspace.json", testOutputTempDir, vschemaWrapper, false)
testFile(t, "show_cases_no_default_keyspace.json", testOutputTempDir, vschemaWrapper, false)
testFile(t, "stream_cases.json", testOutputTempDir, vschemaWrapper, false)
testFile(t, "systemtables_cases.json", testOutputTempDir, vschemaWrapper, false)
testFile(t, "systemtables_cases80.json", testOutputTempDir, vschemaWrapper, false)
testFile(t, "reference_cases.json", testOutputTempDir, vschemaWrapper, false)
}

func TestSystemTables57(t *testing.T) {
// first we move everything to use 5.7 logic
servenv.SetMySQLServerVersionForTest("5.7")
defer servenv.SetMySQLServerVersionForTest("")
vschemaWrapper := &vschemaWrapper{v: loadSchema(t, "vschemas/schema.json", true)}
testOutputTempDir := makeTestOutput(t)
testFile(t, "systemtables_cases57.json", testOutputTempDir, vschemaWrapper, false)
}

func TestSysVarSetDisabled(t *testing.T) {
vschemaWrapper := &vschemaWrapper{
v: loadSchema(t, "vschemas/schema.json", true),
Expand Down
Loading