You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +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
|
// Swap byte order to do binary string comparison
|
||||||
if (isCharType(it->second.type))
|
if (isCharType(it->second.type))
|
||||||
{
|
{
|
||||||
int64_t newMinVal =
|
uint64_t newMinVal =
|
||||||
static_cast<int64_t>( uint64ToStr(
|
static_cast<uint64_t>( uint64ToStr(
|
||||||
static_cast<uint64_t>(it->second.min)));
|
static_cast<uint64_t>(it->second.min)));
|
||||||
int64_t newMaxVal =
|
uint64_t newMaxVal =
|
||||||
static_cast<int64_t>( uint64ToStr(
|
static_cast<uint64_t>( uint64ToStr(
|
||||||
static_cast<uint64_t>(it->second.max)));
|
static_cast<uint64_t>(it->second.max)));
|
||||||
int64_t oldMinVal =
|
uint64_t oldMinVal =
|
||||||
static_cast<int64_t>( uint64ToStr(
|
static_cast<uint64_t>( uint64ToStr(
|
||||||
static_cast<uint64_t>(
|
static_cast<uint64_t>(
|
||||||
fExtentMap[i].partition.cprange.loVal)) );
|
fExtentMap[i].partition.cprange.loVal)) );
|
||||||
int64_t oldMaxVal =
|
uint64_t oldMaxVal =
|
||||||
static_cast<int64_t>( uint64ToStr(
|
static_cast<uint64_t>( uint64ToStr(
|
||||||
static_cast<uint64_t>(
|
static_cast<uint64_t>(
|
||||||
fExtentMap[i].partition.cprange.hiVal)) );
|
fExtentMap[i].partition.cprange.hiVal)) );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user