Skip to content

Commit 03b6054

Browse files
authored
Merge pull request #3215 from dolthub/angela/casting
Trim strings before converting to bool
2 parents 1b9f80d + fbc08af commit 03b6054

File tree

6 files changed

+216
-143
lines changed

6 files changed

+216
-143
lines changed

enginetest/queries/script_queries.go

Lines changed: 145 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"math"
1919
"time"
2020

21+
"github.com/dolthub/vitess/go/mysql"
2122
"github.com/dolthub/vitess/go/sqltypes"
2223
"github.com/dolthub/vitess/go/vt/sqlparser"
2324
"gopkg.in/src-d/go-errors.v1"
@@ -140,76 +141,76 @@ var ScriptTests = []ScriptTest{
140141
Name: "String-to-number comparison operators should behave consistently",
141142
Assertions: []ScriptTestAssertion{
142143
{
143-
Dialect: "mysql",
144-
Query: "SELECT ('A') = (0)",
145-
Expected: []sql.Row{{true}},
146-
//ExpectedWarningsCount: 1,
147-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
148-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
144+
Dialect: "mysql",
145+
Query: "SELECT ('A') = (0)",
146+
Expected: []sql.Row{{true}},
147+
ExpectedWarningsCount: 1,
148+
ExpectedWarning: mysql.ERTruncatedWrongValue,
149+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
149150
},
150151
{
151-
Dialect: "mysql",
152-
Query: "SELECT ('A') IN (0)",
153-
Expected: []sql.Row{{true}},
154-
//ExpectedWarningsCount: 1,
155-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
156-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
152+
Dialect: "mysql",
153+
Query: "SELECT ('A') IN (0)",
154+
Expected: []sql.Row{{true}},
155+
ExpectedWarningsCount: 1,
156+
ExpectedWarning: mysql.ERTruncatedWrongValue,
157+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
157158
},
158159
{
159-
Dialect: "mysql",
160-
Query: "SELECT ('A') != (0)",
161-
Expected: []sql.Row{{false}},
162-
//ExpectedWarningsCount: 1,
163-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
164-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
160+
Dialect: "mysql",
161+
Query: "SELECT ('A') != (0)",
162+
Expected: []sql.Row{{false}},
163+
ExpectedWarningsCount: 1,
164+
ExpectedWarning: mysql.ERTruncatedWrongValue,
165+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
165166
},
166167
{
167-
Dialect: "mysql",
168-
Query: "SELECT ('A') <> (0)",
169-
Expected: []sql.Row{{false}},
170-
//ExpectedWarningsCount: 1,
171-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
172-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
168+
Dialect: "mysql",
169+
Query: "SELECT ('A') <> (0)",
170+
Expected: []sql.Row{{false}},
171+
ExpectedWarningsCount: 1,
172+
ExpectedWarning: mysql.ERTruncatedWrongValue,
173+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
173174
},
174175
{
175-
Dialect: "mysql",
176-
Query: "SELECT ('A') < (0)",
177-
Expected: []sql.Row{{false}},
178-
//ExpectedWarningsCount: 1,
179-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
180-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
176+
Dialect: "mysql",
177+
Query: "SELECT ('A') < (0)",
178+
Expected: []sql.Row{{false}},
179+
ExpectedWarningsCount: 1,
180+
ExpectedWarning: mysql.ERTruncatedWrongValue,
181+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
181182
},
182183
{
183-
Dialect: "mysql",
184-
Query: "SELECT ('A') <= (0)",
185-
Expected: []sql.Row{{true}},
186-
//ExpectedWarningsCount: 1,
187-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
188-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
184+
Dialect: "mysql",
185+
Query: "SELECT ('A') <= (0)",
186+
Expected: []sql.Row{{true}},
187+
ExpectedWarningsCount: 1,
188+
ExpectedWarning: mysql.ERTruncatedWrongValue,
189+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
189190
},
190191
{
191-
Dialect: "mysql",
192-
Query: "SELECT ('A') > (0)",
193-
Expected: []sql.Row{{false}},
194-
//ExpectedWarningsCount: 1,
195-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
196-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
192+
Dialect: "mysql",
193+
Query: "SELECT ('A') > (0)",
194+
Expected: []sql.Row{{false}},
195+
ExpectedWarningsCount: 1,
196+
ExpectedWarning: mysql.ERTruncatedWrongValue,
197+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
197198
},
198199
{
199-
Dialect: "mysql",
200-
Query: "SELECT ('A') >= (0)",
201-
Expected: []sql.Row{{true}},
202-
//ExpectedWarningsCount: 1,
203-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
204-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
200+
Dialect: "mysql",
201+
Query: "SELECT ('A') >= (0)",
202+
Expected: []sql.Row{{true}},
203+
ExpectedWarningsCount: 1,
204+
ExpectedWarning: mysql.ERTruncatedWrongValue,
205+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
205206
},
206207
{
207-
Dialect: "mysql",
208-
Query: "SELECT ('A') NOT IN (0)",
209-
Expected: []sql.Row{{false}},
210-
//ExpectedWarningsCount: 1,
211-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
212-
//ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
208+
Dialect: "mysql",
209+
Query: "SELECT ('A') NOT IN (0)",
210+
Expected: []sql.Row{{false}},
211+
ExpectedWarningsCount: 1,
212+
ExpectedWarning: mysql.ERTruncatedWrongValue,
213+
ExpectedWarningMessageSubstring: "Truncated incorrect double value: A",
213214
},
214215
},
215216
},
@@ -11755,8 +11756,8 @@ select * from t1 except (
1175511756
{"5.932887e7abc", float32(5.932887e+07)},
1175611757
{"a1a1", float32(0)},
1175711758
},
11758-
//ExpectedWarningsCount: 12,
11759-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11759+
ExpectedWarningsCount: 12,
11760+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1176011761
},
1176111762
{
1176211763
Dialect: "mysql",
@@ -11781,8 +11782,8 @@ select * from t1 except (
1178111782
{"5.932887e7abc", 5.932887e+07},
1178211783
{"a1a1", 0.0},
1178311784
},
11784-
//ExpectedWarningsCount: 12,
11785-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11785+
ExpectedWarningsCount: 12,
11786+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1178611787
},
1178711788
{
1178811789
Dialect: "mysql",
@@ -11807,8 +11808,8 @@ select * from t1 except (
1180711808
{"5.932887e7abc", 5},
1180811809
{"a1a1", 0},
1180911810
},
11810-
//ExpectedWarningsCount: 12,
11811-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11811+
ExpectedWarningsCount: 16,
11812+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1181211813
},
1181311814
{
1181411815
Dialect: "mysql",
@@ -11833,8 +11834,10 @@ select * from t1 except (
1183311834
{"5.932887e7abc", uint64(5)},
1183411835
{"a1a1", uint64(0)},
1183511836
},
11836-
//ExpectedWarningsCount: 19,
11837-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11837+
// TODO: Should be 19. Missing warnings for "Cast to unsigned converted negative integer to its positive
11838+
// complement" (1105) https://github.com/dolthub/dolt/issues/9840
11839+
ExpectedWarningsCount: 16,
11840+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1183811841
},
1183911842
{
1184011843
Dialect: "mysql",
@@ -11859,13 +11862,14 @@ select * from t1 except (
1185911862
{"5.932887e7abc", "59328870.000"},
1186011863
{"a1a1", "0.000"},
1186111864
},
11862-
//ExpectedWarningsCount: 13,
11863-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11865+
// TODO: should be 13. Missing warning for "Incorrect DECIMAL value: '0' for column '' at row -1" (1366)
11866+
ExpectedWarningsCount: 12,
11867+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1186411868
},
1186511869
{
11866-
Query: "select * from test01 where pk in ('11')",
11867-
Expected: []sql.Row{{"11"}},
11868-
//ExpectedWarningsCount: 0,
11870+
Query: "select * from test01 where pk in ('11')",
11871+
Expected: []sql.Row{{"11"}},
11872+
ExpectedWarningsCount: 0,
1186911873
},
1187011874
{
1187111875
// https://github.com/dolthub/dolt/issues/9739
@@ -11878,8 +11882,8 @@ select * from t1 except (
1187811882
{"11d"},
1187911883
{"11wha?"},
1188011884
},
11881-
//ExpectedWarningsCount: 12,
11882-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11885+
ExpectedWarningsCount: 12,
11886+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1188311887
},
1188411888
{
1188511889
// https://github.com/dolthub/dolt/issues/9739
@@ -11891,8 +11895,8 @@ select * from t1 except (
1189111895
{" 3. 12 4"},
1189211896
{"3. 12 4"},
1189311897
},
11894-
//ExpectedWarningsCount: 12,
11895-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11898+
ExpectedWarningsCount: 12,
11899+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1189611900
},
1189711901
{
1189811902
// https://github.com/dolthub/dolt/issues/9739
@@ -11906,26 +11910,82 @@ select * from t1 except (
1190611910
{"+3.1234"},
1190711911
{"3. 12 4"},
1190811912
},
11909-
//ExpectedWarningsCount: 20,
11910-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11913+
ExpectedWarningsCount: 20,
11914+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1191111915
},
1191211916
{
1191311917
// https://github.com/dolthub/dolt/issues/9739
11914-
Skip: true,
11915-
Dialect: "mysql",
11916-
Query: "select * from test02 where pk in ('11asdf')",
11917-
Expected: []sql.Row{{"11"}},
11918-
//ExpectedWarningsCount: 1,
11919-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11918+
Skip: true,
11919+
Dialect: "mysql",
11920+
Query: "select * from test02 where pk in ('11asdf')",
11921+
Expected: []sql.Row{{"11"}},
11922+
ExpectedWarningsCount: 1,
11923+
ExpectedWarning: mysql.ERTruncatedWrongValue,
1192011924
},
1192111925
{
1192211926
// https://github.com/dolthub/dolt/issues/9739
11923-
Skip: true,
11924-
Dialect: "mysql",
11925-
Query: "select * from test02 where pk='11.12asdf'",
11926-
Expected: []sql.Row{},
11927-
//ExpectedWarningsCount: 1,
11928-
//ExpectedWarning: mysql.ERTruncatedWrongValue,
11927+
Skip: true,
11928+
Dialect: "mysql",
11929+
Query: "select * from test02 where pk='11.12asdf'",
11930+
Expected: []sql.Row{},
11931+
ExpectedWarningsCount: 1,
11932+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11933+
},
11934+
},
11935+
},
11936+
{
11937+
// https://github.com/dolthub/dolt/issues/9821
11938+
Name: "strings convert to booleans",
11939+
Assertions: []ScriptTestAssertion{
11940+
{
11941+
Dialect: "mysql",
11942+
Query: `select '3bxu' and true`,
11943+
Expected: []sql.Row{{true}},
11944+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11945+
ExpectedWarningsCount: 1,
11946+
},
11947+
{
11948+
Dialect: "mysql",
11949+
Query: "select '3bxu' or false",
11950+
Expected: []sql.Row{{true}},
11951+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11952+
ExpectedWarningsCount: 1,
11953+
},
11954+
{
11955+
Dialect: "mysql",
11956+
Query: "select '3bxu' xor false",
11957+
Expected: []sql.Row{{true}},
11958+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11959+
ExpectedWarningsCount: 1,
11960+
},
11961+
{
11962+
Query: "select '' or false",
11963+
Expected: []sql.Row{{false}},
11964+
ExpectedWarningsCount: 0,
11965+
},
11966+
{
11967+
Query: "select '0' or false",
11968+
Expected: []sql.Row{{false}},
11969+
ExpectedWarningsCount: 0,
11970+
},
11971+
{
11972+
Query: "select '00' or false",
11973+
Expected: []sql.Row{{false}},
11974+
ExpectedWarningsCount: 0,
11975+
},
11976+
{
11977+
Dialect: "mysql",
11978+
Query: "select '00asdf' or false",
11979+
Expected: []sql.Row{{false}},
11980+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11981+
ExpectedWarningsCount: 1,
11982+
},
11983+
{
11984+
Dialect: "mysql",
11985+
Query: "select 'asdf' or false",
11986+
Expected: []sql.Row{{false}},
11987+
ExpectedWarning: mysql.ERTruncatedWrongValue,
11988+
ExpectedWarningsCount: 1,
1192911989
},
1193011990
},
1193111991
},

0 commit comments

Comments
 (0)