You've already forked mariadb-columnstore-engine
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:
@ -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
|
@ -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';
|
||||
|
@ -0,0 +1,6 @@
|
||||
val
|
||||
val
|
||||
aal
|
||||
xal
|
||||
\N
|
||||
\N
|
@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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)) );
|
||||
|
||||
|
Reference in New Issue
Block a user