mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
Bug#22312 Syntax error in expression with INTERVAL()
Parser rejects valid INTERVAL() expressions when associated with arithmetic operators. The problem is the way in which the expression and interval grammar rules were organized caused shift/reduce conflicts. The solution is to tweak the interval rules to avoid shift/reduce conflicts by removing the broken interval_expr rule and explicitly specify it's content where necessary. Original fix by Davi Arnaut, revised and improved rules by Marc Alff
This commit is contained in:
@@ -484,3 +484,46 @@ select atan(10, 20 "p2");
|
||||
ERROR 42000: Incorrect parameters in the call to native function 'atan'
|
||||
select atan(10 AS p1, 20 AS p2);
|
||||
ERROR 42000: Incorrect parameters in the call to native function 'atan'
|
||||
DROP TABLE IF EXISTS t1;
|
||||
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||||
STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
|
||||
NULL
|
||||
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE;
|
||||
STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE
|
||||
NULL
|
||||
SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
|
||||
"1997-12-31 23:59:59" + INTERVAL 1 SECOND
|
||||
1998-01-01 00:00:00
|
||||
SELECT 1 + INTERVAL(1,0,1,2) + 1;
|
||||
1 + INTERVAL(1,0,1,2) + 1
|
||||
4
|
||||
SELECT INTERVAL(1^1,0,1,2) + 1;
|
||||
INTERVAL(1^1,0,1,2) + 1
|
||||
2
|
||||
SELECT INTERVAL(1,0+1,2,3) * 5.5;
|
||||
INTERVAL(1,0+1,2,3) * 5.5
|
||||
5.5
|
||||
SELECT INTERVAL(3,3,1+3,4+4) / 0.5;
|
||||
INTERVAL(3,3,1+3,4+4) / 0.5
|
||||
2.0000
|
||||
SELECT (INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2;
|
||||
(INTERVAL(1,0,1,2) + 5) * 7 + INTERVAL(1,0,1,2) / 2
|
||||
50.0000
|
||||
SELECT INTERVAL(1,0,1,2) + 1, 5 * INTERVAL(1,0,1,2);
|
||||
INTERVAL(1,0,1,2) + 1 5 * INTERVAL(1,0,1,2)
|
||||
3 10
|
||||
SELECT INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3);
|
||||
INTERVAL(0,(1*5)/2) + INTERVAL(5,4,3)
|
||||
2
|
||||
SELECT 1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND;
|
||||
1^1 + INTERVAL 1+1 SECOND & 1 + INTERVAL 1+1 SECOND
|
||||
NULL
|
||||
SELECT 1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND;
|
||||
1%2 - INTERVAL 1^1 SECOND | 1%2 - INTERVAL 1^1 SECOND
|
||||
NULL
|
||||
CREATE TABLE t1 (a INT, b DATETIME);
|
||||
INSERT INTO t1 VALUES (INTERVAL(3,2,1) + 1, "1997-12-31 23:59:59" + INTERVAL 1 SECOND);
|
||||
SELECT * FROM t1 WHERE a = INTERVAL(3,2,1) + 1;
|
||||
a b
|
||||
3 1998-01-01 00:00:00
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user