From b8c0b74f2b43570f0793e140439446832dcd8b47 Mon Sep 17 00:00:00 2001 From: Akhmad Oripov <96055449+AestheticAkhmad@users.noreply.github.com> Date: Fri, 4 Apr 2025 22:28:16 +0200 Subject: [PATCH] fix(funexp): MCOL-4622 Implicit FLOAT->INT and DOUBLE->INT conversion is not like in InnoDB (#3480) --- dbcon/execplan/treenode.h | 4 +-- .../columnstore/bugfixes/mcol_4622.result | 17 +++++++++++ .../columnstore/bugfixes/mcol_4622.test | 28 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 mysql-test/columnstore/bugfixes/mcol_4622.result create mode 100644 mysql-test/columnstore/bugfixes/mcol_4622.test diff --git a/dbcon/execplan/treenode.h b/dbcon/execplan/treenode.h index 25ee452b5..fc74cf0e3 100644 --- a/dbcon/execplan/treenode.h +++ b/dbcon/execplan/treenode.h @@ -771,10 +771,10 @@ inline uint64_t TreeNode::getUintVal() case CalpontSystemCatalog::UINT: return fResult.uintVal; case CalpontSystemCatalog::FLOAT: - case CalpontSystemCatalog::UFLOAT: return (uint64_t)fResult.floatVal; + case CalpontSystemCatalog::UFLOAT: return (uint64_t)std::llround(fResult.floatVal); case CalpontSystemCatalog::DOUBLE: - case CalpontSystemCatalog::UDOUBLE: return (uint64_t)fResult.doubleVal; + case CalpontSystemCatalog::UDOUBLE: return (uint64_t)std::llround(fResult.doubleVal); case CalpontSystemCatalog::LONGDOUBLE: return (uint64_t)fResult.longDoubleVal; diff --git a/mysql-test/columnstore/bugfixes/mcol_4622.result b/mysql-test/columnstore/bugfixes/mcol_4622.result new file mode 100644 index 000000000..942066127 --- /dev/null +++ b/mysql-test/columnstore/bugfixes/mcol_4622.result @@ -0,0 +1,17 @@ +DROP DATABASE IF EXISTS mcol_4622; +CREATE DATABASE mcol_4622; +USE mcol_4622; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a VARCHAR(32), d FLOAT) ENGINE=ColumnStore; +INSERT INTO t1 VALUES ('aaaa', 1.5); +SELECT LEFT(a, d) FROM t1; +LEFT(a, d) +aa +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a VARCHAR(32), d DOUBLE) ENGINE=ColumnStore; +INSERT INTO t1 VALUES ('aaaa', 1.5); +SELECT LEFT(a, d) FROM t1; +LEFT(a, d) +aa +DROP TABLE IF EXISTS t1; +DROP DATABASE mcol_4622; diff --git a/mysql-test/columnstore/bugfixes/mcol_4622.test b/mysql-test/columnstore/bugfixes/mcol_4622.test new file mode 100644 index 000000000..8d2898d02 --- /dev/null +++ b/mysql-test/columnstore/bugfixes/mcol_4622.test @@ -0,0 +1,28 @@ +-- source ../include/have_columnstore.inc +--disable_warnings +DROP DATABASE IF EXISTS mcol_4622; +--enable_warnings +CREATE DATABASE mcol_4622; +USE mcol_4622; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TABLE t1 (a VARCHAR(32), d FLOAT) ENGINE=ColumnStore; +INSERT INTO t1 VALUES ('aaaa', 1.5); +SELECT LEFT(a, d) FROM t1; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TABLE t1 (a VARCHAR(32), d DOUBLE) ENGINE=ColumnStore; +INSERT INTO t1 VALUES ('aaaa', 1.5); +SELECT LEFT(a, d) FROM t1; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +--disable_warnings +DROP DATABASE mcol_4622; +--enable_warnings