Пример #1
0
    void DoTest( bool bBinary )
    {
		KLSTD_TRACE0(1, L"Obtaining journal object...\n" );
		
        CAutoPtr<Journal> pJournal;
        KLJRNL_CreateJournal( & pJournal, true );
		
        wstring wstrJrnlPath;
        KLSTD_GetTempFile( wstrJrnlPath );
		
        //wstrJrnlPath = L"c:\\test\\jrnl\\cool.txt";
		
        KLSTD_Unlink( wstrJrnlPath.c_str(), false );
        KLSTD_TRACE1(1, L"Will create journal at \"%s\".\n", wstrJrnlPath.c_str() );
		
        CreationInfo creationInfo;
        creationInfo.bLimitPages = false;
        creationInfo.bBinaryFormat = bBinary;
        creationInfo.pageLimitType = pltRecCount;
        creationInfo.nMaxRecordsInPage = 5;
        creationInfo.bUseRecNumIndex = true;
		
        pJournal->Open( wstrJrnlPath, CF_CREATE_ALWAYS, ACCESS_FLAGS( AF_WRITE | AF_READ ), creationInfo );
		
        CAutoPtr<Params> pParams;
        KLPAR_CreateParams( & pParams );
		
        ADD_PARAMS_VALUE( pParams, L"param0", StringValue, L"agent" );
        ADD_PARAMS_VALUE( pParams, L"param1", StringValue, L"kuku01" );
        ADD_PARAMS_VALUE( pParams, L"param2", BoolValue, false );
		
        Cool cool;
		
        cool.intVal = 1;
        cool.charVal = 'c';
        cool.wstrVal = L"Hello";
        //cool.strVal = "Kuku";
		
        for( int i = 0; i < 22; i++ )
        {
            long nId = pJournal->Add( & cool );
        }
		
        pJournal->Close();
        pJournal->Open( wstrJrnlPath, CF_OPEN_EXISTING, ACCESS_FLAGS( AF_WRITE | AF_READ ), creationInfo );
		
        AVP_longlong llSize = pJournal->GetJournalSize();
        KLSTD_TRACE1( 1, L"Journal size: %d bytes\n", long(llSize) );
		
        pJournal->Flush();
		
        KLSTD_TRACE0( 1, L"Getting records - check MoveToRecordN...\n" );
		
        pJournal->DeleteOlderThanID( 3 );
        pJournal->Flush();
		
        int nRecCount = pJournal->GetRecordCount();
		
        long nTestCount = 0;
        pJournal->MoveToRecordN( 5 );
        while( ! pJournal->IsEOF() )
        {
            long nId;
            Cool cool;
            pJournal->GetCurrent( nId, & cool );
            bool bTest = false;
            if( nId > 11 && nId < 15 )
            {
                cool.strVal = "Hello guys how you doing";
                pJournal->Update( & cool );
            }
            KLSTD_TRACE2( 1, L"Id: %d, data: %S\n", nId, cool.strVal.c_str() );
            nTestCount++;
            pJournal->Next();
        } 
		
        if( nTestCount != 14 )
        {
            KLSTD_TRACE0( 1, L"Error with MoveToRecordN\n" );
            KLSTD_THROW(STDE_BADFORMAT);
        }
		
		
        KLSTD_TRACE0( 1, L"Getting records - check SetIterator...\n" );
        pJournal->SetIterator(3);
		
        long nId;
        nTestCount = 0;
        while( ! pJournal->IsEOF() )
        {
            Cool cool;
            pJournal->GetCurrent( nId, & cool );
            KLSTD_TRACE2( 1, L"Id: %d, data: %S\n", nId, cool.strVal.c_str() );
            pJournal->Next();
            nTestCount++;
        } 
		
        if( nTestCount != 19 )
        {
            KLSTD_TRACE0( 1, L"Error with SetIterator\n" );
            KLSTD_THROW(STDE_BADFORMAT);
        }
        
        KLSTD_TRACE2( 1, L"Journal record count: %d, last id is %d\n", pJournal->GetRecordCount(), nId );
		
        //pJournal->DeleteOlderThanID( 10 );
		
        KLSTD_TRACE1( 1, L"Journal record count: %d\n", pJournal->GetRecordCount() );
		
        pJournal->ResetIterator();
        while( ! pJournal->IsEOF() )
        {
            long nId;
            Cool2 cool2;
            pJournal->GetCurrent( nId, & cool2 );
			
            KLSTD_TRACE2( 1, L"Id: %d, data: %S\n", nId, cool2.str.c_str() );
            pJournal->Next();
        }
		
        pair<long, long> range;
        vector< pair<long, long> > vectRanges;
		
        range.first = 2;
        range.second = 4;
        vectRanges.push_back( range );
		
        range.first = 21;
        range.second = 7;
        vectRanges.push_back( range );
		
		
        pJournal->DeleteRanges( vectRanges );
		
        pJournal->Flush();
		
        pJournal->DeleteAll();
		
        pJournal->DeleteOlderThanID( 10 );
		
        pJournal->CloseAndRemoveFiles();
    }
Пример #2
0
    void CheckSimpleJournal()
    {
		KLSTD_TRACE0(1, L"Obtaining journal object...\n" );
		
        CAutoPtr<Journal> pJournal;
        KLJRNL_CreateSimpleJournal( & pJournal, true );
		
        wstring wstrJrnlPath;
        //wstrJrnlPath = L"c:\\test\\jrnl\\cool.txt";
        KLSTD_GetTempFile( wstrJrnlPath );
        KLSTD_Unlink( wstrJrnlPath.c_str(), false );
        KLSTD_TRACE1(1, L"Will create journal at \"%s\".\n", wstrJrnlPath.c_str() );
		
        CreationInfo creationInfo;
        creationInfo.bLimitPages = false;
        creationInfo.pageLimitType = pltSize;
        creationInfo.nMaxRecordsInPage = 5;
        creationInfo.nMaxPageSize = 1024;
		
        Cool2 cool2;
		
        pJournal->Open( wstrJrnlPath, CF_OPEN_ALWAYS, ACCESS_FLAGS( AF_READ | AF_WRITE ), creationInfo );
		
        for( int i = 0; i < 20; i++ )
        {
            cool2.intVal = i;
            pJournal->Add( & cool2 );
        }
		
        AVP_longlong llSize = pJournal->GetJournalSize();
        KLSTD_TRACE1( 1, L"Journal size: %d bytes\n", long(llSize) ); 
		
        pJournal->Flush();
		
        bool bFoo = false;
        long nTestCount = 0;
		
        nTestCount = 0;
        pJournal->ResetIterator();
        KLSTD_TRACE0( 1, L"Getting records...\n" );
        while( ! pJournal->IsEOF() )
        {
            long nId;
            Cool2 cool2;
            pJournal->GetCurrent( nId, & cool2 );
			
            bFoo = nId < 5;
			
            KLSTD_TRACE2( 1, L"Id: %d, data: %S\n", nId, cool2.str.c_str() );
			
			
            if( bFoo )
            {
                pJournal->DeleteCurrent();
            } else
            {
                pJournal->Next();
            }
            nTestCount++;
        }
		
        if( nTestCount != 20 )
        {
            KLSTD_THROW(STDE_BADFORMAT);
        }
		
        nTestCount = 0;
        KLSTD_TRACE0( 1, L"Getting records - check MoveToRecordN...\n" );
        pJournal->MoveToRecordN( 30 );
        while( ! pJournal->IsEOF() )
        {
            long nId;
            Cool2 cool2;
            pJournal->GetCurrent( nId, & cool2 );
			
            KLSTD_TRACE2( 1, L"Id: %d, data: %S\n", nId, cool2.str.c_str() );
			
			
            pJournal->Next();
            nTestCount++;
        }
		
        pJournal->Flush();
		
        pJournal->DeleteOlderThanID( 14 );
		
        long nId = 0;
        nTestCount = 0;
        pJournal->ResetIterator();
        while( ! pJournal->IsEOF() )
        {
            Cool2 cool2;
            nTestCount++;
            pJournal->GetCurrent( nId, & cool2 );
            pJournal->Next();
        }
		
        if( ( nId != 20 ) || ( nTestCount != 6 ) )
        {
            KLSTD_THROW(STDE_BADFORMAT);
        }
		
        nTestCount = 0;
        pJournal->SetIterator(15);
        while( ! pJournal->IsEOF() )
        {
            Cool2 cool2;
            nTestCount++;
            pJournal->GetCurrent( nId, & cool2 );
            pJournal->Next();
        }
		
        if( ( nId != 20 ) || ( nTestCount != 6 ) )
        {
            KLSTD_THROW(STDE_BADFORMAT);
        }
		
        pJournal->Flush();
		
        nTestCount = 0;
        pJournal->ResetIterator();
        while( ! pJournal->IsEOF() )
        {
            Cool2 cool2;
            pJournal->GetCurrent( nId, & cool2 );
            if( nTestCount == 5 )
            {
                cool2.intVal = nTestCount * 100;
                pJournal->Update( & cool2 );
            }
            pJournal->Next();
            nTestCount++;
        }
		
        KLSTD_TRACE1( 1, L"Journal record count: %d\n", pJournal->GetRecordCount() );
		
        pJournal->DeleteAll();
		
        pJournal->DeleteOlderThanID( 10 );
		
        //pair<long, long>()
        //pJournal
		
        pJournal->CloseAndRemoveFiles(); 
    }