mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-17 10:37:05 +03:00
fix(MCOL-5889): Improper handle of DOUBLE result type with DECIMAL arguments
Sometimes server assigns DOUBLE type for arithmetic operations over DECIMAL arguments. In this rare case width of result was incorrectly adjusted and it triggered an assertion. Now width of result gets adjusted only if result type is also DECIMAL.
This commit is contained in:
parent
7dcc6a251a
commit
8b9db66ddd
@ -4025,7 +4025,8 @@ ReturnedColumn* buildArithmeticColumnBody(Item_func* item, gp_walk_info& gwi, bo
|
||||
int32_t leftColWidth = leftColType.colWidth;
|
||||
int32_t rightColWidth = rightColType.colWidth;
|
||||
|
||||
if (leftColWidth == datatypes::MAXDECIMALWIDTH || rightColWidth == datatypes::MAXDECIMALWIDTH)
|
||||
if ((leftColWidth == datatypes::MAXDECIMALWIDTH || rightColWidth == datatypes::MAXDECIMALWIDTH)
|
||||
&& datatypes::isDecimal(mysqlType.colDataType))
|
||||
{
|
||||
mysqlType.colWidth = datatypes::MAXDECIMALWIDTH;
|
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
DROP DATABASE IF EXISTS MCOL5889;
|
||||
CREATE DATABASE MCOL5889;
|
||||
USE MCOL5889;
|
||||
CREATE TABLE t1 (f1 DECIMAL, f2 BIGINT, f3 DOUBLE) ENGINE=columnstore;
|
||||
CREATE TABLE t2 (f1 DECIMAL, f2 INT, f3 DOUBLE) ENGINE=columnstore;
|
||||
INSERT INTO t1 VALUES (1, 2, 3), (2, 3, 4), (3, 4, 5);
|
||||
INSERT INTO t2 VALUES (4, 5, 6), (5, 6, 7), (6, 7, 8);
|
||||
SELECT f1, f2, f3, f2 * f3 FROM
|
||||
(
|
||||
SELECT f1, f2, AVG(f3) f3 FROM
|
||||
(
|
||||
SELECT f1, f2, f3 FROM t1
|
||||
UNION ALL
|
||||
SELECT f1, f2, f3 FROM t2
|
||||
) U
|
||||
GROUP BY f1
|
||||
) V;
|
||||
f1 f2 f3 f2 * f3
|
||||
1 2 3 6
|
||||
2 3 4 12
|
||||
3 4 5 20
|
||||
4 5 6 30
|
||||
5 6 7 42
|
||||
6 7 8 56
|
||||
DROP DATABASE MCOL5889;
|
@ -0,0 +1,24 @@
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS MCOL5889;
|
||||
--enable_warnings
|
||||
CREATE DATABASE MCOL5889;
|
||||
USE MCOL5889;
|
||||
|
||||
CREATE TABLE t1 (f1 DECIMAL, f2 BIGINT, f3 DOUBLE) ENGINE=columnstore;
|
||||
CREATE TABLE t2 (f1 DECIMAL, f2 INT, f3 DOUBLE) ENGINE=columnstore;
|
||||
INSERT INTO t1 VALUES (1, 2, 3), (2, 3, 4), (3, 4, 5);
|
||||
INSERT INTO t2 VALUES (4, 5, 6), (5, 6, 7), (6, 7, 8);
|
||||
|
||||
--sorted_result
|
||||
SELECT f1, f2, f3, f2 * f3 FROM
|
||||
(
|
||||
SELECT f1, f2, AVG(f3) f3 FROM
|
||||
(
|
||||
SELECT f1, f2, f3 FROM t1
|
||||
UNION ALL
|
||||
SELECT f1, f2, f3 FROM t2
|
||||
) U
|
||||
GROUP BY f1
|
||||
) V;
|
||||
|
||||
DROP DATABASE MCOL5889;
|
@ -40,6 +40,12 @@ if (( $# == 2 )); then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if (( $# == 1 )); then
|
||||
run_suite $1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
run_suite basic
|
||||
run_suite bugfixes
|
||||
run_suite setup
|
||||
|
Loading…
x
Reference in New Issue
Block a user