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:
@ -429,18 +429,11 @@ CommandPackageProcessor::processPackage(dmlpackage::CalpontDMLPackage& cpackage)
|
||||
}
|
||||
|
||||
if (!cpInvalidated)
|
||||
{
|
||||
// The code below assumes that in case of COMMIT all ranges for all touched LBIDs
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (stmt == "CLEANUP")
|
||||
{
|
||||
execplan::CalpontSystemCatalog::removeCalpontSystemCatalog
|
||||
|
@ -1,7 +1,6 @@
|
||||
#
|
||||
# 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;
|
||||
INSERT INTO t1 VALUES (-8999999999999999.9);
|
||||
SELECT * FROM t1 WHERE a=0;
|
||||
@ -11,4 +10,3 @@ calshowpartitions('t1','a')
|
||||
Part# Min Max Status
|
||||
0.0.1 -8999999999999999.9 -8999999999999999.9 Enabled
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP FUNCTION calshowpartitions;
|
||||
|
@ -1,11 +1,16 @@
|
||||
--source include/testdb_only.inc
|
||||
--source ../include/have_columnstore.inc
|
||||
|
||||
--echo #
|
||||
--echo # MCOL-4614 calShowPartitions() precision loss for huge narrow decimal
|
||||
--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;
|
||||
INSERT INTO t1 VALUES (-8999999999999999.9);
|
||||
@ -13,4 +18,9 @@ SELECT * FROM t1 WHERE a=0;
|
||||
SELECT calshowpartitions('t1','a');
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
DROP FUNCTION calshowpartitions;
|
||||
--disable_query_log
|
||||
if (!$func_exists)
|
||||
{
|
||||
DROP FUNCTION calshowpartitions;
|
||||
}
|
||||
--enable_query_log
|
||||
|
@ -148,6 +148,7 @@ typedef struct _SIDTIDEntry SIDTIDEntry;
|
||||
// Special seqNum field values.
|
||||
#define SEQNUM_MARK_INVALID (-1)
|
||||
#define SEQNUM_MARK_INVALID_SET_RANGE (-2)
|
||||
#define SEQNUM_MARK_UPDATING_INVALID_SET_RANGE (-3)
|
||||
|
||||
// Used in vectors.
|
||||
struct CPInfo
|
||||
|
@ -4594,7 +4594,7 @@ void DBRM::invalidateUncommittedExtentLBIDs(execplan::CalpontSystemCatalog::SCN
|
||||
aInfo.isBinaryColumn = false;
|
||||
}
|
||||
|
||||
aInfo.seqNum = SEQNUM_MARK_INVALID_SET_RANGE;
|
||||
aInfo.seqNum = SEQNUM_MARK_UPDATING_INVALID_SET_RANGE;
|
||||
cpInfos.push_back(aInfo);
|
||||
}
|
||||
|
||||
|
@ -347,9 +347,17 @@ int ExtentMap::_markInvalid(const LBID_t lbid, const execplan::CalpontSystemCata
|
||||
|
||||
if (isUnsigned(colDataType))
|
||||
{
|
||||
fExtentMap[i].partition.cprange.bigLoVal = -1;
|
||||
if (fExtentMap[i].colWid != datatypes::MAXDECIMALWIDTH)
|
||||
{
|
||||
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
|
||||
{
|
||||
if (fExtentMap[i].colWid != datatypes::MAXDECIMALWIDTH)
|
||||
@ -704,6 +712,26 @@ void ExtentMap::setExtentsMaxMin(const CPMaxMinMap_t& cpMap, bool firstNode, boo
|
||||
incSeqNum(fExtentMap[i].partition.cprange.sequenceNum);
|
||||
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
|
||||
{
|
||||
|
Reference in New Issue
Block a user