1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

MCOL-5932: fix heap buffer overflow with minimal revert of MCOL-5776 breaking change (#3445)

This commit is contained in:
Leonid Fedorov
2025-04-15 17:46:25 +04:00
committed by GitHub
parent 16d9b56608
commit 6a712dc0ad
6 changed files with 272 additions and 15 deletions

View File

@ -16,15 +16,6 @@ COUNT(y) OVER (PARTITION BY LEFT(y, 10))
DROP TABLE t;
CREATE TABLE t(ci1 integer, ci2 integer) engine=Columnstore;
INSERT INTO t(ci1, ci2) VALUES (NULL, 1), (NULL, 2), (1,3), (1,4), (2,5), (2,6), (3,7), (3,8);
SELECT ci1+ci2, ci1+ci2, SUM(ci2), AVG(ci2) FROM t GROUP BY ci1+ci2, ci1+ci2;
ci1+ci2 ci1+ci2 SUM(ci2) AVG(ci2)
10 10 7 7.0000
11 11 8 8.0000
4 4 3 3.0000
5 5 4 4.0000
7 7 5 5.0000
8 8 6 6.0000
NULL NULL 3 1.5000
SELECT CONCAT(ci1,ci2), CONCAT(ci1,ci2), SUM(ci2), AVG(ci2) FROM t GROUP BY ci1;
CONCAT(ci1,ci2) CONCAT(ci1,ci2) SUM(ci2) AVG(ci2)
14 14 7 3.5000

View File

@ -12,8 +12,10 @@ DROP TABLE t;
CREATE TABLE t(ci1 integer, ci2 integer) engine=Columnstore;
INSERT INTO t(ci1, ci2) VALUES (NULL, 1), (NULL, 2), (1,3), (1,4), (2,5), (2,6), (3,7), (3,8);
--sorted_result
SELECT ci1+ci2, ci1+ci2, SUM(ci2), AVG(ci2) FROM t GROUP BY ci1+ci2, ci1+ci2;
# support of duplicated keys produced bug MCOL-5776 so, was temporaly disabled
#--sorted_result
#SELECT ci1+ci2, ci1+ci2, SUM(ci2), AVG(ci2) FROM t GROUP BY ci1+ci2, ci1+ci2;
--sorted_result
SELECT CONCAT(ci1,ci2), CONCAT(ci1,ci2), SUM(ci2), AVG(ci2) FROM t GROUP BY ci1;
--sorted_result

View File

@ -0,0 +1,125 @@
DROP DATABASE IF EXISTS mcol_5932;
CREATE DATABASE mcol_5932;
USE mcol_5932;
CREATE TABLE `fact_de_odvcan_11600` (
`REGODV_ID` INT(10) UNSIGNED DEFAULT NULL,
`HSTOPH_ID` INT(11) DEFAULT NULL,
`ATC4PH_ID` INT(11) DEFAULT NULL,
`PZN_ID` INT(10) UNSIGNED DEFAULT NULL,
`WERTART_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`NFC3_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`SUB_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`VAL_25_101` INT(11) DEFAULT NULL,
`VAL_25_102` INT(11) DEFAULT NULL,
`VAL_25_430` DECIMAL(12, 3) DEFAULT NULL,
`VAL_25_103` INT(11) DEFAULT NULL,
`VAL_25_104` INT(11) DEFAULT NULL,
`VAL_25_105` INT(11) DEFAULT NULL,
`ZE` DECIMAL(10, 3) DEFAULT NULL,
`ZE_CI` DECIMAL(13, 4) DEFAULT NULL,
`DDD` DECIMAL(10, 3) DEFAULT NULL,
`VM` DECIMAL(25, 17) DEFAULT NULL
) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
INSERT INTO `fact_de_odvcan_11600` (
`REGODV_ID`, `HSTOPH_ID`, `ATC4PH_ID`, `PZN_ID`, `WERTART_ID`, `NFC3_ID`, `SUB_ID`,
`VAL_25_101`, `VAL_25_102`, `VAL_25_430`, `VAL_25_103`, `VAL_25_104`, `VAL_25_105`,
`ZE`, `ZE_CI`, `DDD`, `VM`
) VALUES
(105904, 9873, 12345, 54321, 1, 178, 26037, 50, 60, 100.500, 70, 80, 90, 1.2, 3.4, 5.6, 0.1),
(100302, 12770, 12346, 54322, 1, 178, 26037, 55, 65, 200.750, 75, 85, 95, 2.3, 4.5, 6.7, 0.1),
(597802, 929, 12347, 54323, 1, 178, 26037, 60, 70, 300.250, 80, 90, 100, 3.4, 5.6, 7.8, 0.1),
(105907, 4665, 12348, 54324, 1, 178, 26037, 65, 75, 400.600, 85, 95, 105, 4.5, 6.7, 8.9, 0.1),
(106000, 9873, 12349, 54325, 1, 178, 26037, 70, 80, 500.900, 90, 100, 110, 5.6, 7.8, 9.1, 0.1),
(106001, 12770, 12350, 54326, 1, 178, 26037, 75, 85, 600.300, 95, 105, 115, 6.7, 8.9, 10.2, 0.1),
(106002, 4665, 12351, 54327, 1, 178, 26037, 80, 90, 700.150, 100, 110, 120, 7.8, 9.1, 11.3, 0.1),
(106003, 929, 12352, 54328, 1, 178, 26037, 85, 95, 800.750, 105, 115, 125, 8.9, 10.2, 12.4, 0.1);
CREATE ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `v_fact_de_odvcan_11600` AS
SELECT
`REGODV_ID`, `ATC4PH_ID`, `HSTOPH_ID`, `PZN_ID`, `VAL_25_430`,
`VAL_25_430` * `VAL_25_101` / 100 AS `VAL_25_5430`,
`VAL_25_430` * `VAL_25_102` / 100 AS `VAL_25_5431`,
`VAL_25_430` * `ZE` AS `VAL_25_5432`,
`VAL_25_430` * `DDD` AS `VAL_25_5433`,
`VAL_25_430` * `VAL_25_104` / 100 AS `VAL_25_5434`,
`VAL_25_430` * `VAL_25_105` / 100 AS `VAL_25_5435`,
`VAL_25_430` * `VM` AS `VAL_25_5436`,
`VAL_25_430` * `VAL_25_103` / 100 AS `VAL_25_5437`,
`VAL_25_430` * `ZE_CI` AS `VAL_25_5790`,
`VAL_25_430` - `VAL_25_430` + 1 AS `VAL_25_5999`,
`WERTART_ID`, `NFC3_ID`, `SUB_ID`
FROM `fact_de_odvcan_11600`;
CREATE TABLE IF NOT EXISTS `group_f38275cd_db16_4e71_9306_c20af09d4c8b` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_f38275cd_db16_4e71_9306_c20af09d4c8b`
VALUES(105904, '$1'),
(100302, '$1'),
(597802, '$1'),
(106000, '$1'),
(106001, '$1'),
(105907, '$1'),
(106002, '$1'),
(106003, '$1');
CREATE TABLE IF NOT EXISTS `group_6b1d15de_368d_4239_a5df_09a2ca386b97` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_6b1d15de_368d_4239_a5df_09a2ca386b97`
VALUES(105904, '$1'),
(100302, '$1'),
(105907, '$1'),
(106000, '$1'),
(106001, '$1'),
(597802, '$1'),
(106002, '$1'),
(106003, '$1');
CREATE TABLE IF NOT EXISTS `group_7d5e323d_69ab_413e_817b_2fde051ec00c` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_7d5e323d_69ab_413e_817b_2fde051ec00c`
VALUES(100302, '$1'),
(105502, '$1'),
(105904, '$1'),
(106000, '$1'),
(106001, '$1'),
(105907, '$1'),
(597802, '$1'),
(106003, '$1');
SELECT
CASE WHEN v.`SUB_ID` IN (26037) THEN '$1' ELSE 'REST' END AS `group1`,
CASE WHEN v.`SUB_ID` IN (26037) THEN '$1' ELSE 'REST' END AS `group2`,
v.`ATC4PH_ID`, v.`HSTOPH_ID`, v.`PZN_ID`,
COALESCE(g0.`eg_id`, 'REST') AS `group3`,
COALESCE(g1.`eg_id`, 'REST') AS `group4`,
COALESCE(g2.`eg_id`, 'REST') AS `group5`,
SUM(`VAL_25_430`) AS `VALUE_2025_01_M_430_1_1`,
SUM(`VAL_25_5432`) AS `VALUE_2025_01_M_5432_1_2`,
SUM(`VAL_25_5430`) AS `VALUE_2025_01_M_5430_1_3`
FROM `v_fact_de_odvcan_11600` AS v
JOIN `group_f38275cd_db16_4e71_9306_c20af09d4c8b` AS g0 ON g0.`key_id` = v.`REGODV_ID`
JOIN `group_6b1d15de_368d_4239_a5df_09a2ca386b97` AS g1 ON g1.`key_id` = v.`REGODV_ID`
JOIN `group_7d5e323d_69ab_413e_817b_2fde051ec00c` AS g2 ON g2.`key_id` = v.`REGODV_ID`
WHERE v.`WERTART_ID` IN (1)
AND v.`NFC3_ID` IN (178)
AND v.`SUB_ID` IN (26037)
AND v.`HSTOPH_ID` IN (9873, 12770, 929, 4665)
GROUP BY `group1`, `group2`, `ATC4PH_ID`, `HSTOPH_ID`, `PZN_ID`, `group3`, `group4`, `group5`
ORDER BY ATC4PH_ID
LIMIT 1000000;
group1 group2 ATC4PH_ID HSTOPH_ID PZN_ID group3 group4 group5 VALUE_2025_01_M_430_1_1 VALUE_2025_01_M_5432_1_2 VALUE_2025_01_M_5430_1_3
$1 $1 12345 9873 54321 $1 $1 $1 100.500 120.600000 50.2500000
$1 $1 12346 12770 54322 $1 $1 $1 200.750 461.725000 110.4125000
$1 $1 12347 929 54323 $1 $1 $1 300.250 1020.850000 180.1500000
$1 $1 12348 4665 54324 $1 $1 $1 400.600 1802.700000 260.3900000
$1 $1 12349 9873 54325 $1 $1 $1 500.900 2805.040000 350.6300000
$1 $1 12350 12770 54326 $1 $1 $1 600.300 4022.010000 450.2250000
$1 $1 12352 929 54328 $1 $1 $1 800.750 7126.675000 680.6375000
DROP TABLE IF EXISTS `group_f38275cd_db16_4e71_9306_c20af09d4c8b`;
DROP TABLE IF EXISTS `group_6b1d15de_368d_4239_a5df_09a2ca386b97`;
DROP TABLE IF EXISTS `group_7d5e323d_69ab_413e_817b_2fde051ec00c`;
DROP DATABASE mcol_5932;

View File

@ -0,0 +1,133 @@
--source ../include/have_columnstore.inc
--disable_warnings
DROP DATABASE IF EXISTS mcol_5932;
--enable_warnings
CREATE DATABASE mcol_5932;
USE mcol_5932;
CREATE TABLE `fact_de_odvcan_11600` (
`REGODV_ID` INT(10) UNSIGNED DEFAULT NULL,
`HSTOPH_ID` INT(11) DEFAULT NULL,
`ATC4PH_ID` INT(11) DEFAULT NULL,
`PZN_ID` INT(10) UNSIGNED DEFAULT NULL,
`WERTART_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`NFC3_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`SUB_ID` SMALLINT(5) UNSIGNED DEFAULT NULL,
`VAL_25_101` INT(11) DEFAULT NULL,
`VAL_25_102` INT(11) DEFAULT NULL,
`VAL_25_430` DECIMAL(12, 3) DEFAULT NULL,
`VAL_25_103` INT(11) DEFAULT NULL,
`VAL_25_104` INT(11) DEFAULT NULL,
`VAL_25_105` INT(11) DEFAULT NULL,
`ZE` DECIMAL(10, 3) DEFAULT NULL,
`ZE_CI` DECIMAL(13, 4) DEFAULT NULL,
`DDD` DECIMAL(10, 3) DEFAULT NULL,
`VM` DECIMAL(25, 17) DEFAULT NULL
) ENGINE=Columnstore DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
INSERT INTO `fact_de_odvcan_11600` (
`REGODV_ID`, `HSTOPH_ID`, `ATC4PH_ID`, `PZN_ID`, `WERTART_ID`, `NFC3_ID`, `SUB_ID`,
`VAL_25_101`, `VAL_25_102`, `VAL_25_430`, `VAL_25_103`, `VAL_25_104`, `VAL_25_105`,
`ZE`, `ZE_CI`, `DDD`, `VM`
) VALUES
(105904, 9873, 12345, 54321, 1, 178, 26037, 50, 60, 100.500, 70, 80, 90, 1.2, 3.4, 5.6, 0.1),
(100302, 12770, 12346, 54322, 1, 178, 26037, 55, 65, 200.750, 75, 85, 95, 2.3, 4.5, 6.7, 0.1),
(597802, 929, 12347, 54323, 1, 178, 26037, 60, 70, 300.250, 80, 90, 100, 3.4, 5.6, 7.8, 0.1),
(105907, 4665, 12348, 54324, 1, 178, 26037, 65, 75, 400.600, 85, 95, 105, 4.5, 6.7, 8.9, 0.1),
(106000, 9873, 12349, 54325, 1, 178, 26037, 70, 80, 500.900, 90, 100, 110, 5.6, 7.8, 9.1, 0.1),
(106001, 12770, 12350, 54326, 1, 178, 26037, 75, 85, 600.300, 95, 105, 115, 6.7, 8.9, 10.2, 0.1),
(106002, 4665, 12351, 54327, 1, 178, 26037, 80, 90, 700.150, 100, 110, 120, 7.8, 9.1, 11.3, 0.1),
(106003, 929, 12352, 54328, 1, 178, 26037, 85, 95, 800.750, 105, 115, 125, 8.9, 10.2, 12.4, 0.1);
CREATE ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `v_fact_de_odvcan_11600` AS
SELECT
`REGODV_ID`, `ATC4PH_ID`, `HSTOPH_ID`, `PZN_ID`, `VAL_25_430`,
`VAL_25_430` * `VAL_25_101` / 100 AS `VAL_25_5430`,
`VAL_25_430` * `VAL_25_102` / 100 AS `VAL_25_5431`,
`VAL_25_430` * `ZE` AS `VAL_25_5432`,
`VAL_25_430` * `DDD` AS `VAL_25_5433`,
`VAL_25_430` * `VAL_25_104` / 100 AS `VAL_25_5434`,
`VAL_25_430` * `VAL_25_105` / 100 AS `VAL_25_5435`,
`VAL_25_430` * `VM` AS `VAL_25_5436`,
`VAL_25_430` * `VAL_25_103` / 100 AS `VAL_25_5437`,
`VAL_25_430` * `ZE_CI` AS `VAL_25_5790`,
`VAL_25_430` - `VAL_25_430` + 1 AS `VAL_25_5999`,
`WERTART_ID`, `NFC3_ID`, `SUB_ID`
FROM `fact_de_odvcan_11600`;
CREATE TABLE IF NOT EXISTS `group_f38275cd_db16_4e71_9306_c20af09d4c8b` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_f38275cd_db16_4e71_9306_c20af09d4c8b`
VALUES(105904, '$1'),
(100302, '$1'),
(597802, '$1'),
(106000, '$1'),
(106001, '$1'),
(105907, '$1'),
(106002, '$1'),
(106003, '$1');
CREATE TABLE IF NOT EXISTS `group_6b1d15de_368d_4239_a5df_09a2ca386b97` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_6b1d15de_368d_4239_a5df_09a2ca386b97`
VALUES(105904, '$1'),
(100302, '$1'),
(105907, '$1'),
(106000, '$1'),
(106001, '$1'),
(597802, '$1'),
(106002, '$1'),
(106003, '$1');
CREATE TABLE IF NOT EXISTS `group_7d5e323d_69ab_413e_817b_2fde051ec00c` (
`key_id` BIGINT,
`eg_id` VARCHAR(40)
) ENGINE=Columnstore;
INSERT INTO `group_7d5e323d_69ab_413e_817b_2fde051ec00c`
VALUES(100302, '$1'),
(105502, '$1'),
(105904, '$1'),
(106000, '$1'),
(106001, '$1'),
(105907, '$1'),
(597802, '$1'),
(106003, '$1');
SELECT
CASE WHEN v.`SUB_ID` IN (26037) THEN '$1' ELSE 'REST' END AS `group1`,
CASE WHEN v.`SUB_ID` IN (26037) THEN '$1' ELSE 'REST' END AS `group2`,
v.`ATC4PH_ID`, v.`HSTOPH_ID`, v.`PZN_ID`,
COALESCE(g0.`eg_id`, 'REST') AS `group3`,
COALESCE(g1.`eg_id`, 'REST') AS `group4`,
COALESCE(g2.`eg_id`, 'REST') AS `group5`,
SUM(`VAL_25_430`) AS `VALUE_2025_01_M_430_1_1`,
SUM(`VAL_25_5432`) AS `VALUE_2025_01_M_5432_1_2`,
SUM(`VAL_25_5430`) AS `VALUE_2025_01_M_5430_1_3`
FROM `v_fact_de_odvcan_11600` AS v
JOIN `group_f38275cd_db16_4e71_9306_c20af09d4c8b` AS g0 ON g0.`key_id` = v.`REGODV_ID`
JOIN `group_6b1d15de_368d_4239_a5df_09a2ca386b97` AS g1 ON g1.`key_id` = v.`REGODV_ID`
JOIN `group_7d5e323d_69ab_413e_817b_2fde051ec00c` AS g2 ON g2.`key_id` = v.`REGODV_ID`
WHERE v.`WERTART_ID` IN (1)
AND v.`NFC3_ID` IN (178)
AND v.`SUB_ID` IN (26037)
AND v.`HSTOPH_ID` IN (9873, 12770, 929, 4665)
GROUP BY `group1`, `group2`, `ATC4PH_ID`, `HSTOPH_ID`, `PZN_ID`, `group3`, `group4`, `group5`
ORDER BY ATC4PH_ID
LIMIT 1000000;
DROP TABLE IF EXISTS `group_f38275cd_db16_4e71_9306_c20af09d4c8b`;
DROP TABLE IF EXISTS `group_6b1d15de_368d_4239_a5df_09a2ca386b97`;
DROP TABLE IF EXISTS `group_7d5e323d_69ab_413e_817b_2fde051ec00c`;
DROP DATABASE mcol_5932;