1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-04-18 21:44:02 +03:00
Gagan Goel d50a0fa2e6 MCOL-5005 Add charset number to system catalog - Part 2.
1. Extend the calpontsys.syscolumn system catalog table
  with a new column, 'charsetnum'.

  'charsetnum' field is set to the 'number' member of the
  'charset_info_st' struct defined in the server in m_ctype.h.

  For CHAR/VARCHAR/TEXT column types, 'charset_info_st' is
  initialized to the charset/collation of the column, which
  is set at the column-level or at the table-level in the DDL.

  For BLOB/VARBINARY binary column types, 'charset_info_st' is
  initialized to my_charset_bin (charsetnum=63).

  For all other column types, charsetnum is set to 0.

  2. Add support for the newly added 'charsetnum' column in the
  automatic system catalog upgrade logic in dbbuilder.

  For existing table definitions, charsetnum for the column is
  defaulted to 0.

  3. Add MTR test case that creates a few table definitions with
  a range of charset/collation combinations and queries the
  calpontsys.syscolumn system catalog table with the charsetnum
  field for the columns in the table DDLs.
2023-08-15 17:21:47 +00:00

667 lines
22 KiB
C++

/* Copyright (C) 2014 InfiniDB, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of
the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
// $Id: systemcatalog.cpp 2101 2013-01-21 14:12:52Z rdempsey $
#include <iostream>
#include <assert.h>
#include <sys/time.h>
using namespace std;
#include "systemcatalog.h"
#include "configcpp.h"
using namespace execplan;
#include "we_colopcompress.h"
using namespace WriteEngine;
#include "resourcemanager.h"
using namespace joblist;
#include "dbbuilder.h"
void SystemCatalog::build()
{
TxnID txnID = 0;
int rc;
// int t= 1000;
remove();
cout << "Creating System Catalog..." << endl;
cout << endl;
// SYSTABLE
timeval startTime;
gettimeofday(&startTime, 0);
ostringstream msg;
WErrorCodes ec;
//------------------------------------------------------------------------------
// Create SYSTABLE table
//------------------------------------------------------------------------------
uint32_t dbRoot = 1;
int compressionType = 0;
uint32_t partition = 0;
uint16_t segment = 0;
ResourceManager* rm = ResourceManager::instance();
std::map<uint32_t, uint32_t> oids;
if (rm->useHdfs())
{
compressionType = 2;
oids[OID_SYSTABLE_TABLENAME] = OID_SYSTABLE_TABLENAME;
oids[DICTOID_SYSTABLE_TABLENAME] = DICTOID_SYSTABLE_TABLENAME;
oids[OID_SYSTABLE_SCHEMA] = OID_SYSTABLE_SCHEMA;
oids[DICTOID_SYSTABLE_SCHEMA] = DICTOID_SYSTABLE_SCHEMA;
oids[OID_SYSTABLE_OBJECTID] = OID_SYSTABLE_OBJECTID;
oids[OID_SYSTABLE_CREATEDATE] = OID_SYSTABLE_CREATEDATE;
oids[OID_SYSTABLE_LASTUPDATE] = OID_SYSTABLE_LASTUPDATE;
oids[OID_SYSTABLE_INIT] = OID_SYSTABLE_INIT;
oids[OID_SYSTABLE_NEXT] = OID_SYSTABLE_NEXT;
oids[OID_SYSTABLE_NUMOFROWS] = OID_SYSTABLE_NUMOFROWS;
oids[OID_SYSTABLE_AVGROWLEN] = OID_SYSTABLE_AVGROWLEN;
oids[OID_SYSTABLE_NUMOFBLOCKS] = OID_SYSTABLE_NUMOFBLOCKS;
oids[OID_SYSTABLE_AUTOINCREMENT] = OID_SYSTABLE_AUTOINCREMENT;
oids[OID_SYSTABLE_AUXCOLUMNOID] = OID_SYSTABLE_AUXCOLUMNOID;
}
fWriteEngine.setTransId(1);
fWriteEngine.setBulkFlag(true);
cout << "Creating SYSTABLE" << endl;
cout << "---------------------------------------" << endl;
// TableName
msg << " Creating TableName column OID: " << OID_SYSTABLE_TABLENAME;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_TABLENAME, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
msg << " Creating TableName column dictionary";
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSTABLE_TABLENAME, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// Schema
msg << " Creating Schema column OID: " << OID_SYSTABLE_SCHEMA;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_SCHEMA, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating Schema column dictionary");
cout << msg.str() << endl;
// Dictionary files
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSTABLE_SCHEMA, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ObjectId
msg << " Creating ObjectId column OID: " << OID_SYSTABLE_OBJECTID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_OBJECTID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// CreateDate
msg << " Creating CreateDate column OID: " << OID_SYSTABLE_CREATEDATE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_CREATEDATE, CalpontSystemCatalog::DATE, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// LastUpdateDate
msg << " Creating LastUpdate column OID: " << OID_SYSTABLE_LASTUPDATE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_LASTUPDATE, CalpontSystemCatalog::DATE, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// INIT
msg << " Creating INIT column OID: " << OID_SYSTABLE_INIT;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_INIT, CalpontSystemCatalog::INT, 4, dbRoot, partition,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// NEXT
msg << " Creating NEXT column OID: " << OID_SYSTABLE_NEXT;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_NEXT, CalpontSystemCatalog::INT, 4, dbRoot, partition,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// NUMOFROWS
msg << " Creating NUMOFROWS column OID: " << OID_SYSTABLE_NUMOFROWS;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_NUMOFROWS, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// AVGROWLEN
msg << " Creating AVGROWLEN column OID: " << OID_SYSTABLE_AVGROWLEN;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_AVGROWLEN, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// NUMOFBLOCKS
msg << " Creating NUMOFBLOCKS column OID: " << OID_SYSTABLE_NUMOFBLOCKS;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_NUMOFBLOCKS, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// AUTOINCREMENT
msg << " Creating AUTOINCREMENT column OID: " << OID_SYSTABLE_AUTOINCREMENT;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_AUTOINCREMENT, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// AUXCOLUMNOID
msg << " Creating AUXCOLUMNOID column OID: " << OID_SYSTABLE_AUXCOLUMNOID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSTABLE_AUXCOLUMNOID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
//------------------------------------------------------------------------------
// Create SYSCOLUMN table
//------------------------------------------------------------------------------
// SYSCOLUMN
if (rm->useHdfs())
{
oids[OID_SYSCOLUMN_SCHEMA] = OID_SYSCOLUMN_SCHEMA;
oids[DICTOID_SYSCOLUMN_SCHEMA] = DICTOID_SYSCOLUMN_SCHEMA;
oids[OID_SYSCOLUMN_TABLENAME] = OID_SYSCOLUMN_TABLENAME;
oids[DICTOID_SYSCOLUMN_TABLENAME] = DICTOID_SYSCOLUMN_TABLENAME;
oids[OID_SYSCOLUMN_COLNAME] = OID_SYSCOLUMN_COLNAME;
oids[DICTOID_SYSCOLUMN_COLNAME] = DICTOID_SYSCOLUMN_COLNAME;
oids[OID_SYSCOLUMN_OBJECTID] = OID_SYSCOLUMN_OBJECTID;
oids[OID_SYSCOLUMN_DICTOID] = OID_SYSCOLUMN_DICTOID;
oids[OID_SYSCOLUMN_LISTOBJID] = OID_SYSCOLUMN_LISTOBJID;
oids[OID_SYSCOLUMN_TREEOBJID] = OID_SYSCOLUMN_TREEOBJID;
oids[OID_SYSCOLUMN_DATATYPE] = OID_SYSCOLUMN_DATATYPE;
oids[OID_SYSCOLUMN_COLUMNLEN] = OID_SYSCOLUMN_COLUMNLEN;
oids[OID_SYSCOLUMN_COLUMNPOS] = OID_SYSCOLUMN_COLUMNPOS;
oids[OID_SYSCOLUMN_LASTUPDATE] = OID_SYSCOLUMN_LASTUPDATE;
oids[OID_SYSCOLUMN_DEFAULTVAL] = OID_SYSCOLUMN_DEFAULTVAL;
oids[DICTOID_SYSCOLUMN_DEFAULTVAL] = DICTOID_SYSCOLUMN_DEFAULTVAL;
oids[OID_SYSCOLUMN_NULLABLE] = OID_SYSCOLUMN_NULLABLE;
oids[OID_SYSCOLUMN_SCALE] = OID_SYSCOLUMN_SCALE;
oids[OID_SYSCOLUMN_PRECISION] = OID_SYSCOLUMN_PRECISION;
oids[OID_SYSCOLUMN_AUTOINC] = OID_SYSCOLUMN_AUTOINC;
oids[OID_SYSCOLUMN_DISTCOUNT] = OID_SYSCOLUMN_DISTCOUNT;
oids[OID_SYSCOLUMN_NULLCOUNT] = OID_SYSCOLUMN_NULLCOUNT;
oids[OID_SYSCOLUMN_MINVALUE] = OID_SYSCOLUMN_MINVALUE;
oids[DICTOID_SYSCOLUMN_MINVALUE] = DICTOID_SYSCOLUMN_MINVALUE;
oids[OID_SYSCOLUMN_MAXVALUE] = OID_SYSCOLUMN_MAXVALUE;
oids[DICTOID_SYSCOLUMN_MAXVALUE] = DICTOID_SYSCOLUMN_MAXVALUE;
oids[OID_SYSCOLUMN_COMPRESSIONTYPE] = OID_SYSCOLUMN_COMPRESSIONTYPE;
oids[OID_SYSCOLUMN_NEXTVALUE] = OID_SYSCOLUMN_NEXTVALUE;
oids[OID_SYSCOLUMN_CHARSETNUM] = OID_SYSCOLUMN_CHARSETNUM;
}
cout << endl;
cout << "Creating SYSCOLUMN" << endl;
// Schema
cout << "---------------------------------------" << endl;
msg << " Creating Schema column OID: " << OID_SYSCOLUMN_SCHEMA;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_SCHEMA, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating Schema column dictionary...");
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_SCHEMA, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// TableName
msg << " Creating TableName column OID: " << OID_SYSCOLUMN_TABLENAME;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_TABLENAME, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating TableName column dictionary...");
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_TABLENAME, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ColumnName
msg << " Creating ColumnName column OID: " << OID_SYSCOLUMN_COLNAME;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_COLNAME, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating ColumnName column dictionary...");
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_COLNAME, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ObjectID
msg << " Creating ObjectID column OID: " << OID_SYSCOLUMN_OBJECTID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_OBJECTID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// DictOID
msg << " Creating DictOID column OID: " << OID_SYSCOLUMN_DICTOID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_DICTOID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ListOID
msg << " Creating ListOID column OID: " << OID_SYSCOLUMN_LISTOBJID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_LISTOBJID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// TreeOID
msg << " Creating TreeOID column OID: " << OID_SYSCOLUMN_TREEOBJID;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_TREEOBJID, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// DataType
msg << " Creating DataType column OID: " << OID_SYSCOLUMN_DATATYPE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_DATATYPE, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ColumnLength
msg << " Creating ColumnLength column OID: " << OID_SYSCOLUMN_COLUMNLEN;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_COLUMNLEN, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// ColumnPos
msg << " Creating ColumnPos column OID: " << OID_SYSCOLUMN_COLUMNPOS;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_COLUMNPOS, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// LastUpdate
msg << " Creating LastUpdate column OID: " << OID_SYSCOLUMN_LASTUPDATE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_LASTUPDATE, CalpontSystemCatalog::DATE, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// DefaultValue
msg << " Creating DefaultValue column OID: " << OID_SYSCOLUMN_DEFAULTVAL;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_DEFAULTVAL, CalpontSystemCatalog::VARCHAR, 8, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
msg.str(" Creating DefaultValue column dictionary...");
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_DEFAULTVAL, 9, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// Nullable
msg << " Creating Nullable column OID: " << OID_SYSCOLUMN_NULLABLE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_NULLABLE, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// Scale
msg << " Creating Scale column OID: " << OID_SYSCOLUMN_SCALE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_SCALE, CalpontSystemCatalog::INT, 4, dbRoot, partition,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// Precision
msg << " Creating Precision column OID: " << OID_SYSCOLUMN_PRECISION;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_PRECISION, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// AutoInc
msg << " Creating AutoInc column OID: " << OID_SYSCOLUMN_AUTOINC;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_AUTOINC, CalpontSystemCatalog::CHAR, 1, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// DISTCOUNT
msg << " Creating DISTCOUNT column OID: " << OID_SYSCOLUMN_DISTCOUNT;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_DISTCOUNT, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// NULLCOUNT
msg << " Creating NULLCOUNT column OID: " << OID_SYSCOLUMN_NULLCOUNT;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_NULLCOUNT, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// MINVALUE
msg << " Creating MINVALUE column OID: " << OID_SYSCOLUMN_MINVALUE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_MINVALUE, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating MINVALUE column dictionary...");
cout << msg.str() << endl;
// Dictionary files
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_MINVALUE, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// MAXVALUE
msg << " Creating MAXVALUE column OID: " << OID_SYSCOLUMN_MAXVALUE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_MAXVALUE, CalpontSystemCatalog::VARCHAR, 40, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str(" Creating MAXVALUE column dictionary...");
// Dictionary files
cout << msg.str() << endl;
rc = fWriteEngine.createDctnry(txnID, DICTOID_SYSCOLUMN_MAXVALUE, 65, dbRoot, partition, segment,
compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
// CompressionType
msg << " Creating CompressionType column OID: " << OID_SYSCOLUMN_COMPRESSIONTYPE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_COMPRESSIONTYPE, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// nextvalue
msg << " Creating NEXTVALUE column OID: " << OID_SYSCOLUMN_NEXTVALUE;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_NEXTVALUE, CalpontSystemCatalog::UBIGINT, 8, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// charsetnum
msg << " Creating CHARSETNUM column OID: " << OID_SYSCOLUMN_CHARSETNUM;
cout << msg.str() << endl;
rc = fWriteEngine.createColumn(txnID, OID_SYSCOLUMN_CHARSETNUM, CalpontSystemCatalog::INT, 4, dbRoot,
partition, compressionType);
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
msg.str("");
// flush data files
fWriteEngine.flushDataFiles(rc, 1, oids);
// save brm
msg.str(" BRMWrapper saving state ");
rc = BRMWrapper::getInstance()->saveState();
if (rc)
throw runtime_error(msg.str() + ec.errorString(rc));
timeval endTime;
gettimeofday(&endTime, 0);
double elapsedTime =
(endTime.tv_sec + (endTime.tv_usec / 1000000.0)) - (startTime.tv_sec + (startTime.tv_usec / 1000000.0));
cout << "System Catalog creation took: " << elapsedTime << " seconds to complete." << endl;
cout << endl;
cout << "System Catalog created" << endl;
cout << endl;
}
void SystemCatalog::remove()
{
ColumnOpCompress0 colOp;
for (int c = 1001; c <= 1074; c++)
colOp.deleteFile(c);
for (int d = 2001; d <= 2312; d++)
colOp.deleteFile(d);
}
int SystemCatalog::upgrade(const std::unordered_map<int,
std::pair<int, bool>>& upgradeOidMap,
std::unordered_map<int, OidTypeT> upgradeOidTypeMap,
std::unordered_map<int, std::string> upgradeOidDefaultValStrMap)
{
TxnID txnID = 0;
int rc = 0;
int compressionType = 0;
ostringstream msg;
WErrorCodes ec;
cout << "Upgrading System Catalog..." << endl << endl;
for (auto iter = upgradeOidMap.begin(); iter != upgradeOidMap.end(); iter++)
{
if ((iter->second).second == true)
{
msg.str("");
msg << " Creating column OID: " << iter->first;
cout << msg.str() << endl;
execplan::CalpontSystemCatalog::ColType colType;
colType.colDataType = upgradeOidTypeMap[iter->first].first;
colType.colWidth = upgradeOidTypeMap[iter->first].second;
ColTuple defaultVal;
std::string defaultValStr = upgradeOidDefaultValStrMap[iter->first];
bool pushWarning = false;
bool isNULL = false;
long timeZone = 0;
defaultVal.data = colType.convertColumnData(defaultValStr, pushWarning, timeZone, isNULL, false, false);
rc = fWriteEngine.fillColumn(txnID, iter->first, colType, defaultVal,
(iter->second).first,
upgradeOidTypeMap[iter->first].first,
upgradeOidTypeMap[iter->first].second, compressionType,
isNULL, compressionType, defaultValStr, 0, false);
if (rc)
{
throw runtime_error(msg.str() + ec.errorString(rc));
}
}
}
return rc;
}