polardb / polardb/polardbx-sql
after changing YEAR function ,col_2's value unexpectedly become NULL
Open
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 1.7k
- Forks
- 337
- PR merge metrics
- No merged PRs in 30d
Description
after changing YEAR function ,col_2's value unexpectedly become NULL
mysql> WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5) AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
+---------+-------+
| col_1 | col_2 |
+---------+-------+
| 63.0000 | 2026 |
+---------+-------+
1 row in set (0.03 sec)
mysql> WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1 AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
+---------+-------+
| col_1 | col_2 |
+---------+-------+
| 63.0000 | NULL |
+---------+-------+
1 row in set (0.03 sec)
Additionally in nysql:9.5.0,this bug has been solved
mysql> WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5) AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
+---------+-------+
| col_1 | col_2 |
+---------+-------+
| 63.0000 | 2026 |
+---------+-------+
1 row in set (0.00 sec)
mysql> WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1 AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
+---------+-------+
| col_1 | col_2 |
+---------+-------+
| 63.0000 | 2026 |
+---------+-------+
1 row in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 9.5.0 |
+-----------+
1 row in set (0.00 sec)
How to repeat
DROP DATABASE IF EXISTS test;
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE t1 (
c1 INT NOT NULL AUTO_INCREMENT,
c2 VARCHAR(255) NOT NULL,
c3 VARCHAR(255) NULL,
c4 INT NULL,
c5 DATE NOT NULL,
c6 VARCHAR(10) NOT NULL,
PRIMARY KEY (c1)
);
CREATE TABLE t3 (
c1 INT NOT NULL AUTO_INCREMENT,
c2 INT NOT NULL,
c3 INT NOT NULL,
c4 YEAR NOT NULL,
c5 TIME NULL,
c6 TINYINT NULL,
c7 SMALLINT NULL,
c8 MEDIUMINT NULL,
c9 BIGINT NULL,
c10 LONGTEXT NULL,
c11 GEOMETRY NULL,
c12 TINYTEXT NULL,
c13 TINYBLOB NULL,
c14 SET('x','y','z') NULL,
c15 TINYINT(1) NULL,
PRIMARY KEY (c1)
);
INSERT INTO t1 (c1, c2, c3, c4, c5, c6) VALUES (9505, 'sample_j6tRCMl2ntyXKOJEbYA1cM0rvcwpdKAcFn0YWKrCKnu3WgFFCrLj3UNBc3r0OF7q8uip4bOEuLRYII19C2S5qEaJjRJTU8TKZLWWoGUsHSVRxz1dRztOnTDtYBY4DRndJEl80NQgnZRcyNjwqJWoje0BloyBO6pONgdOaYlL4LVYA4YBB97fuaiNZHuqN3cbb0aI6BdVxhvNwuVXqLZEI4NTUQBbg2QSoJ9IL49VpgrAVaahv9DPz', 'sample_FslXMXkrstdX6KR63rp7SuzwgkzaVAWVG7pPEULjq3STRGzDQ82473KqhecREn4XoFg63sUdHz6awadu3vYDH2tEXOy0zP4Ybr4epzn8AniupuoryIsLYB2BvUcqxi2V3X1DxNA8bf4Co0emlCYz', 61, '2025-12-02', 'sample_h');
INSERT INTO t3 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) VALUES (4992, 2579, 9871, 2020, '2023-01-01 22:44:35', 46, 25, 79, 9, 'sample_AEtk3qwMxslH0XcoF3Ort1thTgJYkZUiwpxtTmxhWIgxq52IV6TU1YcGOwgH8ldWWyvLDqO7YEEgwONICRY92VcLmnijCrTWzOC5R0WrbXNpwg9ya9bAisamL0fbNK0b92wUXq6oxdO9BuGPlWyaS9ve6M7IRoQQkFBrDpsmDuQug7b8jOSxnBk6ztIrDvaLYM4aeQhSZMuJPSf3RkPeoIh5QanRUBtm3O5VXocvNbAJyTQgt3AhB2llo5tnO1bmh9gFLalw0NfvIsxlKUpQ4G6ZHsGpnQaXH6e4lPDDVX07bfgBSZNm0uolja55cRN9BAdSFKgaZmSxZywU0nR2iwTbewfhEq2IK2tVCQ0t9tOR4dtVjhYNtLoYYms3DWpah9BW9DpqKD4bBtCwiu9JgCaQys69sn53gW6jO5P734nR266nV4D1NG09DR0v4FhN4BSxwm6yQIQgXJUPpXIuJgM0Jzr0ZNNrbEHw6TUT2OjjXow92FMiXruAGixuDuZMkOf0LKqES6vOtMOKozH8Ldr4Sp4LSFDPc1qQFKD6sPtP9ngVqfI0WTuDWQTGS65hVh0p5KvlFKK3tkblFuonjfEyKG5QNDinXOVK3tgM0SRHnW8RQJ1rXgJHoQZOEopxKJFE7tHfLpqswhlT0ziNwLqZ6sxQ8eSIlA0jAFO8WjJGwXXOfs4xgmEI4eRav0lK4PuEOjQAnb2WHltjMA5rqHlGrcTcGpklPpdCJtBg6WEIYNvXihQqRvUg1Jw5ctg8rVgXJSb72yhESghMl7INYchsjZnuIkAI48xe0VSgGZgjg3rdhi02urw1zJDcPeupTXtMYmMQN1w9a1KXTYXu7Ysd6UDQLFjJyEKjcfQaHmyGvsZncCFWkLRjWPKyja8PQmWdLEOcuGplBdLcCoK8tQnX70sYeHLYqR9UnenaN5XXKahe0qpAdDBgjQYZvDadkvdqU591bfCHkgUBH70Z1Hfl51ukCHOty2JzcOvT6SaSVKNgGvTch6h7WRBMpBgJCL2ago2YZYPreIw3GF17xw7mjwk6QfnLAY23TgLTUV9TrCxQpcZD90YW8SCqZbXKYgfAsgt4OKrf2LZbQr0ziFfcF68MTm34rJmnPm1w0mIGCwMmU', ST_GeomFromText('POINT(89.285446 -33.318821)'), 'sample_YFFtbMWTmNenOjXxHy0YfyUoPQSfJAVvKICpHFIIMenooB36lYoAS3hPjCLJlPqpVho', X'D4A7E898B817C88330CBBBE9B0B6C2A736', 'z', NULL);
WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5) AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
WITH cte_128 AS (SELECT (SELECT GROUP_CONCAT(s872.c3 ORDER BY s872.c3 SEPARATOR ',') AS subq_col FROM t1 AS s872) AS col_1, lhl17.c6 AS col_2 FROM t1 AS lhl17) SELECT (SELECT AVG(63) AS subq_col FROM t1 AS s865) AS col_1, YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1 AS col_2 FROM t3 AS rkr44 CROSS JOIN cte_128 AS wne59 ON 1 = 1 GROUP BY YEAR(rkr44.c5), YEAR(rkr44.c5 + INTERVAL '1' YEAR) - 1;
Version
mysql> select @@version;
+-------------------------+
| @@version |
+-------------------------+
| 8.0.32-X-Cluster-8.4.19 |
+-------------------------+
1 row in set (0.01 sec)
mysql> select polardb_version();
+---------+--------------+---------------------+
| TYPE | VERSION | RELEASE_DATE |
+---------+--------------+---------------------+
| Product | PolarDB V2.0 | Distributed Edition |
| CN | 2.4.0.5.4.19 | SNAPSHOT |
| DN | 2.4.0.8.4.19 | 20240430 |
| GMS | 2.4.0.8.4.19 | 20240430 |
+---------+--------------+---------------------+
4 rows in set (0.00 sec)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the two CTE queries from the report on the stated 8.0.32-based version and compare their results with MySQL 9.5.0. Trace the YEAR and INTERVAL expressions through grouped-query evaluation; done means the second query no longer produces NULL and the behavior is covered by a regression test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- mysql, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 32/100