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-4652 Fixes for wide-decimal support in bulk insert operations
Previously cpimport didn't send wide min/max-es talking to BRM
This commit is contained in:
committed by
Roman Nozdrin
parent
646ffb6f95
commit
04d5b55c37
@ -0,0 +1,18 @@
|
|||||||
|
DROP DATABASE IF EXISTS mcol4652;
|
||||||
|
CREATE DATABASE mcol4652;
|
||||||
|
USE mcol4652;
|
||||||
|
create table customer (
|
||||||
|
c_custkey decimal(38),
|
||||||
|
c_name varchar (25),
|
||||||
|
c_address varchar (40),
|
||||||
|
c_nationkey int,
|
||||||
|
c_phone char (15),
|
||||||
|
c_acctbal decimal(12,2),
|
||||||
|
c_mktsegment char (10),
|
||||||
|
c_comment varchar (117)
|
||||||
|
) engine=columnstore;
|
||||||
|
LOAD DATA LOCAL infile 'MTR_SUITE_DIR/../std_data/100Krows.dat' INTO TABLE customer FIELDS TERMINATED BY '|';
|
||||||
|
SELECT e.min_value, e.max_value FROM information_schema.columnstore_extents e, information_schema.columnstore_columns c where e.object_id = c.object_id and column_name = 'c_custkey';
|
||||||
|
min_value max_value
|
||||||
|
0 32767
|
||||||
|
DROP DATABASE mcol4652;
|
@ -0,0 +1,26 @@
|
|||||||
|
-- source ../include/have_columnstore.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP DATABASE IF EXISTS mcol4652;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE DATABASE mcol4652;
|
||||||
|
USE mcol4652;
|
||||||
|
|
||||||
|
create table customer (
|
||||||
|
c_custkey decimal(38),
|
||||||
|
c_name varchar (25),
|
||||||
|
c_address varchar (40),
|
||||||
|
c_nationkey int,
|
||||||
|
c_phone char (15),
|
||||||
|
c_acctbal decimal(12,2),
|
||||||
|
c_mktsegment char (10),
|
||||||
|
c_comment varchar (117)
|
||||||
|
) engine=columnstore;
|
||||||
|
|
||||||
|
--replace_result $MTR_SUITE_DIR MTR_SUITE_DIR
|
||||||
|
--disable_warnings
|
||||||
|
--eval LOAD DATA LOCAL infile '$MTR_SUITE_DIR/../std_data/100Krows.dat' INTO TABLE customer FIELDS TERMINATED BY '|'
|
||||||
|
--enable_warnings
|
||||||
|
SELECT e.min_value, e.max_value FROM information_schema.columnstore_extents e, information_schema.columnstore_columns c where e.object_id = c.object_id and column_name = 'c_custkey';
|
||||||
|
DROP DATABASE mcol4652;
|
@ -310,11 +310,11 @@ void BRMReporter::sendCPToFile( )
|
|||||||
if (!datatypes::isWideDecimalType(fCPInfo[i].type, fCPInfo[i].colWidth))
|
if (!datatypes::isWideDecimalType(fCPInfo[i].type, fCPInfo[i].colWidth))
|
||||||
{
|
{
|
||||||
fRptFile << "CP: " << fCPInfo[i].startLbid << ' ' <<
|
fRptFile << "CP: " << fCPInfo[i].startLbid << ' ' <<
|
||||||
fCPInfo[i].max << ' ' <<
|
|
||||||
fCPInfo[i].min << ' ' <<
|
|
||||||
fCPInfo[i].seqNum << ' ' <<
|
fCPInfo[i].seqNum << ' ' <<
|
||||||
fCPInfo[i].type << ' ' <<
|
fCPInfo[i].type << ' ' <<
|
||||||
fCPInfo[i].colWidth << ' ' <<
|
fCPInfo[i].colWidth << ' ' <<
|
||||||
|
fCPInfo[i].max << ' ' <<
|
||||||
|
fCPInfo[i].min << ' ' <<
|
||||||
fCPInfo[i].newExtent << std::endl;
|
fCPInfo[i].newExtent << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -323,10 +323,11 @@ void BRMReporter::sendCPToFile( )
|
|||||||
datatypes::TSInt128 bigMax(&fCPInfo[i].bigMax);
|
datatypes::TSInt128 bigMax(&fCPInfo[i].bigMax);
|
||||||
|
|
||||||
fRptFile << "CP: " << fCPInfo[i].startLbid << ' ' <<
|
fRptFile << "CP: " << fCPInfo[i].startLbid << ' ' <<
|
||||||
bigMax << ' ' <<
|
|
||||||
bigMin << ' ' <<
|
|
||||||
fCPInfo[i].seqNum << ' ' <<
|
fCPInfo[i].seqNum << ' ' <<
|
||||||
fCPInfo[i].type << ' ' <<
|
fCPInfo[i].type << ' ' <<
|
||||||
|
fCPInfo[i].colWidth << ' ' <<
|
||||||
|
bigMax << ' ' <<
|
||||||
|
bigMin << ' ' <<
|
||||||
fCPInfo[i].newExtent << std::endl;
|
fCPInfo[i].newExtent << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -413,7 +414,7 @@ int BRMReporter::openRptFile( )
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
fRptFile << "#CP: startLBID max min seqnum type colwidth newExtent" << std::endl;
|
fRptFile << "#CP: startLBID seqnum type colwidth max min newExtent" << std::endl;
|
||||||
fRptFile << "#HWM: oid partition segment hwm" << std::endl;
|
fRptFile << "#HWM: oid partition segment hwm" << std::endl;
|
||||||
fRptFile << "#ROWS: numRowsRead numRowsInserted" << std::endl;
|
fRptFile << "#ROWS: numRowsRead numRowsInserted" << std::endl;
|
||||||
fRptFile << "#DATA: columNum columnType columnOid numOutOfRangeValues" << std::endl;
|
fRptFile << "#DATA: columNum columnType columnOid numOutOfRangeValues" << std::endl;
|
||||||
|
@ -313,26 +313,6 @@ bool WEBrmUpdater::prepareCasualPartitionInfo()
|
|||||||
|
|
||||||
pTok = strtok(NULL, " ");
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
if (pTok)
|
|
||||||
cpInfoMerge.max = boost::lexical_cast<int64_t>(pTok);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//cout << "CP Entry : " << aEntry << endl;
|
|
||||||
throw (runtime_error("Bad MAX in CP entry string"));
|
|
||||||
}
|
|
||||||
|
|
||||||
pTok = strtok(NULL, " ");
|
|
||||||
|
|
||||||
if (pTok)
|
|
||||||
cpInfoMerge.min = boost::lexical_cast<int64_t>(pTok);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//cout << "CP Entry : " << aEntry << endl;
|
|
||||||
throw (runtime_error("Bad MIN in CP entry string"));
|
|
||||||
}
|
|
||||||
|
|
||||||
pTok = strtok(NULL, " ");
|
|
||||||
|
|
||||||
if (pTok)
|
if (pTok)
|
||||||
cpInfoMerge.seqNum = atoi(pTok);
|
cpInfoMerge.seqNum = atoi(pTok);
|
||||||
else
|
else
|
||||||
@ -360,6 +340,57 @@ bool WEBrmUpdater::prepareCasualPartitionInfo()
|
|||||||
//cout << "CP Entry : " << aEntry << endl;
|
//cout << "CP Entry : " << aEntry << endl;
|
||||||
throw (runtime_error("Bad column width in CP entry string"));
|
throw (runtime_error("Bad column width in CP entry string"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (datatypes::isWideDecimalType(cpInfoMerge.type, cpInfoMerge.colWidth))
|
||||||
|
{
|
||||||
|
datatypes::SystemCatalog::TypeAttributesStd tyAttr(cpInfoMerge.colWidth,
|
||||||
|
0,
|
||||||
|
datatypes::INT128MAXPRECISION);
|
||||||
|
|
||||||
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (pTok)
|
||||||
|
cpInfoMerge.bigMax = tyAttr.decimal128FromString(std::string(pTok), NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//cout << "CP Entry : " << aEntry << endl;
|
||||||
|
throw (runtime_error("Bad MAX in CP entry string"));
|
||||||
|
}
|
||||||
|
|
||||||
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (pTok)
|
||||||
|
cpInfoMerge.bigMin = tyAttr.decimal128FromString(std::string(pTok), NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//cout << "CP Entry : " << aEntry << endl;
|
||||||
|
throw (runtime_error("Bad MIN in CP entry string"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (pTok)
|
||||||
|
cpInfoMerge.max = boost::lexical_cast<int64_t>(pTok);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//cout << "CP Entry : " << aEntry << endl;
|
||||||
|
throw (runtime_error("Bad MAX in CP entry string"));
|
||||||
|
}
|
||||||
|
|
||||||
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (pTok)
|
||||||
|
cpInfoMerge.min = boost::lexical_cast<int64_t>(pTok);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//cout << "CP Entry : " << aEntry << endl;
|
||||||
|
throw (runtime_error("Bad MIN in CP entry string"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pTok = strtok(NULL, " ");
|
pTok = strtok(NULL, " ");
|
||||||
|
|
||||||
if (pTok)
|
if (pTok)
|
||||||
|
Reference in New Issue
Block a user