diff --git a/parser/testdata/parser/mysql_unsupported_account/input.sql b/parser/testdata/parser/mysql_unsupported_account/input.sql new file mode 100644 index 0000000..2a9a442 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_account/input.sql @@ -0,0 +1,75 @@ +CREATE USER u IDENTIFIED BY RANDOM PASSWORD +-- case +CREATE USER u IDENTIFIED WITH caching_sha2_password BY RANDOM PASSWORD +-- case +ALTER USER u IDENTIFIED BY RANDOM PASSWORD +-- case +ALTER USER u IDENTIFIED BY RANDOM PASSWORD RETAIN CURRENT PASSWORD +-- case +CREATE USER u IDENTIFIED BY 'p1' AND IDENTIFIED WITH authentication_ldap_simple +-- case +CREATE USER u IDENTIFIED BY 'p1' AND IDENTIFIED WITH authentication_fido AND IDENTIFIED WITH authentication_ldap_simple BY 'p3' +-- case +ALTER USER u ADD 2 FACTOR IDENTIFIED WITH authentication_ldap_simple +-- case +ALTER USER u MODIFY 2 FACTOR IDENTIFIED WITH authentication_ldap_simple BY 'p' +-- case +ALTER USER u DROP 2 FACTOR +-- case +ALTER USER u 2 FACTOR INITIATE REGISTRATION +-- case +ALTER USER u 2 FACTOR FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'blob' +-- case +ALTER USER u 2 FACTOR UNREGISTER +-- case +CREATE USER u DEFAULT ROLE r1, r2 +-- case +CREATE USER u PASSWORD REQUIRE CURRENT +-- case +CREATE USER u PASSWORD REQUIRE CURRENT OPTIONAL +-- case +ALTER USER u IDENTIFIED BY 'p' REPLACE 'old' +-- case +ALTER USER u IDENTIFIED BY 'p' RETAIN CURRENT PASSWORD +-- case +ALTER USER u IDENTIFIED BY 'p' REPLACE 'old' RETAIN CURRENT PASSWORD +-- case +ALTER USER u DISCARD OLD PASSWORD +-- case +ALTER USER u DEFAULT ROLE ALL +-- case +ALTER USER u DEFAULT ROLE NONE +-- case +ALTER USER u DEFAULT ROLE r1, r2 +-- case +GRANT r1 TO u WITH ADMIN OPTION +-- case +GRANT SELECT ON *.* TO u AS root@localhost +-- case +GRANT SELECT ON *.* TO u AS root@localhost WITH ROLE DEFAULT +-- case +GRANT SELECT ON *.* TO u AS root@localhost WITH ROLE NONE +-- case +GRANT SELECT ON *.* TO u AS root@localhost WITH ROLE ALL +-- case +GRANT SELECT ON *.* TO u AS root@localhost WITH ROLE ALL EXCEPT r1, r2 +-- case +GRANT SELECT ON *.* TO u AS root@localhost WITH ROLE r1, r2 +-- case +REVOKE IF EXISTS SELECT ON db.t FROM u +-- case +REVOKE SELECT ON db.t FROM u IGNORE UNKNOWN USER +-- case +REVOKE IF EXISTS SELECT ON db.t FROM u IGNORE UNKNOWN USER +-- case +REVOKE PROXY ON pu FROM u +-- case +SET PASSWORD = 'p' REPLACE 'old' +-- case +SET PASSWORD FOR u = 'p' RETAIN CURRENT PASSWORD +-- case +SET PASSWORD TO RANDOM +-- case +SET PASSWORD FOR u TO RANDOM +-- case +SET PASSWORD FOR u TO RANDOM REPLACE 'old' diff --git a/parser/testdata/parser/mysql_unsupported_account/output.sql b/parser/testdata/parser/mysql_unsupported_account/output.sql new file mode 100644 index 0000000..e38570c --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_account/output.sql @@ -0,0 +1,75 @@ +-- error: line 1 column 34 near "RANDOM PASSWORD" +-- case +-- error: line 1 column 61 near "RANDOM PASSWORD" +-- case +-- error: line 1 column 33 near "RANDOM PASSWORD" +-- case +-- error: line 1 column 33 near "RANDOM PASSWORD RETAIN CURRENT PASSWORD" +-- case +-- error: line 1 column 36 near "AND IDENTIFIED WITH authentication_ldap_simple" +-- case +-- error: line 1 column 36 near "AND IDENTIFIED WITH authentication_fido AND IDENTIFIED WITH authentication_ldap_simple BY 'p3'" +-- case +-- error: line 1 column 16 near "ADD 2 FACTOR IDENTIFIED WITH authentication_ldap_simple" +-- case +-- error: line 1 column 19 near "MODIFY 2 FACTOR IDENTIFIED WITH authentication_ldap_simple BY 'p'" +-- case +-- error: line 1 column 17 near "DROP 2 FACTOR" +-- case +-- error: line 1 column 14 near "2 FACTOR INITIATE REGISTRATION" +-- case +-- error: line 1 column 14 near "2 FACTOR FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'blob'" +-- case +-- error: line 1 column 14 near "2 FACTOR UNREGISTER" +-- case +-- error: line 1 column 21 near "DEFAULT ROLE r1, r2" +-- case +-- error: line 1 column 38 near "" +-- case +-- error: line 1 column 47 near "OPTIONAL" +-- case +-- error: line 1 column 38 near "REPLACE 'old'" +-- case +-- error: line 1 column 37 near "RETAIN CURRENT PASSWORD" +-- case +-- error: line 1 column 38 near "REPLACE 'old' RETAIN CURRENT PASSWORD" +-- case +-- error: line 1 column 20 near "DISCARD OLD PASSWORD" +-- case +-- error: line 1 column 20 near "DEFAULT ROLE ALL" +-- case +-- error: line 1 column 20 near "DEFAULT ROLE NONE" +-- case +-- error: line 1 column 20 near "DEFAULT ROLE r1, r2" +-- case +-- error: line 1 column 18 near "WITH ADMIN OPTION" +-- case +-- error: line 1 column 27 near "AS root@localhost" +-- case +-- error: line 1 column 27 near "AS root@localhost WITH ROLE DEFAULT" +-- case +-- error: line 1 column 27 near "AS root@localhost WITH ROLE NONE" +-- case +-- error: line 1 column 27 near "AS root@localhost WITH ROLE ALL" +-- case +-- error: line 1 column 27 near "AS root@localhost WITH ROLE ALL EXCEPT r1, r2" +-- case +-- error: line 1 column 27 near "AS root@localhost WITH ROLE r1, r2" +-- case +-- error: line 1 column 9 near "IF EXISTS SELECT ON db.t FROM u" +-- case +-- error: line 1 column 35 near "IGNORE UNKNOWN USER" +-- case +-- error: line 1 column 9 near "IF EXISTS SELECT ON db.t FROM u IGNORE UNKNOWN USER" +-- case +-- error: line 1 column 12 near "PROXY ON pu FROM u" +-- case +-- error: line 1 column 26 near "REPLACE 'old'" +-- case +-- error: line 1 column 31 near "RETAIN CURRENT PASSWORD" +-- case +-- error: line 1 column 15 near "TO RANDOM" +-- case +-- error: line 1 column 21 near "TO RANDOM" +-- case +-- error: line 1 column 21 near "TO RANDOM REPLACE 'old'" diff --git a/parser/testdata/parser/mysql_unsupported_admin/input.sql b/parser/testdata/parser/mysql_unsupported_admin/input.sql new file mode 100644 index 0000000..d220f3a --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_admin/input.sql @@ -0,0 +1,35 @@ +ANALYZE TABLE t UPDATE HISTOGRAM ON c1 USING DATA 'json' +-- case +ANALYZE TABLE t UPDATE HISTOGRAM ON c1 AUTO UPDATE +-- case +ANALYZE TABLE t UPDATE HISTOGRAM ON c1 MANUAL UPDATE +-- case +ANALYZE TABLE t UPDATE HISTOGRAM ON c1 WITH 20 BUCKETS AUTO UPDATE +-- case +INSTALL COMPONENT 'file://c' SET PERSIST v1 = 1 +-- case +DROP RESOURCE GROUP rg FORCE +-- case +SET RESOURCE GROUP rg FOR 4 +-- case +SET RESOURCE GROUP rg FOR 4, 5, 6 +-- case +FLUSH OPTIMIZER_COSTS +-- case +FLUSH RELAY LOGS +-- case +FLUSH RELAY LOGS FOR CHANNEL 'ch' +-- case +FLUSH USER_RESOURCES +-- case +FLUSH TABLES t1, t2 FOR EXPORT +-- case +FLUSH BINARY LOGS, ERROR LOGS, STATUS +-- case +SET PERSIST max_connections = 200 +-- case +SET PERSIST_ONLY max_connections = 250 +-- case +SET PERSIST max_connections = 200, long_query_time = 0.5 +-- case +SET GLOBAL max_connections = 200, PERSIST long_query_time = 1 diff --git a/parser/testdata/parser/mysql_unsupported_admin/output.sql b/parser/testdata/parser/mysql_unsupported_admin/output.sql new file mode 100644 index 0000000..7144f5e --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_admin/output.sql @@ -0,0 +1,35 @@ +-- error: line 1 column 44 near "USING DATA 'json'" +-- case +-- error: line 1 column 43 near "AUTO UPDATE" +-- case +-- error: line 1 column 45 near "MANUAL UPDATE" +-- case +-- error: line 1 column 59 near "AUTO UPDATE" +-- case +-- error: line 1 column 43 near "v1 = 1" +-- case +-- error: line 1 column 28 near "FORCE" +-- case +-- error: line 1 column 25 near "FOR 4" +-- case +-- error: line 1 column 25 near "FOR 4, 5, 6" +-- case +-- error: line 1 column 21 near "OPTIMIZER_COSTS" +-- case +-- error: line 1 column 11 near "RELAY LOGS" +-- case +-- error: line 1 column 11 near "RELAY LOGS FOR CHANNEL 'ch'" +-- case +-- error: line 1 column 20 near "USER_RESOURCES" +-- case +-- error: line 1 column 23 near "FOR EXPORT" +-- case +-- error: line 1 column 18 near ", ERROR LOGS, STATUS" +-- case +-- error: line 1 column 27 near "max_connections = 200" +-- case +-- error: line 1 column 32 near "max_connections = 250" +-- case +-- error: line 1 column 27 near "max_connections = 200, long_query_time = 0.5" +-- case +-- error: line 1 column 57 near "long_query_time = 1" diff --git a/parser/testdata/parser/mysql_unsupported_compound/input.sql b/parser/testdata/parser/mysql_unsupported_compound/input.sql new file mode 100644 index 0000000..0ed938e --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_compound/input.sql @@ -0,0 +1,9 @@ +CREATE PROCEDURE p () BEGIN DECLARE e CONDITION FOR SQLSTATE '23000'; DECLARE EXIT HANDLER FOR e ROLLBACK; END +-- case +CREATE PROCEDURE p () BEGIN DECLARE e CONDITION FOR 1051; END +-- case +CREATE PROCEDURE p () LOOP SET @x = 1; END LOOP +-- case +CREATE PROCEDURE p () BEGIN LOOP SET @x = 1; END LOOP; END +-- case +CREATE PROCEDURE p () lbl: LOOP LEAVE lbl; END LOOP lbl diff --git a/parser/testdata/parser/mysql_unsupported_compound/output.sql b/parser/testdata/parser/mysql_unsupported_compound/output.sql new file mode 100644 index 0000000..6e1148b --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_compound/output.sql @@ -0,0 +1,9 @@ +-- error: line 1 column 47 near "CONDITION FOR SQLSTATE '23000'; DECLARE EXIT HANDLER FOR e ROLLBACK; END" +-- case +-- error: line 1 column 47 near "CONDITION FOR 1051; END" +-- case +-- error: line 1 column 26 near "LOOP SET @x = 1; END LOOP" +-- case +-- error: line 1 column 32 near "LOOP SET @x = 1; END LOOP; END" +-- case +-- error: line 1 column 31 near "LOOP LEAVE lbl; END LOOP lbl" diff --git a/parser/testdata/parser/mysql_unsupported_ddl/input.sql b/parser/testdata/parser/mysql_unsupported_ddl/input.sql new file mode 100644 index 0000000..38413b9 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_ddl/input.sql @@ -0,0 +1,13 @@ +CREATE TABLE t (a INT) AUTOEXTEND_SIZE = 4194304 +-- case +CREATE TABLE t (a INT) START TRANSACTION +-- case +CREATE INDEX i1 ON t (a) ENGINE_ATTRIBUTE = '{}' +-- case +ALTER DATABASE d READ ONLY = 1 +-- case +ALTER DATABASE d READ ONLY = DEFAULT +-- case +CREATE VIEW v AS SELECT 1 WITH CHECK OPTION +-- case +ALTER VIEW v AS SELECT 1 WITH CHECK OPTION diff --git a/parser/testdata/parser/mysql_unsupported_ddl/output.sql b/parser/testdata/parser/mysql_unsupported_ddl/output.sql new file mode 100644 index 0000000..87115a1 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_ddl/output.sql @@ -0,0 +1,13 @@ +-- error: line 1 column 48 near "4194304" +-- case +-- error: line 1 column 28 near "START TRANSACTION" +-- case +-- error: line 1 column 41 near "ENGINE_ATTRIBUTE = '{}'" +-- case +-- error: line 1 column 21 near "READ ONLY = 1" +-- case +-- error: line 1 column 21 near "READ ONLY = DEFAULT" +-- case +-- error: line 1 column 36 near "CHECK OPTION" +-- case +-- error: line 1 column 35 near "CHECK OPTION" diff --git a/parser/testdata/parser/mysql_unsupported_dml/input.sql b/parser/testdata/parser/mysql_unsupported_dml/input.sql new file mode 100644 index 0000000..a4b1811 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_dml/input.sql @@ -0,0 +1,15 @@ +SELECT a INTO OUTFILE '/tmp/f' CHARACTER SET utf8mb4 FROM t +-- case +SELECT a FROM t INTO OUTFILE '/tmp/f' CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' +-- case +SELECT * FROM t1, t2 FOR SHARE OF t1 NOWAIT FOR UPDATE OF t2 SKIP LOCKED +-- case +SELECT * FROM t INTO @a FOR UPDATE +-- case +SELECT * FROM (VALUES ROW(1, 2), ROW(3, 4)) AS v (c1, c2) +-- case +LOAD DATA CONCURRENT INFILE '/tmp/f' IGNORE INTO TABLE t +-- case +LOAD DATA INFILE '/tmp/f' INTO TABLE t PARTITION (p0) CHARACTER SET utf8mb4 +-- case +LOAD DATA INFILE '/tmp/f' INTO TABLE t COLUMNS TERMINATED BY ',' IGNORE 2 ROWS diff --git a/parser/testdata/parser/mysql_unsupported_dml/output.sql b/parser/testdata/parser/mysql_unsupported_dml/output.sql new file mode 100644 index 0000000..5d1ef88 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_dml/output.sql @@ -0,0 +1,15 @@ +-- error: line 1 column 40 near "CHARACTER SET utf8mb4 FROM t" +-- case +-- error: line 1 column 47 near "CHARACTER SET utf8mb4 FIELDS TERMINATED BY ','" +-- case +-- error: line 1 column 47 near "FOR UPDATE OF t2 SKIP LOCKED" +-- case +-- error: line 1 column 27 near "FOR UPDATE" +-- case +-- error: line 1 column 50 near "(c1, c2)" +-- case +-- error: line 1 column 20 near "CONCURRENT INFILE '/tmp/f' IGNORE INTO TABLE t" +-- case +-- error: line 1 column 48 near "PARTITION (p0) CHARACTER SET utf8mb4" +-- case +-- error: line 1 column 78 near "ROWS" diff --git a/parser/testdata/parser/mysql_unsupported_functions/input.sql b/parser/testdata/parser/mysql_unsupported_functions/input.sql new file mode 100644 index 0000000..287778b --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_functions/input.sql @@ -0,0 +1,21 @@ +SELECT CAST('a' AS NCHAR(5)) +-- case +SELECT CAST('a' AS NCHAR) +-- case +SELECT CAST(TIMESTAMP'2024-01-01 12:00:00' AT TIME ZONE 'UTC' AS DATETIME) +-- case +SELECT CAST(TIMESTAMP'2024-01-01 12:00:00' AT TIME ZONE '+00:00' AS DATETIME(3)) +-- case +SELECT * FROM JSON_TABLE('[{"a":1}]', '$[*]' COLUMNS (a INT PATH '$.a')) AS jt +-- case +SELECT * FROM JSON_TABLE('[]', '$[*]' COLUMNS (ord FOR ORDINALITY, x VARCHAR(10) PATH '$.x' DEFAULT '"d"' ON EMPTY NULL ON ERROR, y INT EXISTS PATH '$.y', NESTED PATH '$.z[*]' COLUMNS (z INT PATH '$'))) AS jt +-- case +SELECT t.id, jt.x FROM t, JSON_TABLE(t.j, '$[*]' COLUMNS (x VARCHAR(10) PATH '$.x' ERROR ON EMPTY)) AS jt +-- case +SELECT JSON_VALUE('{"a":42}', '$.a' RETURNING UNSIGNED) +-- case +SELECT JSON_VALUE('{"p":12.5}', '$.d' RETURNING DECIMAL(5,2) DEFAULT 0 ON EMPTY DEFAULT 99 ON ERROR) +-- case +SELECT JSON_VALUE('{}', '$.x' RETURNING CHAR(8) NULL ON EMPTY ERROR ON ERROR) +-- case +SELECT 'a' SOUNDS LIKE 'b' diff --git a/parser/testdata/parser/mysql_unsupported_functions/output.sql b/parser/testdata/parser/mysql_unsupported_functions/output.sql new file mode 100644 index 0000000..b360ed2 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_functions/output.sql @@ -0,0 +1,21 @@ +-- error: line 1 column 24 near "NCHAR(5))" +-- case +-- error: line 1 column 24 near "NCHAR)" +-- case +-- error: line 1 column 45 near "AT TIME ZONE 'UTC' AS DATETIME)" +-- case +-- error: line 1 column 45 near "AT TIME ZONE '+00:00' AS DATETIME(3))" +-- case +-- error: line 1 column 25 near "('[{"a":1}]', '$[*]' COLUMNS (a INT PATH '$.a')) AS jt" +-- case +-- error: line 1 column 25 near "('[]', '$[*]' COLUMNS (ord FOR ORDINALITY, x VARCHAR(10) PATH '$.x' DEFAULT '"d"' ON EMPTY NULL ON ERROR, y INT EXISTS PATH '$.y', NESTED PATH '$.z[*]' COLUMNS (z INT PATH '$'))) AS jt" +-- case +-- error: line 1 column 37 near "(t.j, '$[*]' COLUMNS (x VARCHAR(10) PATH '$.x' ERROR ON EMPTY)) AS jt" +-- case +-- error: line 1 column 45 near "RETURNING UNSIGNED)" +-- case +-- error: line 1 column 47 near "RETURNING DECIMAL(5,2) DEFAULT 0 ON EMPTY DEFAULT 99 ON ERROR)" +-- case +-- error: line 1 column 39 near "RETURNING CHAR(8) NULL ON EMPTY ERROR ON ERROR)" +-- case +-- error: line 1 column 22 near "LIKE 'b'" diff --git a/parser/testdata/parser/mysql_unsupported_replication/input.sql b/parser/testdata/parser/mysql_unsupported_replication/input.sql new file mode 100644 index 0000000..3f82f0a --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_replication/input.sql @@ -0,0 +1,21 @@ +CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = (1, 2) +-- case +CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = () +-- case +CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'u'@'h' +-- case +CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = NULL +-- case +CHANGE REPLICATION SOURCE TO REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON +-- case +CHANGE REPLICATION SOURCE TO REQUIRE_TABLE_PRIMARY_KEY_CHECK = OFF +-- case +CHANGE REPLICATION SOURCE TO REQUIRE_TABLE_PRIMARY_KEY_CHECK = STREAM +-- case +CHANGE REPLICATION SOURCE TO REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE +-- case +CHANGE REPLICATION SOURCE TO ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = OFF +-- case +CHANGE REPLICATION SOURCE TO ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = LOCAL +-- case +RESET BINARY LOGS AND GTIDS TO 100 diff --git a/parser/testdata/parser/mysql_unsupported_replication/output.sql b/parser/testdata/parser/mysql_unsupported_replication/output.sql new file mode 100644 index 0000000..72147c8 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_replication/output.sql @@ -0,0 +1,21 @@ +-- error: line 1 column 50 near "(1, 2)" +-- case +-- error: line 1 column 50 near "()" +-- case +-- error: line 1 column 60 near "@'h'" +-- case +-- error: line 1 column 57 near "NULL" +-- case +-- error: line 1 column 65 near "ON" +-- case +-- error: line 1 column 66 near "OFF" +-- case +-- error: line 1 column 69 near "STREAM" +-- case +-- error: line 1 column 71 near "GENERATE" +-- case +-- error: line 1 column 73 near "OFF" +-- case +-- error: line 1 column 75 near "LOCAL" +-- case +-- error: line 1 column 30 near "TO 100" diff --git a/parser/testdata/parser/mysql_unsupported_routines/input.sql b/parser/testdata/parser/mysql_unsupported_routines/input.sql new file mode 100644 index 0000000..8102044 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_routines/input.sql @@ -0,0 +1,49 @@ +CREATE PROCEDURE p () COMMENT 'c' SELECT 1 +-- case +CREATE PROCEDURE p () LANGUAGE SQL SELECT 1 +-- case +CREATE PROCEDURE p () NOT DETERMINISTIC SELECT 1 +-- case +CREATE PROCEDURE p () CONTAINS SQL SELECT 1 +-- case +CREATE PROCEDURE p () NO SQL SELECT 1 +-- case +CREATE PROCEDURE p () READS SQL DATA SELECT 1 +-- case +CREATE PROCEDURE p () MODIFIES SQL DATA SELECT 1 +-- case +CREATE PROCEDURE p () SQL SECURITY DEFINER SELECT 1 +-- case +CREATE PROCEDURE p () SQL SECURITY INVOKER SELECT 1 +-- case +CREATE DEFINER = u@h PROCEDURE p (IN a INT, OUT b VARCHAR(10), INOUT c BIGINT) COMMENT 'c' LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER SELECT 1 +-- case +CREATE FUNCTION js_add(a INT, b INT) RETURNS INT LANGUAGE JAVASCRIPT DETERMINISTIC NO SQL AS $$ + return a + b; +$$ +-- case +CREATE PROCEDURE js_log(IN msg VARCHAR(255)) LANGUAGE JAVASCRIPT AS $$ + console.log(msg); +$$ +-- case +CREATE FUNCTION js_q(s VARCHAR(64)) RETURNS VARCHAR(128) LANGUAGE JAVASCRIPT DETERMINISTIC NO SQL AS $body$ + return "got: " + s; +$body$ +-- case +CREATE FUNCTION js_str(a INT) RETURNS INT LANGUAGE JAVASCRIPT DETERMINISTIC NO SQL AS 'return a' +-- case +CREATE LIBRARY lib_demo LANGUAGE JAVASCRIPT AS $$ + export function inc(n) { return n + 1; } +$$ +-- case +CREATE LIBRARY IF NOT EXISTS test.lib_demo LANGUAGE JAVASCRIPT AS $$ + export const PI = 3.14159; +$$ +-- case +CREATE FUNCTION js_inc(a INT) RETURNS INT LANGUAGE JAVASCRIPT DETERMINISTIC NO SQL USING (lib_demo) AS $$ + return lib_demo.inc(a); +$$ +-- case +CREATE PROCEDURE p_demo() LANGUAGE JAVASCRIPT USING (test.lib_demo AS d, other_lib) AS $$ + d.inc(1); +$$ diff --git a/parser/testdata/parser/mysql_unsupported_routines/output.sql b/parser/testdata/parser/mysql_unsupported_routines/output.sql new file mode 100644 index 0000000..a994d56 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_routines/output.sql @@ -0,0 +1,49 @@ +-- error: line 1 column 29 near "COMMENT 'c' SELECT 1" +-- case +-- error: line 1 column 30 near "LANGUAGE SQL SELECT 1" +-- case +-- error: line 1 column 25 near "NOT DETERMINISTIC SELECT 1" +-- case +-- error: line 1 column 30 near "CONTAINS SQL SELECT 1" +-- case +-- error: line 1 column 24 near "NO SQL SELECT 1" +-- case +-- error: line 1 column 27 near "READS SQL DATA SELECT 1" +-- case +-- error: line 1 column 30 near "MODIFIES SQL DATA SELECT 1" +-- case +-- error: line 1 column 25 near "SQL SECURITY DEFINER SELECT 1" +-- case +-- error: line 1 column 25 near "SQL SECURITY INVOKER SELECT 1" +-- case +-- error: line 1 column 86 near "COMMENT 'c' LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER SELECT 1" +-- case +-- error: line 1 column 92 near "AS $$ + return a + b; +$$" +-- case +-- error: line 1 column 53 near "LANGUAGE JAVASCRIPT AS $$ + console.log(msg); +$$" +-- case +-- error: line 1 column 100 near "AS $body$ + return "got: " + s; +$body$" +-- case +-- error: line 1 column 85 near "AS 'return a'" +-- case +-- error: line 1 column 49 near "$$ + export function inc(n) { return n + 1; } +$$" +-- case +-- error: line 1 column 68 near "$$ + export const PI = 3.14159; +$$" +-- case +-- error: line 1 column 88 near "USING (lib_demo) AS $$ + return lib_demo.inc(a); +$$" +-- case +-- error: line 1 column 34 near "LANGUAGE JAVASCRIPT USING (test.lib_demo AS d, other_lib) AS $$ + d.inc(1); +$$" diff --git a/parser/testdata/parser/mysql_unsupported_show/input.sql b/parser/testdata/parser/mysql_unsupported_show/input.sql new file mode 100644 index 0000000..89ebc3d --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_show/input.sql @@ -0,0 +1,13 @@ +SHOW STORAGE ENGINES +-- case +SHOW ERRORS LIMIT 5 +-- case +SHOW ERRORS LIMIT 5, 10 +-- case +SHOW WARNINGS LIMIT 1 +-- case +SHOW WARNINGS LIMIT 5, 10 +-- case +SHOW EXTENDED INDEX FROM t +-- case +SHOW REPLICA STATUS FOR CHANNEL 'ch' diff --git a/parser/testdata/parser/mysql_unsupported_show/output.sql b/parser/testdata/parser/mysql_unsupported_show/output.sql new file mode 100644 index 0000000..696fdac --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_show/output.sql @@ -0,0 +1,13 @@ +-- error: line 1 column 12 near "STORAGE ENGINES" +-- case +-- error: line 1 column 17 near "LIMIT 5" +-- case +-- error: line 1 column 17 near "LIMIT 5, 10" +-- case +-- error: line 1 column 19 near "LIMIT 1" +-- case +-- error: line 1 column 19 near "LIMIT 5, 10" +-- case +-- error: line 1 column 19 near "INDEX FROM t" +-- case +-- error: line 1 column 23 near "FOR CHANNEL 'ch'" diff --git a/parser/testdata/parser/mysql_unsupported_txn/input.sql b/parser/testdata/parser/mysql_unsupported_txn/input.sql new file mode 100644 index 0000000..37ff4f7 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_txn/input.sql @@ -0,0 +1,15 @@ +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY +-- case +BEGIN WORK +-- case +COMMIT WORK +-- case +ROLLBACK WORK AND NO CHAIN RELEASE +-- case +ROLLBACK WORK TO s1 +-- case +LOCK TABLES t1 AS a1 WRITE +-- case +LOCK TABLES t1 a1 READ +-- case +LOCK TABLES t2 LOW_PRIORITY WRITE diff --git a/parser/testdata/parser/mysql_unsupported_txn/output.sql b/parser/testdata/parser/mysql_unsupported_txn/output.sql new file mode 100644 index 0000000..e00ab06 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_txn/output.sql @@ -0,0 +1,15 @@ +-- error: line 1 column 43 near ", READ ONLY" +-- case +-- error: line 1 column 10 near "WORK" +-- case +-- error: line 1 column 11 near "WORK" +-- case +-- error: line 1 column 13 near "WORK AND NO CHAIN RELEASE" +-- case +-- error: line 1 column 13 near "WORK TO s1" +-- case +-- error: line 1 column 17 near "AS a1 WRITE" +-- case +-- error: line 1 column 17 near "a1 READ" +-- case +-- error: line 1 column 27 near "LOW_PRIORITY WRITE" diff --git a/parser/testdata/parser/mysql_unsupported_types/input.sql b/parser/testdata/parser/mysql_unsupported_types/input.sql new file mode 100644 index 0000000..359e0a3 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_types/input.sql @@ -0,0 +1,23 @@ +CREATE TABLE t (a INT INVISIBLE) +-- case +CREATE TABLE t (a INT VISIBLE) +-- case +CREATE TABLE t (a INT NOT NULL DEFAULT 5 INVISIBLE) +-- case +CREATE TABLE `gipk_t` (`my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */, `col1` int DEFAULT NULL, PRIMARY KEY (`my_row_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +-- case +ALTER TABLE t ADD COLUMN a INT INVISIBLE +-- case +ALTER TABLE t ALTER COLUMN a SET VISIBLE +-- case +ALTER TABLE t ALTER COLUMN a SET INVISIBLE +-- case +ALTER TABLE t MODIFY COLUMN a INT VISIBLE +-- case +CREATE TABLE t (a INT ENGINE_ATTRIBUTE = '{"k": 1}' SECONDARY_ENGINE_ATTRIBUTE = '{"k": 2}') +-- case +CREATE TABLE t (a INT ENGINE_ATTRIBUTE '{"k": 1}') +-- case +CREATE TABLE t (a INT DEFAULT (1 + 1)) +-- case +CREATE TABLE t (a DATE DEFAULT (CURRENT_DATE + INTERVAL 1 YEAR)) diff --git a/parser/testdata/parser/mysql_unsupported_types/output.sql b/parser/testdata/parser/mysql_unsupported_types/output.sql new file mode 100644 index 0000000..1f3696d --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_types/output.sql @@ -0,0 +1,23 @@ +-- error: line 1 column 31 near "INVISIBLE)" +-- case +-- error: line 1 column 29 near "VISIBLE)" +-- case +-- error: line 1 column 50 near "INVISIBLE)" +-- case +-- error: line 1 column 93 near "INVISIBLE */, `col1` int DEFAULT NULL, PRIMARY KEY (`my_row_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci" +-- case +-- error: line 1 column 40 near "INVISIBLE" +-- case +-- error: line 1 column 40 near "VISIBLE" +-- case +-- error: line 1 column 42 near "INVISIBLE" +-- case +-- error: line 1 column 41 near "VISIBLE" +-- case +-- error: line 1 column 38 near "ENGINE_ATTRIBUTE = '{"k": 1}' SECONDARY_ENGINE_ATTRIBUTE = '{"k": 2}')" +-- case +-- error: line 1 column 38 near "ENGINE_ATTRIBUTE '{"k": 1}')" +-- case +-- error: line 1 column 34 near "+ 1))" +-- case +-- error: line 1 column 46 near "+ INTERVAL 1 YEAR))" diff --git a/parser/testdata/parser/mysql_unsupported_utility/input.sql b/parser/testdata/parser/mysql_unsupported_utility/input.sql new file mode 100644 index 0000000..02acf56 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_utility/input.sql @@ -0,0 +1,9 @@ +EXPLAIN FORMAT = TREE SELECT 1 +-- case +EXPLAIN ANALYZE FORMAT = TREE SELECT 1 +-- case +EXPLAIN FORMAT = JSON INTO @plan SELECT 1 +-- case +EXPLAIN FORMAT = JSON INTO @plan SELECT t.id, COUNT(*) FROM information_schema.tables t GROUP BY t.id +-- case +EXPLAIN t 'a%' diff --git a/parser/testdata/parser/mysql_unsupported_utility/output.sql b/parser/testdata/parser/mysql_unsupported_utility/output.sql new file mode 100644 index 0000000..190a8d5 --- /dev/null +++ b/parser/testdata/parser/mysql_unsupported_utility/output.sql @@ -0,0 +1,9 @@ +-- error: line 1 column 21 near "TREE SELECT 1" +-- case +-- error: line 1 column 29 near "TREE SELECT 1" +-- case +-- error: line 1 column 26 near "INTO @plan SELECT 1" +-- case +-- error: line 1 column 26 near "INTO @plan SELECT t.id, COUNT(*) FROM information_schema.tables t GROUP BY t.id" +-- case +-- error: line 1 column 14 near "'a%'"