summaryrefslogtreecommitdiff
path: root/mysql-test/suite/compat/oracle/t/parser.test
blob: c0048e26fa8d95b8d1be44c3ee180026d634cf69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
SET sql_mode=ORACLE;

--echo #
--echo # MDEV-15620 Crash when using "SET @@NEW.a=expr" inside a trigger
--echo #

CREATE TABLE t1 (a INT);
--error ER_UNKNOWN_STRUCTURED_VARIABLE
CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW SET @@NEW.a=0;
DROP TABLE t1;

--echo #
--echo # MDEV-15615 Unexpected syntax error instead of "Unknown system variable" inside an SP
--echo #

DELIMITER $$;
--error ER_UNKNOWN_SYSTEM_VARIABLE
DECLARE
  a INT;
BEGIN
  SET GLOBAL a=10;
END;
$$
DELIMITER ;$$


--echo #
--echo # MDEV-16202 Latest changes made erroneously some keywords reserved in sql_mode=ORACLE
--echo #


DELIMITER $$;
CREATE PROCEDURE p1(name VARCHAR(64), pattern TEXT) AS
  query TEXT DEFAULT REPLACE(pattern, 'name', name);
BEGIN
  SELECT query AS '';
  EXECUTE IMMEDIATE query;
EXCEPTION
  WHEN OTHERS THEN
  BEGIN
    SHOW ERRORS;
  END;
END;
$$

CREATE PROCEDURE p2(name VARCHAR(64)) AS
BEGIN
  CALL p1(name, 'DECLARE name INT; BEGIN name:=10; SELECT name; END');
  EXECUTE IMMEDIATE REPLACE('CREATE TABLE t1 (name INT)', 'name', name);
  CALL p1(name, 'SELECT name FROM t1');
  CALL p1(name, 'SELECT name ''alias'' FROM t1');
  CALL p1(name, 'SELECT name()');
  CALL p1(name, 'SELECT name.name()');
  CALL p1(name, 'SELECT name DATE FROM t1');
  CALL p1(name, 'SELECT name HISTORY FROM t1');
  CALL p1(name, 'SELECT name NEXT FROM t1');
  CALL p1(name, 'SELECT name PERIOD FROM t1');
  CALL p1(name, 'SELECT name PREVIOUS FROM t1');
  CALL p1(name, 'SELECT name SYSTEM FROM t1');
  CALL p1(name, 'SELECT name SYSTEM_TIME FROM t1');
  CALL p1(name, 'SELECT name TIME FROM t1');
  CALL p1(name, 'SELECT name TIMESTAMP FROM t1');
  CALL p1(name, 'SELECT name TRANSACTION FROM t1');
  CALL p1(name, 'SELECT name VALUE FROM t1');
  CALL p1(name, 'SELECT name VERSIONING FROM t1');
  CALL p1(name, 'SELECT name WITHOUT FROM t1');
  DROP TABLE t1;
END;
$$
DELIMITER ;$$

--disable_column_names
CALL p2('date');
CALL p2('history');
CALL p2('next');
CALL p2('period');
CALL p2('previous');
CALL p2('system');
CALL p2('system_time');
CALL p2('time');
CALL p2('timestamp');
CALL p2('transaction');
CALL p2('value');
CALL p2('versioning');
CALL p2('without');
--enable_column_names

DROP PROCEDURE p2;
DROP PROCEDURE p1;