You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-31 18:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1141 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1141 lines
		
	
	
		
			31 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. */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <string>
 | |
| #include <stdexcept>
 | |
| using namespace std;
 | |
| 
 | |
| #include <cppunit/extensions/HelperMacros.h>
 | |
| 
 | |
| #include <sstream>
 | |
| #include <exception>
 | |
| #include <iostream>
 | |
| #include <unistd.h>
 | |
| #include <sys/types.h>
 | |
| #include <sys/ipc.h>
 | |
| #include <sys/sem.h>
 | |
| #include <sys/shm.h>
 | |
| #include <errno.h>
 | |
| 
 | |
| #include "messagequeue.h"
 | |
| #include "bytestream.h"
 | |
| using namespace messageqcpp;
 | |
| 
 | |
| #include "ddlpkg.h"
 | |
| #include "sqlparser.h"
 | |
| using namespace ddlpackage;
 | |
| 
 | |
| #include "createtableprocessor.h"
 | |
| #include "createindexprocessor.h"
 | |
| #include "altertableprocessor.h"
 | |
| #include "dropindexprocessor.h"
 | |
| #include "droptableprocessor.h"
 | |
| 
 | |
| using namespace ddlpackageprocessor;
 | |
| 
 | |
| #include "writeengine.h"
 | |
| #include "we_colop.h"
 | |
| using namespace WriteEngine;
 | |
| 
 | |
| #include "messagelog.h"
 | |
| class SystemCatalogBuilder
 | |
| {
 | |
|  public:
 | |
|   static void build()
 | |
|   {
 | |
|     ColumnOp colOp;
 | |
|     Column curCol;
 | |
|     WriteEngine::WriteEngineWrapper fWriteEngine;
 | |
|     WriteEngine::TxnID txnID = 0;
 | |
|     int rc;
 | |
| 
 | |
|     remove();
 | |
| 
 | |
|     colOp.initColumn(curCol);
 | |
|     // SYSTABLE
 | |
| 
 | |
|     cout << "Creating System Catalog..." << endl;
 | |
| 
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 0, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1001);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2001, 2002, 2003);
 | |
|     // Schema
 | |
|     rc = colOp.createColumn(curCol, 1, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1002);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2004, 2005, 2006);
 | |
|     // CreateDate
 | |
|     rc = colOp.createColumn(curCol, 2, 8, WriteEngine::DATE, WriteEngine::WR_CHAR, 1003);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LastUpdateDate
 | |
|     rc = colOp.createColumn(curCol, 3, 8, WriteEngine::DATE, WriteEngine::WR_CHAR, 1004);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // INIT
 | |
|     rc = colOp.createColumn(curCol, 4, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1005);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // NEXT
 | |
|     rc = colOp.createColumn(curCol, 5, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1006);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // SYSCOLUMN
 | |
|     // Shema
 | |
|     rc = colOp.createColumn(curCol, 0, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1007);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2007, 2008, 2009);
 | |
| 
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 1, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1008);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2010, 2011, 2012);
 | |
| 
 | |
|     // ColumnName
 | |
|     rc = colOp.createColumn(curCol, 2, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1009);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2013, 2014, 2015);
 | |
|     // ObjectID
 | |
|     rc = colOp.createColumn(curCol, 3, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1010);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // DictOID
 | |
|     rc = colOp.createColumn(curCol, 4, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1011);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // ListOID
 | |
|     rc = colOp.createColumn(curCol, 5, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1012);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // TreeOID
 | |
|     rc = colOp.createColumn(curCol, 6, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1013);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // DataType
 | |
|     rc = colOp.createColumn(curCol, 7, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1014);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // ColumnLength
 | |
|     rc = colOp.createColumn(curCol, 8, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1015);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // ColumnPos
 | |
|     rc = colOp.createColumn(curCol, 9, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1016);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LastUpdate
 | |
|     rc = colOp.createColumn(curCol, 10, 8, WriteEngine::DATE, WriteEngine::WR_CHAR, 1017);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // DefaultValue
 | |
|     rc = colOp.createColumn(curCol, 11, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1018);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2016, 2017, 2018);
 | |
|     // Nullable
 | |
|     rc = colOp.createColumn(curCol, 12, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1019);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // Scale
 | |
|     rc = colOp.createColumn(curCol, 13, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1020);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // Precision
 | |
|     rc = colOp.createColumn(curCol, 14, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1021);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // AutoInc
 | |
|     rc = colOp.createColumn(curCol, 15, 1, WriteEngine::CHAR, WriteEngine::WR_CHAR, 1022);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // SYSCONSTRAINT
 | |
| 
 | |
|     // ConstraintName
 | |
|     rc = colOp.createColumn(curCol, 0, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1023);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2019, 2020, 2021);
 | |
|     // Schema
 | |
|     rc = colOp.createColumn(curCol, 1, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1024);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2022, 2023, 2024);
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 2, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1025);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2025, 2026, 2027);
 | |
| 
 | |
|     // ConstraintType
 | |
|     rc = colOp.createColumn(curCol, 3, 1, WriteEngine::CHAR, WriteEngine::WR_CHAR, 1026);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // ConstraintPrim
 | |
|     rc = colOp.createColumn(curCol, 4, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1027);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2028, 2029, 2030);
 | |
| 
 | |
|     // ConstraintText
 | |
|     rc = colOp.createColumn(curCol, 5, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1028);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2031, 2032, 2033);
 | |
| 
 | |
|     // ConstraintStatus
 | |
|     rc = colOp.createColumn(curCol, 6, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1029);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2034, 2035, 2036);
 | |
| 
 | |
|     // IndexName
 | |
|     rc = colOp.createColumn(curCol, 7, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1030);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2037, 2038, 2039);
 | |
| 
 | |
|     // SYSCONSTRAINTCOL
 | |
|     // Schema
 | |
|     rc = colOp.createColumn(curCol, 0, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1031);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2040, 2041, 2042);
 | |
| 
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 1, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1032);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2043, 2044, 2045);
 | |
| 
 | |
|     // ColumnName
 | |
|     rc = colOp.createColumn(curCol, 2, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1033);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2046, 2047, 2048);
 | |
| 
 | |
|     // ConstraintName
 | |
|     rc = colOp.createColumn(curCol, 3, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1034);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2049, 2050, 2051);
 | |
| 
 | |
|     // SYSINDEX
 | |
|     // Schema
 | |
|     rc = colOp.createColumn(curCol, 4, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1035);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2052, 2053, 2054);
 | |
| 
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 5, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1036);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2055, 2056, 2057);
 | |
| 
 | |
|     // IndexName
 | |
|     rc = colOp.createColumn(curCol, 6, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1037);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2058, 2059, 2060);
 | |
| 
 | |
|     // ListOID
 | |
|     rc = colOp.createColumn(curCol, 7, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1038);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // TreeOID
 | |
|     rc = colOp.createColumn(curCol, 8, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1039);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // IndexType
 | |
|     rc = colOp.createColumn(curCol, 9, 1, WriteEngine::CHAR, WriteEngine::WR_CHAR, 1040);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // CreateDate
 | |
|     rc = colOp.createColumn(curCol, 10, 8, WriteEngine::DATE, WriteEngine::WR_CHAR, 1041);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LastUpdateDate
 | |
|     rc = colOp.createColumn(curCol, 11, 8, WriteEngine::DATE, WriteEngine::WR_CHAR, 1042);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // RecordCount
 | |
|     rc = colOp.createColumn(curCol, 12, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1043);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // TreeLevel
 | |
|     rc = colOp.createColumn(curCol, 13, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1044);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LeafCount
 | |
|     rc = colOp.createColumn(curCol, 14, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1045);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // DistinctKeys
 | |
|     rc = colOp.createColumn(curCol, 15, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1046);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LeafBlocks
 | |
|     rc = colOp.createColumn(curCol, 16, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1047);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // AvgLeafCount
 | |
|     rc = colOp.createColumn(curCol, 17, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1048);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // AvgDataBlock
 | |
|     rc = colOp.createColumn(curCol, 18, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1049);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // SampleSize
 | |
|     rc = colOp.createColumn(curCol, 19, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1050);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // ClusterFactor
 | |
|     rc = colOp.createColumn(curCol, 20, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1051);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // LastAnalysisDate
 | |
|     rc = colOp.createColumn(curCol, 21, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1052);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     // SYSINDEXCOL
 | |
|     // Schema
 | |
|     rc = colOp.createColumn(curCol, 0, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1053);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2061, 2062, 2063);
 | |
| 
 | |
|     // TableName
 | |
|     rc = colOp.createColumn(curCol, 1, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1054);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2064, 2065, 2066);
 | |
| 
 | |
|     // ColumnName
 | |
|     rc = colOp.createColumn(curCol, 2, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1055);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2067, 2068, 2069);
 | |
| 
 | |
|     // IndexName
 | |
|     rc = colOp.createColumn(curCol, 3, 8, WriteEngine::VARCHAR, WriteEngine::WR_CHAR, 1056);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
| 
 | |
|     cout << "Creating Dictionary..." << endl;
 | |
|     // Dictionary files
 | |
|     rc = fWriteEngine.createStore(txnID, 2070, 2071, 2072);
 | |
| 
 | |
|     // ColumnPos
 | |
|     rc = colOp.createColumn(curCol, 4, 4, WriteEngine::INT, WriteEngine::WR_CHAR, 1057);
 | |
|     CPPUNIT_ASSERT(rc == NO_ERROR);
 | |
|   }
 | |
| 
 | |
|   static void remove()
 | |
|   {
 | |
|     ColumnOp colOp;
 | |
| 
 | |
|     for (int i = 1001; i <= 1057; i++)
 | |
|       colOp.deleteFile(i);
 | |
|   }
 | |
| };
 | |
| 
 | |
| void destroySemaphores()
 | |
| {
 | |
|   key_t semkey;
 | |
|   int sems, err;
 | |
| 
 | |
|   semkey = 0x2149bdd2;
 | |
|   sems = semget(semkey, 2, 0666);
 | |
| 
 | |
|   if (sems != -1)
 | |
|   {
 | |
|     err = semctl(sems, 0, IPC_RMID);
 | |
| 
 | |
|     if (err == -1)
 | |
|       perror("tdriver: semctl");
 | |
|   }
 | |
| }
 | |
| 
 | |
| void destroyShmseg()
 | |
| {
 | |
|   key_t shmkey;
 | |
|   int shms, err;
 | |
| 
 | |
|   shmkey = 0x2149bdd2;
 | |
|   shms = shmget(shmkey, 0, 0666);
 | |
| 
 | |
|   if (shms != -1)
 | |
|   {
 | |
|     err = shmctl(shms, IPC_RMID, NULL);
 | |
| 
 | |
|     if (err == -1 && errno != EINVAL)
 | |
|     {
 | |
|       perror("tdriver: shmctl");
 | |
|       return;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void setUp()
 | |
| {
 | |
|   destroySemaphores();
 | |
|   destroyShmseg();
 | |
|   unlink("/tmp/oidbitmap");
 | |
|   SystemCatalogBuilder::build();
 | |
| }
 | |
| 
 | |
| void tearDown()
 | |
| {
 | |
|   destroySemaphores();
 | |
|   destroyShmseg();
 | |
|   unlink("/tmp/oidbitmap");
 | |
| }
 | |
| 
 | |
| class DDLPackageProcessorTest : public CppUnit::TestFixture
 | |
| {
 | |
|   CPPUNIT_TEST_SUITE(DDLPackageProcessorTest);
 | |
| 
 | |
|   /*
 | |
|   CPPUNIT_TEST( test_createtable );
 | |
|   CPPUNIT_TEST( test_createtable_region );
 | |
|   CPPUNIT_TEST( test_createindex );
 | |
|   CPPUNIT_TEST( test_createuniqueindex );
 | |
| 
 | |
|   CPPUNIT_TEST( test_altertable_renamecolumn );
 | |
|   CPPUNIT_TEST( test_altertable_renamecolumnwithcons );
 | |
| 
 | |
|   CPPUNIT_TEST( test_altertable_addacolumn );
 | |
|   CPPUNIT_TEST( test_altertable_addacolumnconstrain );
 | |
|   CPPUNIT_TEST( test_altertable_addacolumnunique );
 | |
|   CPPUNIT_TEST( test_altertable_dropacolumn );
 | |
|   CPPUNIT_TEST( test_altertable_dropcolumns );
 | |
|   CPPUNIT_TEST( test_altertable_addcolumns );
 | |
|   CPPUNIT_TEST( test_altertable_addtableconstraint );
 | |
|   CPPUNIT_TEST( test_altertable_droptableconstraint );
 | |
|   CPPUNIT_TEST( test_altertable_setcolumndefault );
 | |
|   CPPUNIT_TEST( test_altertable_dropcolumndefault );
 | |
|   CPPUNIT_TEST( test_altertable_renametable );
 | |
|   CPPUNIT_TEST( test_dropindex );
 | |
|   CPPUNIT_TEST( test_droptable );  */
 | |
| 
 | |
|   CPPUNIT_TEST_SUITE_END();
 | |
| 
 | |
|  private:
 | |
|  public:
 | |
|   /*
 | |
|    * destroySemaphores() and destroyShmseg() will print error messages
 | |
|    * if there are no objects to destroy.  That's OK.
 | |
|    */
 | |
|   void test_createtable_region()
 | |
|   {
 | |
|     cout << "Begining create region table testing..." << endl;
 | |
|     std::string sqlbuf =
 | |
|         "create table region( r_regionkey integer NOT NULL, r_name char(25) ,r_comment varchar(152));";
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         CreateTableProcessor processor;
 | |
|         processor.setDebugLevel(CreateTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         CreateTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<CreateTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_createtable()
 | |
|   {
 | |
|     // setUp();
 | |
|     // removeSystemCatalog();
 | |
|     // createSystemCatalog();
 | |
|     cout << "Begining create table testing..." << endl;
 | |
|     std::string sqlbuf =
 | |
|         "create table tpch.part( p_partkey integer NOT NULL ,p_name varchar(55) default 'helloworld', p_mfgr "
 | |
|         "char(6), p_brand char(10) , p_type varchar(25) default 'foobar' , p_size integer , p_container "
 | |
|         "char(10) ,p_retailprice integer , p_comment varchar(23), CONSTRAINT PK_PART PRIMARY KEY(p_partkey) "
 | |
|         ")";
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         CreateTableProcessor processor;
 | |
|         processor.setDebugLevel(CreateTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
| 
 | |
|         CreateTableStatement& ct = dynamic_cast<CreateTableStatement&>(stmt);
 | |
| 
 | |
|         cout << "Parsed CreateTable:" << endl;
 | |
|         cout << ct << endl;
 | |
| 
 | |
|         CreateTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(ct);
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_createindex()
 | |
|   {
 | |
|     cout << "Begining create index test ... " << endl;
 | |
|     std::string sqlbuf = "CREATE  INDEX test_idx ON tpch.part (p_size)";
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         CreateIndexProcessor processor;
 | |
|         processor.setDebugLevel(CreateIndexProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         CreateIndexProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<CreateIndexStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_createuniqueindex()
 | |
|   {
 | |
|     cout << "Begining create unique index test ..." << endl;
 | |
|     std::string sqlbuf = "CREATE UNIQUE INDEX test_idx ON tpch.part (p_mfgr)";
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         CreateIndexProcessor processor;
 | |
|         processor.setDebugLevel(CreateIndexProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         CreateIndexProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<CreateIndexStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_altertable_addacolumn()
 | |
|   {
 | |
|     cout << "Begoning Alter Table Add column test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part ADD COLUMN c3 char(50)";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_addacolumnconstrain()
 | |
|   {
 | |
|     cout << "Begining Alter Table add column constraint test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part ADD COLUMN c3 char(50) NOT NULL";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_addacolumnunique()
 | |
|   {
 | |
|     cout << "Begining Alter Table add column with constraint test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part ADD COLUMN c3 char(50) UNIQUE";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_altertable_dropacolumn()
 | |
|   {
 | |
|     cout << "Begining Alter Table drop a column test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part DROP p_size ";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_dropcolumns()
 | |
|   {
 | |
|     cout << "Begining Alter Table drop columns test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part DROP p_size, DROP p_type ";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_addcolumns()
 | |
|   {
 | |
|     cout << "Begining Alter Table add columns test ..." << endl;
 | |
|     std::string sqlbuf =
 | |
|         "ALTER TABLE test ADD COLUMN c3 char(50), ADD COLUMN c4 char(10), ADD COLUMN C5 int;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_dropindex()
 | |
|   {
 | |
|     cout << "Begining Alter Table drop index test ..." << endl;
 | |
|     std::string sqlbuf = "drop index tpch.test_idx";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         DropIndexProcessor processor;
 | |
|         processor.setDebugLevel(DropIndexProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         DropIndexProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<DropIndexStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_altertable_renamecolumn()
 | |
|   {
 | |
|     cout << "Begining Alter Table rename a column ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part RENAME COLUMN p_size TO size;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_renamecolumnwithcons()
 | |
|   {
 | |
|     cout << "Begining Alter Table rename a column with constraints ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part RENAME COLUMN p_partkey TO partlkey;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_altertable_addtableconstraint()
 | |
|   {
 | |
|     cout << "Begining Alter Table add table constraint test ... " << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part add CONSTRAINT unique(p_type);";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_droptableconstraint()
 | |
|   {
 | |
|     cout << "Begining Alter Table drop table constraint test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part drop constraint pk_tpch cascade;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_setcolumndefault()
 | |
|   {
 | |
|     cout << "Begining Alter Table set column default test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part alter p_partkey set default 3 ;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
|   void test_altertable_dropcolumndefault()
 | |
|   {
 | |
|     cout << "Begining Alter Table drop column default test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.part ALTER COLUMN p_type DROP DEFAULT; ;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_altertable_renametable()
 | |
|   {
 | |
|     cout << "Begining Alter Table rename a table test ..." << endl;
 | |
|     std::string sqlbuf = "ALTER TABLE tpch.region rename to tpch.ready ;";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         AlterTableProcessor processor;
 | |
|         processor.setDebugLevel(AlterTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         AlterTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<AlterTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| 
 | |
|   void test_droptable()
 | |
|   {
 | |
|     cout << "Begining drop table test ..." << endl;
 | |
|     std::string sqlbuf = "drop table tpch.part";
 | |
| 
 | |
|     SqlParser parser;
 | |
|     parser.Parse(sqlbuf.c_str());
 | |
| 
 | |
|     if (parser.Good())
 | |
|     {
 | |
|       const ParseTree& ptree = parser.GetParseTree();
 | |
| 
 | |
|       try
 | |
|       {
 | |
|         DropTableProcessor processor;
 | |
|         processor.setDebugLevel(DropTableProcessor::VERBOSE);
 | |
| 
 | |
|         SqlStatement& stmt = *ptree.fList[0];
 | |
|         DropTableProcessor::DDLResult result;
 | |
| 
 | |
|         result = processor.processPackage(dynamic_cast<DropTableStatement&>(stmt));
 | |
|         std::cout << "return: " << result.result << std::endl;
 | |
|       }
 | |
|       catch (...)
 | |
|       {
 | |
|         tearDown();
 | |
|         throw;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     tearDown();
 | |
|   }
 | |
| };
 | |
| 
 | |
| CPPUNIT_TEST_SUITE_REGISTRATION(DDLPackageProcessorTest);
 | |
| 
 | |
| #include <cppunit/extensions/TestFactoryRegistry.h>
 | |
| #include <cppunit/ui/text/TestRunner.h>
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|   // Uncomment before running tests
 | |
|   // setUp();
 | |
|   CppUnit::TextUi::TestRunner runner;
 | |
|   CppUnit::TestFactoryRegistry& registry = CppUnit::TestFactoryRegistry::getRegistry();
 | |
|   runner.addTest(registry.makeTest());
 | |
|   bool wasSuccessful = runner.run("", false);
 | |
|   return (wasSuccessful ? 0 : 1);
 | |
| }
 |