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
Merge pull request #1891 from mariadb-SergeyZefirov/MCOL-4673-Regression-calShowPartition-returns-NA
Mcol 4673 regression cal show partition returns na
This commit is contained in:
@ -430,14 +430,7 @@ CommandPackageProcessor::processPackage(dmlpackage::CalpontDMLPackage& cpackage)
|
|||||||
|
|
||||||
if (!cpInvalidated)
|
if (!cpInvalidated)
|
||||||
{
|
{
|
||||||
// The code below assumes that in case of COMMIT all ranges for all touched LBIDs
|
fDbrm->invalidateUncommittedExtentLBIDs(0, &lbidList);
|
||||||
// are either correctly set or correctly reset.
|
|
||||||
// It is also assumes that ROLLBACK or other operations but COMMIT may not return ranges
|
|
||||||
// to state that is correct. This is why we invalidate extents when we are not committing.
|
|
||||||
if (stmt != "COMMIT")
|
|
||||||
{
|
|
||||||
fDbrm->invalidateUncommittedExtentLBIDs(0, &lbidList);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#
|
#
|
||||||
# MCOL-4614 calShowPartitions() precision loss for huge narrow decimal
|
# MCOL-4614 calShowPartitions() precision loss for huge narrow decimal
|
||||||
#
|
#
|
||||||
CREATE FUNCTION calshowpartitions RETURNS STRING SONAME "ha_columnstore.so";
|
|
||||||
CREATE TABLE t1 (a DECIMAL(17,1)) ENGINE=ColumnStore;
|
CREATE TABLE t1 (a DECIMAL(17,1)) ENGINE=ColumnStore;
|
||||||
INSERT INTO t1 VALUES (-8999999999999999.9);
|
INSERT INTO t1 VALUES (-8999999999999999.9);
|
||||||
SELECT * FROM t1 WHERE a=0;
|
SELECT * FROM t1 WHERE a=0;
|
||||||
@ -11,4 +10,3 @@ calshowpartitions('t1','a')
|
|||||||
Part# Min Max Status
|
Part# Min Max Status
|
||||||
0.0.1 -8999999999999999.9 -8999999999999999.9 Enabled
|
0.0.1 -8999999999999999.9 -8999999999999999.9 Enabled
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
DROP FUNCTION calshowpartitions;
|
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
--source include/testdb_only.inc
|
|
||||||
--source ../include/have_columnstore.inc
|
--source ../include/have_columnstore.inc
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MCOL-4614 calShowPartitions() precision loss for huge narrow decimal
|
--echo # MCOL-4614 calShowPartitions() precision loss for huge narrow decimal
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
CREATE FUNCTION calshowpartitions RETURNS STRING SONAME "ha_columnstore.so";
|
let $func_exists=`SELECT COUNT(*) FROM mysql.func WHERE name='calshowpartitions'`;
|
||||||
|
--disable_query_log
|
||||||
|
if (!$func_exists)
|
||||||
|
{
|
||||||
|
CREATE FUNCTION calshowpartitions RETURNS STRING SONAME "ha_columnstore.so";
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
CREATE TABLE t1 (a DECIMAL(17,1)) ENGINE=ColumnStore;
|
CREATE TABLE t1 (a DECIMAL(17,1)) ENGINE=ColumnStore;
|
||||||
INSERT INTO t1 VALUES (-8999999999999999.9);
|
INSERT INTO t1 VALUES (-8999999999999999.9);
|
||||||
@ -13,4 +18,9 @@ SELECT * FROM t1 WHERE a=0;
|
|||||||
SELECT calshowpartitions('t1','a');
|
SELECT calshowpartitions('t1','a');
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
|
||||||
DROP FUNCTION calshowpartitions;
|
--disable_query_log
|
||||||
|
if (!$func_exists)
|
||||||
|
{
|
||||||
|
DROP FUNCTION calshowpartitions;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
@ -146,8 +146,9 @@ typedef struct _SIDTIDEntry SIDTIDEntry;
|
|||||||
// for multiple extents.
|
// for multiple extents.
|
||||||
|
|
||||||
// Special seqNum field values.
|
// Special seqNum field values.
|
||||||
#define SEQNUM_MARK_INVALID (-1)
|
#define SEQNUM_MARK_INVALID (-1)
|
||||||
#define SEQNUM_MARK_INVALID_SET_RANGE (-2)
|
#define SEQNUM_MARK_INVALID_SET_RANGE (-2)
|
||||||
|
#define SEQNUM_MARK_UPDATING_INVALID_SET_RANGE (-3)
|
||||||
|
|
||||||
// Used in vectors.
|
// Used in vectors.
|
||||||
struct CPInfo
|
struct CPInfo
|
||||||
|
@ -4594,7 +4594,7 @@ void DBRM::invalidateUncommittedExtentLBIDs(execplan::CalpontSystemCatalog::SCN
|
|||||||
aInfo.isBinaryColumn = false;
|
aInfo.isBinaryColumn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
aInfo.seqNum = SEQNUM_MARK_INVALID_SET_RANGE;
|
aInfo.seqNum = SEQNUM_MARK_UPDATING_INVALID_SET_RANGE;
|
||||||
cpInfos.push_back(aInfo);
|
cpInfos.push_back(aInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,8 +347,16 @@ int ExtentMap::_markInvalid(const LBID_t lbid, const execplan::CalpontSystemCata
|
|||||||
|
|
||||||
if (isUnsigned(colDataType))
|
if (isUnsigned(colDataType))
|
||||||
{
|
{
|
||||||
fExtentMap[i].partition.cprange.bigLoVal = -1;
|
if (fExtentMap[i].colWid != datatypes::MAXDECIMALWIDTH)
|
||||||
fExtentMap[i].partition.cprange.bigHiVal = 0;
|
{
|
||||||
|
fExtentMap[i].partition.cprange.loVal = numeric_limits<uint64_t>::max();
|
||||||
|
fExtentMap[i].partition.cprange.hiVal = numeric_limits<uint64_t>::min();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fExtentMap[i].partition.cprange.bigLoVal = -1; // XXX: unsigned wide decimals do not exceed rang of signed wide decimals.
|
||||||
|
fExtentMap[i].partition.cprange.bigHiVal = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -704,6 +712,26 @@ void ExtentMap::setExtentsMaxMin(const CPMaxMinMap_t& cpMap, bool firstNode, boo
|
|||||||
incSeqNum(fExtentMap[i].partition.cprange.sequenceNum);
|
incSeqNum(fExtentMap[i].partition.cprange.sequenceNum);
|
||||||
extentsUpdated++;
|
extentsUpdated++;
|
||||||
}
|
}
|
||||||
|
else if (it->second.seqNum == SEQNUM_MARK_UPDATING_INVALID_SET_RANGE)
|
||||||
|
{
|
||||||
|
makeUndoRecord(&fExtentMap[i], sizeof(struct EMEntry));
|
||||||
|
if (fExtentMap[i].partition.cprange.isValid == CP_UPDATING)
|
||||||
|
{
|
||||||
|
if (it->second.isBinaryColumn)
|
||||||
|
{
|
||||||
|
fExtentMap[i].partition.cprange.bigHiVal = it->second.bigMax;
|
||||||
|
fExtentMap[i].partition.cprange.bigLoVal = it->second.bigMin;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fExtentMap[i].partition.cprange.hiVal = it->second.max;
|
||||||
|
fExtentMap[i].partition.cprange.loVal = it->second.min;
|
||||||
|
}
|
||||||
|
fExtentMap[i].partition.cprange.isValid = CP_INVALID;
|
||||||
|
}
|
||||||
|
incSeqNum(fExtentMap[i].partition.cprange.sequenceNum);
|
||||||
|
extentsUpdated++;
|
||||||
|
}
|
||||||
// else sequence has changed since start of the query. Don't update the EM entry.
|
// else sequence has changed since start of the query. Don't update the EM entry.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -725,14 +753,14 @@ void ExtentMap::setExtentsMaxMin(const CPMaxMinMap_t& cpMap, bool firstNode, boo
|
|||||||
for (i = 0; i < entries; i++)
|
for (i = 0; i < entries; i++)
|
||||||
{
|
{
|
||||||
if (fExtentMap[i].range.start == it->first)
|
if (fExtentMap[i].range.start == it->first)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i < entries)
|
if (i < entries)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
oss << " " << it->first;
|
oss << " " << it->first;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user