You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-30 07:25:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			2854 lines
		
	
	
		
			98 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			2854 lines
		
	
	
		
			98 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* Copyright (C) 2014 InfiniDB, Inc.
 | |
|    Copyright (C) 2016 MariaDB Corporaton
 | |
| 
 | |
|    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>
 | |
| #include <sys/timeb.h>
 | |
| using namespace std;
 | |
| 
 | |
| #include <boost/scoped_ptr.hpp>
 | |
| using namespace boost;
 | |
| 
 | |
| #include <cppunit/extensions/HelperMacros.h>
 | |
| 
 | |
| #include "writeengine.h"
 | |
| #include "we_colop.h"
 | |
| 
 | |
| using namespace WriteEngine;
 | |
| 
 | |
| extern WriteEngine::BRMWrapper* brmWrapperPtr;
 | |
| 
 | |
| class WriteEngineTest : public CppUnit::TestFixture {
 | |
| 
 | |
| CPPUNIT_TEST_SUITE( WriteEngineTest );
 | |
| 
 | |
| // Column related operation testing
 | |
| /*
 | |
| CPPUNIT_TEST( testCreateColumnFiles );
 | |
| CPPUNIT_TEST( testWriteColumnFiles );
 | |
| CPPUNIT_TEST( testReadColumnFiles );
 | |
| 
 | |
| CPPUNIT_TEST( testInsertRowInt );
 | |
| CPPUNIT_TEST( testInsertRowLonglong );
 | |
| CPPUNIT_TEST( testInsertRowDouble );
 | |
| CPPUNIT_TEST( testInsertRowChar );
 | |
| CPPUNIT_TEST( testInsertBulk );
 | |
| 
 | |
| // Table related operation testing
 | |
| CPPUNIT_TEST( testTableAllocateRowId );
 | |
| 
 | |
| // Wrapper interface testing
 | |
| CPPUNIT_TEST( testInterfaceCreateColumnFile );
 | |
| CPPUNIT_TEST( testInterfaceInsertUpdateDeleteRow );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowMedIntDouble );
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceInsertRowChar );
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceInsertRowCharQAWidth4 );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowCharQAWidth3 );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowCharQAWidth8 );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowCharQAWidth1 );
 | |
| 
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceInsertRowLongLong );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowByte );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowToken );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowSingleChar );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowDoubleChar );
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceCreateIndex );
 | |
| CPPUNIT_TEST( testInterfaceDropIndex );
 | |
| CPPUNIT_TEST( testInterfaceUpdateIndexChar ); 
 | |
| CPPUNIT_TEST( testInterfaceUpdateMultiColIndex);
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceDctnryToken );
 | |
| CPPUNIT_TEST( testInterfaceDctnryTokenRollBack );
 | |
| 
 | |
| CPPUNIT_TEST( testInsertCommitRollback );
 | |
| CPPUNIT_TEST( testInterfaceInsertRowHwm );
 | |
| 
 | |
| CPPUNIT_TEST( testInterfaceCombineIndexLoad );   // note: this test case must be the last one
 | |
| //CPPUNIT_TEST( testTmpBulkPerformance );   // note: this test case must be the last one
 | |
| */
 | |
| //CPPUNIT_TEST(testBoostFloat);
 | |
| /*
 | |
| CPPUNIT_TEST(testCreateColumnFiles1);
 | |
| CPPUNIT_TEST(testCreateColumnFiles2);
 | |
| CPPUNIT_TEST(testCreateColumnFiles3);
 | |
| CPPUNIT_TEST(testCreateColumnFiles4);
 | |
| */
 | |
| 
 | |
| //CPPUNIT_TEST(testCreateFileMultipleIONBF);
 | |
| //CPPUNIT_TEST(testCreateFile64MBIONBF);
 | |
| //CPPUNIT_TEST(testCreateFileMultipleBF);
 | |
| //CPPUNIT_TEST(testCreateFilelargerBF);
 | |
| CPPUNIT_TEST(testSoloman);
 | |
| /*
 | |
| CPPUNIT_TEST(testCreateFileNoBRM);
 | |
| CPPUNIT_TEST(testCreateFileBRM);
 | |
| */
 | |
| CPPUNIT_TEST_SUITE_END();
 | |
| 
 | |
| private:
 | |
|    WriteEngineWrapper      m_wrapper;
 | |
|    Session                 m_session;
 | |
| 
 | |
| public:
 | |
| 	void setUp() {
 | |
|       m_wrapper.setDebugLevel( DEBUG_3 );
 | |
|       m_session.txnid = 10;
 | |
|       BRMWrapper::setUseBrm( true );
 | |
| 	}
 | |
| 
 | |
| 	void tearDown() {
 | |
| 
 | |
| 	}
 | |
| 
 | |
|    void SetColumnStruct( ColStruct& column, OID dataOid, int colWidth, CalpontSystemCatalog::ColDataType colDataType )
 | |
|    {
 | |
|       column.dataOid = dataOid;
 | |
|       column.colWidth = colWidth;
 | |
|       column.colDataType = colDataType;
 | |
|       column.tokenFlag = false;
 | |
|    }
 | |
| 
 | |
|    void CreateColumnFile( FID fid, int width, CalpontSystemCatalog::ColDataType colDataType, ColType colType )
 | |
|    {
 | |
|       int rc;
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|  
 | |
|       colOp.deleteFile( fid );
 | |
|       CPPUNIT_ASSERT( colOp.exists( fid ) == false );
 | |
| 
 | |
|       // create column files
 | |
|       rc = colOp.createColumn( curCol, 2, width, colDataType, colType, fid );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testCreateColumnFiles() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
| 
 | |
|  
 | |
|       colOp.initColumn( curCol );
 | |
| 
 | |
|       // file opertaions
 | |
|       colOp.deleteFile( 100 );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 100 ) == false );
 | |
| 
 | |
|       colOp.deleteFile( 101 );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 101 ) == false );
 | |
| 
 | |
|       colOp.deleteFile( 103 );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 103 ) == false );
 | |
| 
 | |
|       rc = colOp.createColumn( curCol, 2, 50, WriteEngine::CHAR, WriteEngine::WR_CHAR, 101 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.deleteFile( 101 );
 | |
|       rc = colOp.createColumn( curCol, 2, 3, WriteEngine::CHAR, WriteEngine::WR_CHAR, 101 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.deleteFile( 101 );
 | |
|       rc = colOp.createColumn( curCol, 2, 5, WriteEngine::CHAR, WriteEngine::WR_CHAR, 101 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       // create column files
 | |
|       rc = colOp.createColumn( curCol, 2, 8, WriteEngine::CHAR, WriteEngine::WR_CHAR, 100 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.createColumn( curCol, 2, 8, WriteEngine::CHAR, WriteEngine::WR_CHAR, 100 );
 | |
|       CPPUNIT_ASSERT( rc == ERR_FILE_EXIST );
 | |
| 
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
| 
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == ERR_INVALID_PARAM );
 | |
| 
 | |
|       rc = colOp.createTable();
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testWriteColumnFiles() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
|       unsigned char buf[BYTE_PER_BLOCK];
 | |
| 
 | |
|  
 | |
|       colOp.initColumn( curCol );
 | |
|       CPPUNIT_ASSERT( curCol.colNo == 0 );
 | |
|       CPPUNIT_ASSERT( curCol.colWidth == 0 );
 | |
|       CPPUNIT_ASSERT( curCol.dataFile.pFile == NULL );
 | |
| //      CPPUNIT_ASSERT( curCol.bitmapFile.pFile == NULL );
 | |
|       CPPUNIT_ASSERT( curCol.dataFile.fid == 0 );
 | |
| //      CPPUNIT_ASSERT( curCol.bitmapFile.fid == 0 );
 | |
| 
 | |
|       colOp.setColParam( curCol, 2, 4, INT, WriteEngine::WR_INT, 100  );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       int testVal = 60;
 | |
|       memset( buf, 0, BYTE_PER_BLOCK );
 | |
|       memcpy( buf+8, &testVal, 4 );
 | |
| 
 | |
|       rc = colOp.writeDBFileFbo( curCol.dataFile.pFile, buf, 1, 1 );  // block 2
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
| 
 | |
|       CPPUNIT_ASSERT( curCol.colNo == 0 );
 | |
|       CPPUNIT_ASSERT( curCol.colWidth == 0 );
 | |
|       CPPUNIT_ASSERT( curCol.dataFile.pFile == NULL );
 | |
| //      CPPUNIT_ASSERT( curCol.bitmapFile.pFile == NULL );
 | |
|       CPPUNIT_ASSERT( curCol.dataFile.fid == 0 );
 | |
| //      CPPUNIT_ASSERT( curCol.bitmapFile.fid == 0 );
 | |
| 
 | |
|       CPPUNIT_ASSERT( colOp.isValid( curCol ) == false );
 | |
| 
 | |
|    }
 | |
| 
 | |
|    void testReadColumnFiles() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol, errCol;
 | |
|       int      rc;
 | |
|       unsigned char buf[BYTE_PER_BLOCK];
 | |
|       CalpontSystemCatalog::ColDataType colDataType;
 | |
|       
 | |
| //      colOp.setUseBrm(false);
 | |
|       CPPUNIT_ASSERT( colOp.getColDataType( "integer", colDataType ) == true );
 | |
|       CPPUNIT_ASSERT( colDataType == INT );
 | |
|       CPPUNIT_ASSERT( colOp.getColDataType( "Int1", colDataType ) == false );
 | |
| 
 | |
|       // check error situation
 | |
|       colOp.initColumn( errCol );
 | |
|       colOp.setColParam( errCol, 2, 8, CHAR, WriteEngine::WR_CHAR, 103 );
 | |
|       rc = colOp.openColumnFile( errCol );
 | |
|       CPPUNIT_ASSERT( rc == ERR_FILE_READ );
 | |
|       colOp.clearColumn( errCol );
 | |
| 
 | |
| 
 | |
|       colOp.initColumn( errCol );
 | |
|       colOp.setColParam( errCol, 2, 8, CHAR, WriteEngine::WR_CHAR, 103 );
 | |
|       rc = colOp.openColumnFile( errCol );
 | |
|       CPPUNIT_ASSERT( rc == ERR_FILE_READ );
 | |
|       colOp.clearColumn( errCol );
 | |
| 
 | |
|       // check normal situation
 | |
|       colOp.initColumn( curCol );
 | |
| 
 | |
|       colOp.setColParam( curCol, 2, 8, CHAR, WriteEngine::WR_CHAR, 100 );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       memset( buf, 0, BYTE_PER_BLOCK );
 | |
| 
 | |
|       rc = colOp.readDBFile( curCol.dataFile.pFile, buf, 1, true );  // block 2
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       int testVal = 0;
 | |
|       memcpy( &testVal, buf+8, 8 );
 | |
|       printf( "\nread the test value : %d", testVal );
 | |
|       CPPUNIT_ASSERT( testVal == 60 );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInsertRowInt() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc, valArray[5], oldValArray[5];
 | |
|       RID      rowIdArray[5];
 | |
|       
 | |
|  
 | |
|       rowIdArray[0] = 1;
 | |
|       rowIdArray[1] = 3;
 | |
|       rowIdArray[2] = 4;
 | |
|       rowIdArray[3] = 7;
 | |
|       rowIdArray[4] = 8;
 | |
| 
 | |
|       valArray[0] = 8;
 | |
|       valArray[1] = 5;
 | |
|       valArray[2] = 3;
 | |
|       valArray[3] = 0;
 | |
|       valArray[4] = 16;
 | |
| 
 | |
|       CreateColumnFile( 100, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, 4, INT, WriteEngine::WR_INT, 100 );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, 5, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < 5; i++ )
 | |
|          CPPUNIT_ASSERT( oldValArray[i] == (int)0x80000001 );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|    }
 | |
| 
 | |
|    void testInsertRowLonglong() {
 | |
|       ColumnOp    colOp;
 | |
|       Column      curCol;
 | |
|       int         rc;
 | |
|       RID         rowIdArray[3];
 | |
|       int         width = 8, totalRow = 3;
 | |
|       FID         fid = 100;
 | |
|       long long   valArray[3];
 | |
|       uint64_t    oldValArray[3], verifyArray[3];
 | |
|       CalpontSystemCatalog::ColDataType colDataType = CalpontSystemCatalog::BIGINT;
 | |
|       ColType     colType = WriteEngine::WR_LONGLONG;
 | |
|       uint64_t     emptyVal = 0x8000000000000001LL;
 | |
| 
 | |
|  
 | |
|       rowIdArray[0] = 1;
 | |
|       rowIdArray[1] = 3;
 | |
|       rowIdArray[2] = 4;
 | |
| 
 | |
|       verifyArray[0] = valArray[0] = 32111238;
 | |
|       verifyArray[1] = valArray[1] = 1231235;
 | |
|       verifyArray[2] = valArray[2] = 67731233;
 | |
| 
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, totalRow, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < totalRow; i++ )
 | |
|          CPPUNIT_ASSERT( oldValArray[i] == emptyVal );
 | |
| 
 | |
|       valArray[0] = 1900003;
 | |
|       valArray[1] = 2349000;
 | |
|       valArray[2] = 78900123;
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, totalRow, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < totalRow; i++ )
 | |
|          CPPUNIT_ASSERT( oldValArray[i] == verifyArray[i] );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInsertRowDouble() {
 | |
|       ColumnOp    colOp;
 | |
|       Column      curCol;
 | |
|       int         rc;
 | |
|       RID         rowIdArray[3];
 | |
|       int         width = 8, totalRow = 3;
 | |
|       FID         fid = 100;
 | |
|       double      valArray[3];
 | |
|       int64_t     oldValArray[3];
 | |
|       CalpontSystemCatalog::ColDataType colDataType = CalpontSystemCatalog::DOUBLE;
 | |
|       ColType     colType = WriteEngine::WR_DOUBLE;
 | |
|       int64_t     emptyVal = 0xFFFAAAAAAAAAAAABLL;
 | |
| 
 | |
|  
 | |
|       rowIdArray[0] = 1;
 | |
|       rowIdArray[1] = 3;
 | |
|       rowIdArray[2] = 4;
 | |
| 
 | |
|       valArray[0] = 8;
 | |
|       valArray[1] = 5;
 | |
|       valArray[2] = 3;
 | |
| 
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, totalRow, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < totalRow; i++ )
 | |
|          CPPUNIT_ASSERT( oldValArray[i] == emptyVal );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|    }
 | |
| 
 | |
|    void testInsertRowChar() {
 | |
|       ColumnOp    colOp;
 | |
|       Column      curCol;
 | |
|       int         rc;
 | |
|       RID         rowIdArray[3];
 | |
|       int         width = 8, totalRow = 3;
 | |
|       FID         fid = 100;
 | |
|       char        valArray[24], buf[8];
 | |
|       char        testValue[3][8] = { "abc", "eDFFF", "GHK" };
 | |
|       uint64_t    oldValArray[3];
 | |
|       CalpontSystemCatalog::ColDataType colDataType = CalpontSystemCatalog::CHAR;
 | |
|       ColType     colType = WriteEngine::WR_CHAR;
 | |
|       uint64_t    emptyVal = 0xFFFFFFFFFFFFFFFFLL;
 | |
| 
 | |
|  
 | |
|       rowIdArray[0] = 1;
 | |
|       rowIdArray[1] = 3;
 | |
|       rowIdArray[2] = 4;
 | |
| 
 | |
|       memset( valArray, 0, 24 );
 | |
|       colOp.writeBufValue( (unsigned char*)buf, testValue[0], 8, true );
 | |
|       memcpy( valArray, buf, 8 );
 | |
|       colOp.writeBufValue( (unsigned char*)buf, testValue[1], 8, true );
 | |
|       memcpy( valArray+8, buf, 8 );
 | |
|       colOp.writeBufValue( (unsigned char*)buf, testValue[2], 8, true );
 | |
|       memcpy( valArray+16, buf, 8 );
 | |
| 
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, totalRow, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < totalRow; i++ )
 | |
|          CPPUNIT_ASSERT( oldValArray[i] == emptyVal );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|    }
 | |
| 
 | |
|    void testInsertBulk() {
 | |
|       FILE*       pSourceFile = NULL;
 | |
|       ColumnOp    colOp;
 | |
|       Column      curCol;
 | |
|       int         rc, width = 8;
 | |
|       int         hwm;
 | |
|       FID         fid = 999;
 | |
|       CalpontSystemCatalog::ColDataType colDataType = CalpontSystemCatalog::CHAR;
 | |
|       ColType     colType = WriteEngine::WR_CHAR;
 | |
|       
 | |
|       colOp.deleteFile( 999 );
 | |
|       colOp.deleteFile( 998 );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 999 ) == false );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 998 ) == false );
 | |
| 
 | |
|       int allocSize =0;
 | |
|       CPPUNIT_ASSERT( colOp.createFile( 998, 20, allocSize, 0xEEEE, 2 ) == NO_ERROR );
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       pSourceFile = colOp.openFile( 998 );
 | |
|       CPPUNIT_ASSERT( pSourceFile != NULL );
 | |
| 
 | |
|       hwm = colOp.getFileSize( curCol.dataFile.pFile )/BYTE_PER_BLOCK - 5 ;
 | |
|       rc = colOp.insertBulk( curCol, pSourceFile, hwm, 20 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.clearColumn( curCol );
 | |
|       colOp.closeFile( pSourceFile );
 | |
|    }
 | |
| 
 | |
|    void testTableAllocateRowId() {
 | |
|       ColumnOp    colOp;
 | |
|       Column      curCol;
 | |
|       RID         rowIdArray[3];
 | |
|       int         rc;
 | |
|       int         width = 4, hwm = 0;
 | |
|       FID         fid = 100;
 | |
|       CalpontSystemCatalog::ColDataType colDataType = CalpontSystemCatalog::INT;
 | |
|       ColType     colType = WriteEngine::WR_INT;
 | |
| 
 | |
|  
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
| 
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       colOp.allocRowId( curCol, 3, rowIdArray, hwm );
 | |
|       CPPUNIT_ASSERT( rowIdArray[0] == 0 );
 | |
|       CPPUNIT_ASSERT( rowIdArray[1] == 1 );
 | |
|       CPPUNIT_ASSERT( rowIdArray[2] == 2 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceCreateColumnFile() {
 | |
|       ColumnOp colOp;
 | |
|       FID      fid = 100;
 | |
| 
 | |
|  
 | |
|       if( colOp.exists( fid ) ) {
 | |
|          CPPUNIT_ASSERT( m_wrapper.dropColumn( m_session.txnid, fid ) == NO_ERROR );
 | |
|          CPPUNIT_ASSERT( m_wrapper.dropColumn( m_session.txnid, fid ) == ERR_FILE_NOT_EXIST );
 | |
|       }
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.createColumn( m_session.txnid, fid, WriteEngine::DOUBLE, 8 ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( colOp.exists( 100 ) == true );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertUpdateDeleteRow() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       int                     rc, total, valArray[3];
 | |
|       float                   dVal;
 | |
| //      ColumnOp                colOp;
 | |
| 
 | |
| //      colOp = m_wrapper.getColumnOp();
 | |
|  
 | |
| 
 | |
|       CreateColumnFile( 100, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
|       CreateColumnFile( 200, 4, WriteEngine::FLOAT, WriteEngine::WR_FLOAT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 100, 4, WriteEngine::INT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 200, 4, WriteEngine::FLOAT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::INT );
 | |
| 
 | |
|       testColStruct = colStructList[1];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 200 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::FLOAT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curTuple.data = 3;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 100;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       m_wrapper.convertValArray( 3, WriteEngine::WR_INT, curTupleList, valArray );
 | |
|       CPPUNIT_ASSERT( valArray[0] == 3 );
 | |
|       CPPUNIT_ASSERT( valArray[1] == 0 );
 | |
|       CPPUNIT_ASSERT( valArray[2] == 100 );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second column
 | |
|       curTuple.data = 0.0f;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 1234.78f;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 999.98f;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       float valArray1[3];
 | |
|       m_wrapper.convertValArray( 3, WriteEngine::WR_FLOAT, curTupleList, valArray1 );
 | |
|       CPPUNIT_ASSERT( valArray1[0] == 0.0f );
 | |
|       CPPUNIT_ASSERT( valArray1[1] == 1234.78f);
 | |
|       CPPUNIT_ASSERT( valArray1[2] == 999.98f );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 3 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 0 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 100 );
 | |
| 
 | |
|       // second column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[1]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       dVal = boost::any_cast<float>( testTuple.data );
 | |
|       CPPUNIT_ASSERT( dVal == 0.0f );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( testTuple.data ) == 1234.78f );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( testTuple.data ) == 999.98f );
 | |
| 
 | |
| //      m_wrapper.printInputValue( colStructList, colValueList, ridList );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
| 
 | |
|       // try to update rows
 | |
|       colValueList.clear();
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       curTuple.data = 9;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 15;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       // add values for the second column
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       curTuple.data = 1.99f;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 3000.15f;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       ridList.clear();
 | |
|       ridList.push_back( (RID) 2 );
 | |
|       ridList.push_back( (RID) 3 );
 | |
| 
 | |
|       rc = m_wrapper.updateColumnRec( m_session.txnid, colStructList, colValueList, colOldValList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( colOldValList.size() == 2 );
 | |
| 
 | |
|       m_wrapper.printInputValue( colStructList, colOldValList, ridList );
 | |
|       curTupleList = colOldValList[0];
 | |
|       curTuple = curTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( curTuple.data ) == 100 );
 | |
|       curTuple = curTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( curTuple.data ) == 3 );
 | |
| 
 | |
|       curTupleList = colOldValList[1];
 | |
|       curTuple = curTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( curTuple.data ) == 999.98f );
 | |
|       curTuple = curTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( curTuple.data ) == 0.0f );
 | |
| 
 | |
|       ridList[0] = 1;
 | |
|       ridList[1] = 2;
 | |
| 
 | |
|       rc = m_wrapper.deleteRow( m_session.txnid, colStructList, colOldValList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( colOldValList.size() == 2 );
 | |
| 
 | |
|       m_wrapper.printInputValue( colStructList, colOldValList, ridList );
 | |
|       curTupleList = colOldValList[0];
 | |
|       curTuple = curTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( curTuple.data ) == 0 );
 | |
|       curTuple = curTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( curTuple.data ) == 9 );
 | |
| 
 | |
|       curTupleList = colOldValList[1];
 | |
|       curTuple = curTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( curTuple.data ) == 1234.78f );
 | |
|       curTuple = curTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<float>( curTuple.data ) == 1.99f );
 | |
| 
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowMedIntDouble() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       int                     total, rc;
 | |
|       double                  dVal;
 | |
| 
 | |
|  
 | |
| 
 | |
|       CreateColumnFile( 100, 4, WriteEngine::MEDINT, WriteEngine::WR_INT );
 | |
|       CreateColumnFile( 200, 8, WriteEngine::DOUBLE, WriteEngine::WR_DOUBLE );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 100, 4, WriteEngine::MEDINT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 200, 8, WriteEngine::DOUBLE );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::MEDINT );
 | |
| 
 | |
|       testColStruct = colStructList[1];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 200 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 8 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::DOUBLE );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 200;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second column
 | |
|       curTuple.data = 0.0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 1234.78;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 999.98;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 102 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 0 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 200 );
 | |
| 
 | |
|       // second column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[1]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       dVal = boost::any_cast<double>( testTuple.data );
 | |
|       CPPUNIT_ASSERT( dVal == 0.0 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<double>( testTuple.data ) == 1234.78 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<double>( testTuple.data ) == 999.98 );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceInsertRowChar() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     total, rc, width = 5;
 | |
| 
 | |
|  
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc != NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.updateColumnRec( m_session.txnid, colStructList, colValueList, colOldValList, ridList );
 | |
|       CPPUNIT_ASSERT( rc != NO_ERROR );
 | |
| 
 | |
|       // test column struct list
 | |
|       CreateColumnFile( 100, width, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, width, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == width );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curStr = "aaaaa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "bbbbb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "ccccc";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "aaaaa" );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "bbbbb" );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "ccccc" );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceInsertRowCharQAWidth4() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     rc, width = 4;
 | |
| 
 | |
|        // test column struct list
 | |
|       CreateColumnFile( 100, width, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, width, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == width );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curStr = "aaaa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "aaa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "aa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "a";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
|       CPPUNIT_ASSERT( ridList[3] == 3 );
 | |
| 
 | |
|       // separate inserts
 | |
|       colValueList.clear();
 | |
|       curStr = "bbbb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "bbb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 5 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "bb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 6 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "b";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 7 );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowCharQAWidth3() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     rc, width = 3;
 | |
| 
 | |
|        // test column struct list
 | |
|       CreateColumnFile( 100, width, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, width, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == width );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curStr = "aaa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "aa";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "a";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // separate inserts
 | |
|       colValueList.clear();
 | |
|       curStr = "bbb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "bb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "b";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 5 );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowCharQAWidth8() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     rc, width = 8;
 | |
| 
 | |
|        // test column struct list
 | |
|       CreateColumnFile( 100, width, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, width, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == width );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curStr = "12345678";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "123456";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "1234";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // separate inserts
 | |
|       colValueList.clear();
 | |
|       curStr = "bbbb1234";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "bb";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "b";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 5 );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowCharQAWidth1() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     rc, width = 1;
 | |
| 
 | |
|        // test column struct list
 | |
|       CreateColumnFile( 100, width, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, width, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == width );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curStr = "a";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "b";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curStr = "c";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // separate inserts
 | |
|       colValueList.clear();
 | |
|       curStr = "1";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "2";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curStr = "3";
 | |
|       curTuple.data = curStr;
 | |
|       curTupleList.push_back( curTuple );
 | |
|       colValueList.push_back( curTupleList );
 | |
|       curTupleList.clear();
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 5 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceInsertRowSingleChar() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       string                  curString;
 | |
|       int                     total, rc;
 | |
|       ColumnOp                colOp;
 | |
| 
 | |
| //      colOp = m_wrapper.getColumnOp();
 | |
|  
 | |
|       colOp.deleteFile( 100 );
 | |
| 
 | |
|       // test column struct list
 | |
|       CreateColumnFile( 100, 1, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, 1, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 1 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curString = "\376";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "a";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "c";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "G";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "a" );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "c" );
 | |
| 
 | |
|       testTuple = testTupleList[3];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "G" );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       printf( "\nrc=%d", rc );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
|       CPPUNIT_ASSERT( ridList[3] == 3 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 5 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 6 );
 | |
|       CPPUNIT_ASSERT( ridList[3] == 7 );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowDoubleChar() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       string                  curString;
 | |
|       int                     total, rc;
 | |
|       ColumnOp                colOp;
 | |
| 
 | |
| //      colOp = m_wrapper.getColumnOp();
 | |
|  
 | |
|       colOp.deleteFile( 100 );
 | |
| 
 | |
|       // test column struct list
 | |
|       CreateColumnFile( 100, 2, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, 2, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 2 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curString = "\377\376";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "ab";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "c";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "Ge";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "ab" );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "c" );
 | |
| 
 | |
|       testTuple = testTupleList[3];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<std::string>( testTuple.data ) == "Ge" );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       printf( "\nrc=%d", rc );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
|       CPPUNIT_ASSERT( ridList[3] == 3 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 5 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 6 );
 | |
|       CPPUNIT_ASSERT( ridList[3] == 7 );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowLongLong() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       int                     total, rc;
 | |
| 
 | |
|  
 | |
| 
 | |
|       CreateColumnFile( 100, 8, WriteEngine::BIGINT, WriteEngine::WR_LONGLONG );
 | |
|       CreateColumnFile( 200, 2, WriteEngine::SMALLINT, WriteEngine::WR_SHORT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 100, 8, WriteEngine::BIGINT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 200, 2, WriteEngine::SMALLINT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 8 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::BIGINT );
 | |
| 
 | |
|       testColStruct = colStructList[1];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 200 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 2 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::SMALLINT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curTuple.data = (long long)1021231;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (long long)0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (long long)93232200;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second column
 | |
|       curTuple.data = (short)1000;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (short)5678;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (short)9;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<long long>( testTuple.data ) == 1021231 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<long long>( testTuple.data ) == 0 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<long long>( testTuple.data ) == 93232200 );
 | |
| 
 | |
|       // second column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[1]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 1000 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 5678 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 9 );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceInsertRowByte() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       int                     total, rc;
 | |
|       ColumnOp                colOp;
 | |
| 
 | |
|       CreateColumnFile( 100, 1, WriteEngine::TINYINT, WriteEngine::WR_BYTE );
 | |
|       CreateColumnFile( 200, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 100, 1, WriteEngine::TINYINT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 200, 4, WriteEngine::INT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 1 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::TINYINT );
 | |
| 
 | |
|       testColStruct = colStructList[1];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 200 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::INT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curTuple.data = (char)21;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (char)-30;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (char)127;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second column
 | |
|       curTuple.data = 1000;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 5678;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 9;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[0]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<char>( testTuple.data ) == 21 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<char>( testTuple.data ) == -30 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<char>( testTuple.data ) == 127 );
 | |
| 
 | |
|       // second column
 | |
|       testTupleList = static_cast<ColTupleList>(colValueList[1]);
 | |
|       total = testTupleList.size();
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 1000 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 5678 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 9 );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
| 
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceInsertRowToken() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     rc;
 | |
|       ColumnOp                colOp;
 | |
|       OID                     dctnryOID=800, treeOID=801, listOID=802;
 | |
|       DctnryTuple             dctnryTuple;
 | |
| 
 | |
|       // no matter what happened, drop stores
 | |
| //      BRMWrapper::setUseBrm(false);
 | |
|       m_wrapper.dropStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       rc = m_wrapper.createStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       rc = m_wrapper.openStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       //colOp = m_wrapper.getColumnOp();
 | |
| 
 | |
|       // test column struct list
 | |
|       CreateColumnFile( 100, 8, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 100, 8, WriteEngine::CHAR );
 | |
|       curColStruct.tokenFlag = true;
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 100 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 8 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       strcpy( (char*)dctnryTuple.sigValue, "ABCD 12345" );
 | |
|       dctnryTuple.sigSize = 10; 
 | |
|       rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple );
 | |
|       if (rc!= NO_ERROR)
 | |
|        printf("1197 Tokenize failed, rc %i\n",rc);  
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       curTuple.data = dctnryTuple.token;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       Token test1;
 | |
|       test1 = boost::any_cast<Token>( curTuple.data );
 | |
| //      printf( "\ncurTuple.datatype = %d\n", curTuple.data.type() );
 | |
| 
 | |
|       strcpy( (char*)dctnryTuple.sigValue, "CBED 1334678" );
 | |
|       dctnryTuple.sigSize = 12; 
 | |
|       rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple );
 | |
|       if (rc!= NO_ERROR)
 | |
|        printf("1208 Tokenize failed, rc %i\n",rc); 
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       curTuple.data = dctnryTuple.token;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       strcpy( (char*)dctnryTuple.sigValue, "GHED 2334" );
 | |
|       dctnryTuple.sigSize = 9; 
 | |
|       rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple ); 
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       curTuple.data = dctnryTuple.token;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList[0] == 0 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 1 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 2 );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       CPPUNIT_ASSERT( ridList[0] == 3 );
 | |
|       CPPUNIT_ASSERT( ridList[1] == 4 );
 | |
|       CPPUNIT_ASSERT( ridList[2] == 5 );
 | |
| 
 | |
|       m_wrapper.dropStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|    }
 | |
| 
 | |
|    void testInterfaceCreateIndex() {
 | |
|       int         rc;
 | |
|       ColumnOp    colOp;
 | |
| 
 | |
|       if( colOp.exists( 900 ) ) {
 | |
|          rc = m_wrapper.dropIndex( m_session.txnid, 900, 901 );
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       }
 | |
| 
 | |
|       rc = m_wrapper.createIndex( m_session.txnid, 900, 901 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceDropIndex() {
 | |
|       int         rc;
 | |
| 
 | |
|       rc = m_wrapper.dropIndex( m_session.txnid, 900, 901 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void SetIndexStruct( IdxStruct& curStruct, OID treeOid, OID listOid, int width, CalpontSystemCatalog::ColDataType dataType )
 | |
|    {
 | |
|       curStruct.treeOid = treeOid;
 | |
|       curStruct.listOid = listOid;
 | |
|       curStruct.idxWidth = width;
 | |
|       curStruct.idxDataType = dataType;
 | |
|       curStruct.tokenFlag = false;
 | |
|    }
 | |
| 
 | |
|    void testInterfaceUpdateIndexChar() {
 | |
|       IdxStruct               curStruct, testStruct;
 | |
|       IdxTuple                curTuple, testTuple;
 | |
|       IdxTupleList            curTupleList, testTupleList;
 | |
|       IdxStructList           idxStructList;
 | |
|       IdxValueList            idxValueList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     total, rc;
 | |
| 
 | |
|       testInterfaceCreateIndex();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.updateIndexRec( m_session.txnid, idxStructList, idxValueList, ridList ) != NO_ERROR );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetIndexStruct( curStruct, 900, 901, 4, WriteEngine::MEDINT );
 | |
|       idxStructList.push_back( curStruct );
 | |
| 
 | |
|       testStruct = idxStructList[0];
 | |
|       CPPUNIT_ASSERT( testStruct.treeOid == 900 );
 | |
|       CPPUNIT_ASSERT( testStruct.listOid == 901 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxDataType == WriteEngine::MEDINT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // add values for the first index
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 200;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       idxValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 15 );
 | |
|       ridList.push_back( (RID) 16 );
 | |
|       ridList.push_back( (RID) 17 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<IdxTupleList>(idxValueList[0]);
 | |
|       total = testTupleList.size();
 | |
| 
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 102 );
 | |
| 
 | |
|       testTuple = testTupleList[3];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 0 );
 | |
| 
 | |
|       testTuple = testTupleList[4];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 200 );
 | |
| 
 | |
|       rc = m_wrapper.updateIndexRec( m_session.txnid, idxStructList, idxValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
| //      CPPUNIT_ASSERT( m_wrapper.deleteIndexRec( idxStructList, idxValueList, ridList ) == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceUpdateMultiColIndex() {
 | |
|       IdxStruct               curStruct, testStruct;
 | |
|       IdxTuple                curTuple, testTuple;
 | |
|       IdxTupleList            curTupleList, testTupleList;
 | |
|       IdxStructList           idxStructList;
 | |
|       IdxValueList            idxValueList;
 | |
|       RIDList                 ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     total, rc;
 | |
| 
 | |
|       testInterfaceCreateIndex();
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.updateIndexRec( m_session.txnid, idxStructList, idxValueList, ridList ) != NO_ERROR );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetIndexStruct( curStruct, 900, 901, 4, WriteEngine::MEDINT );
 | |
|       idxStructList.push_back( curStruct );
 | |
| 
 | |
|       SetIndexStruct( curStruct, 900, 901, 2, WriteEngine::SMALLINT );
 | |
|       idxStructList.push_back( curStruct );
 | |
| 
 | |
|       testStruct = idxStructList[0];
 | |
|       CPPUNIT_ASSERT( testStruct.treeOid == 900 );
 | |
|       CPPUNIT_ASSERT( testStruct.listOid == 901 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxDataType == WriteEngine::MEDINT );
 | |
| 
 | |
|       testStruct = idxStructList[1];
 | |
|       CPPUNIT_ASSERT( testStruct.treeOid == 900 );
 | |
|       CPPUNIT_ASSERT( testStruct.listOid == 901 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxWidth == 2 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxDataType == WriteEngine::SMALLINT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // add values for the first index
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 0;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = 200;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       idxValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second index
 | |
|       curTuple.data = (short)1;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (short)2;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curTuple.data = (short)3;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       idxValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == ERR_ROWID_VALUE_NOT_MATCH );
 | |
|       ridList.push_back( (RID) 9 );
 | |
|       ridList.push_back( (RID) 10 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<IdxTupleList>(idxValueList[0]);
 | |
|       total = testTupleList.size();
 | |
| 
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 102 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 0 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 200 );
 | |
| 
 | |
|       // second column
 | |
|       testTupleList = static_cast<IdxTupleList>(idxValueList[1]);
 | |
|       total = testTupleList.size();
 | |
| 
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 1 );
 | |
| 
 | |
|       testTuple = testTupleList[1];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 2 );
 | |
| 
 | |
|       testTuple = testTupleList[2];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<short>( testTuple.data ) == 3 );
 | |
| 
 | |
|       rc = m_wrapper.processMultiColIndexRec( m_session.txnid, idxStructList, idxValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|    }
 | |
| 
 | |
|    void testInterfaceDeleteIndexChar() {
 | |
|       IdxStruct               curStruct, testStruct;
 | |
|       IdxTuple                curTuple, testTuple;
 | |
|       IdxTupleList            curTupleList, testTupleList;
 | |
|       std::vector<IdxStruct>  idxStructList;
 | |
|       std::vector<IdxTupleList> idxValueList;
 | |
|       std::vector<RID>        ridList;
 | |
|       std::string             curStr, testStr;
 | |
|       int                     total;
 | |
| 
 | |
|       // test column struct list
 | |
|       SetIndexStruct( curStruct, 900, 901, 4, WriteEngine::MEDINT );
 | |
|       idxStructList.push_back( curStruct );
 | |
| 
 | |
|       testStruct = idxStructList[0];
 | |
|       CPPUNIT_ASSERT( testStruct.treeOid == 900 );
 | |
|       CPPUNIT_ASSERT( testStruct.listOid == 901 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testStruct.idxDataType == WriteEngine::MEDINT );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // add values for the first index
 | |
|       curTuple.data = 102;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       idxValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add one rowId
 | |
|       ridList.push_back( (RID) 5 );
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkIndexValid( m_session.txnid, idxStructList, idxValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       // retrieve the values back
 | |
|       // first column
 | |
|       testTupleList = static_cast<IdxTupleList>(idxValueList[0]);
 | |
|       total = testTupleList.size();
 | |
| 
 | |
|       testTuple = testTupleList[0];
 | |
|       CPPUNIT_ASSERT( boost::any_cast<int>( testTuple.data ) == 102 );
 | |
| 
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.deleteIndexRec( m_session.txnid, idxStructList, idxValueList, ridList ) == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceDctnryToken() {
 | |
| /*
 | |
|       int           rc;
 | |
|       OID           dctnryOID=880, treeOID=881, listOID=882;
 | |
|       DctnryTuple   dctnryTuple;
 | |
|       DctnryStruct  dctnryStruct;
 | |
|       
 | |
|       printf("Running testInterfaceDctnryToken\n");
 | |
|       memset(&dctnryTuple, 0, sizeof(dctnryTuple));
 | |
|       memset(&dctnryStruct,0, sizeof(dctnryStruct));
 | |
|       
 | |
|       dctnryStruct.dctnryOid = dctnryOID;
 | |
|       dctnryStruct.treeOid   = treeOID;
 | |
|       dctnryStruct.listOid   = listOID;
 | |
| 
 | |
|       BRMWrapper::setUseBrm(true);
 | |
|       m_wrapper.dropStore( m_session.txnid, dctnryOID, treeOID, listOID);   
 | |
|       rc = m_wrapper.createStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       rc = m_wrapper.openStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       
 | |
|        Token token[17], token2[17];
 | |
|        memset(token, 0,  17*sizeof(Token));
 | |
|        memset(token2, 0, 17*sizeof(Token));
 | |
|        int i,j,k,smallSize=1000;
 | |
|        j=255;
 | |
|        for (k=1; k<17; k++)
 | |
|        {
 | |
|          for (i=0; i<smallSize; i++)
 | |
|          {
 | |
|           if (j==0)
 | |
|            j=255;           
 | |
|           dctnryTuple.sigValue[i]=k;
 | |
|           j--;          
 | |
|          }
 | |
|          dctnryTuple.token.fbo=(uint64_t)-1;
 | |
|          dctnryTuple.token.op =(int)-1;
 | |
|          dctnryTuple.sigSize = smallSize;         
 | |
|          rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple); 
 | |
|          if (rc!= NO_ERROR)
 | |
|          {
 | |
|           printf("1219.Tokenize failed ERROR CODE : %i k %i\n", rc , k); 
 | |
|           return;       
 | |
|          }
 | |
|          else
 | |
|          {
 | |
|             printf("fbo %llu op %i\n",dctnryTuple.token.fbo,dctnryTuple.token.op);
 | |
|          }
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|          if ((dctnryTuple.token.fbo ==(uint64_t)-1) ||(dctnryTuple.token.op==(int)-1))
 | |
|          {
 | |
|            printf("1440.Tokenize failed ERROR CODE : %i k %i\n", rc , k); 
 | |
|           return; 
 | |
|          }
 | |
|          token[k].fbo = dctnryTuple.token.fbo;
 | |
|          token[k].op = dctnryTuple.token.op;
 | |
|                  
 | |
|          rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple);       
 | |
|          if (rc!= NO_ERROR)
 | |
|          {
 | |
|           printf("k %i \n", k);
 | |
|           printf("1227.Second time tokenize failed ERROR CODE : %i \n", rc); 
 | |
|           return;       
 | |
|          }
 | |
|          else
 | |
|          {
 | |
|            printf("Second tiem fbo %llu op %i\n",dctnryTuple.token.fbo,dctnryTuple.token.op);
 | |
|          }
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|          token2[k].fbo = dctnryTuple.token.fbo;
 | |
|          token2[k].op  = dctnryTuple.token.op;
 | |
|        } 
 | |
|        m_wrapper.closeStore( m_session.txnid );
 | |
|        for (int i=0; i< 17; i++) 
 | |
|        {
 | |
|          //CPPUNIT_ASSERT(token[i].fbo == token2[i].fbo);
 | |
|          CPPUNIT_ASSERT(token[i].op  == token2[i].op);
 | |
|          rc = m_wrapper.deleteToken( m_session.txnid, dctnryStruct, token[i]);
 | |
|          if (i==0)
 | |
|           CPPUNIT_ASSERT( rc != NO_ERROR );
 | |
|          else
 | |
|           CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|        }    
 | |
| 
 | |
|       BRMWrapper::setUseBrm( true );
 | |
| 
 | |
|        m_wrapper.openStore( m_session.txnid, dctnryOID, treeOID, listOID);   
 | |
|        rc = m_wrapper.tokenize( m_session.txnid, dctnryStruct,dctnryTuple);
 | |
|       printf("rc %i \n", rc);
 | |
|       rc = m_wrapper.rollbackTran(m_session.txnid);
 | |
|       printf("This is rollback rc %i \n", rc);
 | |
|       rc = m_wrapper.tokenize( m_session.txnid, dctnryStruct,dctnryTuple);
 | |
|       printf("This is after rollback tokenize rc %i \n", rc);
 | |
|       cout << "fbo " << dctnryTuple.token.fbo << " op " << dctnryTuple.token.op << endl;
 | |
|       m_wrapper.closeStore( m_session.txnid );
 | |
|      // rc = m_wrapper.dropStore( m_session.txnid, dctnryOID, treeOID, listOID);   
 | |
|      // CPPUNIT_ASSERT( rc == NO_ERROR );       
 | |
| */
 | |
|    }
 | |
|    void testInterfaceDctnryTokenRollBack() {
 | |
| /*
 | |
|       int           rc;
 | |
|       OID           dctnryOID=850, treeOID=851, listOID=852;
 | |
|       DctnryTuple   dctnryTuple;
 | |
|       DctnryStruct  dctnryStruct;
 | |
|       m_session.txnid =100;
 | |
|       BRMWrapper::setUseBrm(true);
 | |
|       printf("Running testInterfaceDctnryTokenRollBack\n");
 | |
|       memset(&dctnryTuple, 0, sizeof(dctnryTuple));
 | |
|       memset(&dctnryStruct,0, sizeof(dctnryStruct));
 | |
|       
 | |
|       dctnryStruct.dctnryOid = dctnryOID;
 | |
|       dctnryStruct.treeOid   = treeOID;
 | |
|       dctnryStruct.listOid   = listOID;
 | |
| 
 | |
| //      BRMWrapper::setUseBrm(true);
 | |
|       m_wrapper.dropStore( m_session.txnid, dctnryOID, treeOID, listOID );
 | |
|       rc = m_wrapper.createStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       rc = m_wrapper.openStore( m_session.txnid, dctnryOID, treeOID, listOID);
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       
 | |
|        Token token[17], token2[17];
 | |
|        memset(token, 0,  17*sizeof(Token));
 | |
|        memset(token2, 0, 17*sizeof(Token));
 | |
|        
 | |
|        int i,j,k,smallSize=10;
 | |
|        j=255;
 | |
|        for (k=1; k<2; k++)
 | |
|        {
 | |
|          for (i=0; i<smallSize; i++)
 | |
|          {
 | |
|           if (j==0)
 | |
|            j=255;           
 | |
|           dctnryTuple.sigValue[i]=k;
 | |
|           j--;          
 | |
|          }
 | |
|          dctnryTuple.token.fbo=(uint64_t)-1;
 | |
|          dctnryTuple.token.op =(int)-1;
 | |
|          dctnryTuple.sigSize = smallSize;     
 | |
|              
 | |
|          rc = m_wrapper.tokenize( m_session.txnid, dctnryTuple); 
 | |
|          if (rc!= NO_ERROR)
 | |
|          {
 | |
|           printf("1529.Tokenize failed ERROR CODE : %i k %i\n", rc , k); 
 | |
|           return;       
 | |
|          }
 | |
|          else
 | |
|          {
 | |
|             printf("fbo %llu op %i\n",dctnryTuple.token.fbo,dctnryTuple.token.op);
 | |
|          }
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|          if ((dctnryTuple.token.fbo ==(uint64_t)-1) ||(dctnryTuple.token.op==(int)-1))
 | |
|          {
 | |
|            printf("1440.Tokenize failed ERROR CODE : %i k %i\n", rc , k); 
 | |
|           return; 
 | |
|          }
 | |
|         
 | |
|        } 
 | |
|     
 | |
|       rc = m_wrapper.rollbackTran(m_session.txnid );
 | |
|       m_wrapper.closeStore( m_session.txnid );
 | |
| */
 | |
|    }
 | |
| 
 | |
|    void testInsertCommitRollback() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       string                  curString;
 | |
|       int                     rc;
 | |
|       ColumnOp                colOp;
 | |
| 
 | |
|       BRMWrapper::setUseBrm( true );
 | |
|       // test column struct list
 | |
|       CreateColumnFile( 150, 4, WriteEngine::CHAR, WriteEngine::WR_CHAR );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 150, 4, WriteEngine::CHAR );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 150 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::CHAR );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       curString = "ab1";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "ab2";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       // try to insert more rows and row id should increase
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.commit( m_session.txnid );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       // txnid increase by one
 | |
|       m_session.txnid++;
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curString = "bb1";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "bb2";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.commit( m_session.txnid );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
| 
 | |
|       // txnid increase by one
 | |
|       m_session.txnid++;
 | |
| 
 | |
|       colValueList.clear();
 | |
|       curString = "cb1";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       curString = "cb2";
 | |
|       curTuple.data = curString;
 | |
|       curTupleList.push_back( curTuple );
 | |
| 
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = m_wrapper.rollbackTran( m_session.txnid );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|    }
 | |
| 
 | |
|    void testInterfaceInsertRowHwm() {
 | |
|       ColStruct               curColStruct, testColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
|       int                     rc;
 | |
|       ColumnOp                colOp;
 | |
| 
 | |
|       CreateColumnFile( 300, 1, WriteEngine::TINYINT, WriteEngine::WR_BYTE );
 | |
|       CreateColumnFile( 400, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 300, 1, WriteEngine::TINYINT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       SetColumnStruct( curColStruct, 400, 4, WriteEngine::INT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       testColStruct = colStructList[0];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 300 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 1 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::TINYINT );
 | |
| 
 | |
|       testColStruct = colStructList[1];
 | |
|       CPPUNIT_ASSERT( testColStruct.dataOid == 400 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colWidth == 4 );
 | |
|       CPPUNIT_ASSERT( testColStruct.colDataType == WriteEngine::INT );
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       // test column values
 | |
|       // add values for the first column
 | |
|       for( int i = 0; i < 9000; i++ ) {
 | |
|          curTuple.data = (char)(i%20);
 | |
|          curTupleList.push_back( curTuple );
 | |
|       }
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       curTupleList.clear();
 | |
| 
 | |
|       // add values for the second column
 | |
|       for( int i = 0; i < 9000; i++ ) {
 | |
|          curTuple.data = i;
 | |
|          curTupleList.push_back( curTuple );
 | |
|       }
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
| //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT( ridList.size() == 9000 );
 | |
|    }
 | |
| 
 | |
| 
 | |
|    void testInterfaceCombineIndexLoad() {
 | |
|       int                     rc;
 | |
|       ColumnOp                colOp;
 | |
|       ColStruct               curColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
| 
 | |
|       Cache::init();
 | |
|       Cache::setUseCache( true );
 | |
| 
 | |
|       m_wrapper.setDebugLevel( DEBUG_0 );
 | |
| 
 | |
|       colOp.dropColumn( 400 );
 | |
|       CreateColumnFile( 400, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 400, 4, WriteEngine::INT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       curTupleList.clear();
 | |
|       int totalValue = 2000000;
 | |
|       // add values for the first column
 | |
|       for( int i = 0; i < totalValue; i++ ) {
 | |
|          curTuple.data = rand() % 100;
 | |
|          curTupleList.push_back( curTuple );
 | |
|       }
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT(  (int)ridList.size() == totalValue );
 | |
| 
 | |
|       if( colOp.exists( 900 ) ) {
 | |
|          rc = m_wrapper.dropIndex( m_session.txnid, 900, 901 );
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       }
 | |
| 
 | |
|       rc = m_wrapper.createIndex( m_session.txnid, 900, 901 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       uint64_t totalRows;
 | |
|       rc = m_wrapper.buildIndex( 400, 900, 901, INT, 4, 0, true, totalRows );
 | |
|       printf( "\nrc=%d", rc );
 | |
|       printf( "\ntotalRows=%llu", totalRows );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       Cache::freeMemory();
 | |
|    }
 | |
| 
 | |
|    void testTmpBulkPerformance() {
 | |
|       int                     rc;
 | |
|       ColumnOp                colOp;
 | |
|       ColStruct               curColStruct;
 | |
|       ColTuple                curTuple, testTuple;
 | |
|       ColTupleList            curTupleList, testTupleList;
 | |
|       ColStructList           colStructList;
 | |
|       ColValueList            colValueList, colOldValList;
 | |
|       RIDList                 ridList;
 | |
| 
 | |
|       Cache::init();
 | |
|       Cache::setUseCache( true );
 | |
| 
 | |
|       m_wrapper.setDebugLevel( DEBUG_0 );
 | |
| 
 | |
| /*      colOp.dropColumn( 400 );
 | |
|       CreateColumnFile( 400, 4, WriteEngine::INT, WriteEngine::WR_INT );
 | |
| 
 | |
|       // test column struct list
 | |
|       SetColumnStruct( curColStruct, 400, 4, WriteEngine::INT );
 | |
|       colStructList.push_back( curColStruct );
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == ERR_STRUCT_VALUE_NOT_MATCH );
 | |
| 
 | |
|       curTupleList.clear();
 | |
|       int totalValue = 2000000;
 | |
|       // add values for the first column
 | |
|       for( int i = 0; i < totalValue; i++ ) {
 | |
|          curTuple.data = rand() % 100;
 | |
|          curTupleList.push_back( curTuple );
 | |
|       }
 | |
|       colValueList.push_back( curTupleList );
 | |
| 
 | |
|       CPPUNIT_ASSERT( m_wrapper.checkValid( m_session.txnid, colStructList, colValueList, ridList ) == NO_ERROR );
 | |
| 
 | |
|       //      m_wrapper.printInputValue( (OID)103, colStructList, colValueList, ridList );
 | |
|       rc = m_wrapper.insertColumnRec( m_session.txnid, colStructList, colValueList, ridList );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       CPPUNIT_ASSERT(  (int)ridList.size() == totalValue );
 | |
| */
 | |
| 
 | |
|       if( colOp.exists( 900 ) ) {
 | |
|          rc = m_wrapper.dropIndex( m_session.txnid, 900, 901 );
 | |
|          CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       }
 | |
| 
 | |
|       rc = m_wrapper.createIndex( m_session.txnid, 900, 901 );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       uint64_t totalRows;
 | |
|       std::string indexName;
 | |
|       rc = m_wrapper.buildIndex( "CPL_299_23839.dat", 900, 901, INT, 4, 0, false, totalRows , indexName, 0, 2000000 );
 | |
|       printf( "\nrc=%d", rc );
 | |
|       printf( "\ntotalRows=%llu", totalRows );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       Cache::freeMemory();
 | |
|    }
 | |
| void testBoostFloat()
 | |
| {
 | |
|    boost::any anyVal;
 | |
|    
 | |
|    unsigned int      fValue =0xffaaaaaa;
 | |
|    unsigned int      testfValue;
 | |
|    unsigned int      testfValue2;
 | |
|   
 | |
|    float             fValue1 = 0xffaaaaaa;
 | |
|    float             testfValue11 =0 ;
 | |
|    float             testfValue12 =0;
 | |
|    int               iSize = 0;
 | |
|    char              charBuf[100];
 | |
|    FILE*             pFile;
 | |
|    
 | |
|    ColumnOp          colOp;
 | |
|    Column            curCol;
 | |
|    int               rc;
 | |
|    RID               rowIdArray[3];
 | |
|    int               width = 4, totalRow = 3;
 | |
|    FID               fid = 800;
 | |
|    float             valArray[3];
 | |
|    uint64_t          oldValArray[3];
 | |
|    CalpontSystemCatalog::ColDataType       colDataType = CalpontSystemCatalog::FLOAT;
 | |
|    ColType           colType = WriteEngine::WR_FLOAT;
 | |
|    //uint64_t          emptyVal = 0xFFAAAAAB;
 | |
|    
 | |
|  
 | |
| 
 | |
|  
 | |
|       rowIdArray[0] = 0;
 | |
|       rowIdArray[1] = 1;
 | |
|       rowIdArray[2] = 2;
 | |
| 
 | |
|       valArray[0] = 8.123;
 | |
|       valArray[1] = 5.345;
 | |
|       valArray[2] = 3.789;
 | |
| 
 | |
|       CreateColumnFile( fid, width, colDataType, colType );
 | |
| 
 | |
|       colOp.initColumn( curCol );
 | |
|       colOp.setColParam( curCol, 2, width, colDataType, colType, fid );
 | |
|       rc = colOp.openColumnFile( curCol );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
| 
 | |
|       rc = colOp.writeRow( curCol, totalRow, (RID*) rowIdArray, valArray, oldValArray );
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       for( int i = 0; i < totalRow; i++ )
 | |
|          cout<< "emptyVal=" << oldValArray[i]<< endl;
 | |
| 
 | |
|       colOp.closeFile(curCol.dataFile.pFile);
 | |
|       pFile = fopen( "/home/jhuang/tmp/000.dir/000.dir/003.dir/FILE032.cdf", "r" );
 | |
|       iSize = fread( charBuf, 1, 4, pFile );
 | |
|       memcpy(&testfValue12, charBuf, 4);
 | |
|       cout << "Value1=" << testfValue12 << endl;
 | |
|       iSize = fread( charBuf, 1, 4, pFile );
 | |
|       memcpy(&testfValue12, charBuf, 4);
 | |
|       cout << "Value2=" << testfValue12 << endl;
 | |
|       iSize = fread( charBuf, 1, 4, pFile );
 | |
|       memcpy(&testfValue12, charBuf, 4);
 | |
|       cout << "Value3=" << testfValue12 << endl;
 | |
|       fclose(pFile);
 | |
|   
 | |
|    anyVal = fValue1;
 | |
|    testfValue11 = boost::any_cast<float>( anyVal );   
 | |
|    memcpy(charBuf, &testfValue11, 4);
 | |
|    pFile = fopen( "test", "w+b" );
 | |
|    if( pFile != NULL ) {
 | |
|       iSize = fwrite((char*) charBuf, 4, 1, pFile );
 | |
|       printf( "\niSize=%d \n", iSize );
 | |
|       fclose( pFile );
 | |
|    }
 | |
|    unsigned char charBuf2[100];
 | |
|    memset(charBuf2,'\0', 100);
 | |
|    pFile = fopen("test","r");
 | |
|    iSize = fread( charBuf2, 4, 1, pFile );
 | |
|    memcpy(&testfValue12, charBuf2, 4);
 | |
|    
 | |
|    cout << " Using Float, NULL value=" << testfValue12 << endl;
 | |
|    
 | |
|    anyVal = fValue;
 | |
|    testfValue = boost::any_cast<unsigned int>( anyVal );   
 | |
|    memcpy(charBuf, &testfValue, 4);
 | |
|    pFile = fopen( "test", "w+b" );
 | |
|    if( pFile != NULL ) {
 | |
|       iSize = fwrite((char*) charBuf, 4, 1, pFile );
 | |
|       printf( "\niSize=%d \n", iSize );
 | |
|       fclose( pFile );
 | |
|    }
 | |
|    memset(charBuf2,'\0', 100);
 | |
|    pFile = fopen("test","r");
 | |
|    iSize = fread( charBuf2, 4, 1, pFile );
 | |
|    memcpy(&testfValue2, charBuf2, 4);
 | |
|    cout << " Using unsinged int, NULL value=" << testfValue2 << endl;
 | |
| 
 | |
|    // Other method
 | |
|    
 | |
|    anyVal = fValue;
 | |
|    testfValue = boost::any_cast<unsigned int>( anyVal );  
 | |
|    ofstream fout("file.dat", ios::binary);
 | |
|    fout.write((char *)(&testfValue), sizeof(testfValue));
 | |
|    fout.close();
 | |
|    
 | |
|    ifstream fin("file.dat", ios::binary);
 | |
|    fin.read((char *)(&testfValue2), sizeof(testfValue2));
 | |
|    cout << "Using unsigned int NULL value="<< testfValue2 << endl; 
 | |
|    
 | |
| }
 | |
|    void testCreateColumnFiles1() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
|       OID      fid = 10;
 | |
|       
 | |
|       m_session.txnid++;
 | |
|       // file opertaions
 | |
|       
 | |
|       //colOp.startfTimer();
 | |
|       colOp.initColumn( curCol );
 | |
|       rc = colOp.createColumn( curCol, 0, 8, WriteEngine::CHAR, WriteEngine::WR_CHAR, (FID)fid );
 | |
|       //colOp.stopfTimer();
 | |
|       colOp.clearColumn( curCol );
 | |
|       //rc = m_wrapper.createColumn( m_session.txnid, fid, WriteEngine::CHAR, 8);
 | |
|       
 | |
|       //cout<< "total run time for 1th column we_char size=8 -> " << colOp.getTotalfRunTime() << " msec"<< endl;
 | |
|       colOp.deleteFile( fid);
 | |
|       sleep(3);
 | |
|    }
 | |
| 
 | |
|    void testCreateColumnFiles2() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
|       OID      fid = 20;
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       // file opertaions
 | |
|       
 | |
|       //colOp.startfTimer();
 | |
|       colOp.initColumn( curCol );
 | |
|       rc = colOp.createColumn( curCol, 0, 4, WriteEngine::INT, WriteEngine::WR_CHAR, (FID)fid );
 | |
|       //colOp.stopfTimer();
 | |
|       colOp.clearColumn( curCol );
 | |
|       //rc = m_wrapper.createColumn( m_session.txnid, fid, WriteEngine::INT, 4);
 | |
|       //colOp.stopfTimer();
 | |
|       //cout<< "total run time for 2th column we_int size=4 -> " << colOp.getTotalfRunTime() << " msec"<< endl;
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       colOp.deleteFile( fid);
 | |
|       sleep(5);
 | |
|    }
 | |
|    void testCreateColumnFiles3() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
|       OID      fid = 30;
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       // file opertaions
 | |
|       
 | |
|       //colOp.startfTimer();
 | |
|       colOp.initColumn( curCol );
 | |
|       rc = colOp.createColumn( curCol, 0, 4, WriteEngine::CHAR, WriteEngine::WR_CHAR, (FID)fid );
 | |
|       colOp.clearColumn( curCol );
 | |
|       //colOp.stopfTimer();
 | |
|       //rc = m_wrapper.createColumn( m_session.txnid, fid, WriteEngine::CHAR, 4);
 | |
|       //colOp.stopfTimer();
 | |
|       //cout<< "total run time for 3th column we_char size=4 -> " << colOp.getTotalfRunTime() << " msec"<< endl;
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       colOp.deleteFile( fid);
 | |
|       sleep(3);
 | |
|    }
 | |
|    void testCreateColumnFiles4() {
 | |
|       ColumnOp colOp;
 | |
|       Column   curCol;
 | |
|       int      rc;
 | |
|       OID      fid = 40;
 | |
| 
 | |
|       m_session.txnid++;
 | |
|       // file opertaions
 | |
|       
 | |
|       //colOp.startfTimer();
 | |
|       colOp.initColumn( curCol );
 | |
|       rc = colOp.createColumn( curCol, 0, 2, WriteEngine::SMALLINT, WriteEngine::WR_CHAR, (FID)fid );
 | |
|       colOp.clearColumn( curCol );
 | |
|       //rc = m_wrapper.createColumn( m_session.txnid, fid, WriteEngine::SMALLINT, 2 );
 | |
|       //colOp.stopfTimer();
 | |
|       //cout<< "total run time for 4th column we_smallint size=2 -> " << colOp.getTotalfRunTime() << " msec"<< endl;
 | |
|       CPPUNIT_ASSERT( rc == NO_ERROR );
 | |
|       colOp.deleteFile( fid);
 | |
|    }
 | |
|    void testCreateFileMultipleBF() 
 | |
|    {
 | |
|      FileOp fileop;
 | |
|      ColumnOp colOp;
 | |
|      char  fileName[FILE_NAME_SIZE];
 | |
|      int   rc, numOfBlock=8192,allocSize=8192;
 | |
|      FILE* pFile;
 | |
|      int t_diff;                   
 | |
|      struct timeb   t_start, t_current;   
 | |
| 
 | |
|      
 | |
|      OID fid=600;
 | |
|      uint64_t emptyVal = 0;
 | |
|      int width =4;
 | |
|          
 | |
|      rc = fileop.oid2FileName( fid, fileName, true ) ;
 | |
|      emptyVal = colOp.getEmptyRowValue( WriteEngine::INT, width);
 | |
|      int multiple=1;
 | |
|      int writeSize = multiple* BYTE_PER_BLOCK;      
 | |
|      unsigned char  writeBuf[writeSize];     
 | |
|      BRMWrapper::getInstance()->allocateExtent( (const OID)fid, numOfBlock, allocSize );
 | |
|      
 | |
|      pFile = fopen( fileName, "w+b" );
 | |
|      if( pFile != NULL ) {
 | |
|          fileop.setEmptyBuf( writeBuf, writeSize , emptyVal, width );
 | |
|          //setvbuf(pFile , NULL, _IONBF, 0 );
 | |
|          int loopSize = numOfBlock/multiple;
 | |
|          ftime(&t_start);
 | |
|          for( int i = 0; i < loopSize; i++ )
 | |
|          {
 | |
|             fwrite( writeBuf, writeSize, 1, pFile );           
 | |
|          }
 | |
|          ftime(&t_current);
 | |
|          t_diff= (int) (1000.0 * (t_current.time - t_start.time)+ 
 | |
|                                      (t_current.millitm - t_start.millitm));
 | |
|          cout<< "total run time for create file 64MB with writesize= " << writeSize << " byte" << "loop size="
 | |
|          << loopSize << " times" << " Time for Multiple Write 64MB with Buffer->we_int size=4 -> " << t_diff << " msec"<< endl;
 | |
| 
 | |
|          fileop.closeFile( pFile );
 | |
|      }
 | |
|           colOp.deleteFile( fid);
 | |
|    }
 | |
|    void testCreateFilelargerBF()
 | |
|    {
 | |
|      FileOp fileop;
 | |
|      ColumnOp colOp;
 | |
|      char  fileName[FILE_NAME_SIZE];
 | |
|      int   rc, numOfBlock=8192,allocSize=8192;
 | |
|      FILE* pFile;
 | |
| 
 | |
|      int t_diff;
 | |
|      struct timeb   t_start, t_current;
 | |
| 
 | |
| 
 | |
|      OID fid=1600;
 | |
|      uint64_t emptyVal = 0;
 | |
|      int width =4;
 | |
| 
 | |
|      rc = fileop.oid2FileName( fid, fileName, true ) ;
 | |
|      emptyVal = colOp.getEmptyRowValue( WriteEngine::INT, width);
 | |
|      int multiple=1;
 | |
|      int writeSize = multiple* BYTE_PER_BLOCK;
 | |
|      unsigned char  writeBuf[writeSize];
 | |
|      BRMWrapper::getInstance()->allocateExtent( (const OID)fid, numOfBlock, allocSize );
 | |
| 
 | |
|      pFile = fopen( fileName, "w+b" );
 | |
|      if( pFile != NULL ) {
 | |
|          fileop.setEmptyBuf( writeBuf, writeSize , emptyVal, width );
 | |
|          
 | |
|          setvbuf(pFile , NULL, _IOFBF, DEFAULT_BUFSIZ);
 | |
|          //setvbuf(pFile , (char*)writeBuf, _IOFBF, writeSize/*DEFAULT_WRITE_BUFSIZE*/);
 | |
|          int loopSize = allocSize/multiple;
 | |
|          ftime(&t_start);
 | |
|          for( int i = 0; i < loopSize; i++ )
 | |
|          {
 | |
|             fwrite( writeBuf, writeSize, 1, pFile );
 | |
|          }
 | |
|          ftime(&t_current);
 | |
|          t_diff= (int) (1000.0 * (t_current.time - t_start.time)+
 | |
|                                      (t_current.millitm - t_start.millitm));
 | |
|          cout<<"Buffer size =" << DEFAULT_BUFSIZ << endl;
 | |
|          cout<< "total run time for create file 64MB with writesize= " << writeSize << " byte" << "loop size="
 | |
|          << loopSize << " times" << " Time for Multiple Write 64MB with Buffer->we_int size=4 -> " << t_diff << " msec"<< endl;
 | |
| 
 | |
|          fileop.closeFile( pFile );
 | |
|      }
 | |
|           colOp.deleteFile( fid);
 | |
|    }
 | |
| 
 | |
|    void testCreateFileMultipleIONBF() 
 | |
|    {
 | |
|      FileOp fileop;
 | |
|      ColumnOp colOp;
 | |
|      char  fileName[FILE_NAME_SIZE];
 | |
|      int   rc, numOfBlock=8192,allocSize=8192;
 | |
|      FILE* pFile;
 | |
|      int t_diff;                   
 | |
|      struct timeb   t_start, t_current;   
 | |
| 
 | |
|      
 | |
|      OID fid=400;
 | |
|      uint64_t emptyVal = 0;
 | |
|      int width =4;
 | |
|          
 | |
|      rc = fileop.oid2FileName( fid, fileName, true ) ;
 | |
|      emptyVal = colOp.getEmptyRowValue( WriteEngine::INT, width);
 | |
|      int multiple=128;
 | |
|      int writeSize = multiple* BYTE_PER_BLOCK;      
 | |
|      unsigned char  writeBuf[writeSize];     
 | |
|      BRMWrapper::getInstance()->allocateExtent( (const OID)fid, numOfBlock, allocSize );
 | |
|      
 | |
|      pFile = fopen( fileName, "w+b" );
 | |
|      if( pFile != NULL ) {
 | |
|          fileop.setEmptyBuf( writeBuf, writeSize , emptyVal, width );
 | |
|          setvbuf(pFile , NULL, _IONBF, 0 );
 | |
|          int loopSize = numOfBlock/multiple;
 | |
|          ftime(&t_start);
 | |
|          for( int i = 0; i < loopSize; i++ )
 | |
|          {
 | |
|             fwrite( writeBuf, writeSize, 1, pFile );           
 | |
|          }
 | |
|          ftime(&t_current);
 | |
|          t_diff= (int) (1000.0 * (t_current.time - t_start.time)+ 
 | |
|                                      (t_current.millitm - t_start.millitm));
 | |
|          cout<< "total run time for create file 64MB with writesize= " << writeSize << " byte" << "loop size="
 | |
|          << loopSize << " times" << " Time for Multiple Write 64MB NO Buffer->we_int size=4 -> " << t_diff << " msec"<< endl;
 | |
| 
 | |
|          fileop.closeFile( pFile );
 | |
|      }
 | |
|           colOp.deleteFile( fid);
 | |
|    }
 | |
|    void testCreateFile64MBIONBF() 
 | |
|    {
 | |
|      FileOp fileop;
 | |
|      ColumnOp colOp;
 | |
|      char  fileName[FILE_NAME_SIZE];
 | |
|      int   rc, numOfBlock=8192,allocSize=8192;
 | |
|      FILE* pFile;
 | |
|      int t_diff;                   
 | |
|      struct timeb   t_start, t_current;   
 | |
| 
 | |
|      OID fid=500;
 | |
|      uint64_t emptyVal = 0;
 | |
|      int width = 4;
 | |
|          
 | |
|      rc = fileop.oid2FileName( fid, fileName, true ) ;
 | |
|      emptyVal = colOp.getEmptyRowValue( WriteEngine::INT, width);
 | |
|      int multiple= 8192;
 | |
|      int writeSize = multiple* BYTE_PER_BLOCK;      
 | |
|      unsigned char*  writeBuf;     
 | |
|      BRMWrapper::getInstance()->allocateExtent( (const OID)fid, numOfBlock, allocSize );
 | |
|      
 | |
|      pFile = fopen( fileName, "w+b" );
 | |
|      if( pFile != NULL ) {
 | |
|          writeBuf = new unsigned char[writeSize];
 | |
|          fileop.setEmptyBuf( writeBuf, writeSize , emptyVal, width );
 | |
|          setvbuf(pFile , NULL, _IONBF, 0 );
 | |
|          
 | |
|          ftime(&t_start);
 | |
|          fwrite( writeBuf, writeSize, 1, pFile );           
 | |
|          ftime(&t_current);
 | |
|          t_diff= (int) (1000.0 * (t_current.time - t_start.time)+ 
 | |
|                                      (t_current.millitm - t_start.millitm));
 | |
| 
 | |
|          cout<< "total run time for create file Single Write 64MB NO Buffer->we_int size=4 -> " << t_diff << " msec"<< endl;
 | |
|          fileop.closeFile( pFile );
 | |
|      }
 | |
|      colOp.deleteFile( fid);
 | |
|    }
 | |
|    void testCreateFileNoBRM() 
 | |
|    {
 | |
|      FileOp fileop;
 | |
|      ColumnOp colOp;
 | |
|      char  fileName[FILE_NAME_SIZE];
 | |
|      int   rc, allocSize=8192;
 | |
|      
 | |
|      OID fid=401;
 | |
|      uint64_t emptyVal = 0;
 | |
|      
 | |
|      
 | |
|      //colOp.deleteFile( fid);
 | |
|      
 | |
|      //cout << "start time=" << colOp.t_start << " msec" << endl;
 | |
|      
 | |
|      rc = fileop.oid2FileName( fid, fileName, true ) ;
 | |
|      emptyVal = colOp.getEmptyRowValue( WriteEngine::INT, 4);
 | |
|      //colOp.startfTimer();
 | |
|      
 | |
|      fileop.createFile( fileName, allocSize, emptyVal, 4 );
 | |
|      //colOp.stopfTimer();
 | |
|      //cout<<"stop time=" << colOp.t_current << " msec"<< endl;
 | |
|      //cout<< "total run time for column NO BRM we_int size=4 -> " << colOp.getTotalfRunTime() << " msec"<< endl;
 | |
|      colOp.deleteFile( fid);
 | |
|      
 | |
|    }
 | |
| 
 | |
|    void testSoloman()
 | |
|    {
 | |
|      char  fileName[80]="/usr/local/mariadb/columnstore/data1/test.dat";
 | |
|      char  outfile[80] = "/usr/local/mariadb/columnstore/data1/out.dat";
 | |
|      int   numOfBlock=8192,blockSize=8192;
 | |
|      FILE* testFile;
 | |
|      FILE* outFile;
 | |
|      int t_diff;
 | |
|      struct timeb   t_start, t_current;
 | |
|      int multiple=numOfBlock;
 | |
|      int writeSize = multiple * blockSize;
 | |
|      unsigned char* writeBuf;
 | |
|      writeBuf = new unsigned char[writeSize];
 | |
|      memset(writeBuf, 0, writeSize);
 | |
|      testFile = fopen( fileName, "w+b" );
 | |
|      outFile = fopen(outfile, "w");
 | |
|      if( testFile != NULL ) {
 | |
|          setvbuf(testFile , (char*)writeBuf, _IOFBF, writeSize);
 | |
|          int loopSize = numOfBlock/multiple;
 | |
|          ftime(&t_start);
 | |
|          for( int i = 0; i < loopSize; i++ )
 | |
|          {
 | |
|             fwrite( writeBuf, writeSize, 1, testFile );
 | |
|          }
 | |
|          ftime(&t_current);
 | |
|          t_diff= (int) (1000.0 * (t_current.time - t_start.time)+
 | |
|                                      (t_current.millitm - t_start.millitm));
 | |
|          char buff[256];
 | |
|          sprintf(buff, " create a 64MB file with writesize= %d byte", writeSize);
 | |
|          fwrite(buff, strlen(buff), 1 ,outFile);
 | |
|          sprintf(buff, " loop size = %d", loopSize);
 | |
|          fwrite(buff, strlen(buff), 1 ,outFile);
 | |
|          sprintf(buff," Time for writing %d = %d msec", writeSize, t_diff);
 | |
|          fwrite(buff, strlen(buff), 1 ,outFile);
 | |
|          fclose( testFile );
 | |
|          fclose( outFile);
 | |
|      }
 | |
|      else
 | |
|          fprintf(outFile,"FILE DOES NOT EXIST: %s", fileName);
 | |
|      delete [] writeBuf;
 | |
| 
 | |
|    }
 | |
| 
 | |
| };
 | |
| 
 | |
| CPPUNIT_TEST_SUITE_REGISTRATION( WriteEngineTest );
 | |
| 
 | |
| #include <cppunit/extensions/TestFactoryRegistry.h>
 | |
| #include <cppunit/ui/text/TestRunner.h>
 | |
| 
 | |
| int main( int argc, char **argv)
 | |
| {
 | |
|   CppUnit::TextUi::TestRunner runner;
 | |
|   CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
 | |
|   runner.addTest( registry.makeTest() );
 | |
|   bool wasSuccessful = runner.run( "", false );
 | |
|   return (wasSuccessful ? 0 : 1);
 | |
| }
 | |
| 
 | |
| 
 |