1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-27 21:01:50 +03:00

MCOL-4741 in/like/equal(=) operations differ in results

This is due to signedness in the string range comparison in extentmap
and unsignedness everywhere else.
This commit is contained in:
Sergey Zefirov
2021-06-22 14:13:27 +03:00
parent 6dc356ed60
commit c58136a32d
5 changed files with 48 additions and 8 deletions

View File

@ -0,0 +1,12 @@
DROP DATABASE IF EXISTS db4741;
CREATE DATABASE db4741;
USE db4741;
CREATE TABLE t (x VARCHAR(5) DEFAULT '') engine = columnstore;
LOAD DATA LOCAL infile 'MTR_SUITE_DIR/../std_data/mcol-4741-part-1-strings-and-nulls.txt' INTO TABLE t;
SELECT COUNT(*) FROM t WHERE x='val';
COUNT(*)
2
LOAD DATA LOCAL infile 'MTR_SUITE_DIR/../std_data/mcol-4741-part-2-empty-strings.txt' INTO TABLE t;
SELECT COUNT(*) FROM t WHERE x='val';
COUNT(*)
2

View File

@ -0,0 +1,17 @@
--disable_warnings
DROP DATABASE IF EXISTS db4741;
--enable_warnings
CREATE DATABASE db4741;
USE db4741;
CREATE TABLE t (x VARCHAR(5) DEFAULT '') engine = columnstore;
--replace_result $MTR_SUITE_DIR MTR_SUITE_DIR
--eval LOAD DATA LOCAL infile '$MTR_SUITE_DIR/../std_data/mcol-4741-part-1-strings-and-nulls.txt' INTO TABLE t
SELECT COUNT(*) FROM t WHERE x='val';
--replace_result $MTR_SUITE_DIR MTR_SUITE_DIR
--eval LOAD DATA LOCAL infile '$MTR_SUITE_DIR/../std_data/mcol-4741-part-2-empty-strings.txt' INTO TABLE t
SELECT COUNT(*) FROM t WHERE x='val';

View File

@ -0,0 +1,6 @@
val
val
aal
xal
\N
\N

View File

@ -893,18 +893,18 @@ void ExtentMap::mergeExtentsMaxMin(CPMaxMinMergeMap_t& cpMap, bool useLock)
// Swap byte order to do binary string comparison
if (isCharType(it->second.type))
{
int64_t newMinVal =
static_cast<int64_t>( uint64ToStr(
uint64_t newMinVal =
static_cast<uint64_t>( uint64ToStr(
static_cast<uint64_t>(it->second.min)));
int64_t newMaxVal =
static_cast<int64_t>( uint64ToStr(
uint64_t newMaxVal =
static_cast<uint64_t>( uint64ToStr(
static_cast<uint64_t>(it->second.max)));
int64_t oldMinVal =
static_cast<int64_t>( uint64ToStr(
uint64_t oldMinVal =
static_cast<uint64_t>( uint64ToStr(
static_cast<uint64_t>(
fExtentMap[i].partition.cprange.loVal)) );
int64_t oldMaxVal =
static_cast<int64_t>( uint64ToStr(
uint64_t oldMaxVal =
static_cast<uint64_t>( uint64ToStr(
static_cast<uint64_t>(
fExtentMap[i].partition.cprange.hiVal)) );