1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-04-18 21:44:02 +03:00
2022-01-21 16:43:49 +00:00

224 lines
6.9 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: tpchpopulate.cpp 2101 2013-01-21 14:12:52Z rdempsey $
*
******************************************************************************************/
#include <boost/timer.hpp>
#include "dbbuilder.h"
#include "tpchpopulate.h"
using namespace dmlpackageprocessor;
using namespace dmlpackage;
using namespace std;
void TpchPopulate::populateFromFile(std::string tableName, string& fileName)
{
cout << endl;
cout << "Populating " << tableName << endl;
cout << "---------------------------------------" << endl;
std::string dmlStatement;
ifstream ifdml(fileName.c_str(), ios::in);
if (ifdml)
{
while (ifdml.good())
{
char line[256];
line[0] = '\0';
;
ifdml.getline(line, 256);
// if ( line[0] == '\0' )
if (strlen(line) == 0)
continue;
dmlStatement = "insert into ";
dmlStatement += tableName;
dmlStatement += " values(";
dmlStatement += line;
dmlStatement += ");";
insert(dmlStatement);
}
}
else
{
perror(fileName.c_str());
}
cout << endl;
cout << "Finished Populating " << tableName << endl;
}
void TpchPopulate::populate_part()
{
std::string dmlStatement =
"insert into tpch.part values('1', 'goldenrod lace spring peru powder', 'Manufac#1', 'Brand#13', "
"'PROMO BURNISHED COPPER', '7', 'JUMBO PKG', '901.00', 'final deposits s' );";
insert(dmlStatement);
dmlStatement =
"insert into tpch.part values(2, 'blush rosy metallic lemon navajo', 'Manufac#1', 'Brand#13','LARGE "
"BRUSHED BRASS', 1, 'LG CASE', 902.00, 'final platelets hang f');";
insert(dmlStatement);
dmlStatement =
"insert into tpch.part values(3, 'dark green antique puff wheat', 'Manufac#4', 'Brand#42', 'STANDARD "
"POLISHED BRASS', 21, 'WRAP CASE', 903.00, 'unusual excuses ac');";
insert(dmlStatement);
dmlStatement =
"insert into tpch.part values(4, 'chocolate metallic smoke ghost drab', 'Manufac#3', 'Brand#34', "
"'SMALL PLATED BRASS', 14, 'MED DRUM', 904.00, 'ironi');";
insert(dmlStatement);
dmlStatement =
"insert into tpch.part values(5, 'forest blush chiffon thistle chocolate', 'Manufac#3', 'Brand#32', "
"'STANDARD POLISHED TIN', 15, 'SM PKG', 905.00, 'pending, spe');";
insert(dmlStatement);
cout << endl;
cout << "Commiting inserting to tpch.part table ..." << endl;
std::string command("COMMIT;");
VendorDMLStatement dml_command(command, 1);
CalpontDMLPackage* dmlCommandPkgPtr = CalpontDMLFactory::makeCalpontDMLPackage(dml_command);
DMLPackageProcessor* pkgProcPtr =
DMLPackageProcessorFactory::makePackageProcessor(DML_COMMAND, *dmlCommandPkgPtr);
DMLPackageProcessor::DMLResult result = pkgProcPtr->processPackage(*dmlCommandPkgPtr);
if (DMLPackageProcessor::NO_ERROR != result.result)
{
cout << "Command process failed!" << endl;
}
delete pkgProcPtr;
delete dmlCommandPkgPtr;
cout << endl;
cout << "Finished Populating tpch.part table" << endl;
}
void TpchPopulate::populate_customer()
{
cout << endl;
cout << "Populating tpch.customer table" << endl;
cout << "---------------------------------------" << endl;
std::string dmlStatement =
"insert into tpch.customer values(1,'Customer#000000001', 'IVhzIApeRb ot,c,E',15, "
"'25-989-741-2988',711.56, 'BUILDING', 'regular, regular platelets are fluffily according to the even "
"attainments. blithely iron');";
insert(dmlStatement);
cout << endl;
cout << "Finished Populating tpch.customer table" << endl;
}
void TpchPopulate::populate_tpch()
{
std::string tableName;
std::string filePath;
cout << endl;
cout << "Populating region table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.region";
filePath = "region.tbl";
populateFromFile(tableName, filePath);
cout << "Populating nation table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.nation";
filePath = "nation.tbl";
populateFromFile(tableName, filePath);
cout << "Populating customer table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.customer";
filePath = "customer.tbl";
populateFromFile(tableName, filePath);
cout << "Populating orders table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.orders";
filePath = "orders.tbl";
populateFromFile(tableName, filePath);
cout << "Populating part table" << endl;
cout << "---------------------------------------" << endl;
tableName = "part.nation";
filePath = "part.tbl";
populateFromFile(tableName, filePath);
cout << "Populating supplier table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.supplier";
filePath = "supplier.tbl";
populateFromFile(tableName, filePath);
cout << "Populating partsupp table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.partsupp";
filePath = "partsupp.tbl";
populateFromFile(tableName, filePath);
cout << "Populating lineitem table" << endl;
cout << "---------------------------------------" << endl;
tableName = "tpch.lineitem";
filePath = "lineitem.tbl";
populateFromFile(tableName, filePath);
cout << endl;
cout << "Finished Populating TPCH tables." << endl;
}
void TpchPopulate::insert(string insertStmt)
{
cout << endl;
cout << insertStmt << endl;
cout << "---------------------------------------" << endl;
boost::timer theTimer;
VendorDMLStatement dmlStmt(insertStmt, 1);
CalpontDMLPackage* dmlPkgPtr = CalpontDMLFactory::makeCalpontDMLPackage(dmlStmt);
DMLPackageProcessor* pkgProcPtr = DMLPackageProcessorFactory::makePackageProcessor(DML_INSERT, *dmlPkgPtr);
// pkgProcPtr->setDebugLevel(DMLPackageProcessor::VERBOSE);
DMLPackageProcessor::DMLResult result = pkgProcPtr->processPackage(*dmlPkgPtr);
if (DMLPackageProcessor::NO_ERROR != result.result)
{
cout << "Insert failed!" << endl;
}
else
{
cout << "Insert successful" << endl;
}
cout << "Insert took :" << theTimer.elapsed() << " seconds to complete." << endl;
delete pkgProcPtr;
delete dmlPkgPtr;
}