1
0
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:
Oleksandr Byelkin
2026-10-22 13:50:45 +02:00
committed by Oleksandr "Sanja" Byelkin
parent 85534724fa
commit 16aa5d6f4a
5 changed files with 160 additions and 29 deletions

View File

@@ -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
#

View File

@@ -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 #

View File

@@ -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;

View File

@@ -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...

View File

@@ -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