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,
},
}