1
drop table if exists t1_30237_bool;
2
create table t1_30237_bool(A char, B char, C char);
3
insert into t1_30237_bool values
32
select A, B, A OR B, A XOR B, A AND B
33
from t1_30237_bool where C is null order by A, B;
34
A B A OR B A XOR B A AND B
36
NULL NULL NULL NULL NULL
45
Testing that OR is associative
46
select A, B, C, (A OR B) OR C, A OR (B OR C), A OR B OR C
47
from t1_30237_bool order by A, B, C;
48
A B C (A OR B) OR C A OR (B OR C) A OR B OR C
50
NULL NULL NULL NULL NULL NULL
51
NULL NULL 0 NULL NULL NULL
53
NULL 0 NULL NULL NULL NULL
54
NULL 0 0 NULL NULL NULL
59
0 NULL NULL NULL NULL NULL
60
0 NULL 0 NULL NULL NULL
62
0 0 NULL NULL NULL NULL
77
select count(*) from t1_30237_bool
78
where ((A OR B) OR C) != (A OR (B OR C));
81
Testing that XOR is associative
82
select A, B, C, (A XOR B) XOR C, A XOR (B XOR C), A XOR B XOR C
83
from t1_30237_bool order by A, B, C;
84
A B C (A XOR B) XOR C A XOR (B XOR C) A XOR B XOR C
86
NULL NULL NULL NULL NULL NULL
87
NULL NULL 0 NULL NULL NULL
88
NULL NULL 1 NULL NULL NULL
89
NULL 0 NULL NULL NULL NULL
90
NULL 0 0 NULL NULL NULL
91
NULL 0 1 NULL NULL NULL
92
NULL 1 NULL NULL NULL NULL
93
NULL 1 0 NULL NULL NULL
94
NULL 1 1 NULL NULL NULL
95
0 NULL NULL NULL NULL NULL
96
0 NULL 0 NULL NULL NULL
97
0 NULL 1 NULL NULL NULL
98
0 0 NULL NULL NULL NULL
101
0 1 NULL NULL NULL NULL
104
1 NULL NULL NULL NULL NULL
105
1 NULL 0 NULL NULL NULL
106
1 NULL 1 NULL NULL NULL
107
1 0 NULL NULL NULL NULL
110
1 1 NULL NULL NULL NULL
113
select count(*) from t1_30237_bool
114
where ((A XOR B) XOR C) != (A XOR (B XOR C));
117
Testing that AND is associative
118
select A, B, C, (A AND B) AND C, A AND (B AND C), A AND B AND C
119
from t1_30237_bool order by A, B, C;
120
A B C (A AND B) AND C A AND (B AND C) A AND B AND C
122
NULL NULL NULL NULL NULL NULL
124
NULL NULL 1 NULL NULL NULL
128
NULL 1 NULL NULL NULL NULL
130
NULL 1 1 NULL NULL NULL
140
1 NULL NULL NULL NULL NULL
142
1 NULL 1 NULL NULL NULL
146
1 1 NULL NULL NULL NULL
149
select count(*) from t1_30237_bool
150
where ((A AND B) AND C) != (A AND (B AND C));
153
Testing that AND has precedence over OR
154
select A, B, C, (A OR B) AND C, A OR (B AND C), A OR B AND C
155
from t1_30237_bool order by A, B, C;
156
A B C (A OR B) AND C A OR (B AND C) A OR B AND C
158
NULL NULL NULL NULL NULL NULL
159
NULL NULL 0 0 NULL NULL
160
NULL NULL 1 NULL NULL NULL
161
NULL 0 NULL NULL NULL NULL
163
NULL 0 1 NULL NULL NULL
164
NULL 1 NULL NULL NULL NULL
167
0 NULL NULL NULL NULL NULL
169
0 NULL 1 NULL NULL NULL
173
0 1 NULL NULL NULL NULL
185
select count(*) from t1_30237_bool
186
where (A OR (B AND C)) != (A OR B AND C);
189
select A, B, C, (A AND B) OR C, A AND (B OR C), A AND B OR C
190
from t1_30237_bool order by A, B, C;
191
A B C (A AND B) OR C A AND (B OR C) A AND B OR C
193
NULL NULL NULL NULL NULL NULL
194
NULL NULL 0 NULL NULL NULL
196
NULL 0 NULL NULL NULL NULL
199
NULL 1 NULL NULL NULL NULL
200
NULL 1 0 NULL NULL NULL
202
0 NULL NULL NULL 0 NULL
211
1 NULL NULL NULL NULL NULL
212
1 NULL 0 NULL NULL NULL
214
1 0 NULL NULL NULL NULL
220
select count(*) from t1_30237_bool
221
where ((A AND B) OR C) != (A AND B OR C);
224
Testing that AND has precedence over XOR
225
select A, B, C, (A XOR B) AND C, A XOR (B AND C), A XOR B AND C
226
from t1_30237_bool order by A, B, C;
227
A B C (A XOR B) AND C A XOR (B AND C) A XOR B AND C
229
NULL NULL NULL NULL NULL NULL
230
NULL NULL 0 0 NULL NULL
231
NULL NULL 1 NULL NULL NULL
232
NULL 0 NULL NULL NULL NULL
234
NULL 0 1 NULL NULL NULL
235
NULL 1 NULL NULL NULL NULL
237
NULL 1 1 NULL NULL NULL
238
0 NULL NULL NULL NULL NULL
240
0 NULL 1 NULL NULL NULL
244
0 1 NULL NULL NULL NULL
247
1 NULL NULL NULL NULL NULL
249
1 NULL 1 NULL NULL NULL
256
select count(*) from t1_30237_bool
257
where (A XOR (B AND C)) != (A XOR B AND C);
260
select A, B, C, (A AND B) XOR C, A AND (B XOR C), A AND B XOR C
261
from t1_30237_bool order by A, B, C;
262
A B C (A AND B) XOR C A AND (B XOR C) A AND B XOR C
264
NULL NULL NULL NULL NULL NULL
265
NULL NULL 0 NULL NULL NULL
266
NULL NULL 1 NULL NULL NULL
267
NULL 0 NULL NULL NULL NULL
270
NULL 1 NULL NULL NULL NULL
271
NULL 1 0 NULL NULL NULL
273
0 NULL NULL NULL 0 NULL
282
1 NULL NULL NULL NULL NULL
283
1 NULL 0 NULL NULL NULL
284
1 NULL 1 NULL NULL NULL
285
1 0 NULL NULL NULL NULL
288
1 1 NULL NULL NULL NULL
291
select count(*) from t1_30237_bool
292
where ((A AND B) XOR C) != (A AND B XOR C);
295
Testing that XOR has precedence over OR
296
select A, B, C, (A XOR B) OR C, A XOR (B OR C), A XOR B OR C
297
from t1_30237_bool order by A, B, C;
298
A B C (A XOR B) OR C A XOR (B OR C) A XOR B OR C
300
NULL NULL NULL NULL NULL NULL
301
NULL NULL 0 NULL NULL NULL
303
NULL 0 NULL NULL NULL NULL
304
NULL 0 0 NULL NULL NULL
306
NULL 1 NULL NULL NULL NULL
307
NULL 1 0 NULL NULL NULL
309
0 NULL NULL NULL NULL NULL
310
0 NULL 0 NULL NULL NULL
312
0 0 NULL NULL NULL NULL
318
1 NULL NULL NULL NULL NULL
319
1 NULL 0 NULL NULL NULL
327
select count(*) from t1_30237_bool
328
where ((A XOR B) OR C) != (A XOR B OR C);
331
select A, B, C, (A OR B) XOR C, A OR (B XOR C), A OR B XOR C
332
from t1_30237_bool order by A, B, C;
333
A B C (A OR B) XOR C A OR (B XOR C) A OR B XOR C
335
NULL NULL NULL NULL NULL NULL
336
NULL NULL 0 NULL NULL NULL
337
NULL NULL 1 NULL NULL NULL
338
NULL 0 NULL NULL NULL NULL
339
NULL 0 0 NULL NULL NULL
341
NULL 1 NULL NULL NULL NULL
344
0 NULL NULL NULL NULL NULL
345
0 NULL 0 NULL NULL NULL
346
0 NULL 1 NULL NULL NULL
347
0 0 NULL NULL NULL NULL
350
0 1 NULL NULL NULL NULL
362
select count(*) from t1_30237_bool
363
where (A OR (B XOR C)) != (A OR B XOR C);
366
drop table t1_30237_bool;
367
Testing that NOT has precedence over OR
368
select (NOT FALSE) OR TRUE, NOT (FALSE OR TRUE), NOT FALSE OR TRUE;
369
(NOT FALSE) OR TRUE NOT (FALSE OR TRUE) NOT FALSE OR TRUE
371
Testing that NOT has precedence over XOR
372
select (NOT FALSE) XOR FALSE, NOT (FALSE XOR FALSE), NOT FALSE XOR FALSE;
373
(NOT FALSE) XOR FALSE NOT (FALSE XOR FALSE) NOT FALSE XOR FALSE
375
Testing that NOT has precedence over AND
376
select (NOT FALSE) AND FALSE, NOT (FALSE AND FALSE), NOT FALSE AND FALSE;
377
(NOT FALSE) AND FALSE NOT (FALSE AND FALSE) NOT FALSE AND FALSE
379
Testing that NOT is associative
380
select NOT NOT TRUE, NOT NOT NOT FALSE;
381
NOT NOT TRUE NOT NOT NOT FALSE
383
Testing that IS has precedence over NOT
384
select (NOT NULL) IS TRUE, NOT (NULL IS TRUE), NOT NULL IS TRUE;
385
(NOT NULL) IS TRUE NOT (NULL IS TRUE) NOT NULL IS TRUE
387
select (NOT NULL) IS NOT TRUE, NOT (NULL IS NOT TRUE), NOT NULL IS NOT TRUE;
388
(NOT NULL) IS NOT TRUE NOT (NULL IS NOT TRUE) NOT NULL IS NOT TRUE
390
select (NOT NULL) IS FALSE, NOT (NULL IS FALSE), NOT NULL IS FALSE;
391
(NOT NULL) IS FALSE NOT (NULL IS FALSE) NOT NULL IS FALSE
393
select (NOT NULL) IS NOT FALSE, NOT (NULL IS NOT FALSE), NOT NULL IS NOT FALSE;
394
(NOT NULL) IS NOT FALSE NOT (NULL IS NOT FALSE) NOT NULL IS NOT FALSE
396
select (NOT TRUE) IS UNKNOWN, NOT (TRUE IS UNKNOWN), NOT TRUE IS UNKNOWN;
397
(NOT TRUE) IS UNKNOWN NOT (TRUE IS UNKNOWN) NOT TRUE IS UNKNOWN
399
select (NOT TRUE) IS NOT UNKNOWN, NOT (TRUE IS NOT UNKNOWN), NOT TRUE IS NOT UNKNOWN;
400
(NOT TRUE) IS NOT UNKNOWN NOT (TRUE IS NOT UNKNOWN) NOT TRUE IS NOT UNKNOWN
402
select (NOT TRUE) IS NULL, NOT (TRUE IS NULL), NOT TRUE IS NULL;
403
(NOT TRUE) IS NULL NOT (TRUE IS NULL) NOT TRUE IS NULL
405
select (NOT TRUE) IS NOT NULL, NOT (TRUE IS NOT NULL), NOT TRUE IS NOT NULL;
406
(NOT TRUE) IS NOT NULL NOT (TRUE IS NOT NULL) NOT TRUE IS NOT NULL
408
Testing that IS [NOT] TRUE/FALSE/UNKNOWN predicates are not associative
409
select TRUE IS TRUE IS TRUE IS TRUE;
410
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS TRUE IS TRUE' at line 1
411
select FALSE IS NOT TRUE IS NOT TRUE IS NOT TRUE;
412
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS NOT TRUE IS NOT TRUE' at line 1
413
select NULL IS FALSE IS FALSE IS FALSE;
414
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS FALSE IS FALSE' at line 1
415
select TRUE IS NOT FALSE IS NOT FALSE IS NOT FALSE;
416
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS NOT FALSE IS NOT FALSE' at line 1
417
select FALSE IS UNKNOWN IS UNKNOWN IS UNKNOWN;
418
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS UNKNOWN IS UNKNOWN' at line 1
419
select TRUE IS NOT UNKNOWN IS NOT UNKNOWN IS NOT UNKNOWN;
420
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near 'IS NOT UNKNOWN IS NOT UNKNOWN' at line 1
421
Testing that IS [NOT] NULL predicates are associative
422
select FALSE IS NULL IS NULL IS NULL;
423
FALSE IS NULL IS NULL IS NULL
425
select TRUE IS NOT NULL IS NOT NULL IS NOT NULL;
426
TRUE IS NOT NULL IS NOT NULL IS NOT NULL
428
Testing that comparison operators are left associative
429
select 1 <=> 2 <=> 2, (1 <=> 2) <=> 2, 1 <=> (2 <=> 2);
430
1 <=> 2 <=> 2 (1 <=> 2) <=> 2 1 <=> (2 <=> 2)
432
select 1 = 2 = 2, (1 = 2) = 2, 1 = (2 = 2);
433
1 = 2 = 2 (1 = 2) = 2 1 = (2 = 2)
435
select 1 != 2 != 3, (1 != 2) != 3, 1 != (2 != 3);
436
1 != 2 != 3 (1 != 2) != 3 1 != (2 != 3)
438
select 1 <> 2 <> 3, (1 <> 2) <> 3, 1 <> (2 <> 3);
439
1 <> 2 <> 3 (1 <> 2) <> 3 1 <> (2 <> 3)
441
select 1 < 2 < 3, (1 < 2) < 3, 1 < (2 < 3);
442
1 < 2 < 3 (1 < 2) < 3 1 < (2 < 3)
444
select 3 <= 2 <= 1, (3 <= 2) <= 1, 3 <= (2 <= 1);
445
3 <= 2 <= 1 (3 <= 2) <= 1 3 <= (2 <= 1)
447
select 1 > 2 > 3, (1 > 2) > 3, 1 > (2 > 3);
448
1 > 2 > 3 (1 > 2) > 3 1 > (2 > 3)
450
select 1 >= 2 >= 3, (1 >= 2) >= 3, 1 >= (2 >= 3);
451
1 >= 2 >= 3 (1 >= 2) >= 3 1 >= (2 >= 3)
453
Testing that binary + is associative
454
select 1 + 2 + 3, (1 + 2) + 3, 1 + (2 + 3);
455
1 + 2 + 3 (1 + 2) + 3 1 + (2 + 3)
457
Testing that binary - is left associative
458
select 1 - 2 - 3, (1 - 2) - 3, 1 - (2 - 3);
459
1 - 2 - 3 (1 - 2) - 3 1 - (2 - 3)
461
Testing that binary + and binary - have the same precedence
462
select 1 + 2 - 3, (1 + 2) - 3, 1 + (2 - 3);
463
1 + 2 - 3 (1 + 2) - 3 1 + (2 - 3)
465
select 1 - 2 + 3, (1 - 2) + 3, 1 - (2 + 3);
466
1 - 2 + 3 (1 - 2) + 3 1 - (2 + 3)
468
Testing that * is associative
469
select 2 * 3 * 4, (2 * 3) * 4, 2 * (3 * 4);
470
2 * 3 * 4 (2 * 3) * 4 2 * (3 * 4)
472
Testing that * has precedence over binary +
473
select 2 * 3 + 4, (2 * 3) + 4, 2 * (3 + 4);
474
2 * 3 + 4 (2 * 3) + 4 2 * (3 + 4)
476
select 2 + 3 * 4, (2 + 3) * 4, 2 + (3 * 4);
477
2 + 3 * 4 (2 + 3) * 4 2 + (3 * 4)
479
Testing that * has precedence over binary -
480
select 4 * 3 - 2, (4 * 3) - 2, 4 * (3 - 2);
481
4 * 3 - 2 (4 * 3) - 2 4 * (3 - 2)
483
select 4 - 3 * 2, (4 - 3) * 2, 4 - (3 * 2);
484
4 - 3 * 2 (4 - 3) * 2 4 - (3 * 2)
486
Testing that / is left associative
487
select 15 / 5 / 3, (15 / 5) / 3, 15 / (5 / 3);
488
15 / 5 / 3 (15 / 5) / 3 15 / (5 / 3)
489
1.00000000 1.00000000 9.0000
490
Testing that / has precedence over binary +
491
select 0x80 / 2 + 2, (0x80 / 2) + 2, 0x80 / (2 + 2);
492
0x80 / 2 + 2 (0x80 / 2) + 2 0x80 / (2 + 2)
493
66.0000 66.0000 32.0000
494
select 0x80 + 2 / 2, (0x80 + 2) / 2, 0x80 + (2 / 2);
495
0x80 + 2 / 2 (0x80 + 2) / 2 0x80 + (2 / 2)
496
129.0000 65.0000 129.0000
497
Testing that / has precedence over binary -
498
select 0x80 / 4 - 2, (0x80 / 4) - 2, 0x80 / (4 - 2);
499
0x80 / 4 - 2 (0x80 / 4) - 2 0x80 / (4 - 2)
500
30.0000 30.0000 64.0000
501
select 0x80 - 4 / 2, (0x80 - 4) / 2, 0x80 - (4 / 2);
502
0x80 - 4 / 2 (0x80 - 4) / 2 0x80 - (4 / 2)
503
126.0000 62.0000 126.0000