mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
MDEV-41566 Allow ROW_NUMBER as unquoted column name
MDEV-26611 made ROW_NUMBER an always-recognized keyword (for GET DIAGNOSTICS / SIGNAL) and put it in the reserved keyword list, so it could no longer be used as an unquoted identifier. Make ROW_NUMBER_SYM a non-reserved keyword (keyword_sp_var_and_label, like LAST_VALUE), so ROW_NUMBER() still parses only as the window function. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
committed by
Oleksandr "Sanja" Byelkin
parent
85534724fa
commit
16aa5d6f4a
@@ -1862,3 +1862,73 @@ DROP TABLE t1,t2;
|
||||
#
|
||||
# End of 10.7 tests
|
||||
#
|
||||
#
|
||||
# MDEV-41566 Allow ROW_NUMBER as unquoted column name
|
||||
#
|
||||
CREATE TABLE row_number (row_number INT);
|
||||
INSERT INTO row_number (row_number) VALUES (10),(20);
|
||||
SELECT row_number, row_number.row_number, row_number AS row_number
|
||||
FROM row_number ORDER BY row_number;
|
||||
row_number row_number row_number
|
||||
10 10 10
|
||||
20 20 20
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY row_number) AS rn, row_number
|
||||
FROM row_number;
|
||||
rn row_number
|
||||
1 10
|
||||
2 20
|
||||
SELECT t.row_number, ROW_NUMBER() OVER (ORDER BY t.row_number) AS row_number
|
||||
FROM row_number t;
|
||||
row_number row_number
|
||||
10 1
|
||||
20 2
|
||||
SET sql_quote_show_create=0;
|
||||
SHOW CREATE TABLE row_number;
|
||||
Table Create Table
|
||||
row_number CREATE TABLE `row_number` (
|
||||
`row_number` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
SET sql_quote_show_create=DEFAULT;
|
||||
DROP TABLE row_number;
|
||||
CREATE FUNCTION row_number() RETURNS INT RETURN 100;
|
||||
SELECT ROW_NUMBER() OVER () AS rn, test.row_number() AS sf;
|
||||
rn sf
|
||||
1 100
|
||||
DROP FUNCTION row_number;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE row_number INT DEFAULT 0;
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
GET DIAGNOSTICS CONDITION 1 row_number= ROW_NUMBER;
|
||||
row_number: LOOP
|
||||
LEAVE row_number;
|
||||
END LOOP row_number;
|
||||
SIGNAL SQLSTATE '45000' SET ROW_NUMBER= 7;
|
||||
SELECT row_number;
|
||||
END;
|
||||
$$
|
||||
CALL p1();
|
||||
row_number
|
||||
7
|
||||
DROP PROCEDURE p1;
|
||||
SET sql_mode=ORACLE;
|
||||
CREATE TABLE row_number (row_number INT);
|
||||
INSERT INTO row_number VALUES (1);
|
||||
SELECT row_number, ROW_NUMBER() OVER (ORDER BY row_number) AS rn
|
||||
FROM row_number;
|
||||
row_number rn
|
||||
1 1
|
||||
DROP TABLE row_number;
|
||||
DECLARE
|
||||
row_number INT := 0;
|
||||
BEGIN
|
||||
row_number := 5;
|
||||
SELECT row_number;
|
||||
END;
|
||||
$$
|
||||
row_number
|
||||
5
|
||||
SET sql_mode=DEFAULT;
|
||||
#
|
||||
# End of 11.4 tests
|
||||
#
|
||||
|
||||
@@ -1736,3 +1736,64 @@ DROP TABLE t1,t2;
|
||||
--echo # End of 10.7 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-41566 Allow ROW_NUMBER as unquoted column name
|
||||
--echo #
|
||||
|
||||
CREATE TABLE row_number (row_number INT);
|
||||
INSERT INTO row_number (row_number) VALUES (10),(20);
|
||||
SELECT row_number, row_number.row_number, row_number AS row_number
|
||||
FROM row_number ORDER BY row_number;
|
||||
SELECT ROW_NUMBER() OVER (ORDER BY row_number) AS rn, row_number
|
||||
FROM row_number;
|
||||
SELECT t.row_number, ROW_NUMBER() OVER (ORDER BY t.row_number) AS row_number
|
||||
FROM row_number t;
|
||||
SET sql_quote_show_create=0;
|
||||
SHOW CREATE TABLE row_number;
|
||||
SET sql_quote_show_create=DEFAULT;
|
||||
DROP TABLE row_number;
|
||||
|
||||
# The window function wins over a same-named stored function
|
||||
--disable_warnings
|
||||
CREATE FUNCTION row_number() RETURNS INT RETURN 100;
|
||||
SELECT ROW_NUMBER() OVER () AS rn, test.row_number() AS sf;
|
||||
--enable_warnings
|
||||
DROP FUNCTION row_number;
|
||||
|
||||
DELIMITER $$;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE row_number INT DEFAULT 0;
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
GET DIAGNOSTICS CONDITION 1 row_number= ROW_NUMBER;
|
||||
row_number: LOOP
|
||||
LEAVE row_number;
|
||||
END LOOP row_number;
|
||||
SIGNAL SQLSTATE '45000' SET ROW_NUMBER= 7;
|
||||
SELECT row_number;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
CALL p1();
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
SET sql_mode=ORACLE;
|
||||
CREATE TABLE row_number (row_number INT);
|
||||
INSERT INTO row_number VALUES (1);
|
||||
SELECT row_number, ROW_NUMBER() OVER (ORDER BY row_number) AS rn
|
||||
FROM row_number;
|
||||
DROP TABLE row_number;
|
||||
DELIMITER $$;
|
||||
DECLARE
|
||||
row_number INT := 0;
|
||||
BEGIN
|
||||
row_number := 5;
|
||||
SELECT row_number;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
SET sql_mode=DEFAULT;
|
||||
|
||||
--echo #
|
||||
--echo # End of 11.4 tests
|
||||
--echo #
|
||||
|
||||
@@ -191,17 +191,17 @@ SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR
|
||||
FROM performance_schema.events_statements_summary_by_digest
|
||||
ORDER BY DIGEST_TEXT;
|
||||
SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR
|
||||
test b69a5ddd08657692e23aa72d37dc15e0 EXPLAIN SELECT * FROM `test` . `v1` 1
|
||||
test 8c76fc18fe1711607640be2906e38f58 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 1
|
||||
test 9bedc57de65e2ac25d67fcb6ccadb427 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 1
|
||||
test 0539bbfdb016341a22d32fecb12c9882 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 1
|
||||
test 3368b44e9d8b8cfb13b58f97a255d77f EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 1
|
||||
test 2f619aeadc8bd993980ef9b4d12e4222 SELECT * FROM `test` . `v1` 1
|
||||
test b9a44c024c9d79de76f2ebcd2f208c4c SELECT * FROM `test` . `v1` WHERE `a` = ? 1
|
||||
test a3ccc4c3c79e853eaa17e3ceb7a24b30 SELECT * FROM `test` . `v1` WHERE `b` > ? 1
|
||||
test 9556566adc0953fccd8e2e35019287ed SELECT `a` , `b` FROM `test` . `v1` 1
|
||||
test fc937c99007b0976d19fb685b3bf9acc SELECT `b` , `a` FROM `test` . `v1` 1
|
||||
test a73dca7a09f45de04f1f4588f0a4e19f TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
|
||||
test cc642db42cfbd7fa4b84979117bc89bf EXPLAIN SELECT * FROM `test` . `v1` 1
|
||||
test 8a9bfa3462da86ccef0065f9205d3866 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 1
|
||||
test 9eb32c6e568e12afe47932edcdf276c1 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 1
|
||||
test 8112860df84352e80fe9740a5299aad8 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 1
|
||||
test 1ad86221dfc41bc7fd880ceae7902f37 EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 1
|
||||
test feea01a23ec900ee703e8e0f10708969 SELECT * FROM `test` . `v1` 1
|
||||
test 362698aa75e1cbd370aab43466ce0f26 SELECT * FROM `test` . `v1` WHERE `a` = ? 1
|
||||
test 2700d0d1d801b702ff0d7b6c4affb2bf SELECT * FROM `test` . `v1` WHERE `b` > ? 1
|
||||
test d5b2176296ceae0ca8516dd673badce8 SELECT `a` , `b` FROM `test` . `v1` 1
|
||||
test 220adfb34e8387ce4178c39febb09835 SELECT `b` , `a` FROM `test` . `v1` 1
|
||||
test 3a184434866af88c22454b1399c01e73 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
|
||||
DROP TABLE test.v1;
|
||||
CREATE VIEW test.v1 AS SELECT * FROM test.t1;
|
||||
EXPLAIN SELECT * from test.v1;
|
||||
@@ -248,19 +248,19 @@ SELECT SCHEMA_NAME, DIGEST, DIGEST_TEXT, COUNT_STAR
|
||||
FROM performance_schema.events_statements_summary_by_digest
|
||||
ORDER BY DIGEST_TEXT;
|
||||
SCHEMA_NAME DIGEST DIGEST_TEXT COUNT_STAR
|
||||
test 7f6c48fe072a231bc75d6d449978b9f5 CREATE VIEW `test` . `v1` AS SELECT * FROM `test` . `t1` 1
|
||||
test c24db45ea4beed6ba2537ca6ea2d0484 DROP TABLE `test` . `v1` 1
|
||||
test b69a5ddd08657692e23aa72d37dc15e0 EXPLAIN SELECT * FROM `test` . `v1` 2
|
||||
test 8c76fc18fe1711607640be2906e38f58 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 2
|
||||
test 9bedc57de65e2ac25d67fcb6ccadb427 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 2
|
||||
test 0539bbfdb016341a22d32fecb12c9882 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 2
|
||||
test 3368b44e9d8b8cfb13b58f97a255d77f EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 2
|
||||
test 2f619aeadc8bd993980ef9b4d12e4222 SELECT * FROM `test` . `v1` 2
|
||||
test b9a44c024c9d79de76f2ebcd2f208c4c SELECT * FROM `test` . `v1` WHERE `a` = ? 2
|
||||
test a3ccc4c3c79e853eaa17e3ceb7a24b30 SELECT * FROM `test` . `v1` WHERE `b` > ? 2
|
||||
test 7b82ea9a7c1859f76abed712d2d4b14d SELECT SCHEMA_NAME , `DIGEST` , `DIGEST_TEXT` , `COUNT_STAR` FROM `performance_schema` . `events_statements_summary_by_digest` ORDER BY `DIGEST_TEXT` 1
|
||||
test 9556566adc0953fccd8e2e35019287ed SELECT `a` , `b` FROM `test` . `v1` 2
|
||||
test fc937c99007b0976d19fb685b3bf9acc SELECT `b` , `a` FROM `test` . `v1` 2
|
||||
test a73dca7a09f45de04f1f4588f0a4e19f TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
|
||||
test 38728dede48ca852af3b7cba13337370 CREATE VIEW `test` . `v1` AS SELECT * FROM `test` . `t1` 1
|
||||
test d82cf8ac630f54ba7ee0612b7e8ddac5 DROP TABLE `test` . `v1` 1
|
||||
test cc642db42cfbd7fa4b84979117bc89bf EXPLAIN SELECT * FROM `test` . `v1` 2
|
||||
test 8a9bfa3462da86ccef0065f9205d3866 EXPLAIN SELECT * FROM `test` . `v1` WHERE `a` = ? 2
|
||||
test 9eb32c6e568e12afe47932edcdf276c1 EXPLAIN SELECT * FROM `test` . `v1` WHERE `b` > ? 2
|
||||
test 8112860df84352e80fe9740a5299aad8 EXPLAIN SELECT `a` , `b` FROM `test` . `v1` 2
|
||||
test 1ad86221dfc41bc7fd880ceae7902f37 EXPLAIN SELECT `b` , `a` FROM `test` . `v1` 2
|
||||
test feea01a23ec900ee703e8e0f10708969 SELECT * FROM `test` . `v1` 2
|
||||
test 362698aa75e1cbd370aab43466ce0f26 SELECT * FROM `test` . `v1` WHERE `a` = ? 2
|
||||
test 2700d0d1d801b702ff0d7b6c4affb2bf SELECT * FROM `test` . `v1` WHERE `b` > ? 2
|
||||
test 906736e6ffc0db88417ff4b27645a621 SELECT SCHEMA_NAME , `DIGEST` , `DIGEST_TEXT` , `COUNT_STAR` FROM `performance_schema` . `events_statements_summary_by_digest` ORDER BY `DIGEST_TEXT` 1
|
||||
test d5b2176296ceae0ca8516dd673badce8 SELECT `a` , `b` FROM `test` . `v1` 2
|
||||
test 220adfb34e8387ce4178c39febb09835 SELECT `b` , `a` FROM `test` . `v1` 2
|
||||
test 3a184434866af88c22454b1399c01e73 TRUNCATE TABLE `performance_schema` . `events_statements_summary_by_digest` 1
|
||||
DROP VIEW test.v1;
|
||||
DROP TABLE test.t1;
|
||||
|
||||
@@ -8,5 +8,5 @@ SELECT 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
|
||||
####################################
|
||||
SELECT event_name, digest, digest_text, sql_text FROM events_statements_history_long;
|
||||
event_name digest digest_text sql_text
|
||||
statement/sql/select 142569e3e23dff2a0170a603ed79020a SELECT ? + ? + SELECT ...
|
||||
statement/sql/truncate 5947880b8ba439f0ed3ff0bfbb04eebf TRUNCATE TABLE truncat...
|
||||
statement/sql/select 5169a25ba78dc5dc99487237f8459aa8 SELECT ? + ? + SELECT ...
|
||||
statement/sql/truncate df2c97cc16a756f0dee4c48871d45e44 TRUNCATE TABLE truncat...
|
||||
|
||||
@@ -636,7 +636,6 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
|
||||
%token <kwd> RETURN_ORACLE_SYM /* SQL-2003-R, PLSQL-R */
|
||||
%token <kwd> REVOKE /* SQL-2003-R */
|
||||
%token <kwd> RIGHT /* SQL-2003-R */
|
||||
%token <kwd> ROW_NUMBER_SYM
|
||||
%token <kwd> ROWS_SYM /* SQL-2003-R */
|
||||
%token <kwd> ROWTYPE_ORACLE_SYM /* PLSQL-R */
|
||||
%token <kwd> SECOND_MICROSECOND_SYM
|
||||
@@ -1053,6 +1052,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
|
||||
%token <kwd> ROW_SYM /* SQL-2003-R */
|
||||
%token <kwd> ROW_COUNT_SYM /* SQL-2003-N */
|
||||
%token <kwd> ROW_FORMAT_SYM
|
||||
%token <kwd> ROW_NUMBER_SYM
|
||||
%token <kwd> RTREE_SYM
|
||||
%token <kwd> SAVEPOINT_SYM /* SQL-2003-R */
|
||||
%token <kwd> SCHEDULE_SYM
|
||||
@@ -16197,6 +16197,7 @@ keyword_sp_var_and_label:
|
||||
%ifdef MARIADB
|
||||
| ROWNUM_SYM
|
||||
%endif
|
||||
| ROW_NUMBER_SYM
|
||||
| SECOND_SYM
|
||||
| SETVAL_SYM
|
||||
| SOUNDS_SYM
|
||||
@@ -16393,7 +16394,6 @@ reserved_keyword_udt_not_param_type:
|
||||
| RIGHT
|
||||
| ROWS_SYM
|
||||
| ROWTYPE_ORACLE_SYM
|
||||
| ROW_NUMBER_SYM
|
||||
| SECOND_MICROSECOND_SYM
|
||||
| SELECT_SYM
|
||||
| SENSITIVE_SYM
|
||||
|
||||
Reference in New Issue
Block a user