From 34e08210d9fbcea89e9204cb7842e9f0b72aa0f6 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Wed, 6 May 2020 21:20:34 -0700 Subject: [PATCH 1/7] Unskipped many skipped select tests, deleted some that were actually syntax errors. Signed-off-by: Zach Musgrave --- go/libraries/doltcore/sqle/sqlselect_test.go | 86 +++++--------------- 1 file changed, 22 insertions(+), 64 deletions(-) diff --git a/go/libraries/doltcore/sqle/sqlselect_test.go b/go/libraries/doltcore/sqle/sqlselect_test.go index 3553867d543..6192018f35a 100644 --- a/go/libraries/doltcore/sqle/sqlselect_test.go +++ b/go/libraries/doltcore/sqle/sqlselect_test.go @@ -354,13 +354,11 @@ var BasicSelectTests = []SelectTest{ Name: "select *, in clause, mixed types", Query: "select * from people where first_name in ('Homer', 40)", ExpectedErr: "Type mismatch: mixed types in list literal '('Homer', 40)'", - SkipOnSqlEngine: true, }, { Name: "select *, in clause, mixed numeric types", Query: "select * from people where age in (-10.0, 40)", ExpectedErr: "Type mismatch: mixed types in list literal '(-10.0, 40)'", - SkipOnSqlEngine: true, }, { Name: "select *, not in clause", @@ -378,7 +376,6 @@ var BasicSelectTests = []SelectTest{ Name: "select *, in clause single type mismatch", Query: "select * from people where first_name in (1.0)", ExpectedErr: "Type mismatch:", - SkipOnSqlEngine: true, }, { Name: "select *, is null clause ", @@ -420,7 +417,6 @@ var BasicSelectTests = []SelectTest{ Name: "select *, is true clause on non-bool column", Query: "select * from people where age is true", ExpectedErr: "Type mismatch:", - SkipOnSqlEngine: true, }, { Name: "binary expression in select", @@ -461,7 +457,7 @@ var BasicSelectTests = []SelectTest{ Query: "select -age as age from people where is_married order by people.age", ExpectedRows: ToSqlRows(NewResultSetSchema("age", types.IntKind), NewResultSetRow(types.Int(-38)), NewResultSetRow(types.Int(-40))), ExpectedSchema: NewResultSetSchema("age", types.IntKind), - SkipOnSqlEngine: true, + SkipOnSqlEngine: true, // this seems to be a bug in the engine }, { Name: "select *, -column", @@ -473,7 +469,6 @@ var BasicSelectTests = []SelectTest{ Name: "select *, -column, string type", Query: "select * from people where -first_name = 'Homer'", ExpectedErr: "Unsupported type for unary - operation: varchar", - SkipOnSqlEngine: true, }, { Name: "select *, binary + in where", @@ -510,37 +505,31 @@ var BasicSelectTests = []SelectTest{ Query: "select * from people where age / 4 + 2 * 2 = 14", ExpectedRows: ToSqlRows(PeopleTestSchema, Homer, Barney), ExpectedSchema: CompressSchema(PeopleTestSchema), - SkipOnSqlEngine: true, }, { Name: "select *, binary + in where type mismatch", Query: "select * from people where first_name + 1 = 41", ExpectedErr: "Type mismatch evaluating expression 'first_name + 1'", - SkipOnSqlEngine: true, }, { Name: "select *, binary - in where type mismatch", Query: "select * from people where first_name - 1 = 39", ExpectedErr: "Type mismatch evaluating expression 'first_name - 1'", - SkipOnSqlEngine: true, }, { Name: "select *, binary / in where type mismatch", Query: "select * from people where first_name / 2 = 20", ExpectedErr: "Type mismatch evaluating expression 'first_name / 2'", - SkipOnSqlEngine: true, }, { Name: "select *, binary * in where type mismatch", Query: "select * from people where first_name * 2 = 80", ExpectedErr: "Type mismatch evaluating expression 'first_name * 2'", - SkipOnSqlEngine: true, }, { Name: "select *, binary % in where type mismatch", Query: "select * from people where first_name % 4 = 0", ExpectedErr: "Type mismatch evaluating expression 'first_name % 4'", - SkipOnSqlEngine: true, }, { Name: "select * with where, order by", @@ -576,25 +565,20 @@ var BasicSelectTests = []SelectTest{ }, ExpectedSchema: NewResultSetSchema("first_name", types.StringKind, "first_name", types.StringKind), }, - - // TODO: fix this. To make this work we need to track selected tables along with their aliases. It's not an error to - // select the same table multiple times, as long as each occurrence has a unique name - // { - // name: "duplicate table selection", - // query: "select first_name as f, last_name as f from people, people where age >= 40", - // expectedErr: "Non-unique table name / alias: 'people'", - // }, + { + Name: "duplicate table selection", + Query: "select first_name as f, last_name as f from people, people where age >= 40", + ExpectedErr: "Non-unique table name / alias: 'people'", + }, { Name: "duplicate table alias", Query: "select * from people p, people p where age >= 40", ExpectedErr: "Non-unique table name / alias: 'p'", - SkipOnSqlEngine: true, }, { Name: "column aliases in where clause", Query: `select first_name as f, last_name as l from people where f = "Homer"`, ExpectedErr: "Unknown column: 'f'", - SkipOnSqlEngine: true, }, { Name: "select subset of columns with order by", @@ -612,17 +596,16 @@ var BasicSelectTests = []SelectTest{ Name: "ambiguous column in order by", Query: "select first_name as f, last_name as f from people order by f", ExpectedErr: "Ambiguous column: 'f'", - SkipOnSqlEngine: true, }, { Name: "table aliases", - Query: "select p.first_name as f, people.last_name as l from people p where p.first_name = 'Homer'", + Query: "select p.first_name as f, p.last_name as l from people p where p.first_name = 'Homer'", ExpectedRows: ToSqlRows(resultset.SubsetSchema(PeopleTestSchema, "first_name", "last_name"), Homer), ExpectedSchema: NewResultSetSchema("f", types.StringKind, "l", types.StringKind), }, { Name: "table aliases without column aliases", - Query: "select p.first_name, people.last_name from people p where p.first_name = 'Homer'", + Query: "select p.first_name, p.last_name from people p where p.first_name = 'Homer'", ExpectedRows: ToSqlRows(resultset.SubsetSchema(PeopleTestSchema, "first_name", "last_name"), Homer), ExpectedSchema: NewResultSetSchema("first_name", types.StringKind, "last_name", types.StringKind), }, @@ -683,7 +666,6 @@ var BasicSelectTests = []SelectTest{ Name: "no table", Query: "select 1", ExpectedErr: `Selects without a table are not supported:`, - SkipOnSqlEngine: true, // not actually an error, just not supported by our implementation }, { Name: "unknown column in where", @@ -694,7 +676,6 @@ var BasicSelectTests = []SelectTest{ Name: "unknown column in order by", Query: "select * from people where rating > 8.0 order by dne", ExpectedErr: `Unknown column: 'dne'`, - SkipOnSqlEngine: true, }, { Name: "unsupported comparison", @@ -705,7 +686,6 @@ var BasicSelectTests = []SelectTest{ Name: "type mismatch in where clause", Query: `select * from people where id = "0"`, ExpectedErr: "Type mismatch:", - SkipOnSqlEngine: true, }, { Name: "select * from log system table", @@ -936,6 +916,10 @@ var AsOfTests = []SelectTest{ } // SQL is supposed to be case insensitive. These are tests of that promise. +// Many of these are currently broken in go-myqsl-server. The queries return the correct results in all cases, but the +// column names in the result schemas often have the wrong case. They sometimes use the case from the table, rather +// than the case of the expression in the query (the correct behavior). This is a minor issue, but we should fix it +// eventually. var CaseSensitivityTests = []SelectTest{ { Name: "table name has mixed case, select lower case", @@ -972,6 +956,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select mixedcAse.TeSt from MIXEDCASE", ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, }, { Name: "table alias select *", @@ -990,6 +975,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select mC.TeSt from MIXEDCASE as MC", ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, }, { Name: "multiple tables with the same case-insensitive name, exact match", @@ -1003,15 +989,6 @@ var CaseSensitivityTests = []SelectTest{ ExpectedSchema: NewResultSetSchema("test", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, }, - { - Name: "multiple tables with the same case-insensitive name, no exact match", - AdditionalSetup: Compose( - CreateTableWithRowsFn("tableName", NewSchemaForTable("tableName1", "test", types.StringKind)), - CreateTableWithRowsFn("TABLENAME", NewSchemaForTable("tableName2", "test", types.StringKind)), - ), - Query: "select test from tablename", - ExpectedErr: "Ambiguous table: 'tablename'", - }, { Name: "alias with same name as table", AdditionalSetup: Compose( @@ -1038,6 +1015,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select mixedcase from test", ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, }, { Name: "column name has mixed case, select upper case", @@ -1047,6 +1025,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select MIXEDCASE from test", ExpectedSchema: NewResultSetSchema("MIXEDCASE", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, }, { Name: "select with multiple matching columns, exact match", @@ -1056,31 +1035,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select mixedcase from test", ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, - }, - { - Name: "select with multiple matching columns, exact match #2", - AdditionalSetup: CreateTableWithRowsFn("test", - NewSchema("MiXeDcAsE", types.StringKind, "mixedcase", types.StringKind), - []types.Value{types.String("1"), types.String("2")}), - Query: "select MiXeDcAsE from test", - ExpectedSchema: NewResultSetSchema("MiXeDcAsE", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, - }, - { - Name: "select with multiple matching columns, no exact match", - AdditionalSetup: CreateTableWithRowsFn("test", - NewSchema("MiXeDcAsE", types.StringKind, "mixedcase", types.StringKind), - []types.Value{types.String("1"), types.String("2")}), - Query: "select MIXEDCASE from test", - ExpectedErr: "Ambiguous column: 'MIXEDCASE'", - }, - { - Name: "select with multiple matching columns, no exact match, table alias", - AdditionalSetup: CreateTableWithRowsFn("test", - NewSchema("MiXeDcAsE", types.StringKind, "mixedcase", types.StringKind), - []types.Value{types.String("1"), types.String("2")}), - Query: "select t.MIXEDCASE from test t", - ExpectedErr: "Ambiguous column: 'MIXEDCASE'", + SkipOnSqlEngine: true, // TODO: table should be illegal. field names cannot be the same case-insensitive }, { Name: "column is reserved word, select not backticked", @@ -1116,6 +1071,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select Year from test", ExpectedSchema: NewResultSetSchema("Year", types.StringKind), ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, }, { Name: "column is reserved word, select backticked", @@ -1129,6 +1085,7 @@ var CaseSensitivityTests = []SelectTest{ Query: "select `Timestamp` from test", ExpectedRows: []sql.Row{{"1"}}, ExpectedSchema: NewResultSetSchema("Timestamp", types.StringKind), + SkipOnSqlEngine: true, }, { Name: "column is reserved word, select backticked #2", @@ -1146,6 +1103,7 @@ var CaseSensitivityTests = []SelectTest{ "SELect", types.StringKind, "anD", types.StringKind), ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, + SkipOnSqlEngine: true, }, { Name: "column is reserved word, table qualified", @@ -1156,13 +1114,14 @@ var CaseSensitivityTests = []SelectTest{ "or", types.StringKind, "select", types.StringKind), []types.Value{types.String("1"), types.String("1.1"), types.String("aaa"), types.String("create")}), - Query: "select Year, test.OR, t.SELect, t.anD from test t", + Query: "select Year, t.OR, t.SELect, t.anD from test t", ExpectedSchema: NewResultSetSchema( "Year", types.StringKind, "OR", types.StringKind, "SELect", types.StringKind, "anD", types.StringKind), ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, + SkipOnSqlEngine: true, }, } @@ -1467,7 +1426,6 @@ func TestJoins(t *testing.T) { func TestCaseSensitivity(t *testing.T) { for _, tt := range CaseSensitivityTests { t.Run(tt.Name, func(t *testing.T) { - t.Skip("skipping case sensitivity tests until go-mysql-server is updated") testSelectQuery(t, tt) }) } From c55080ece6902251b9ee5467d827ba4748558c31 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 7 May 2020 09:30:18 -0700 Subject: [PATCH 2/7] Added skips for tests that expose bugs in go-mysql-server, unskipped remaining test queries Signed-off-by: Zach Musgrave --- go/libraries/doltcore/sqle/sqlselect_test.go | 59 ++++++++++++-------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/go/libraries/doltcore/sqle/sqlselect_test.go b/go/libraries/doltcore/sqle/sqlselect_test.go index 6192018f35a..ab61b520209 100644 --- a/go/libraries/doltcore/sqle/sqlselect_test.go +++ b/go/libraries/doltcore/sqle/sqlselect_test.go @@ -351,14 +351,16 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, in clause, mixed types", - Query: "select * from people where first_name in ('Homer', 40)", - ExpectedErr: "Type mismatch: mixed types in list literal '('Homer', 40)'", + Name: "select *, in clause, mixed types", + Query: "select * from people where first_name in ('Homer', 40)", + ExpectedSchema: CompressSchema(PeopleTestSchema), + ExpectedRows: ToSqlRows(PeopleTestSchema, Homer), }, { - Name: "select *, in clause, mixed numeric types", - Query: "select * from people where age in (-10.0, 40)", - ExpectedErr: "Type mismatch: mixed types in list literal '(-10.0, 40)'", + Name: "select *, in clause, mixed numeric types", + Query: "select * from people where age in (-10.0, 40)", + ExpectedSchema: CompressSchema(PeopleTestSchema), + ExpectedRows: ToSqlRows(PeopleTestSchema, Homer, Barney), }, { Name: "select *, not in clause", @@ -373,9 +375,10 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, in clause single type mismatch", - Query: "select * from people where first_name in (1.0)", - ExpectedErr: "Type mismatch:", + Name: "select *, in clause single type mismatch", + Query: "select * from people where first_name in (1.0)", + ExpectedRows: ToSqlRows(PeopleTestSchema), + ExpectedSchema: CompressSchema(PeopleTestSchema), }, { Name: "select *, is null clause ", @@ -414,9 +417,10 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, is true clause on non-bool column", - Query: "select * from people where age is true", - ExpectedErr: "Type mismatch:", + Name: "select *, is true clause on non-bool column", + Query: "select * from people where age is true", + ExpectedRows: ToSqlRows(PeopleTestSchema, AllPeopleRows...), + ExpectedSchema: CompressSchema(PeopleTestSchema), }, { Name: "binary expression in select", @@ -466,9 +470,10 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, -column, string type", - Query: "select * from people where -first_name = 'Homer'", - ExpectedErr: "Unsupported type for unary - operation: varchar", + Name: "select *, -column, string type", + Query: "select * from people where -first_name = 'Homer'", + ExpectedSchema: CompressSchema(PeopleTestSchema), + ExpectedRows: ToSqlRows(PeopleTestSchema, AllPeopleRows...), // A little weird, but correct due to mysql type conversion rules (both expression evaluate to 0 after conversion) }, { Name: "select *, binary + in where", @@ -568,7 +573,8 @@ var BasicSelectTests = []SelectTest{ { Name: "duplicate table selection", Query: "select first_name as f, last_name as f from people, people where age >= 40", - ExpectedErr: "Non-unique table name / alias: 'people'", + ExpectedErr: "Non-unique table name / alias: people", + SkipOnSqlEngine: true, // this should be an error (table name selected twice without an alias) }, { Name: "duplicate table alias", @@ -579,6 +585,7 @@ var BasicSelectTests = []SelectTest{ Name: "column aliases in where clause", Query: `select first_name as f, last_name as l from people where f = "Homer"`, ExpectedErr: "Unknown column: 'f'", + SkipOnSqlEngine: true, // this is actually a bug (aliases aren't usable in filters) }, { Name: "select subset of columns with order by", @@ -596,6 +603,7 @@ var BasicSelectTests = []SelectTest{ Name: "ambiguous column in order by", Query: "select first_name as f, last_name as f from people order by f", ExpectedErr: "Ambiguous column: 'f'", + SkipOnSqlEngine: true, // this is a bug in go-mysql-server }, { Name: "table aliases", @@ -663,9 +671,15 @@ var BasicSelectTests = []SelectTest{ ExpectedErr: `Unknown table: 'dne'`, }, { - Name: "no table", - Query: "select 1", - ExpectedErr: `Selects without a table are not supported:`, + Name: "no table", + Query: "select 1", + ExpectedSqlSchema: sql.Schema{ + &sql.Column{ + Name: "1", + Type: sql.Int8, + }, + }, + ExpectedRows: []sql.Row{{int8(1)}}, }, { Name: "unknown column in where", @@ -683,9 +697,10 @@ var BasicSelectTests = []SelectTest{ ExpectedErr: "not supported", }, { - Name: "type mismatch in where clause", - Query: `select * from people where id = "0"`, - ExpectedErr: "Type mismatch:", + Name: "type mismatch in where clause", + Query: `select * from people where id = "0"`, + ExpectedSchema: CompressSchema(PeopleTestSchema), + ExpectedRows: ToSqlRows(PeopleTestSchema, Homer), }, { Name: "select * from log system table", From bfb8e1d130c6d8d92d810230b29ff9ceaf59085d Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 7 May 2020 09:53:59 -0700 Subject: [PATCH 3/7] Updated to latest go-mysql-server (not on master yet) Signed-off-by: Zach Musgrave --- go/go.mod | 2 +- go/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/go.mod b/go/go.mod index 12c216be2c6..8acff768085 100644 --- a/go/go.mod +++ b/go/go.mod @@ -44,7 +44,7 @@ require ( github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6 github.com/kr/pretty v0.2.0 // indirect github.com/liquidata-inc/dolt/go/gen/proto/dolt/services/eventsapi v0.0.0-20200320155049-a8e482faeffd - github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200505234149-6d3489b3f86f + github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97 github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0 github.com/liquidata-inc/mmap-go v1.0.3 github.com/liquidata-inc/sqllogictest/go v0.0.0-20200320151923-b11801f10e15 diff --git a/go/go.sum b/go/go.sum index 0df4febcbbb..38fb7c4fe23 100644 --- a/go/go.sum +++ b/go/go.sum @@ -389,8 +389,8 @@ github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200505234149-6d3489b3f86f h1:djLvNwNHcQ4ulwVkYYhh9R+sspeGbqr/UpiF3FZ7xBU= -github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200505234149-6d3489b3f86f/go.mod h1:Qo0l83LdX5Z77p0tTLyJTrttZywFm0S+RYo6Shi97tw= +github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97 h1:izxzVLbN4OxAfVd4mxKSoVxRSA9F3sfdiixbq9Me3Wo= +github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97/go.mod h1:Qo0l83LdX5Z77p0tTLyJTrttZywFm0S+RYo6Shi97tw= github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0 h1:phMgajKClMUiIr+hF2LGt8KRuUa2Vd2GI1sNgHgSXoU= github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0/go.mod h1:YC1rI9k5gx8D02ljlbxDfZe80s/iq8bGvaaQsvR+qxs= github.com/liquidata-inc/mmap-go v1.0.3 h1:2LndAeAtup9rpvUmu4wZSYCsjCQ0Zpc+NqE+6+PnT7g= From e24d6ffeea1d8a99156711c663af999bfd1f4175 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 7 May 2020 10:15:36 -0700 Subject: [PATCH 4/7] Unskipped and expanded case insensitivity tests Signed-off-by: Zach Musgrave --- ...olumn-names.bats => case-sensitivity.bats} | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) rename bats/{capital-letter-column-names.bats => case-sensitivity.bats} (65%) diff --git a/bats/capital-letter-column-names.bats b/bats/case-sensitivity.bats similarity index 65% rename from bats/capital-letter-column-names.bats rename to bats/case-sensitivity.bats index 93d929bcd46..b0ebbed729a 100644 --- a/bats/capital-letter-column-names.bats +++ b/bats/case-sensitivity.bats @@ -75,6 +75,39 @@ teardown() { @test "capital letter column names. select with an as" { run dolt sql -q "select Aaa as AAA from test" [ "$status" -eq 0 ] - skip "select as lowercases everything right now" [[ "$output" =~ "AAA" ]] || false } + +@test "select table case insensitive, table and column" { + run dolt sql -r csv -q "select aaa as AAA from TEST order by 1 limit 1" + [ "$status" -eq 0 ] + [[ "$output" =~ "AAA" ]] || false +} + +@test "select table case insensitive, table and column" { + run dolt sql -r csv -q "select Test.aaa as AAA from TEST order by 1 limit 1" + [ "$status" -eq 0 ] + [[ "$output" =~ "AAA" ]] || false + [[ "$output" =~ "1" ]] || false +} + +@test "select table alias case insensitive" { + run dolt sql -r csv -q "select t.aaA as AaA from TEST T order by 1 limit 1" + [ "$status" -eq 0 ] + [[ "$output" =~ "AaA" ]] || false + [[ "$output" =~ "1" ]] || false +} + +@test "select reserved word, preserve case" { + run dolt sql -q "select 1 as DaTe" + [ "$status" -eq 0 ] + [[ "$output" =~ "DaTe" ]] || false +} + +@test "select column with different case" { + run dolt sql -q "select AaA from Test order by 1 limit 1" + [ "$status" -eq 0 ] + [[ "$output" =~ "1" ]] || false + skip "Column names come back as the table declares them, not as written in the query" + [[ "$output" =~ "AaA" ]] || false +} From acb5cd74c56ba34ef1cb590ca8d0e72444472e15 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 7 May 2020 10:41:15 -0700 Subject: [PATCH 5/7] Test for issue #581 Signed-off-by: Zach Musgrave --- bats/create-views.bats | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/bats/create-views.bats b/bats/create-views.bats index ce9562c6da2..896865391c4 100644 --- a/bats/create-views.bats +++ b/bats/create-views.bats @@ -113,6 +113,25 @@ SQL [[ "${lines[8]}" =~ ' 6 ' ]] || false } +@test "select view with alias" { + run dolt sql < Date: Fri, 8 May 2020 10:27:34 -0700 Subject: [PATCH 6/7] Upgraded go-mysql-server and fixed error in bats test Signed-off-by: Zach Musgrave --- bats/sql.bats | 8 +++++++- go/go.mod | 2 +- go/go.sum | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/bats/sql.bats b/bats/sql.bats index 8be622c6b62..f4337b0c933 100755 --- a/bats/sql.bats +++ b/bats/sql.bats @@ -209,12 +209,18 @@ SQL } @test "sql select same column twice using table aliases" { - run dolt sql -q "select pk,foo.c1,bar.c1 from one_pk as foo, one_pk as bar" + run dolt sql -q "select foo.pk,foo.c1,bar.c1 from one_pk as foo, one_pk as bar" [ "$status" -eq 0 ] [[ ! "$output" =~ "" ]] || false [[ "$output" =~ "c1" ]] || false } +@test "sql select ambiguous column using table aliases" { + run dolt sql -q "select pk,foo.c1,bar.c1 from one_pk as foo, one_pk as bar" + [ "$status" -eq 1 ] + [[ "$output" =~ "ambiguous" ]] || false +} + @test "sql basic inner join" { run dolt sql -q "select pk,pk1,pk2 from one_pk join two_pk on one_pk.c1=two_pk.c1" [ "$status" -eq 0 ] diff --git a/go/go.mod b/go/go.mod index 8acff768085..8fcf35532d3 100644 --- a/go/go.mod +++ b/go/go.mod @@ -44,7 +44,7 @@ require ( github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6 github.com/kr/pretty v0.2.0 // indirect github.com/liquidata-inc/dolt/go/gen/proto/dolt/services/eventsapi v0.0.0-20200320155049-a8e482faeffd - github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97 + github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200508170854-b74c3414aebf github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0 github.com/liquidata-inc/mmap-go v1.0.3 github.com/liquidata-inc/sqllogictest/go v0.0.0-20200320151923-b11801f10e15 diff --git a/go/go.sum b/go/go.sum index 38fb7c4fe23..80db6710932 100644 --- a/go/go.sum +++ b/go/go.sum @@ -389,8 +389,8 @@ github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97 h1:izxzVLbN4OxAfVd4mxKSoVxRSA9F3sfdiixbq9Me3Wo= -github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200507164732-ef21cc0bcb97/go.mod h1:Qo0l83LdX5Z77p0tTLyJTrttZywFm0S+RYo6Shi97tw= +github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200508170854-b74c3414aebf h1:zgJXH8Lk9gMobF523ZySkdFAuoPcgnIwbBfjrtGuJJ0= +github.com/liquidata-inc/go-mysql-server v0.5.1-0.20200508170854-b74c3414aebf/go.mod h1:Qo0l83LdX5Z77p0tTLyJTrttZywFm0S+RYo6Shi97tw= github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0 h1:phMgajKClMUiIr+hF2LGt8KRuUa2Vd2GI1sNgHgSXoU= github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0/go.mod h1:YC1rI9k5gx8D02ljlbxDfZe80s/iq8bGvaaQsvR+qxs= github.com/liquidata-inc/mmap-go v1.0.3 h1:2LndAeAtup9rpvUmu4wZSYCsjCQ0Zpc+NqE+6+PnT7g= From 218d937753f9da371d831bf8abaac0b49a1bc0ba Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 8 May 2020 11:00:29 -0700 Subject: [PATCH 7/7] Formatting Signed-off-by: Zach Musgrave --- go/libraries/doltcore/sqle/sqlselect_test.go | 104 +++++++++---------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/go/libraries/doltcore/sqle/sqlselect_test.go b/go/libraries/doltcore/sqle/sqlselect_test.go index ab61b520209..b0dd9f52501 100644 --- a/go/libraries/doltcore/sqle/sqlselect_test.go +++ b/go/libraries/doltcore/sqle/sqlselect_test.go @@ -506,35 +506,35 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, complex binary expr in where", - Query: "select * from people where age / 4 + 2 * 2 = 14", - ExpectedRows: ToSqlRows(PeopleTestSchema, Homer, Barney), - ExpectedSchema: CompressSchema(PeopleTestSchema), + Name: "select *, complex binary expr in where", + Query: "select * from people where age / 4 + 2 * 2 = 14", + ExpectedRows: ToSqlRows(PeopleTestSchema, Homer, Barney), + ExpectedSchema: CompressSchema(PeopleTestSchema), }, { - Name: "select *, binary + in where type mismatch", - Query: "select * from people where first_name + 1 = 41", - ExpectedErr: "Type mismatch evaluating expression 'first_name + 1'", + Name: "select *, binary + in where type mismatch", + Query: "select * from people where first_name + 1 = 41", + ExpectedErr: "Type mismatch evaluating expression 'first_name + 1'", }, { - Name: "select *, binary - in where type mismatch", - Query: "select * from people where first_name - 1 = 39", - ExpectedErr: "Type mismatch evaluating expression 'first_name - 1'", + Name: "select *, binary - in where type mismatch", + Query: "select * from people where first_name - 1 = 39", + ExpectedErr: "Type mismatch evaluating expression 'first_name - 1'", }, { - Name: "select *, binary / in where type mismatch", - Query: "select * from people where first_name / 2 = 20", - ExpectedErr: "Type mismatch evaluating expression 'first_name / 2'", + Name: "select *, binary / in where type mismatch", + Query: "select * from people where first_name / 2 = 20", + ExpectedErr: "Type mismatch evaluating expression 'first_name / 2'", }, { - Name: "select *, binary * in where type mismatch", - Query: "select * from people where first_name * 2 = 80", - ExpectedErr: "Type mismatch evaluating expression 'first_name * 2'", + Name: "select *, binary * in where type mismatch", + Query: "select * from people where first_name * 2 = 80", + ExpectedErr: "Type mismatch evaluating expression 'first_name * 2'", }, { - Name: "select *, binary % in where type mismatch", - Query: "select * from people where first_name % 4 = 0", - ExpectedErr: "Type mismatch evaluating expression 'first_name % 4'", + Name: "select *, binary % in where type mismatch", + Query: "select * from people where first_name % 4 = 0", + ExpectedErr: "Type mismatch evaluating expression 'first_name % 4'", }, { Name: "select * with where, order by", @@ -571,15 +571,15 @@ var BasicSelectTests = []SelectTest{ ExpectedSchema: NewResultSetSchema("first_name", types.StringKind, "first_name", types.StringKind), }, { - Name: "duplicate table selection", - Query: "select first_name as f, last_name as f from people, people where age >= 40", - ExpectedErr: "Non-unique table name / alias: people", + Name: "duplicate table selection", + Query: "select first_name as f, last_name as f from people, people where age >= 40", + ExpectedErr: "Non-unique table name / alias: people", SkipOnSqlEngine: true, // this should be an error (table name selected twice without an alias) }, { - Name: "duplicate table alias", - Query: "select * from people p, people p where age >= 40", - ExpectedErr: "Non-unique table name / alias: 'p'", + Name: "duplicate table alias", + Query: "select * from people p, people p where age >= 40", + ExpectedErr: "Non-unique table name / alias: 'p'", }, { Name: "column aliases in where clause", @@ -687,9 +687,9 @@ var BasicSelectTests = []SelectTest{ ExpectedErr: `Unknown column: 'dne'`, }, { - Name: "unknown column in order by", - Query: "select * from people where rating > 8.0 order by dne", - ExpectedErr: `Unknown column: 'dne'`, + Name: "unknown column in order by", + Query: "select * from people where rating > 8.0 order by dne", + ExpectedErr: `Unknown column: 'dne'`, }, { Name: "unsupported comparison", @@ -968,9 +968,9 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("MiXeDcAsE", NewSchema("test", types.StringKind), []types.Value{types.String("1")}), - Query: "select mixedcAse.TeSt from MIXEDCASE", - ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, + Query: "select mixedcAse.TeSt from MIXEDCASE", + ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, SkipOnSqlEngine: true, }, { @@ -987,9 +987,9 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("MiXeDcAsE", NewSchema("test", types.StringKind), []types.Value{types.String("1")}), - Query: "select mC.TeSt from MIXEDCASE as MC", - ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, + Query: "select mC.TeSt from MIXEDCASE as MC", + ExpectedSchema: NewResultSetSchema("TeSt", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, SkipOnSqlEngine: true, }, { @@ -1027,9 +1027,9 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("test", NewSchema("MiXeDcAsE", types.StringKind), []types.Value{types.String("1")}), - Query: "select mixedcase from test", - ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, + Query: "select mixedcase from test", + ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, SkipOnSqlEngine: true, }, { @@ -1037,9 +1037,9 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("test", NewSchema("MiXeDcAsE", types.StringKind), []types.Value{types.String("1")}), - Query: "select MIXEDCASE from test", - ExpectedSchema: NewResultSetSchema("MIXEDCASE", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, + Query: "select MIXEDCASE from test", + ExpectedSchema: NewResultSetSchema("MIXEDCASE", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, SkipOnSqlEngine: true, }, { @@ -1047,10 +1047,10 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("test", NewSchema("MiXeDcAsE", types.StringKind, "mixedcase", types.StringKind), []types.Value{types.String("1"), types.String("2")}), - Query: "select mixedcase from test", - ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, - SkipOnSqlEngine: true, // TODO: table should be illegal. field names cannot be the same case-insensitive + Query: "select mixedcase from test", + ExpectedSchema: NewResultSetSchema("mixedcase", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, + SkipOnSqlEngine: true, // TODO: table should be illegal. field names cannot be the same case-insensitive }, { Name: "column is reserved word, select not backticked", @@ -1083,9 +1083,9 @@ var CaseSensitivityTests = []SelectTest{ AdditionalSetup: CreateTableWithRowsFn("test", NewSchema("YeAr", types.StringKind), []types.Value{types.String("1")}), - Query: "select Year from test", - ExpectedSchema: NewResultSetSchema("Year", types.StringKind), - ExpectedRows: []sql.Row{{"1"}}, + Query: "select Year from test", + ExpectedSchema: NewResultSetSchema("Year", types.StringKind), + ExpectedRows: []sql.Row{{"1"}}, SkipOnSqlEngine: true, }, { @@ -1097,9 +1097,9 @@ var CaseSensitivityTests = []SelectTest{ "or", types.StringKind, "select", types.StringKind), []types.Value{types.String("1"), types.String("1.1"), types.String("aaa"), types.String("create")}), - Query: "select `Timestamp` from test", - ExpectedRows: []sql.Row{{"1"}}, - ExpectedSchema: NewResultSetSchema("Timestamp", types.StringKind), + Query: "select `Timestamp` from test", + ExpectedRows: []sql.Row{{"1"}}, + ExpectedSchema: NewResultSetSchema("Timestamp", types.StringKind), SkipOnSqlEngine: true, }, { @@ -1117,7 +1117,7 @@ var CaseSensitivityTests = []SelectTest{ "OR", types.StringKind, "SELect", types.StringKind, "anD", types.StringKind), - ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, + ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, SkipOnSqlEngine: true, }, { @@ -1135,7 +1135,7 @@ var CaseSensitivityTests = []SelectTest{ "OR", types.StringKind, "SELect", types.StringKind, "anD", types.StringKind), - ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, + ExpectedRows: []sql.Row{{"1", "aaa", "create", "1.1"}}, SkipOnSqlEngine: true, }, }