@@ -782,7 +782,8 @@ var QueryTests = []QueryTest{
782
782
{
783
783
Query : "select 1 as x from xy having AVG(x) > 0" ,
784
784
Expected : []sql.Row {{1 }},
785
- }, {
785
+ },
786
+ {
786
787
Query : "select 1 as x, AVG(x) from xy group by (y) having AVG(x) > 0" ,
787
788
Expected : []sql.Row {{1 , float64 (1 )}, {1 , float64 (2 )}, {1 , float64 (3 )}},
788
789
},
@@ -2550,6 +2551,10 @@ Select * from (
2550
2551
Query : "SELECT i + 1 FROM mytable;" ,
2551
2552
Expected : []sql.Row {{int64 (2 )}, {int64 (3 )}, {int64 (4 )}},
2552
2553
},
2554
+ {
2555
+ Query : `select (1 / 3) * (1 / 3);` ,
2556
+ Expected : []sql.Row {{"0.11111111" }},
2557
+ },
2553
2558
{
2554
2559
Query : "SELECT i div 2 FROM mytable order by 1;" ,
2555
2560
Expected : []sql.Row {{int64 (0 )}, {int64 (1 )}, {int64 (1 )}},
@@ -2734,6 +2739,34 @@ Select * from (
2734
2739
Query : "SELECT 'HOMER' IN (1.0)" ,
2735
2740
Expected : []sql.Row {{false }},
2736
2741
},
2742
+ {
2743
+ Query : "select 1 / 3 * 3 in (0.999999999);" ,
2744
+ Expected : []sql.Row {{true }},
2745
+ },
2746
+ {
2747
+ Query : "SELECT 99 NOT IN ( 98 + 97 / 99 );" ,
2748
+ Expected : []sql.Row {{true }},
2749
+ },
2750
+ {
2751
+ Query : "SELECT 1 NOT IN ( 97 / 99 );" ,
2752
+ Expected : []sql.Row {{true }},
2753
+ },
2754
+ {
2755
+ Query : `SELECT 1 NOT IN (1 / 9 * 5);` ,
2756
+ Expected : []sql.Row {{true }},
2757
+ },
2758
+ {
2759
+ Query : `SELECT 1 / 9 * 5 NOT IN (1);` ,
2760
+ Expected : []sql.Row {{true }},
2761
+ },
2762
+ {
2763
+ Query : `SELECT 1 / 9 * 5 IN (1 / 9 * 5);` ,
2764
+ Expected : []sql.Row {{true }},
2765
+ },
2766
+ {
2767
+ Query : "select 0 in (1/100000);" ,
2768
+ Expected : []sql.Row {{false }},
2769
+ },
2737
2770
{
2738
2771
Query : `SELECT * FROM mytable WHERE i in (CAST(NULL AS SIGNED), 2, 3, 4)` ,
2739
2772
Expected : []sql.Row {{3 , "third row" }, {2 , "second row" }},
@@ -4103,6 +4136,177 @@ Select * from (
4103
4136
Query : "select 1/2/3%4/5/6;" ,
4104
4137
Expected : []sql.Row {{"0.0055555555555556" }},
4105
4138
},
4139
+
4140
+ // check that internal precision is preserved in comparisons
4141
+ {
4142
+ // 0 scale + 0 scale = 9 scale
4143
+ Query : "select 1 / 3 = 0.333333333;" ,
4144
+ Expected : []sql.Row {{true }},
4145
+ },
4146
+ {
4147
+ // 0 scale + 1 scale = 9 scale
4148
+ Query : "select 1 / 3.0 = 0.333333333;" ,
4149
+ Expected : []sql.Row {{true }},
4150
+ },
4151
+ {
4152
+ // 0 scale + 6 scale = 18 scale
4153
+ Query : "select 1 / 3.000000 = 0.333333333333333333;" ,
4154
+ Expected : []sql.Row {{true }},
4155
+ },
4156
+ {
4157
+ // 0 scale + 15 scale = 27 scale
4158
+ Query : "select 1 / 3.000000000000000 = 0.333333333333333333333333333;" ,
4159
+ Expected : []sql.Row {{true }},
4160
+ },
4161
+ {
4162
+ // 0 scale + 24 scale = 36 scale
4163
+ Query : "select 1 / 3.000000000000000000000000 = 0.333333333333333333333333333333333333;" ,
4164
+ Expected : []sql.Row {{true }},
4165
+ },
4166
+
4167
+ {
4168
+ // 1 scale + 0 scale = 9 scale
4169
+ Query : "select 1.0 / 3 = 0.333333333;" ,
4170
+ Expected : []sql.Row {{true }},
4171
+ },
4172
+ {
4173
+ // 1 scale + 1 scale = 18 scale
4174
+ Query : "select 1.0 / 3.0 = 0.333333333333333333;" ,
4175
+ Expected : []sql.Row {{true }},
4176
+ },
4177
+ {
4178
+ // 1 scale + 10 scale = 27 scale
4179
+ Query : "select 1.0 / 3.0000000000 = 0.333333333333333333333333333;" ,
4180
+ Expected : []sql.Row {{true }},
4181
+ },
4182
+ {
4183
+ // 1 scale + 19 scale = 36 scale
4184
+ Query : "select 1.0 / 3.0000000000000000000 = 0.333333333333333333333333333333333333;" ,
4185
+ Expected : []sql.Row {{true }},
4186
+ },
4187
+
4188
+ {
4189
+ // 6 scale + 8 scale = 18 scale
4190
+ Query : "select 1.000000 / 3.00000000 = 0.333333333333333333;" ,
4191
+ Expected : []sql.Row {{true }},
4192
+ },
4193
+ {
4194
+ // 6 scale + 9 scale = 27 scale
4195
+ Query : "select 1.000000 / 3.000000000 = 0.333333333333333333333333333;" ,
4196
+ Expected : []sql.Row {{true }},
4197
+ },
4198
+ {
4199
+ // 6 scale + 17 scale = 27 scale
4200
+ Query : "select 1.000000 / 3.00000000000000000 = 0.333333333333333333333333333;" ,
4201
+ Expected : []sql.Row {{true }},
4202
+ },
4203
+ {
4204
+ // 6 scale + 18 scale = 36 scale
4205
+ Query : "select 1.000000 / 3.000000000000000000 = 0.333333333333333333333333333333333333;" ,
4206
+ Expected : []sql.Row {{true }},
4207
+ },
4208
+
4209
+ {
4210
+ // 7 scale + 7 scale = 18 scale
4211
+ Query : "select 1.0000000 / 3.0000000 = 0.333333333333333333;" ,
4212
+ Expected : []sql.Row {{true }},
4213
+ },
4214
+ {
4215
+ // 7 scale + 8 scale = 27 scale
4216
+ Query : "select 1.0000000 / 3.00000000 = 0.333333333333333333333333333;" ,
4217
+ Expected : []sql.Row {{true }},
4218
+ },
4219
+ {
4220
+ // 7 scale + 16 scale = 27 scale
4221
+ Query : "select 1.0000000 / 3.0000000000000000 = 0.333333333333333333333333333;" ,
4222
+ Expected : []sql.Row {{true }},
4223
+ },
4224
+ {
4225
+ // 7 scale + 15 scale = 36 scale
4226
+ Query : "select 1.0000000 / 3.00000000000000000 = 0.333333333333333333333333333333333333;" ,
4227
+ Expected : []sql.Row {{true }},
4228
+ },
4229
+
4230
+ {
4231
+ // 8 scale + 6 scale = 18 scale
4232
+ Query : "select 1.00000000 / 3.000000 = 0.333333333333333333;" ,
4233
+ Expected : []sql.Row {{true }},
4234
+ },
4235
+ {
4236
+ // 8 scale + 7 scale = 27 scale
4237
+ Query : "select 1.00000000 / 3.0000000 = 0.333333333333333333333333333;" ,
4238
+ Expected : []sql.Row {{true }},
4239
+ },
4240
+ {
4241
+ // 8 scale + 15 scale = 27 scale
4242
+ Query : "select 1.00000000 / 3.000000000000000 = 0.333333333333333333333333333;" ,
4243
+ Expected : []sql.Row {{true }},
4244
+ },
4245
+ {
4246
+ // 8 scale + 14 scale = 36 scale
4247
+ Query : "select 1.00000000 / 3.0000000000000000 = 0.333333333333333333333333333333333333;" ,
4248
+ Expected : []sql.Row {{true }},
4249
+ },
4250
+
4251
+ {
4252
+ // 9 scale + 5 scale = 18 scale
4253
+ Query : "select 1.000000000 / 3.00000 = 0.333333333333333333;" ,
4254
+ Expected : []sql.Row {{true }},
4255
+ },
4256
+ {
4257
+ // 9 scale + 6 scale = 27 scale
4258
+ Query : "select 1.000000000 / 3.000000 = 0.333333333333333333333333333;" ,
4259
+ Expected : []sql.Row {{true }},
4260
+ },
4261
+ {
4262
+ // 9 scale + 14 scale = 27 scale
4263
+ Query : "select 1.000000000 / 3.00000000000000 = 0.333333333333333333333333333;" ,
4264
+ Expected : []sql.Row {{true }},
4265
+ },
4266
+ {
4267
+ // 9 scale + 13 scale = 36 scale
4268
+ Query : "select 1.000000000 / 3.000000000000000 = 0.333333333333333333333333333333333333;" ,
4269
+ Expected : []sql.Row {{true }},
4270
+ },
4271
+
4272
+ {
4273
+ // 10 scale + 1 scale = 27 scale
4274
+ Query : "select 1.0000000000 / 3.0 = 0.333333333333333333333333333;" ,
4275
+ Expected : []sql.Row {{true }},
4276
+ },
4277
+ {
4278
+ // 10 scale + 10 scale = 36 scale
4279
+ Query : "select 1.0000000000 / 3.0000000000 = 0.333333333333333333333333333333333333;" ,
4280
+ Expected : []sql.Row {{true }},
4281
+ },
4282
+
4283
+ // check that decimal internal precision is preserved in casts
4284
+ {
4285
+ // 0 scale + 0 scale = 9 scale
4286
+ Query : "select cast(1 / 3 as decimal(65,30));" ,
4287
+ Expected : []sql.Row {{"0.333333333000000000000000000000" }},
4288
+ },
4289
+ {
4290
+ // 0 scale + 1 scale = 9 scale
4291
+ Query : "select cast(1 / 3.0 as decimal(65,30));" ,
4292
+ Expected : []sql.Row {{"0.333333333000000000000000000000" }},
4293
+ },
4294
+ {
4295
+ // 0 scale + 6 scale = 18 scale
4296
+ Query : "select cast(1 / 3.000000 as decimal(65,30));" ,
4297
+ Expected : []sql.Row {{"0.333333333333333333000000000000" }},
4298
+ },
4299
+ {
4300
+ // 0 scale + 15 scale = 27 scale
4301
+ Query : "select cast(1 / 3.000000000000000 as decimal(65,30));" ,
4302
+ Expected : []sql.Row {{"0.333333333333333333333333333000" }},
4303
+ },
4304
+ {
4305
+ // 0 scale + 24 scale = 36 scale
4306
+ Query : "select cast(1 / 3.000000000000000000000000 as decimal(65,30));" ,
4307
+ Expected : []sql.Row {{"0.333333333333333333333333333333" }},
4308
+ },
4309
+
4106
4310
{
4107
4311
Query : "select 0.05 % 0.024;" ,
4108
4312
Expected : []sql.Row {{"0.002" }},
@@ -6228,6 +6432,7 @@ Select * from (
6228
6432
Expected : []sql.Row {{1 }},
6229
6433
},
6230
6434
{
6435
+ // TODO: Neither MySQL or MariaDB have a function called DATETIME; remove this function.
6231
6436
Query : `SELECT DATETIME(NOW()) - NOW()` ,
6232
6437
Expected : []sql.Row {{int64 (0 )}},
6233
6438
},
@@ -9015,13 +9220,6 @@ var KeylessQueries = []QueryTest{
9015
9220
9016
9221
// BrokenQueries are queries that are known to be broken in the engine.
9017
9222
var BrokenQueries = []QueryTest {
9018
- // https://github.com/dolthub/dolt/issues/7207
9019
- {
9020
- Query : "select 0 in (1/100000);" ,
9021
- Expected : []sql.Row {
9022
- {false },
9023
- },
9024
- },
9025
9223
// union and aggregation typing are tricky
9026
9224
{
9027
9225
Query : "with recursive t (n) as (select sum('1') from dual union all select (2.00) from dual) select sum(n) from t;" ,
@@ -9126,6 +9324,11 @@ var BrokenQueries = []QueryTest{
9126
9324
Query : "SELECT STR_TO_DATE('2013 32 Tuesday', '%X %V %W')" , // Tuesday of 32th week
9127
9325
Expected : []sql.Row {{"2013-08-13" }},
9128
9326
},
9327
+ {
9328
+ // TODO: need to properly handle datetime precision
9329
+ Query : `SELECT STR_TO_DATE('01,5,2013 09:30:17','%d,%m,%Y %h:%i:%s %f') - (STR_TO_DATE('01,5,2013 09:30:17','%d,%m,%Y %h:%i:%s') - INTERVAL 1 SECOND)` ,
9330
+ Expected : []sql.Row {{int64 (1 )}},
9331
+ },
9129
9332
{
9130
9333
// This panics
9131
9334
// The non-recursive part of the UNION ALL returns too many rows, causing index out of bounds errors
0 commit comments