LcsRowScanExecStreamTest Class Reference

Testcase for scanning multiple clusters. More...

Inheritance diagram for LcsRowScanExecStreamTest:

ExecStreamUnitTestBase ExecStreamTestBase SegStorageTestBase CacheTestBase TestBase TraceTarget List of all members.

Public Member Functions

 LcsRowScanExecStreamTest ()
void testCaseSetUp ()
 Equivalent to JUnit TestCase.setUp; this is called before each test case method is invoked.
void testCaseTearDown ()
 Equivalent to JUnit TestCase.tearDown; this is called after each test case method is invoked.
void testScans ()
void testScanOnEmptyCluster ()
 Create an empty cluster with 1 column.
void testScanPastEndOfCluster ()
 Create a cluster with only a single row.
void testCompressedFiltering ()
void testBernoulliSampling ()
 Configure Bernoulli sampling, with a specific seed and verify that the expected number of rows are returned.
void testSystemSampling ()
 Configure system sampling, with a specific clump size and verify that the expected number of rows are returned.
virtual void openStorage (DeviceMode openMode)
virtual void openSegmentStorage (DeviceMode openMode)
virtual void openRandomSegment ()
SharedSegment createLinearDeviceSegment (DeviceId deviceId, uint nPages)
void closeLinearSegment ()
void closeRandomSegment ()
void closeVersionedRandomSegment ()
void closeSnapshotRandomSegment ()
virtual void closeStorage ()
CachegetCache ()
virtual SharedCache newCache ()
SharedRandomAccessDevice openDevice (std::string devName, DeviceMode openMode, uint nDevicePages, DeviceId deviceId)
void closeDevice (DeviceId deviceId, SharedRandomAccessDevice &pDevice)
TestSuitereleaseTestSuite ()
void beforeTestCase (std::string testCaseName)
void afterTestCase (std::string testCaseName)
virtual void notifyTrace (std::string source, TraceLevel level, std::string message)
 Receives notification when a trace event occurs.
virtual TraceLevel getSourceTraceLevel (std::string source)
 Gets the level at which a particular source should be traced.

Static Public Member Functions

static void readParams (int argc, char **argv)
 Parses the command line.

Static Public Attributes

static ParamName paramTestSuiteName
static ParamName paramTraceFileName
static ParamName paramDictionaryFileName
static ParamName paramTraceLevel
static ParamName paramStatsFileName
static ParamName paramTraceStdout
static ParamName paramDegreeOfParallelism
static ConfigMap configMap
 Configuration parameters.

Protected Types

enum  VictimPolicy { victimTwoQ, victimLRU, victimRandom }
 The available victim policy implementations. More...

Protected Member Functions

void loadClusters (uint nRows, uint nCols, uint nClusters, bool compressed)
 Serially loads nClusters, each cluster containing nCols and nRows.
void loadOneCluster (uint nRows, uint nCols, int colStart, BTreeDescriptor &bTreeDescriptor, bool compressed)
 Loads a single cluster with nCols columns and nRows rows.
void testScanCols (uint nRows, uint nCols, uint nClusters, TupleProjection proj, uint skipRows, uint expectedNumRows)
 Reads rows from clusters.
void testFilterCols (uint nRows, uint nCols, uint nClusters, TupleProjection proj, uint skipRows, uint expectedNumRows, bool compressed)
 Filter rows from clusters.
void setSearchKey (char lowerDirective, char upperDirective, uint64_t lowerVal, uint64_t upperVal, PBuffer inputBuf, uint &offset, TupleAccessor &inputTupleAccessor, TupleData &inputTupleData)
void testSampleScanCols (uint nRows, uint nRowsActual, uint nCols, uint nClusters, TupleProjection proj, uint skipRows, TableSamplingMode mode, float rate, int seed, uint clumps, uint expectedNumRows)
 Sample rows from clusters.
int generateBitmaps (uint nRows, uint skipRows, TupleDescriptor const &bitmapTupleDesc, PBuffer pBuf)
 Generate bitmaps to pass as input into row scan exec stream.
void produceEntry (LbmEntry &lbmEntry, TupleAccessor &bitmapTupleAccessor, PBuffer pBuf, int &bufSize)
SharedExecStream prepareSourceGraph (ExecStreamEmbryo &sourceStreamEmbryo)
 Defines and prepares a graph consisting of one source stream.
SharedExecStream prepareTransformGraph (ExecStreamEmbryo &sourceStreamEmbryo, ExecStreamEmbryo &transformStreamEmbryo)
 Defines and prepares a graph consisting of one source stream and one transform stream.
SharedExecStream prepareTransformGraph (ExecStreamEmbryo &sourceStreamEmbryo, std::vector< ExecStreamEmbryo > &transforms)
 Defines and prepares a graph consisting of one source stream and one or multiple transform streams.
SharedExecStream prepareConfluenceGraph (ExecStreamEmbryo &sourceStreamEmbryo1, ExecStreamEmbryo &sourceStreamEmbryo2, ExecStreamEmbryo &confluenceStreamEmbryo)
 Defines and prepares a graph consisting of two source streams and one confluence stream.
SharedExecStream prepareConfluenceGraph (std::vector< ExecStreamEmbryo > &sourceStreamEmbryos, ExecStreamEmbryo &confluenceStreamEmbryo)
 Defines and prepares a graph consisting of a list of source streams and one confluence stream.
SharedExecStream prepareConfluenceGraph (std::vector< std::vector< ExecStreamEmbryo > > &sourceStreamEmbryosList, ExecStreamEmbryo &confluenceStreamEmbryo)
 Defines and prepares a graph consisting of one or more source streams and one confluence stream.
SharedExecStream prepareConfluenceTransformGraph (ExecStreamEmbryo &sourceStreamEmbryo1, ExecStreamEmbryo &sourceStreamEmbryo2, ExecStreamEmbryo &confluenceStreamEmbryo, ExecStreamEmbryo &transformStreamEmbryo)
 Defines and prepares a graph consisting of two source streams, one confluence stream, and one transform stream.
SharedExecStream prepareDAG (ExecStreamEmbryo &srcStreamEmbryo, ExecStreamEmbryo &splitterStreamEmbryo, std::vector< ExecStreamEmbryo > &interStreamEmbryos, ExecStreamEmbryo &destStreamEmbryo, bool createSink=true, bool saveSrc=true)
 Defines and prepares a graph consisting of a source, a splitter, and one or more parallel transform streams which flow together into a confluence stream.
SharedExecStream prepareDAG (ExecStreamEmbryo &srcStreamEmbryo, ExecStreamEmbryo &splitterStreamEmbryo, std::vector< std::vector< ExecStreamEmbryo > > &interStreamEmbryosList, ExecStreamEmbryo &destStreamEmbryo, bool createSink=true, bool saveSrc=true)
 Defines and prepares a graph consisting of a source, a splitter, and one or more parallel transform streams which flow together into a confluence stream.
void verifyOutput (ExecStream &stream, uint nRowsExpected, MockProducerExecStreamGenerator &verifier, bool stopEarly=false)
 Executes the prepared stream graph and verifies that its output matches that produced by a value generator.
void verifyConstantOutput (ExecStream &stream, const TupleData &expectedTuple, uint nRowsExpected)
 Executes the prepared stream graph and verifies that all output tuples matche an expected and given one.
void verifyBufferedOutput (ExecStream &stream, TupleDescriptor outputTupleDesc, uint nRowsExpected, PBuffer expectedBuffer)
 Executes the prepared stream graph and verifies the resultant tuples against a set of tuples supplied in an input buffer.
void resetExecStreamTest ()
 Reset stream graph so multiple iterations of a method can be called within a single testcase.
virtual void tearDownExecStreamTest ()
 ExecStream-specific handler called from testCaseTearDown.
virtual SharedExecStreamGraph newStreamGraph ()
 Creates a stream graph.
virtual SharedExecStreamGraphEmbryo newStreamGraphEmbryo (SharedExecStreamGraph)
 Creates an embryo for a stream graph.
virtual ExecStreamSchedulernewScheduler ()
 Creates a scheduler.
virtual ExecStreamGovernornewResourceGovernor (ExecStreamResourceKnobs const &knobSettings, ExecStreamResourceQuantity const &resourcesAvailable)
 Creates the resource governor.
void snooze (uint nSeconds)

Protected Attributes

StandardTypeDescriptorFactory stdTypeFactory
TupleAttributeDescriptor attrDesc_int64
TupleAttributeDescriptor attrDesc_bitmap
TupleAttributeDescriptor attrDesc_char1
uint bitmapColSize
vector< boost::shared_ptr<
BTreeDescriptor > > 
bTreeClusters
SharedExecStreamGraph pGraph
SharedExecStreamGraphEmbryo pGraphEmbryo
SharedExecStreamScheduler pScheduler
SharedExecStreamGovernor pResourceGovernor
SharedCacheAccessor pCacheAccessor
SharedSegmentFactory pSegmentFactory
SharedSegment pLinearSegment
 Segment supporting linear page allocation.
SharedSegment pRandomSegment
 (Optional) segment supporting random page allocation.
SharedSegment pVersionedRandomSegment
 (Optional) segment supporting versioned random page allocation.
SharedSegment pSnapshotRandomSegment
 (Optional) segment supporting snapshot random page allocation.
VictimPolicy victimPolicy
 VictimPolicy to instantiate.
CacheParams cacheParams
 Parameters for cache initialization.
SharedCache pCache
 Cache instance being tested.
SharedRandomAccessDevice pRandomAccessDevice
 The default cached device.
uint nMemPages
 Size of cache in memory pages.
uint nDiskPages
 Size of device in disk pages.
uint cbPageFull
 Disk page size.
DeviceId dataDeviceId
 Fixed ID to assign to data device.
TestSuitepTestSuite
 Boost test suite.
boost::shared_ptr< TestBasepTestObj
std::ofstream traceStream
 Output file stream for tracing.
StrictMutex traceMutex
 Protects traceStream.
std::string testName
 Name of test.
TraceLevel traceLevel
 Level at which to trace test execution.
FileStatsTarget statsTarget
 Output for stats.
StatsTimer statsTimer
 Timer for stats collection.
bool traceStdout
 Copy trace output to stdout.
bool traceFile
 Copy trace output to file.
TestCaseGroup defaultTests
TestCaseGroup extraTests

Static Protected Attributes

static const uint NDUPS = 20
static const uint DefaultCacheReservePercent = 5
static const uint DefaultConcurrentStatements = 4
static bool runAll
 Run all test cases, including the extra tests.
static std::string runSingle
 Run only the test case of this name.

Detailed Description

Testcase for scanning multiple clusters.

Note that LcsClusterAppendExecStreamTest also has some tests for scans, but those only test single cluster scans

Definition at line 51 of file LcsRowScanExecStreamTest.cpp.


Member Enumeration Documentation

enum CacheTestBase::VictimPolicy [protected, inherited]

The available victim policy implementations.

Enumerator:
victimTwoQ 
victimLRU 
victimRandom 

Definition at line 44 of file CacheTestBase.h.

00044                       {
00045         victimTwoQ,
00046         victimLRU,
00047         victimRandom
00048     };


Constructor & Destructor Documentation

LcsRowScanExecStreamTest::LcsRowScanExecStreamTest (  )  [inline, explicit]

Definition at line 217 of file LcsRowScanExecStreamTest.cpp.

References testBernoulliSampling(), testCompressedFiltering(), testScanOnEmptyCluster(), testScanPastEndOfCluster(), testScans(), and testSystemSampling().

00218     {
00219         FENNEL_UNIT_TEST_CASE(LcsRowScanExecStreamTest, testScans);
00220         FENNEL_UNIT_TEST_CASE(LcsRowScanExecStreamTest, testScanOnEmptyCluster);
00221         FENNEL_UNIT_TEST_CASE(
00222             LcsRowScanExecStreamTest, testScanPastEndOfCluster);
00223         FENNEL_UNIT_TEST_CASE(
00224             LcsRowScanExecStreamTest, testCompressedFiltering);
00225         FENNEL_UNIT_TEST_CASE(LcsRowScanExecStreamTest, testBernoulliSampling);
00226         FENNEL_UNIT_TEST_CASE(LcsRowScanExecStreamTest, testSystemSampling);
00227     }


Member Function Documentation

void LcsRowScanExecStreamTest::loadClusters ( uint  nRows,
uint  nCols,
uint  nClusters,
bool  compressed 
) [protected]

Serially loads nClusters, each cluster containing nCols and nRows.

Definition at line 240 of file LcsRowScanExecStreamTest.cpp.

References bTreeClusters, loadOneCluster(), and ExecStreamUnitTestBase::resetExecStreamTest().

Referenced by testBernoulliSampling(), testCompressedFiltering(), testScans(), and testSystemSampling().

00245 {
00246     for (uint i = 0; i < nClusters; i++) {
00247         boost::shared_ptr<BTreeDescriptor> pBTreeDesc =
00248             boost::shared_ptr<BTreeDescriptor> (new BTreeDescriptor());
00249         bTreeClusters.push_back(pBTreeDesc);
00250         loadOneCluster(
00251             nRows, nCols, i * nCols, *(bTreeClusters[i]), compressed);
00252         resetExecStreamTest();
00253     }
00254 }

void LcsRowScanExecStreamTest::loadOneCluster ( uint  nRows,
uint  nCols,
int  colStart,
BTreeDescriptor bTreeDescriptor,
bool  compressed 
) [protected]

Loads a single cluster with nCols columns and nRows rows.

Each column will have a different sequence of values, as follows: column0 - colStart, colStart+1, ..., colStart+nRows-1 column1 - colStart+1, colStart+2, ..., colStart+nRows column2 - colStart+2, colStart+3, ..., colStart+nRows+1 ...

Definition at line 256 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_int64, BTreeBuilder::createEmptyRoot(), BTreeAccessBase::getRootPageId(), ExecStreamEmbryo::getStream(), ExecStreamEmbryo::init(), LcsClusterAppendExecStreamParams::inputProj, BTreeParams::keyProj, BTreeDescriptor::keyProjection, NDUPS, MockProducerExecStreamParams::nRows, NULL_PAGE_ID, SingleOutputExecStreamParams::outputTupleDesc, BTreeDescriptor::pageOwnerId, BTreeParams::pageOwnerId, CacheTestBase::pCache, SegmentAccessor::pCacheAccessor, ExecStreamParams::pCacheAccessor, MockProducerExecStreamParams::pGenerator, SegStorageTestBase::pRandomSegment, ExecStreamUnitTestBase::prepareTransformGraph(), BTreeParams::pRootMap, SegmentAccessor::pSegment, BTreeParams::pSegment, SegStorageTestBase::pSegmentFactory, BTreeParams::rootPageId, BTreeDescriptor::rootPageId, BTreeParams::rootPageIdParamId, ExecStreamParams::scratchAccessor, BTreeDescriptor::segmentAccessor, BTreeDescriptor::segmentId, BTreeParams::segmentId, BTreeParams::tupleDesc, BTreeDescriptor::tupleDescriptor, and ExecStreamUnitTestBase::verifyOutput().

Referenced by loadClusters(), and testScanPastEndOfCluster().

00262 {
00263     MockProducerExecStreamParams mockParams;
00264     for (uint i = 0; i < nCols; i++) {
00265         mockParams.outputTupleDesc.push_back(attrDesc_int64);
00266     }
00267     mockParams.nRows = nRows;
00268 
00269     // generators for input stream load
00270 
00271     vector<boost::shared_ptr<ColumnGenerator<int64_t> > > columnGenerators;
00272     for (uint i = 0; i < nCols; i++) {
00273         SharedInt64ColumnGenerator col =
00274             SharedInt64ColumnGenerator(
00275             compressed
00276             ? (Int64ColumnGenerator *) new MixedDupColumnGenerator(
00277                 NDUPS, i + colStart, 500)
00278             : new SeqColumnGenerator(i + colStart));
00279         columnGenerators.push_back(col);
00280     }
00281     mockParams.pGenerator.reset(
00282         new CompositeExecStreamGenerator(columnGenerators));
00283 
00284     ExecStreamEmbryo mockStreamEmbryo;
00285     mockStreamEmbryo.init(new MockProducerExecStream(), mockParams);
00286     mockStreamEmbryo.getStream()->setName("MockProducerExecStream");
00287 
00288     LcsClusterAppendExecStreamParams lcsAppendParams;
00289     lcsAppendParams.scratchAccessor =
00290         pSegmentFactory->newScratchSegment(pCache, 10);
00291     lcsAppendParams.pCacheAccessor = pCache;
00292     lcsAppendParams.pSegment = pRandomSegment;
00293 
00294     // initialize the btree parameter portion of lcsAppendParams
00295     // BTree tuple desc only has one column
00296     (lcsAppendParams.tupleDesc).push_back(attrDesc_int64);
00297     (lcsAppendParams.tupleDesc).push_back(attrDesc_int64);
00298 
00299     // BTree key only has one column which is the first column.
00300     (lcsAppendParams.keyProj).push_back(0);
00301 
00302     // output only one value(rows inserted)
00303     lcsAppendParams.outputTupleDesc.push_back(attrDesc_int64);
00304 
00305     for (uint i = 0; i < nCols; i++) {
00306         lcsAppendParams.inputProj.push_back(i);
00307     }
00308     lcsAppendParams.pRootMap = 0;
00309     lcsAppendParams.rootPageIdParamId = DynamicParamId(0);
00310 
00311     // setup temporary btree descriptor to get an empty page to start the btree
00312 
00313     bTreeDescriptor.segmentAccessor.pSegment = lcsAppendParams.pSegment;
00314     bTreeDescriptor.segmentAccessor.pCacheAccessor = pCache;
00315     bTreeDescriptor.tupleDescriptor = lcsAppendParams.tupleDesc;
00316     bTreeDescriptor.keyProjection = lcsAppendParams.keyProj;
00317     bTreeDescriptor.rootPageId = NULL_PAGE_ID;
00318     lcsAppendParams.segmentId = bTreeDescriptor.segmentId;
00319     lcsAppendParams.pageOwnerId = bTreeDescriptor.pageOwnerId;
00320 
00321     BTreeBuilder builder(bTreeDescriptor, pRandomSegment);
00322     builder.createEmptyRoot();
00323     lcsAppendParams.rootPageId = bTreeDescriptor.rootPageId =
00324         builder.getRootPageId();
00325 
00326     // Now use the above initialized parameter
00327 
00328     LcsClusterAppendExecStream *lcsStream = new LcsClusterAppendExecStream();
00329 
00330     ExecStreamEmbryo lcsAppendStreamEmbryo;
00331     lcsAppendStreamEmbryo.init(lcsStream, lcsAppendParams);
00332     lcsAppendStreamEmbryo.getStream()->setName("LcsClusterAppendExecStream");
00333 
00334     SharedExecStream pOutputStream = prepareTransformGraph(
00335         mockStreamEmbryo, lcsAppendStreamEmbryo);
00336 
00337     // set up a generator which can produce the expected output
00338     RampExecStreamGenerator expectedResultGenerator(mockParams.nRows);
00339 
00340     verifyOutput(*pOutputStream, 1, expectedResultGenerator);
00341 }

void LcsRowScanExecStreamTest::testScanCols ( uint  nRows,
uint  nCols,
uint  nClusters,
TupleProjection  proj,
uint  skipRows,
uint  expectedNumRows 
) [protected]

Reads rows from clusters.

Assumes clusters have been loaded by loadClusters/loadOneCluster.

Parameters:
nRows total number of rows in the clusters
nCols number of columns in each cluster
nClusters number of clusters
proj columns to be projected
skipRows read every "skipRows" rows
expectedNumRows expected number of rows in scan result; normally should be the same as nRows unless skipping rows or testing exception cases

Definition at line 343 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_bitmap, attrDesc_int64, bitmapColSize, bTreeClusters, ValuesExecStreamParams::bufSize, FixedBuffer, generateBitmaps(), ExecStreamEmbryo::getStream(), LcsRowScanExecStreamParams::hasExtraFilter, ExecStreamEmbryo::init(), LcsRowScanExecStreamParams::isFullScan, LcsRowScanBaseExecStreamParams::lcsClusterScanDefs, max(), LcsRowScanBaseExecStreamParams::outputProj, SingleOutputExecStreamParams::outputTupleDesc, ExecStreamUnitTestBase::prepareTransformGraph(), ValuesExecStreamParams::pTupleBuffer, SAMPLING_OFF, LcsRowScanExecStreamParams::samplingMode, and ExecStreamUnitTestBase::verifyOutput().

Referenced by testScanOnEmptyCluster(), testScanPastEndOfCluster(), and testScans().

00350 {
00351     // setup input rid stream
00352 
00353     ValuesExecStreamParams valuesParams;
00354     boost::shared_array<FixedBuffer> pBuffer;
00355     ExecStreamEmbryo valuesStreamEmbryo;
00356     LcsRowScanExecStreamParams scanParams;
00357 
00358     scanParams.hasExtraFilter = false;
00359     scanParams.samplingMode = SAMPLING_OFF;
00360 
00361     // setup a values stream either to provide an empty input to simulate
00362     // the scan of the deletion index (in the case of a full scan) or a stream
00363     // of rid values when we're doing reads based on specific rids
00364     valuesParams.outputTupleDesc.push_back(attrDesc_int64);
00365     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00366     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00367 
00368     // set buffer size to max number of bytes required to represent each
00369     // bit (nRows/8) plus max number of segments (nRows/bitmapColSize)
00370     // times 8 bytes for each starting rid in the segment
00371     uint bufferSize = std::max(
00372         16, (int) (nRows / 8 + nRows / bitmapColSize * 8));
00373     pBuffer.reset(new FixedBuffer[bufferSize]);
00374     valuesParams.pTupleBuffer = pBuffer;
00375 
00376     if (nRows > 0) {
00377         valuesParams.bufSize = generateBitmaps(
00378             nRows, skipRows, valuesParams.outputTupleDesc, pBuffer.get());
00379         assert(valuesParams.bufSize <= bufferSize);
00380         scanParams.isFullScan = false;
00381     } else {
00382         scanParams.isFullScan = true;
00383         valuesParams.bufSize = 0;
00384     }
00385     valuesStreamEmbryo.init(new ValuesExecStream(), valuesParams);
00386     valuesStreamEmbryo.getStream()->setName("ValuesExecStream");
00387 
00388     // setup parameters into scan
00389     //  nClusters cluster with nCols columns each
00390 
00391     for (uint i = 0; i < nClusters; i++) {
00392         struct LcsClusterScanDef clusterScanDef;
00393 
00394         for (uint j = 0; j < nCols; j++) {
00395             clusterScanDef.clusterTupleDesc.push_back(attrDesc_int64);
00396         }
00397 
00398         clusterScanDef.pSegment = bTreeClusters[i]->segmentAccessor.pSegment;
00399         clusterScanDef.pCacheAccessor =
00400             bTreeClusters[i]->segmentAccessor.pCacheAccessor;
00401         clusterScanDef.tupleDesc = bTreeClusters[i]->tupleDescriptor;
00402         clusterScanDef.keyProj = bTreeClusters[i]->keyProjection;
00403         clusterScanDef.rootPageId = bTreeClusters[i]->rootPageId;
00404         clusterScanDef.segmentId = bTreeClusters[i]->segmentId;
00405         clusterScanDef.pageOwnerId = bTreeClusters[i]->pageOwnerId;
00406 
00407         scanParams.lcsClusterScanDefs.push_back(clusterScanDef);
00408     }
00409 
00410     // setup projection
00411     scanParams.outputProj = proj;
00412     for (uint i = 0; i < proj.size(); i++) {
00413         scanParams.outputTupleDesc.push_back(attrDesc_int64);
00414     }
00415 
00416     ExecStreamEmbryo scanStreamEmbryo;
00417     scanStreamEmbryo.init(new LcsRowScanExecStream(), scanParams);
00418     scanStreamEmbryo.getStream()->setName("RowScanExecStream");
00419     SharedExecStream pOutputStream;
00420 
00421     pOutputStream =
00422         prepareTransformGraph(valuesStreamEmbryo, scanStreamEmbryo);
00423 
00424     // setup generators for result stream
00425 
00426     vector<boost::shared_ptr<ColumnGenerator<int64_t> > > columnGenerators;
00427     for (uint i = 0; i < proj.size(); i++) {
00428         SharedInt64ColumnGenerator col =
00429             SharedInt64ColumnGenerator(
00430                 new SeqColumnGenerator(
00431                     proj[i],
00432                     skipRows));
00433         columnGenerators.push_back(col);
00434     }
00435 
00436     CompositeExecStreamGenerator resultGenerator(columnGenerators);
00437     verifyOutput(*pOutputStream, expectedNumRows, resultGenerator);
00438 }

void LcsRowScanExecStreamTest::testFilterCols ( uint  nRows,
uint  nCols,
uint  nClusters,
TupleProjection  proj,
uint  skipRows,
uint  expectedNumRows,
bool  compressed 
) [protected]

Filter rows from clusters.

Assumes clusters have been loaded by loadClusters/loadOneCluster.

Parameters:
nRows total number of rows in the clusters
nCols number of columns in each cluster
nClusters number of clusters
proj columns to be projected
skipRows read every "skipRows" rows
expectedNumRows expected number of rows in scan result; normally should be the same as nRows unless skipping rows or testing exception cases
compressed testing compressed bitmap optimization

Definition at line 772 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_bitmap, attrDesc_char1, attrDesc_int64, bitmapColSize, bTreeClusters, ValuesExecStreamParams::bufSize, TupleAccessor::compute(), FixedBuffer, generateBitmaps(), TupleAccessor::getMaxByteCount(), ExecStreamEmbryo::getStream(), LcsRowScanExecStreamParams::hasExtraFilter, ExecStreamEmbryo::init(), LcsRowScanExecStreamParams::isFullScan, LcsRowScanBaseExecStreamParams::lcsClusterScanDefs, max(), NDUPS, StandardTypeDescriptorFactory::newDataType(), LcsRowScanBaseExecStreamParams::outputProj, SingleOutputExecStreamParams::outputTupleDesc, ExecStreamUnitTestBase::prepareConfluenceGraph(), ValuesExecStreamParams::pTupleBuffer, LcsRowScanExecStreamParams::residualFilterCols, SAMPLING_OFF, LcsRowScanExecStreamParams::samplingMode, setSearchKey(), STANDARD_TYPE_INT_64, stdTypeFactory, and ExecStreamUnitTestBase::verifyOutput().

Referenced by testCompressedFiltering(), and testScans().

00780 {
00781     // setup input rid stream
00782 
00783     ValuesExecStreamParams valuesParams;
00784     boost::shared_array<FixedBuffer> pBuffer;
00785     ExecStreamEmbryo valuesStreamEmbryo;
00786     LcsRowScanExecStreamParams scanParams;
00787 
00788     scanParams.hasExtraFilter = true;
00789     scanParams.samplingMode = SAMPLING_OFF;
00790 
00791     // setup a values stream either to provide an empty input to simulate
00792     // the scan of the deletion index (in the case of a full scan) or a stream
00793     // of rid values when we're doing reads based on specific rids
00794     valuesParams.outputTupleDesc.push_back(attrDesc_int64);
00795     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00796     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00797 
00798 
00799     // set buffer size to max number of bytes required to represent each
00800     // bit (nRows/8) plus max number of segments (nRows/bitmapColSize)
00801     // times 8 bytes for each starting rid in the segment
00802     uint bufferSize = std::max(
00803         16, (int) (nRows / 8 + nRows / bitmapColSize * 8));
00804     pBuffer.reset(new FixedBuffer[bufferSize]);
00805     valuesParams.pTupleBuffer = pBuffer;
00806 
00807     if (nRows > 0) {
00808         valuesParams.bufSize = generateBitmaps(
00809             nRows, skipRows, valuesParams.outputTupleDesc, pBuffer.get());
00810         assert(valuesParams.bufSize <= bufferSize);
00811         scanParams.isFullScan = false;
00812     } else {
00813         scanParams.isFullScan = true;
00814         valuesParams.bufSize = 0;
00815     }
00816     valuesStreamEmbryo.init(new ValuesExecStream(), valuesParams);
00817     valuesStreamEmbryo.getStream()->setName("ValuesExecStream");
00818 
00819     // setup the following search keys:
00820     // 1. key0 >= 2000 or key0 < 1000
00821     // 2. 500 <= key1 - nCols < 2999 or  (key1 - nCols) == 2999
00822     // 3  key2 - 2*nCols > 1500
00823     //
00824     // where key0 corresponds to column #0,
00825     // key1 corresponds to the column #nCols, and
00826     // key2 corresponds to column #(2*nCols)
00827 
00828     TupleAttributeDescriptor attrDesc_nullableInt64 =
00829         TupleAttributeDescriptor(
00830             stdTypeFactory.newDataType(STANDARD_TYPE_INT_64),
00831             true, sizeof(uint64_t));
00832 
00833     valuesParams.outputTupleDesc.resize(0);
00834     TupleDescriptor inputTupleDesc;
00835     for (uint i = 0; i < 2; i++) {
00836         inputTupleDesc.push_back(attrDesc_char1);
00837         inputTupleDesc.push_back(attrDesc_nullableInt64);
00838         valuesParams.outputTupleDesc.push_back(attrDesc_char1);
00839         valuesParams.outputTupleDesc.push_back(attrDesc_nullableInt64);
00840     }
00841     TupleData inputTupleData(inputTupleDesc);
00842     TupleAccessor inputTupleAccessor;
00843     inputTupleAccessor.compute(inputTupleDesc);
00844 
00845     uint nInputTuples = 3;
00846     boost::shared_array<FixedBuffer> inputBuffer;
00847     inputBuffer.reset(
00848         new FixedBuffer[nInputTuples * inputTupleAccessor.getMaxByteCount()]);
00849 
00850     PBuffer inputBuf = inputBuffer.get();
00851     uint offset = 0;
00852 
00853     setSearchKey(
00854         '-', ')', 0, 1000, inputBuf, offset, inputTupleAccessor,
00855         inputTupleData);
00856     setSearchKey(
00857         '[', '+', 2000, 0, inputBuf, offset, inputTupleAccessor,
00858         inputTupleData);
00859 
00860     TupleData inputTupleData1(inputTupleDesc);
00861     boost::shared_array<FixedBuffer> inputBuffer1;
00862     inputBuffer1.reset(
00863         new FixedBuffer[nInputTuples * inputTupleAccessor.getMaxByteCount()]);
00864     PBuffer inputBuf1 = inputBuffer1.get();
00865     uint offset1 = 0;
00866 
00867     setSearchKey(
00868         '[', ')', 500 + nCols, 2999 + nCols, inputBuf1, offset1,
00869         inputTupleAccessor,
00870         inputTupleData1);
00871     setSearchKey(
00872         '[', ']', 2999 + nCols, 2999 + nCols, inputBuf1, offset1,
00873         inputTupleAccessor, inputTupleData1);
00874 
00875     TupleData inputTupleData2(inputTupleDesc);
00876     boost::shared_array<FixedBuffer> inputBuffer2;
00877     inputBuffer2.reset(
00878         new FixedBuffer[nInputTuples * inputTupleAccessor.getMaxByteCount()]);
00879     PBuffer inputBuf2 = inputBuffer2.get();
00880     uint offset2 = 0;
00881 
00882     setSearchKey(
00883         '(', '+', 1500+2*nCols, 0, inputBuf2, offset2, inputTupleAccessor,
00884         inputTupleData1);
00885 
00886     valuesParams.pTupleBuffer = inputBuffer;
00887     valuesParams.bufSize = offset;
00888 
00889     ExecStreamEmbryo valuesStreamEmbryo1,  valuesStreamEmbryo2,
00890         valuesStreamEmbryo3;
00891     valuesStreamEmbryo1.init(new ValuesExecStream(), valuesParams);
00892     valuesStreamEmbryo1.getStream()->setName("ValuesExecStream1");
00893 
00894     valuesParams.pTupleBuffer = inputBuffer1;
00895     valuesParams.bufSize = offset1;
00896     valuesStreamEmbryo2.init(new ValuesExecStream(), valuesParams);
00897     valuesStreamEmbryo2.getStream()->setName("ValuesExecStream2");
00898 
00899     valuesParams.pTupleBuffer = inputBuffer2;
00900     valuesParams.bufSize = offset2;
00901     valuesStreamEmbryo3.init(new ValuesExecStream(), valuesParams);
00902     valuesStreamEmbryo3.getStream()->setName("ValuesExecStream3");
00903 
00904     // setup parameters into scan
00905     //  nClusters cluster with nCols columns each
00906 
00907     for (uint i = 0; i < nClusters; i++) {
00908         struct LcsClusterScanDef clusterScanDef;
00909 
00910         for (uint j = 0; j < nCols; j++) {
00911             clusterScanDef.clusterTupleDesc.push_back(attrDesc_int64);
00912         }
00913 
00914         clusterScanDef.pSegment = bTreeClusters[i]->segmentAccessor.pSegment;
00915         clusterScanDef.pCacheAccessor =
00916             bTreeClusters[i]->segmentAccessor.pCacheAccessor;
00917         clusterScanDef.tupleDesc = bTreeClusters[i]->tupleDescriptor;
00918         clusterScanDef.keyProj = bTreeClusters[i]->keyProjection;
00919         clusterScanDef.rootPageId = bTreeClusters[i]->rootPageId;
00920         clusterScanDef.segmentId = bTreeClusters[i]->segmentId;
00921         clusterScanDef.pageOwnerId = bTreeClusters[i]->pageOwnerId;
00922 
00923         scanParams.lcsClusterScanDefs.push_back(clusterScanDef);
00924     }
00925 
00926     // setup projection
00927     scanParams.outputProj = proj;
00928     for (uint i = 0; i < proj.size(); i++) {
00929         scanParams.outputTupleDesc.push_back(attrDesc_int64);
00930     }
00931     scanParams.residualFilterCols.push_back(0);
00932     scanParams.residualFilterCols.push_back(nCols);
00933     scanParams.residualFilterCols.push_back(2*nCols);
00934 
00935     ExecStreamEmbryo scanStreamEmbryo;
00936     scanStreamEmbryo.init(new LcsRowScanExecStream(), scanParams);
00937     scanStreamEmbryo.getStream()->setName("RowScanExecStream");
00938     SharedExecStream pOutputStream;
00939 
00940     std::vector<ExecStreamEmbryo> sources;
00941     sources.push_back(valuesStreamEmbryo);
00942     sources.push_back(valuesStreamEmbryo1);
00943     sources.push_back(valuesStreamEmbryo2);
00944     sources.push_back(valuesStreamEmbryo3);
00945 
00946     pOutputStream =
00947         prepareConfluenceGraph(sources, scanStreamEmbryo);
00948 
00949     // setup generators for result stream
00950 
00951     vector<boost::shared_ptr<ColumnGenerator<int64_t> > > columnGenerators;
00952     offset = (int) ceil(2000.0 / skipRows) * skipRows;
00953     for (uint i = 0; i < proj.size(); i++) {
00954         SharedInt64ColumnGenerator col =
00955             SharedInt64ColumnGenerator(
00956                 compressed ?
00957                     (Int64ColumnGenerator*) new MixedDupColumnGenerator(
00958                         NDUPS, proj[i] + 2000,500) :
00959                     new SeqColumnGenerator(proj[i] + offset, skipRows));
00960         columnGenerators.push_back(col);
00961     }
00962 
00963 
00964     CompositeExecStreamGenerator resultGenerator(columnGenerators);
00965     verifyOutput(*pOutputStream, expectedNumRows, resultGenerator);
00966 }

void LcsRowScanExecStreamTest::setSearchKey ( char  lowerDirective,
char  upperDirective,
uint64_t  lowerVal,
uint64_t  upperVal,
PBuffer  inputBuf,
uint offset,
TupleAccessor inputTupleAccessor,
TupleData inputTupleData 
) [protected]

Definition at line 759 of file LcsRowScanExecStreamTest.cpp.

References TupleAccessor::getCurrentByteCount(), and TupleAccessor::marshal().

Referenced by testFilterCols().

00763 {
00764     inputTupleData[0].pData = (PConstBuffer) &lowerDirective;
00765     inputTupleData[2].pData = (PConstBuffer) &upperDirective;
00766     inputTupleData[1].pData = (PConstBuffer) &lowerVal;
00767     inputTupleData[3].pData = (PConstBuffer) &upperVal;
00768     inputTupleAccessor.marshal(inputTupleData, inputBuf + offset);
00769     offset += inputTupleAccessor.getCurrentByteCount();
00770 }

void LcsRowScanExecStreamTest::testSampleScanCols ( uint  nRows,
uint  nRowsActual,
uint  nCols,
uint  nClusters,
TupleProjection  proj,
uint  skipRows,
TableSamplingMode  mode,
float  rate,
int  seed,
uint  clumps,
uint  expectedNumRows 
) [protected]

Sample rows from clusters.

Assumes clusters have been loaded by loadClusters/loadOneCluster.

Parameters:
nRows total number of rows in the clusters; if set to 0, full table scans should be done
nRowsActual actual total number of rows in the clusters
nCols number of columns in each cluster
nClusters number of clusters
proj columns to be projected
skipRows read every "skipRows" rows
mode sampling mode (SAMPLING_BERNOULLI or SAMPLING_SYSTEM)
rate sampling rate
seed Bernoulli sampling RNG seed
clumps number of system sampling clumps
expectedNumRows expected number of rows in scan result; normally should be the same as nRows unless skipping rows or testing exception cases

Definition at line 969 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_bitmap, attrDesc_int64, bitmapColSize, bTreeClusters, ValuesExecStreamParams::bufSize, FixedBuffer, generateBitmaps(), ExecStreamEmbryo::getStream(), LcsRowScanExecStreamParams::hasExtraFilter, ExecStreamEmbryo::init(), LcsRowScanExecStreamParams::isFullScan, LcsRowScanBaseExecStreamParams::lcsClusterScanDefs, max(), LcsRowScanBaseExecStreamParams::outputProj, SingleOutputExecStreamParams::outputTupleDesc, ExecStreamUnitTestBase::prepareTransformGraph(), ValuesExecStreamParams::pTupleBuffer, SAMPLING_BERNOULLI, SAMPLING_SYSTEM, LcsRowScanExecStreamParams::samplingClumps, LcsRowScanExecStreamParams::samplingIsRepeatable, LcsRowScanExecStreamParams::samplingMode, LcsRowScanExecStreamParams::samplingRate, LcsRowScanExecStreamParams::samplingRepeatableSeed, LcsRowScanExecStreamParams::samplingRowCount, and ExecStreamUnitTestBase::verifyOutput().

Referenced by testBernoulliSampling(), and testSystemSampling().

00981 {
00982     // setup input rid stream
00983 
00984     ValuesExecStreamParams valuesParams;
00985     boost::shared_array<FixedBuffer> pBuffer;
00986     ExecStreamEmbryo valuesStreamEmbryo;
00987     LcsRowScanExecStreamParams scanParams;
00988 
00989     scanParams.hasExtraFilter = false;
00990 
00991     // setup a values stream either to provide an empty input to simulate
00992     // the scan of the deletion index (in the case of a full scan) or a stream
00993     // of rid values when we're doing reads based on specific rids
00994     valuesParams.outputTupleDesc.push_back(attrDesc_int64);
00995     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00996     valuesParams.outputTupleDesc.push_back(attrDesc_bitmap);
00997 
00998     uint nRowsInternal = (mode == SAMPLING_SYSTEM) ? 0 : nRows;
00999 
01000     // set buffer size to max number of bytes required to represent each bit
01001     // (nRowsInternal/8) plus max number of segments
01002     // (nRowsInternal/bitmapColSize) times 8 bytes for each starting rid in the
01003     // segment
01004     uint bufferSize = std::max(
01005         16, (int) (nRowsInternal / 8 + nRowsInternal / bitmapColSize * 8));
01006     pBuffer.reset(new FixedBuffer[bufferSize]);
01007     valuesParams.pTupleBuffer = pBuffer;
01008 
01009     if (nRowsInternal > 0) {
01010         valuesParams.bufSize = generateBitmaps(
01011             nRowsInternal, skipRows, valuesParams.outputTupleDesc,
01012             pBuffer.get());
01013         assert(valuesParams.bufSize <= bufferSize);
01014         scanParams.isFullScan = false;
01015     } else {
01016         scanParams.isFullScan = true;
01017         valuesParams.bufSize = 0;
01018     }
01019     valuesStreamEmbryo.init(new ValuesExecStream(), valuesParams);
01020     valuesStreamEmbryo.getStream()->setName("ValuesExecStream");
01021 
01022     // setup parameters into scan
01023     //  nClusters cluster with nCols columns each
01024 
01025     for (uint i = 0; i < nClusters; i++) {
01026         struct LcsClusterScanDef clusterScanDef;
01027 
01028         for (uint j = 0; j < nCols; j++) {
01029             clusterScanDef.clusterTupleDesc.push_back(attrDesc_int64);
01030         }
01031 
01032         clusterScanDef.pSegment = bTreeClusters[i]->segmentAccessor.pSegment;
01033         clusterScanDef.pCacheAccessor =
01034             bTreeClusters[i]->segmentAccessor.pCacheAccessor;
01035         clusterScanDef.tupleDesc = bTreeClusters[i]->tupleDescriptor;
01036         clusterScanDef.keyProj = bTreeClusters[i]->keyProjection;
01037         clusterScanDef.rootPageId = bTreeClusters[i]->rootPageId;
01038         clusterScanDef.segmentId = bTreeClusters[i]->segmentId;
01039         clusterScanDef.pageOwnerId = bTreeClusters[i]->pageOwnerId;
01040 
01041         scanParams.lcsClusterScanDefs.push_back(clusterScanDef);
01042     }
01043 
01044     // setup projection
01045     scanParams.outputProj = proj;
01046     for (uint i = 0; i < proj.size(); i++) {
01047         scanParams.outputTupleDesc.push_back(attrDesc_int64);
01048     }
01049 
01050 
01051     // setup sampling
01052     scanParams.samplingMode = mode;
01053     scanParams.samplingRate = rate;
01054     scanParams.samplingIsRepeatable = true;
01055     scanParams.samplingRepeatableSeed = seed;
01056     scanParams.samplingClumps = clumps;
01057     scanParams.samplingRowCount = nRowsActual;
01058 
01059     ExecStreamEmbryo scanStreamEmbryo;
01060     scanStreamEmbryo.init(new LcsRowScanExecStream(), scanParams);
01061     scanStreamEmbryo.getStream()->setName("RowScanExecStream");
01062     SharedExecStream pOutputStream;
01063 
01064     pOutputStream =
01065         prepareTransformGraph(valuesStreamEmbryo, scanStreamEmbryo);
01066 
01067     // setup generators for result stream
01068 
01069     vector<boost::shared_ptr<ColumnGenerator<int64_t> > > columnGenerators;
01070     for (uint i = 0; i < proj.size(); i++) {
01071         SharedInt64ColumnGenerator col =
01072             SharedInt64ColumnGenerator(
01073                 new SeqColumnGenerator(
01074                     proj[i],
01075                     skipRows));
01076         columnGenerators.push_back(col);
01077     }
01078 
01079     boost::shared_ptr<CompositeExecStreamGenerator> baseResultGenerator(
01080         new CompositeExecStreamGenerator(columnGenerators));
01081 
01082     if (mode == SAMPLING_BERNOULLI) {
01083         BernoulliSamplingExecStreamGenerator resultGenerator(
01084             baseResultGenerator,
01085             rate,
01086             seed,
01087             proj.size());
01088 
01089         verifyOutput(*pOutputStream, expectedNumRows, resultGenerator);
01090     } else {
01091         SystemSamplingExecStreamGenerator resultGenerator(
01092             baseResultGenerator,
01093             rate,
01094             nRows,
01095             proj.size(),
01096             clumps);
01097 
01098         verifyOutput(*pOutputStream, expectedNumRows, resultGenerator);
01099     }
01100 }

int LcsRowScanExecStreamTest::generateBitmaps ( uint  nRows,
uint  skipRows,
TupleDescriptor const &  bitmapTupleDesc,
PBuffer  pBuf 
) [protected]

Generate bitmaps to pass as input into row scan exec stream.

Parameters:
nRows number of rows in table
skipRows generate rids every "skipRows" rows; i.e., if skipRows == 1, there are no gaps in the rids
bitmapTupleDesc tuple descriptor for bitmap segment
pBuf buffer where bitmap segment tuples will be marshalled
Returns:
size of the buffer containing the marshalled tuples

Definition at line 440 of file LcsRowScanExecStreamTest.cpp.

References bitmapColSize, TupleAccessor::compute(), FixedBuffer, LbmEntry::getScratchBufferSize(), LbmEntry::init(), produceEntry(), LbmEntry::setEntryTuple(), and LbmEntry::setRID().

Referenced by testFilterCols(), testSampleScanCols(), and testScanCols().

00443 {
00444     int bufSize = 0;
00445     LbmEntry lbmEntry;
00446     boost::scoped_array<FixedBuffer> entryBuf;
00447     TupleAccessor bitmapTupleAccessor;
00448     LcsRid rid = LcsRid(0);
00449 
00450     TupleData bitmapTupleData(bitmapTupleDesc);
00451     bitmapTupleData[0].pData = (PConstBuffer) &rid;
00452     bitmapTupleData[1].pData = NULL;
00453     bitmapTupleData[1].cbData = 0;
00454     bitmapTupleData[2].pData = NULL;
00455     bitmapTupleData[2].cbData = 0;
00456 
00457     bitmapTupleAccessor.compute(bitmapTupleDesc);
00458 
00459     // setup an LbmEntry with the initial rid value
00460     uint scratchBufSize = LbmEntry::getScratchBufferSize(bitmapColSize);
00461     entryBuf.reset(new FixedBuffer[scratchBufSize]);
00462     lbmEntry.init(entryBuf.get(), NULL, scratchBufSize, bitmapTupleDesc);
00463     lbmEntry.setEntryTuple(bitmapTupleData);
00464 
00465     // add on the remaining rids
00466     for (rid = LcsRid(skipRows); rid < LcsRid(nRows); rid += skipRows) {
00467         if (!lbmEntry.setRID(LcsRid(rid))) {
00468             // if exhausted buffer space, write the tuple to the output
00469             // buffer and reset LbmEntry
00470             produceEntry(lbmEntry, bitmapTupleAccessor, pBuf, bufSize);
00471             lbmEntry.setEntryTuple(bitmapTupleData);
00472         }
00473     }
00474     // write out the last LbmEntry
00475     produceEntry(lbmEntry, bitmapTupleAccessor, pBuf, bufSize);
00476 
00477     return bufSize;
00478 }

void LcsRowScanExecStreamTest::produceEntry ( LbmEntry lbmEntry,
TupleAccessor bitmapTupleAccessor,
PBuffer  pBuf,
int &  bufSize 
) [protected]

Definition at line 480 of file LcsRowScanExecStreamTest.cpp.

References TupleAccessor::getCurrentByteCount(), TupleAccessor::marshal(), and LbmEntry::produceEntryTuple().

Referenced by generateBitmaps().

00483 {
00484     TupleData bitmapTuple = lbmEntry.produceEntryTuple();
00485     bitmapTupleAccessor.marshal(bitmapTuple, pBuf + bufSize);
00486     bufSize += bitmapTupleAccessor.getCurrentByteCount();
00487 }

void LcsRowScanExecStreamTest::testCaseSetUp (  )  [virtual]

Equivalent to JUnit TestCase.setUp; this is called before each test case method is invoked.

Default is no-op.

Reimplemented from ExecStreamUnitTestBase.

Definition at line 1102 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_bitmap, attrDesc_char1, attrDesc_int64, bitmapColSize, StandardTypeDescriptorFactory::newDataType(), SegStorageTestBase::pRandomSegment, STANDARD_TYPE_CHAR, STANDARD_TYPE_INT_64, STANDARD_TYPE_VARBINARY, stdTypeFactory, and ExecStreamUnitTestBase::testCaseSetUp().

void LcsRowScanExecStreamTest::testCaseTearDown (  )  [virtual]

Equivalent to JUnit TestCase.tearDown; this is called after each test case method is invoked.

Default is no-op.

Reimplemented from ExecStreamTestBase.

Definition at line 1116 of file LcsRowScanExecStreamTest.cpp.

References bTreeClusters, and ExecStreamTestBase::testCaseTearDown().

01117 {
01118     for (uint i = 0; i < bTreeClusters.size(); i++) {
01119         bTreeClusters[i]->segmentAccessor.reset();
01120     }
01121     ExecStreamUnitTestBase::testCaseTearDown();
01122 }

void LcsRowScanExecStreamTest::testScans (  ) 

Definition at line 489 of file LcsRowScanExecStreamTest.cpp.

References loadClusters(), ExecStreamUnitTestBase::resetExecStreamTest(), testFilterCols(), and testScanCols().

Referenced by LcsRowScanExecStreamTest().

00490 {
00491     // 1. load clusters, so they can be used by steps 2-5 below
00492     // 2. scan all data in clusters
00493     // 3. test projection
00494     // 4. test skipping of rows
00495     // 5. test full table scan
00496 
00497     uint nRows = 50000;
00498     uint nCols = 12;
00499     uint nClusters = 3;
00500     TupleProjection proj;
00501 
00502     loadClusters(nRows, nCols, nClusters, false);
00503     // note: no need to reset after loadClusters() because already done
00504     // there
00505 
00506     // scan all rows and columns
00507     for (uint i = 0; i < nClusters; i++) {
00508         for (uint j = 0; j < nCols; j++) {
00509             proj.push_back(i * nCols + j);
00510         }
00511     }
00512     testScanCols(nRows, nCols, nClusters, proj, 1, nRows);
00513     resetExecStreamTest();
00514 
00515     // project columns 22, 10, 12, 26, 1, 35, 15, 5, 17, 30, 4, 20, 7, and 13
00516     proj.clear();
00517     proj.push_back(22);
00518     proj.push_back(10);
00519     proj.push_back(12);
00520     proj.push_back(26);
00521     proj.push_back(1);
00522     proj.push_back(35);
00523     proj.push_back(15);
00524     proj.push_back(5);
00525     proj.push_back(17);
00526     proj.push_back(30);
00527     proj.push_back(4);
00528     proj.push_back(20);
00529     proj.push_back(7);
00530     proj.push_back(13);
00531 
00532     testScanCols(nRows, nCols, nClusters, proj, 1, nRows);
00533     resetExecStreamTest();
00534 
00535     // read every 7 rows, same projection as above
00536     testScanCols(
00537         nRows, nCols, nClusters, proj, 7, (int) ceil((double) nRows / 7));
00538     resetExecStreamTest();
00539 
00540 
00541     // read every 37 rows, same projection as above
00542     testScanCols(
00543         nRows, nCols, nClusters, proj, 37, (int) ceil((double) nRows / 37));
00544     resetExecStreamTest();
00545 
00546     // full table scan -- input stream is empty
00547     testScanCols(0, nCols, nClusters, proj, 1, nRows);
00548 
00549     resetExecStreamTest();
00550 
00551     // scan 1000 rows and columns
00552     for (uint i = 0; i < nClusters; i++) {
00553         for (uint j = 0; j < nCols; j++) {
00554             proj.push_back(i * nCols + j);
00555         }
00556     }
00557     testFilterCols(nRows, nCols, nClusters, proj, 1, 1000, false);
00558 
00559     resetExecStreamTest();
00560 
00561     // scan all columns execept the 1st & 2nd of the 1st & 2nd cluster
00562     proj.resize(0);
00563     for (uint i = 0; i < nClusters; i++) {
00564         for (uint j = 0; j < nCols; j++) {
00565             if (!(i < 2 && (j == 0 || j == 1))) {
00566                 proj.push_back(i * nCols + j);
00567             }
00568         }
00569     }
00570     testFilterCols(nRows, nCols, nClusters, proj, 1, 1000, false);
00571 
00572     resetExecStreamTest();
00573 
00574     // skip one cluster; also setup the input so every 7 rows are skipped
00575     proj.resize(0);
00576     for (uint i = 0; i < nClusters - 1; i++) {
00577         for (uint j = 0; j < nCols; j++) {
00578             proj.push_back(i * nCols + j);
00579         }
00580     }
00581     testFilterCols(
00582         nRows, nCols, nClusters, proj, 7, 1000 / 7 + 1, false);
00583 }

void LcsRowScanExecStreamTest::testScanOnEmptyCluster (  ) 

Create an empty cluster with 1 column.

Try reading a rid from it

Definition at line 640 of file LcsRowScanExecStreamTest.cpp.

References attrDesc_int64, bTreeClusters, BTreeBuilder::createEmptyRoot(), BTreeAccessBase::getRootPageId(), BTreeDescriptor::keyProjection, NULL_PAGE_ID, CacheTestBase::pCache, SegmentAccessor::pCacheAccessor, SegStorageTestBase::pRandomSegment, SegmentAccessor::pSegment, BTreeDescriptor::rootPageId, BTreeDescriptor::segmentAccessor, testScanCols(), and BTreeDescriptor::tupleDescriptor.

Referenced by LcsRowScanExecStreamTest().

00641 {
00642     // create empty btree
00643 
00644     BTreeDescriptor &bTreeDescriptor = *(bTreeClusters[0]);
00645 
00646     bTreeDescriptor.segmentAccessor.pSegment = pRandomSegment;
00647     bTreeDescriptor.segmentAccessor.pCacheAccessor = pCache;
00648     bTreeDescriptor.tupleDescriptor.push_back(attrDesc_int64);
00649     bTreeDescriptor.tupleDescriptor.push_back(attrDesc_int64);
00650     bTreeDescriptor.keyProjection.push_back(0);
00651     bTreeDescriptor.rootPageId = NULL_PAGE_ID;
00652 
00653     BTreeBuilder builder(bTreeDescriptor, pRandomSegment);
00654     builder.createEmptyRoot();
00655     bTreeDescriptor.rootPageId = builder.getRootPageId();
00656 
00657     // have testScanCols attempt to scan a single row, although it should
00658     // return no rows
00659 
00660     TupleProjection proj;
00661 
00662     proj.push_back(0);
00663     testScanCols(1, 1, 1, proj, 1, 0);
00664 }

void LcsRowScanExecStreamTest::testScanPastEndOfCluster (  ) 

Create a cluster with only a single row.

Do a rid search on a rid value larger than what's in the table

Definition at line 670 of file LcsRowScanExecStreamTest.cpp.

References bTreeClusters, loadOneCluster(), ExecStreamUnitTestBase::resetExecStreamTest(), and testScanCols().

Referenced by LcsRowScanExecStreamTest().

00671 {
00672     loadOneCluster(1, 1, 0, *(bTreeClusters[0]), false);
00673     resetExecStreamTest();
00674 
00675     // have testScanCols attempt to read 2 rows, although it should only
00676     // be able to read 1
00677 
00678     TupleProjection proj;
00679 
00680     proj.push_back(0);
00681     testScanCols(2, 1, 1, proj, 1, 1);
00682 }

void LcsRowScanExecStreamTest::testCompressedFiltering (  ) 

Definition at line 585 of file LcsRowScanExecStreamTest.cpp.

References loadClusters(), NDUPS, ExecStreamUnitTestBase::resetExecStreamTest(), and testFilterCols().

Referenced by LcsRowScanExecStreamTest().

00586 {
00587     // 1. load clusters, so they can be used by steps 2-5 below
00588     // 2. scan all data in clusters
00589     // 3. test projection
00590     // 4. test skipping of rows
00591     // 5. test full table scan
00592 
00593     uint nRows = 50000;
00594     uint nCols = 12;
00595     uint nClusters = 3;
00596     TupleProjection proj;
00597 
00598     // Test compressed bitmap optimization
00599     //
00600     loadClusters(nRows, nCols, nClusters, true);
00601 
00602     // scan 500*NDUPS+500 rows and columns
00603     proj.resize(0);
00604     for (uint i = 0; i < nClusters; i++) {
00605         for (uint j = 0; j < nCols; j++) {
00606             proj.push_back(i * nCols + j);
00607         }
00608     }
00609     testFilterCols(nRows, nCols, nClusters, proj, 1, 500*NDUPS+500, true);
00610 
00611     resetExecStreamTest();
00612 
00613     // scan all columns execept the 1st & 2nd of the 1st & 2nd cluster
00614     proj.resize(0);
00615     for (uint i = 0; i < nClusters; i++) {
00616         for (uint j = 0; j < nCols; j++) {
00617             if (!(i < 2 && (j == 0 || j == 1))) {
00618                 proj.push_back(i * nCols + j);
00619             }
00620         }
00621     }
00622     testFilterCols(nRows, nCols, nClusters, proj, 1, 500*NDUPS+500, true);
00623 
00624     resetExecStreamTest();
00625 
00626     // skip one cluster
00627     proj.resize(0);
00628     for (uint i = 0; i < nClusters - 1; i++) {
00629         for (uint j = 0; j < nCols; j++) {
00630             proj.push_back(i * nCols + j);
00631         }
00632     }
00633     testFilterCols(nRows, nCols, nClusters, proj, 1, 500*NDUPS+500, true);
00634 }

void LcsRowScanExecStreamTest::testBernoulliSampling (  ) 

Configure Bernoulli sampling, with a specific seed and verify that the expected number of rows are returned.

Definition at line 688 of file LcsRowScanExecStreamTest.cpp.

References loadClusters(), ExecStreamUnitTestBase::resetExecStreamTest(), SAMPLING_BERNOULLI, and testSampleScanCols().

Referenced by LcsRowScanExecStreamTest().

00689 {
00690     uint nRows = 50000;
00691     uint nCols = 12;
00692     uint nClusters = 3;
00693     TupleProjection proj;
00694 
00695     int seed = 19721212;
00696     float rate = 0.1;
00697     TableSamplingMode mode = SAMPLING_BERNOULLI;
00698 
00699     loadClusters(nRows, nCols, nClusters, false);
00700     // note: no need to reset after loadClusters() because already done
00701     // there
00702 
00703     // scan all rows and columns
00704     for (uint i = 0; i < nClusters; i++) {
00705         for (uint j = 0; j < nCols; j++) {
00706             proj.push_back(i * nCols + j);
00707         }
00708     }
00709 
00710     // Full Row Scan (4938 is based on the seed, but determine empirically)
00711     testSampleScanCols(
00712         0, nRows, nCols, nClusters, proj, 1, mode, rate, seed, 0, 4938);
00713     resetExecStreamTest();
00714 
00715     // Skip every other row
00716     testSampleScanCols(
00717         nRows, nRows, nCols, nClusters, proj, 2, mode, rate, seed, 0, 2489);
00718     resetExecStreamTest();
00719 }

void LcsRowScanExecStreamTest::testSystemSampling (  ) 

Configure system sampling, with a specific clump size and verify that the expected number of rows are returned.

Definition at line 726 of file LcsRowScanExecStreamTest.cpp.

References loadClusters(), ExecStreamUnitTestBase::resetExecStreamTest(), SAMPLING_SYSTEM, and testSampleScanCols().

Referenced by LcsRowScanExecStreamTest().

00727 {
00728     uint nRows = 50000;
00729     uint nCols = 12;
00730     uint nClusters = 3;
00731     TupleProjection proj;
00732 
00733     TableSamplingMode mode = SAMPLING_SYSTEM;
00734 
00735     loadClusters(nRows, nCols, nClusters, false);
00736     // note: no need to reset after loadClusters() because already done
00737     // there
00738 
00739     // scan all rows and columns
00740     for (uint i = 0; i < nClusters; i++) {
00741         for (uint j = 0; j < nCols; j++) {
00742             proj.push_back(i * nCols + j);
00743         }
00744     }
00745 
00746     testSampleScanCols(
00747         nRows, nRows, nCols, nClusters, proj, 1, mode, 0.1, -1, 10, 5000);
00748     resetExecStreamTest();
00749 
00750     testSampleScanCols(
00751         nRows, nRows, nCols, nClusters, proj, 1, mode, 1.0, -1, 10, 50000);
00752     resetExecStreamTest();
00753 
00754     testSampleScanCols(
00755         nRows, nRows, nCols, nClusters, proj, 1, mode, 0.33333, -1, 10, 16670);
00756     resetExecStreamTest();
00757 }

SharedExecStream ExecStreamUnitTestBase::prepareSourceGraph ( ExecStreamEmbryo sourceStreamEmbryo  )  [protected, inherited]

Defines and prepares a graph consisting of one source stream.

Parameters:
sourceStreamEmbryo embryonic source stream which produces tuples
Returns:
output buffer stream

Definition at line 41 of file ExecStreamUnitTestBase.cpp.

References ExecStreamUnitTestBase::prepareTransformGraph().

Referenced by FlatFileExecStreamTest::testStream().

00043 {
00044     std::vector<ExecStreamEmbryo> transforms;
00045     return prepareTransformGraph(sourceStreamEmbryo, transforms);
00046 }

SharedExecStream ExecStreamUnitTestBase::prepareTransformGraph ( ExecStreamEmbryo sourceStreamEmbryo,
ExecStreamEmbryo transformStreamEmbryo 
) [protected, inherited]

Defines and prepares a graph consisting of one source stream and one transform stream.

Parameters:
sourceStreamEmbryo embryonic source stream which produces tuples
transformStreamEmbryo embryonic transform stream which processes tuples produced by sourceStreamEmbryo
Returns:
output buffer stream

Definition at line 48 of file ExecStreamUnitTestBase.cpp.

Referenced by LcsClusterReplaceExecStreamTest::loadCluster(), loadOneCluster(), ExecStreamUnitTestBase::prepareSourceGraph(), LcsClusterReplaceExecStreamTest::replaceCluster(), LcsMultiClusterAppendTest::scanCols(), LbmSplicerExecStreamTest::spliceInput(), ExecStreamTestSuite::testBTreeInsertExecStream(), CollectExecStreamTestSuite::testCollectCollectUncollectUncollect(), CollectExecStreamTestSuite::testCollectInts(), CollectExecStreamTestSuite::testCollectUncollect(), CalcExecStreamTestSuite::testConstant(), ExecStreamTestSuite::testCopyExecStream(), ExecStreamTestSuite::testCountAggExecStream(), LhxAggExecStreamTest::testCountImpl(), ExecStreamTestSuite::testDoubleBufferExecStream(), ExecStreamTestSuite::testGroupAggExecStreamNrows(), LhxAggExecStreamTest::testGroupCountImpl(), ExternalSortExecStreamTest::testImpl(), LcsClusterAppendExecStreamTest::testLoadMultiCol(), LcsClusterAppendExecStreamTest::testLoadSingleCol(), LbmNormalizerExecStreamTest::testNormalizer(), ExecStreamTestSuite::testReshapeExecStream(), testSampleScanCols(), testScanCols(), LbmSearchTest::testScanIdx(), LcsClusterAppendExecStreamTest::testScanMultiCol(), LcsClusterAppendExecStreamTest::testScanSingleCol(), ExecStreamTestSuite::testScratchBufferExecStream(), ExecStreamTestSuite::testSegBufferExecStream(), ExecStreamTestSuite::testSingleValueAggExecStream(), LhxAggExecStreamTest::testSingleValueImpl(), LbmSortedAggExecStreamTest::testSortedAgg(), ExecStreamTestSuite::testSumAggExecStream(), LhxAggExecStreamTest::testSumImpl(), LbmUnionExecStreamTest::testUnion(), and LcsClusterReplaceExecStreamTest::verifyCluster().

00051 {
00052     std::vector<ExecStreamEmbryo> transforms;
00053     transforms.push_back(transformStreamEmbryo);
00054     return prepareTransformGraph(sourceStreamEmbryo, transforms);
00055 }

SharedExecStream ExecStreamUnitTestBase::prepareTransformGraph ( ExecStreamEmbryo sourceStreamEmbryo,
std::vector< ExecStreamEmbryo > &  transforms 
) [protected, inherited]

Defines and prepares a graph consisting of one source stream and one or multiple transform streams.

Parameters:
sourceStreamEmbryo embryonic source stream which produces tuples
transforms embryonic transform streams which process tuples produced by sourceStreamEmbryo or a child stream
Returns:
output buffer stream

Definition at line 57 of file ExecStreamUnitTestBase.cpp.

References BUFPROV_PRODUCER, ExecStreamEmbryo::getStream(), ExecStreamUnitTestBase::pGraph, and ExecStreamUnitTestBase::pGraphEmbryo.

00060 {
00061     pGraphEmbryo->saveStreamEmbryo(sourceStreamEmbryo);
00062     std::vector<ExecStreamEmbryo>::iterator it;
00063 
00064     // save all transforms
00065     for (it = transforms.begin(); it != transforms.end(); ++it) {
00066         pGraphEmbryo->saveStreamEmbryo(*it);
00067     }
00068 
00069     // connect streams in a cascade
00070     ExecStreamEmbryo& previousStream = sourceStreamEmbryo;
00071     for (it = transforms.begin(); it != transforms.end(); ++it) {
00072         pGraphEmbryo->addDataflow(
00073             previousStream.getStream()->getName(),
00074             (*it).getStream()->getName());
00075         previousStream = *it;
00076     }
00077 
00078     SharedExecStream pAdaptedStream =
00079         pGraphEmbryo->addAdapterFor(
00080             previousStream.getStream()->getName(),
00081             0,
00082             BUFPROV_PRODUCER);
00083     pGraph->addOutputDataflow(pAdaptedStream->getStreamId());
00084 
00085     pGraphEmbryo->prepareGraph(shared_from_this(), "");
00086     return pAdaptedStream;
00087 }

SharedExecStream ExecStreamUnitTestBase::prepareConfluenceGraph ( ExecStreamEmbryo sourceStreamEmbryo1,
ExecStreamEmbryo sourceStreamEmbryo2,
ExecStreamEmbryo confluenceStreamEmbryo 
) [protected, inherited]

Defines and prepares a graph consisting of two source streams and one confluence stream.

Parameters:
sourceStreamEmbryo1 embryonic source stream which produces tuples
sourceStreamEmbryo2 embryonic source stream which produces tuples
confluenceStreamEmbryo embryonic confluence stream which processes tuples produced by the sourceStreamEmbryos
Returns:
output buffer stream

Definition at line 89 of file ExecStreamUnitTestBase.cpp.

Referenced by ExecStreamUnitTestBase::prepareConfluenceGraph(), ExecStreamTestSuite::testCartesianJoinExecStream(), CorrelationJoinExecStreamTestSuite::testCorrelationJoin(), testFilterCols(), ExecStreamGovernorTest::testGovernor(), LhxJoinExecStreamTest::testImpl(), LbmIntersectExecStreamTest::testIntersect(), ExecStreamTestSuite::testMergeExecStream(), LbmMinusExecStreamTest::testMinus(), and ExecStreamTestSuite::testNestedLoopJoinExecStream().

00093 {
00094     std::vector<ExecStreamEmbryo> sourceStreamEmbryos;
00095     sourceStreamEmbryos.push_back(sourceStreamEmbryo1);
00096     sourceStreamEmbryos.push_back(sourceStreamEmbryo2);
00097     return prepareConfluenceGraph(sourceStreamEmbryos, confluenceStreamEmbryo);
00098 }

SharedExecStream ExecStreamUnitTestBase::prepareConfluenceGraph ( std::vector< ExecStreamEmbryo > &  sourceStreamEmbryos,
ExecStreamEmbryo confluenceStreamEmbryo 
) [protected, inherited]

Defines and prepares a graph consisting of a list of source streams and one confluence stream.

Parameters:
sourceStreamEmbryos list of embryonic source streams that produce tuples
confluenceStreamEmbryo embryonic confluence stream which processes tuples produced by the sourceStreamEmbryos
Returns:
output buffer stream

Definition at line 155 of file ExecStreamUnitTestBase.cpp.

References ExecStreamUnitTestBase::prepareConfluenceGraph().

00158 {
00159     std::vector<std::vector<ExecStreamEmbryo> > sourceStreamEmbryosList;
00160     std::vector<ExecStreamEmbryo>::iterator it;
00161     std::vector<ExecStreamEmbryo> sourceStreamList;
00162     for (it = sourceStreamEmbryos.begin(); it != sourceStreamEmbryos.end();
00163         it++)
00164     {
00165         sourceStreamList.clear();
00166         sourceStreamList.push_back(*it);
00167         sourceStreamEmbryosList.push_back(sourceStreamList);
00168     }
00169 
00170     return
00171         prepareConfluenceGraph(sourceStreamEmbryosList, confluenceStreamEmbryo);
00172 }

SharedExecStream ExecStreamUnitTestBase::prepareConfluenceGraph ( std::vector< std::vector< ExecStreamEmbryo > > &  sourceStreamEmbryosList,
ExecStreamEmbryo confluenceStreamEmbryo 
) [protected, inherited]

Defines and prepares a graph consisting of one or more source streams and one confluence stream.

Each source stream can be a list of streams.

Parameters:
sourceStreamEmbryosList list of embryonic source streams which produce tuples
confluenceStreamEmbryo embryonic confluence stream which processes tuples produced by the source streams
Returns:
output buffer stream

Definition at line 174 of file ExecStreamUnitTestBase.cpp.

References BUFPROV_PRODUCER, ExecStreamEmbryo::getStream(), ExecStreamUnitTestBase::pGraph, and ExecStreamUnitTestBase::pGraphEmbryo.

00177 {
00178     pGraphEmbryo->saveStreamEmbryo(confluenceStreamEmbryo);
00179 
00180     for (int i = 0; i < sourceStreamEmbryosList.size(); i++) {
00181         for (int j = 0; j < sourceStreamEmbryosList[i].size(); j++) {
00182             pGraphEmbryo->saveStreamEmbryo(sourceStreamEmbryosList[i][j]);
00183         }
00184 
00185         // connect streams in each sourceStreamEmbryos list in a cascade
00186         for (int j = 1; j < sourceStreamEmbryosList[i].size(); j++) {
00187             pGraphEmbryo->addDataflow(
00188                 sourceStreamEmbryosList[i][j - 1].getStream()->getName(),
00189                 sourceStreamEmbryosList[i][j].getStream()->getName());
00190         }
00191         pGraphEmbryo->addDataflow(
00192             sourceStreamEmbryosList[i].back().getStream()->getName(),
00193             confluenceStreamEmbryo.getStream()->getName());
00194     }
00195 
00196     SharedExecStream pAdaptedStream =
00197         pGraphEmbryo->addAdapterFor(
00198             confluenceStreamEmbryo.getStream()->getName(), 0,
00199             BUFPROV_PRODUCER);
00200     pGraph->addOutputDataflow(
00201         pAdaptedStream->getStreamId());
00202 
00203     pGraphEmbryo->prepareGraph(shared_from_this(), "");
00204 
00205     return pAdaptedStream;
00206 }

SharedExecStream ExecStreamUnitTestBase::prepareConfluenceTransformGraph ( ExecStreamEmbryo sourceStreamEmbryo1,
ExecStreamEmbryo sourceStreamEmbryo2,
ExecStreamEmbryo confluenceStreamEmbryo,
ExecStreamEmbryo transformStreamEmbryo 
) [protected, inherited]

Defines and prepares a graph consisting of two source streams, one confluence stream, and one transform stream.

Parameters:
sourceStreamEmbryo1 embryonic source stream which produces tuples
sourceStreamEmbryo2 embryonic source stream which produces tuples
confluenceStreamEmbryo embryonic confluence stream which processes tuples produced by the sourceStreamEmbryos
transformStreamEmbryo embryonic transform streams which process tuples produced by a child stream
Returns:
output buffer stream

Definition at line 100 of file ExecStreamUnitTestBase.cpp.

References BUFPROV_PRODUCER, ExecStreamEmbryo::getStream(), ExecStreamUnitTestBase::pGraph, and ExecStreamUnitTestBase::pGraphEmbryo.

Referenced by LhxJoinExecStreamTest::testImpl(), and LbmMinusExecStreamTest::testRestartingMinus().

00105 {
00106     std::vector<ExecStreamEmbryo> sourceStreamEmbryos;
00107     sourceStreamEmbryos.push_back(sourceStreamEmbryo1);
00108     sourceStreamEmbryos.push_back(sourceStreamEmbryo2);
00109 
00110     std::vector<ExecStreamEmbryo>::iterator it;
00111 
00112     for (it = sourceStreamEmbryos.begin(); it != sourceStreamEmbryos.end();
00113         ++it)
00114     {
00115         pGraphEmbryo->saveStreamEmbryo(*it);
00116     }
00117     pGraphEmbryo->saveStreamEmbryo(confluenceStreamEmbryo);
00118 
00119     for (it = sourceStreamEmbryos.begin(); it != sourceStreamEmbryos.end();
00120         ++it)
00121     {
00122         pGraphEmbryo->addDataflow(
00123             (*it).getStream()->getName(),
00124             confluenceStreamEmbryo.getStream()->getName());
00125     }
00126 
00127     std::vector<ExecStreamEmbryo> transforms;
00128     transforms.push_back(transformStreamEmbryo);
00129     ExecStreamEmbryo& previousStream = confluenceStreamEmbryo;
00130 
00131     // save all transforms
00132     for (it = transforms.begin(); it != transforms.end(); ++it) {
00133         pGraphEmbryo->saveStreamEmbryo(*it);
00134     }
00135 
00136     for (it = transforms.begin(); it != transforms.end(); ++it) {
00137         pGraphEmbryo->addDataflow(
00138             previousStream.getStream()->getName(),
00139             (*it).getStream()->getName());
00140         previousStream = *it;
00141     }
00142 
00143 
00144     SharedExecStream pAdaptedStream =
00145         pGraphEmbryo->addAdapterFor(
00146             previousStream.getStream()->getName(),
00147             0,
00148             BUFPROV_PRODUCER);
00149     pGraph->addOutputDataflow(pAdaptedStream->getStreamId());
00150 
00151     pGraphEmbryo->prepareGraph(shared_from_this(), "");
00152     return pAdaptedStream;
00153 }

SharedExecStream ExecStreamUnitTestBase::prepareDAG ( ExecStreamEmbryo srcStreamEmbryo,
ExecStreamEmbryo splitterStreamEmbryo,
std::vector< ExecStreamEmbryo > &  interStreamEmbryos,
ExecStreamEmbryo destStreamEmbryo,
bool  createSink = true,
bool  saveSrc = true 
) [protected, inherited]

Defines and prepares a graph consisting of a source, a splitter, and one or more parallel transform streams which flow together into a confluence stream.

Parameters:
srcStreamEmbryo embryonic source stream which produces tuples
splitterStreamEmbryo embryonic SplitterExecStream which produces tuples for multiple consumers
interStreamEmbryos embryonic intermediate streams which transform tuples; each stream consists of a single embryo
destStreamEmbryo embryonic confluence stream which processes tuples produced by the interStreamEmbryos
createSink if true (the default), creates a final output sink in the stream graph
saveSrc if true (the default), save the source in the stream graph; if false, the save has already been done
Returns:
output buffer stream or null stream if createSink is false

Definition at line 208 of file ExecStreamUnitTestBase.cpp.

Referenced by LcsMultiClusterAppendTest::loadClusters(), LbmSearchTest::loadTableAndIndex(), LbmLoadBitmapTest::testLoad(), ExecStreamTestSuite::testMergeImplicitPullInputs(), ExecStreamTestSuite::testSegBufferReaderWriterExecStream(), and ExecStreamTestSuite::testSplitterPlusBarrier().

00215 {
00216     std::vector<std::vector<ExecStreamEmbryo> > listOfList;
00217 
00218     // Convert interStreamEmbryos to a vector of vectors.  E.g., if
00219     // interStreamEmbryos contains (1, 2, 3), it will get converted to:
00220     // ((1)) ((2)) ((3))
00221     for (uint i = 0; i < interStreamEmbryos.size(); i++) {
00222         std::vector<ExecStreamEmbryo> interStreamEmbryoList;
00223 
00224         interStreamEmbryoList.push_back(interStreamEmbryos[i]);
00225         listOfList.push_back(interStreamEmbryoList);
00226     }
00227     return prepareDAG(
00228         srcStreamEmbryo, splitterStreamEmbryo, listOfList, destStreamEmbryo,
00229         createSink, saveSrc);
00230 }

SharedExecStream ExecStreamUnitTestBase::prepareDAG ( ExecStreamEmbryo srcStreamEmbryo,
ExecStreamEmbryo splitterStreamEmbryo,
std::vector< std::vector< ExecStreamEmbryo > > &  interStreamEmbryosList,
ExecStreamEmbryo destStreamEmbryo,
bool  createSink = true,
bool  saveSrc = true 
) [protected, inherited]

Defines and prepares a graph consisting of a source, a splitter, and one or more parallel transform streams which flow together into a confluence stream.

Parameters:
srcStreamEmbryo embryonic source stream which produces tuples
splitterStreamEmbryo embryonic SplitterExecStream which produces tuples for multiple consumers
interStreamEmbryosList one or more embryonic intermediate streams which transform tuples; each stream can have one more embryos
destStreamEmbryo embryonic confluence stream which processes tuples produced by the interStreamEmbryos
createSink if true (the default), creates a final output sink in the stream graph
saveSrc if true (the default), save the source in the stream graph; if false, the save has already been done
Returns:
output buffer stream or null stream if createSink is false

Definition at line 232 of file ExecStreamUnitTestBase.cpp.

References BUFPROV_PRODUCER, ExecStreamEmbryo::getStream(), ExecStreamUnitTestBase::pGraph, and ExecStreamUnitTestBase::pGraphEmbryo.

00239 {
00240     if (saveSrc) {
00241         pGraphEmbryo->saveStreamEmbryo(srcStreamEmbryo);
00242     }
00243     pGraphEmbryo->saveStreamEmbryo(splitterStreamEmbryo);
00244 
00245     // save all intermediate stream embryos
00246     for (int i = 0; i < interStreamEmbryos.size(); i++) {
00247         for (int j = 0; j < interStreamEmbryos[i].size(); j++) {
00248             pGraphEmbryo->saveStreamEmbryo(interStreamEmbryos[i][j]);
00249         }
00250 
00251         // connect streams in each interStreamEmbryos list in a cascade
00252         for (int j = 1; j < interStreamEmbryos[i].size(); j++) {
00253             pGraphEmbryo->addDataflow(
00254                 interStreamEmbryos[i][j - 1].getStream()->getName(),
00255                 interStreamEmbryos[i][j].getStream()->getName());
00256         }
00257     }
00258 
00259     pGraphEmbryo->saveStreamEmbryo(destStreamEmbryo);
00260 
00261     pGraphEmbryo->addDataflow(
00262         srcStreamEmbryo.getStream()->getName(),
00263         splitterStreamEmbryo.getStream()->getName());
00264 
00265     // connect all inter streams to src and dest
00266     for (int i = 0; i < interStreamEmbryos.size(); i++) {
00267         pGraphEmbryo->addDataflow(
00268             splitterStreamEmbryo.getStream()->getName(),
00269             interStreamEmbryos[i][0].getStream()->getName());
00270         pGraphEmbryo->addDataflow(
00271             interStreamEmbryos[i].back().getStream()->getName(),
00272             destStreamEmbryo.getStream()->getName());
00273     }
00274 
00275     SharedExecStream pAdaptedStream;
00276 
00277     if (createSink) {
00278         pAdaptedStream = pGraphEmbryo->addAdapterFor(
00279             destStreamEmbryo.getStream()->getName(), 0,
00280             BUFPROV_PRODUCER);
00281         pGraph->addOutputDataflow(pAdaptedStream->getStreamId());
00282 
00283         pGraphEmbryo->prepareGraph(shared_from_this(), "");
00284     }
00285 
00286     return pAdaptedStream;
00287 }

void ExecStreamUnitTestBase::verifyOutput ( ExecStream stream,
uint  nRowsExpected,
MockProducerExecStreamGenerator verifier,
bool  stopEarly = false 
) [protected, inherited]

Executes the prepared stream graph and verifies that its output matches that produced by a value generator.

Parameters:
stream output stream from which to read
nRowsExpected number of rows expected
verifier generator for expected values
stopEarly if true, stop once nRowsExpected have been fetched, even if more rows are available; this can be used for simulating the cleanup effect of an error in the middle of execution

Definition at line 325 of file ExecStreamUnitTestBase.cpp.

References TupleData::compute(), EXECBUF_EOS, MockProducerExecStreamGenerator::generateValue(), ExecStreamUnitTestBase::pGraph, ExecStreamTestBase::pResourceGovernor, and ExecStreamTestBase::pScheduler.

Referenced by LcsClusterReplaceExecStreamTest::loadCluster(), LcsMultiClusterAppendTest::loadClusters(), loadOneCluster(), LbmSearchTest::loadTableAndIndex(), LcsClusterReplaceExecStreamTest::replaceCluster(), LcsMultiClusterAppendTest::scanCols(), LbmSplicerExecStreamTest::spliceInput(), ExecStreamTestSuite::testBTreeInsertExecStream(), CollectExecStreamTestSuite::testCollectCollectUncollectUncollect(), CollectExecStreamTestSuite::testCollectUncollect(), CorrelationJoinExecStreamTestSuite::testCorrelationJoin(), ExecStreamTestSuite::testCountAggExecStream(), LhxAggExecStreamTest::testCountImpl(), ExecStreamTestSuite::testDoubleBufferExecStream(), testFilterCols(), ExecStreamTestSuite::testGroupAggExecStreamNrows(), LhxAggExecStreamTest::testGroupCountImpl(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), LbmLoadBitmapTest::testLoad(), LcsClusterAppendExecStreamTest::testLoadMultiCol(), LcsClusterAppendExecStreamTest::testLoadSingleCol(), ExecStreamTestSuite::testMergeImplicitPullInputs(), ExecStreamTestSuite::testNestedLoopJoinExecStream(), LbmNormalizerExecStreamTest::testNormalizer(), ExecStreamTestSuite::testReshapeExecStream(), LbmMinusExecStreamTest::testRestartingMinus(), testSampleScanCols(), testScanCols(), LcsClusterAppendExecStreamTest::testScanMultiCol(), LcsClusterAppendExecStreamTest::testScanSingleCol(), ExecStreamTestSuite::testScratchBufferExecStream(), ExecStreamTestSuite::testSingleValueAggExecStream(), LhxAggExecStreamTest::testSingleValueImpl(), LbmSortedAggExecStreamTest::testSortedAgg(), ExecStreamTestSuite::testSplitterPlusBarrier(), ExecStreamTestSuite::testSumAggExecStream(), LhxAggExecStreamTest::testSumImpl(), and LcsClusterReplaceExecStreamTest::verifyCluster().

00330 {
00331     // TODO:  assertions about output tuple
00332 
00333     pResourceGovernor->requestResources(*pGraph);
00334     pGraph->open();
00335     pScheduler->start();
00336     uint nRows = 0;
00337     for (;;) {
00338         ExecStreamBufAccessor &bufAccessor =
00339             pScheduler->readStream(stream);
00340         if (bufAccessor.getState() == EXECBUF_EOS) {
00341             break;
00342         }
00343         BOOST_REQUIRE(bufAccessor.isConsumptionPossible());
00344         const uint nCol =
00345             bufAccessor.getConsumptionTupleAccessor().size();
00346         BOOST_REQUIRE(nCol == bufAccessor.getTupleDesc().size());
00347         BOOST_REQUIRE(nCol >= 1);
00348         TupleData inputTuple;
00349         inputTuple.compute(bufAccessor.getTupleDesc());
00350         for (;;) {
00351             if (!bufAccessor.demandData()) {
00352                 break;
00353             }
00354             BOOST_REQUIRE(nRows < nRowsExpected);
00355             bufAccessor.unmarshalTuple(inputTuple);
00356             for (int col = 0; col < nCol; ++col) {
00357                 int64_t actualValue =
00358                     *reinterpret_cast<int64_t const *>(inputTuple[col].pData);
00359                 int64_t expectedValue = generator.generateValue(nRows, col);
00360                 if (actualValue != expectedValue) {
00361                     std::cout << "(Row, Col) = (" << nRows << ", " << col <<")"
00362                               << std::endl;
00363                     BOOST_CHECK_EQUAL(expectedValue,actualValue);
00364                     return;
00365                 }
00366             }
00367             bufAccessor.consumeTuple();
00368             ++nRows;
00369             if (stopEarly && nRows == nRowsExpected) {
00370                 return;
00371             }
00372         }
00373     }
00374     BOOST_CHECK_EQUAL(nRowsExpected,nRows);
00375 }

void ExecStreamUnitTestBase::verifyConstantOutput ( ExecStream stream,
const TupleData expectedTuple,
uint  nRowsExpected 
) [protected, inherited]

Executes the prepared stream graph and verifies that all output tuples matche an expected and given one.

Parameters:
stream output stream from which to read
expectedTuple 
nRowsExpected 

Definition at line 377 of file ExecStreamUnitTestBase.cpp.

References TupleData::compute(), EXECBUF_EOS, ExecStreamUnitTestBase::pGraph, ExecStreamTestBase::pResourceGovernor, TuplePrinter::print(), and ExecStreamTestBase::pScheduler.

Referenced by ExecStreamTestSuite::testCartesianJoinExecStream(), CollectExecStreamTestSuite::testCollectInts(), CalcExecStreamTestSuite::testConstant(), ExecStreamTestSuite::testCopyExecStream(), ExecStreamGovernorTest::testGovernor(), ExecStreamTestSuite::testMergeExecStream(), ExecStreamTestSuite::testSegBufferExecStream(), and ExecStreamTestSuite::testSegBufferReaderWriterExecStream().

00381 {
00382     // TODO:  assertions about output tuple
00383 
00384     pResourceGovernor->requestResources(*pGraph);
00385     pGraph->open();
00386     pScheduler->start();
00387     uint nRows = 0;
00388     for (;;) {
00389         ExecStreamBufAccessor &bufAccessor =
00390             pScheduler->readStream(stream);
00391         if (bufAccessor.getState() == EXECBUF_EOS) {
00392             break;
00393         }
00394         BOOST_REQUIRE(bufAccessor.isConsumptionPossible());
00395 
00396         if (!bufAccessor.demandData()) {
00397             break;
00398         }
00399         BOOST_REQUIRE(nRows < nRowsExpected);
00400 
00401         TupleData actualTuple;
00402         actualTuple.compute(bufAccessor.getTupleDesc());
00403         bufAccessor.unmarshalTuple(actualTuple);
00404 
00405         int c = bufAccessor.getTupleDesc().compareTuples(
00406                                expectedTuple, actualTuple);
00407         bufAccessor.consumeTuple();
00408         ++nRows;
00409         if (c) {
00410 #if 1
00411             TupleDescriptor statusDesc = bufAccessor.getTupleDesc();
00412             TuplePrinter tuplePrinter;
00413             tuplePrinter.print(std::cout, statusDesc, actualTuple);
00414             tuplePrinter.print(std::cout, statusDesc, expectedTuple);
00415             std::cout << std::endl;
00416 #endif
00417             BOOST_CHECK_EQUAL(0,c);
00418             break;
00419         }
00420     }
00421     BOOST_CHECK_EQUAL(nRowsExpected, nRows);
00422 }

void ExecStreamUnitTestBase::verifyBufferedOutput ( ExecStream stream,
TupleDescriptor  outputTupleDesc,
uint  nRowsExpected,
PBuffer  expectedBuffer 
) [protected, inherited]

Executes the prepared stream graph and verifies the resultant tuples against a set of tuples supplied in an input buffer.

Parameters:
stream output stream from which to read
outputTupleDesc descriptor of expected output tuple
nRowsExpected number of rows expected
expectedBuffer buffer containing expected tuples

Definition at line 424 of file ExecStreamUnitTestBase.cpp.

References TupleDescriptor::compareTuples(), TupleData::compute(), TupleAccessor::compute(), EXECBUF_EOS, TupleAccessor::getCurrentByteCount(), ExecStreamUnitTestBase::pGraph, ExecStreamTestBase::pResourceGovernor, ExecStreamTestBase::pScheduler, TupleAccessor::setCurrentTupleBuf(), and TupleAccessor::unmarshal().

Referenced by LbmIntersectExecStreamTest::testIntersect(), LbmMinusExecStreamTest::testMinus(), LbmSearchTest::testScanIdx(), and LbmUnionExecStreamTest::testUnion().

00429 {
00430     // TODO:  assertions about output tuple
00431 
00432     TupleAccessor expectedOutputAccessor;
00433     expectedOutputAccessor.compute(outputTupleDesc);
00434     TupleData expectedTuple(outputTupleDesc);
00435     uint bufOffset = 0;
00436     pResourceGovernor->requestResources(*pGraph);
00437     pGraph->open();
00438     pScheduler->start();
00439     uint nRows = 0;
00440     for (;;) {
00441         ExecStreamBufAccessor &bufAccessor =
00442             pScheduler->readStream(stream);
00443         if (bufAccessor.getState() == EXECBUF_EOS) {
00444             break;
00445         }
00446         BOOST_REQUIRE(bufAccessor.getTupleDesc() == outputTupleDesc);
00447         BOOST_REQUIRE(bufAccessor.isConsumptionPossible());
00448         const uint nCol =
00449             bufAccessor.getConsumptionTupleAccessor().size();
00450         BOOST_REQUIRE(nCol == bufAccessor.getTupleDesc().size());
00451         BOOST_REQUIRE(nCol >= 1);
00452         TupleData inputTuple;
00453         inputTuple.compute(bufAccessor.getTupleDesc());
00454         for (;;) {
00455             if (!bufAccessor.demandData()) {
00456                 break;
00457             }
00458             BOOST_REQUIRE(nRows < nRowsExpected);
00459             bufAccessor.unmarshalTuple(inputTuple);
00460             expectedOutputAccessor.setCurrentTupleBuf(
00461                 expectedBuffer + bufOffset);
00462             expectedOutputAccessor.unmarshal(expectedTuple);
00463             int c = outputTupleDesc.compareTuples(inputTuple, expectedTuple);
00464             if (c) {
00465                 std::cout << "(Row) = (" << nRows << ")"
00466                     << " -- Tuples don't match"<< std::endl;
00467                 BOOST_CHECK_EQUAL(0,c);
00468                 return;
00469             }
00470             bufAccessor.consumeTuple();
00471             bufOffset += expectedOutputAccessor.getCurrentByteCount();
00472             ++nRows;
00473         }
00474     }
00475     BOOST_CHECK_EQUAL(nRowsExpected,nRows);
00476 }

void ExecStreamUnitTestBase::resetExecStreamTest (  )  [protected, inherited]

Reset stream graph so multiple iterations of a method can be called within a single testcase.

Definition at line 305 of file ExecStreamUnitTestBase.cpp.

References ExecStreamTestBase::newScheduler(), ExecStreamTestBase::newStreamGraph(), ExecStreamTestBase::newStreamGraphEmbryo(), ExecStreamUnitTestBase::pGraph, ExecStreamUnitTestBase::pGraphEmbryo, ExecStreamTestBase::pResourceGovernor, ExecStreamTestBase::pScheduler, and ExecStreamUnitTestBase::tearDownExecStreamTest().

Referenced by loadClusters(), LbmLoadBitmapTest::testAppend(), testBernoulliSampling(), LcsClusterReplaceExecStreamTest::testClusterReplace(), testCompressedFiltering(), LbmSplicerExecStreamTest::testLER5968(), LbmSplicerExecStreamTest::testLER6473(), LcsMultiClusterAppendTest::testLoad(), LcsClusterAppendExecStreamTest::testMultiColConstNewRoot(), LcsClusterAppendExecStreamTest::testMultiColConstOldRoot(), LcsClusterAppendExecStreamTest::testMultiColNoDupNewRoot(), LcsClusterAppendExecStreamTest::testMultiColNoDupOldRoot(), LcsClusterAppendExecStreamTest::testMultiColStairNewRoot(), LcsClusterAppendExecStreamTest::testMultiColStairOldRoot(), LbmSearchTest::testMultipleRanges(), ExecStreamGovernorTest::testReturnResources(), LbmSearchTest::testScanIdx(), testScanPastEndOfCluster(), testScans(), LcsClusterAppendExecStreamTest::testSingleColConstNewRoot(), LcsClusterAppendExecStreamTest::testSingleColConstOldRoot(), LcsClusterAppendExecStreamTest::testSingleColNoDupNewRoot(), LcsClusterAppendExecStreamTest::testSingleColNoDupOldRoot(), LcsClusterAppendExecStreamTest::testSingleColStairNewRoot(), LcsClusterAppendExecStreamTest::testSingleColStairOldRoot(), LbmSplicerExecStreamTest::testSpliceRids(), LbmSplicerExecStreamTest::testSpliceWithKeys(), and testSystemSampling().

00306 {
00307     if (pScheduler) {
00308         pScheduler->stop();
00309     }
00310     tearDownExecStreamTest();
00311 
00312     pScheduler.reset(newScheduler());
00313     pGraph = newStreamGraph();
00314     pGraphEmbryo = newStreamGraphEmbryo(pGraph);
00315     pGraph->setResourceGovernor(pResourceGovernor);
00316 }

void ExecStreamUnitTestBase::tearDownExecStreamTest (  )  [protected, virtual, inherited]

ExecStream-specific handler called from testCaseTearDown.

Reimplemented from ExecStreamTestBase.

Definition at line 319 of file ExecStreamUnitTestBase.cpp.

References ExecStreamUnitTestBase::pGraph, and ExecStreamUnitTestBase::pGraphEmbryo.

Referenced by ExecStreamUnitTestBase::resetExecStreamTest().

00320 {
00321     pGraph.reset();
00322     pGraphEmbryo.reset();
00323 }

SharedExecStreamGraph ExecStreamTestBase::newStreamGraph (  )  [protected, virtual, inherited]

Creates a stream graph.

Definition at line 37 of file ExecStreamTestBase.cpp.

References ExecStreamGraph::newExecStreamGraph().

Referenced by ExecStreamUnitTestBase::resetExecStreamTest(), and ExecStreamUnitTestBase::testCaseSetUp().

00038 {
00039     SharedExecStreamGraph pGraph = ExecStreamGraph::newExecStreamGraph();
00040     pGraph->enableDummyTxnId(true);
00041     return pGraph;
00042 }

SharedExecStreamGraphEmbryo ExecStreamTestBase::newStreamGraphEmbryo ( SharedExecStreamGraph   )  [protected, virtual, inherited]

Creates an embryo for a stream graph.

Definition at line 45 of file ExecStreamTestBase.cpp.

References CacheTestBase::pCache, ExecStreamTestBase::pScheduler, and SegStorageTestBase::pSegmentFactory.

Referenced by ExecStreamUnitTestBase::resetExecStreamTest(), and ExecStreamUnitTestBase::testCaseSetUp().

00046 {
00047     return SharedExecStreamGraphEmbryo(
00048         new ExecStreamGraphEmbryo(
00049             g, pScheduler, pCache, pSegmentFactory));
00050 }

ExecStreamScheduler * ExecStreamTestBase::newScheduler (  )  [protected, virtual, inherited]

Creates a scheduler.

Reimplemented in ParallelExecStreamSchedulerTest.

Definition at line 52 of file ExecStreamTestBase.cpp.

Referenced by ExecStreamUnitTestBase::resetExecStreamTest(), and ExecStreamTestBase::testCaseSetUp().

00053 {
00054     return new DfsTreeExecStreamScheduler(
00055         shared_from_this(),
00056         "DfsTreeExecStreamScheduler");
00057 }

ExecStreamGovernor * ExecStreamTestBase::newResourceGovernor ( ExecStreamResourceKnobs const &  knobSettings,
ExecStreamResourceQuantity const &  resourcesAvailable 
) [protected, virtual, inherited]

Creates the resource governor.

Definition at line 59 of file ExecStreamTestBase.cpp.

Referenced by ExecStreamTestBase::testCaseSetUp().

00062 {
00063     return new SimpleExecStreamGovernor(
00064         knobSettings, resourcesAvailable, shared_from_this(),
00065         "SimpleExecStreamGovernor");
00066 }

void SegStorageTestBase::openStorage ( DeviceMode  openMode  )  [virtual, inherited]

Reimplemented from CacheTestBase.

Reimplemented in SegmentTestBase.

Definition at line 31 of file SegStorageTestBase.cpp.

References SegStorageTestBase::openSegmentStorage(), and CacheTestBase::openStorage().

Referenced by SegStorageTestBase::openRandomSegment(), SegmentTestBase::openStorage(), LhxHashTableTest::testCaseSetUp(), ExecStreamTestBase::testCaseSetUp(), BTreeTest::testCaseSetUp(), BTreeReadersTest::testCaseSetUp(), LbmEntryTest::testCaseSetUp(), SegPageIterTest::testIter(), SegPageEntryIterTest::testIter(), SegStreamTest::testMarkReset(), SegStreamTest::testReadSeg(), LogicalTxnTest::testTxn(), SegStreamTest::testWriteSeg(), and SegStreamTest::testWriteSpillAndRead().

00032 {
00033     CacheTestBase::openStorage(openMode);
00034     openSegmentStorage(openMode);
00035 }

void SegStorageTestBase::openSegmentStorage ( DeviceMode  openMode  )  [virtual, inherited]

Reimplemented in LinearViewSegmentTest, SnapshotSegmentTestBase, and VersionedSegmentTest.

Definition at line 37 of file SegStorageTestBase.cpp.

References CacheTestBase::cbPageFull, DeviceMode::create, SegStorageTestBase::createLinearDeviceSegment(), CacheTestBase::dataDeviceId, SegStorageTestBase::pLinearSegment, and CacheTestBase::pRandomAccessDevice.

Referenced by VersionedSegmentTest::openSegmentStorage(), and SegStorageTestBase::openStorage().

00038 {
00039     pLinearSegment = createLinearDeviceSegment(
00040         dataDeviceId,
00041         openMode.create ? 0
00042         : pRandomAccessDevice->getSizeInBytes() / cbPageFull);
00043 }

void SegStorageTestBase::openRandomSegment (  )  [virtual, inherited]

Reimplemented in LcsClusterReplaceExecStreamTest.

Definition at line 45 of file SegStorageTestBase.cpp.

References SegStorageTestBase::closeStorage(), DeviceMode::load, SegStorageTestBase::openStorage(), SegStorageTestBase::pLinearSegment, SegStorageTestBase::pRandomSegment, and SegStorageTestBase::pSegmentFactory.

Referenced by RandomAllocationSegmentTest::testAllocateAndDeallocate(), LhxHashTableTest::testCaseSetUp(), ExecStreamUnitTestBase::testCaseSetUp(), BTreeTest::testCaseSetUp(), and BTreeReadersTest::testCaseSetUp().

00046 {
00047     // reopen will interpret pages as already allocated, which
00048     // is what RandomAllocationSegment expects
00049     closeStorage();
00050     openStorage(DeviceMode::load);
00051     pRandomSegment = pSegmentFactory->newRandomAllocationSegment(
00052         pLinearSegment, true);
00053     pLinearSegment.reset();
00054 }

SharedSegment SegStorageTestBase::createLinearDeviceSegment ( DeviceId  deviceId,
uint  nPages 
) [inherited]

Definition at line 56 of file SegStorageTestBase.cpp.

References LinearDeviceSegmentParams::firstBlockId, LinearDeviceSegmentParams::nPagesAllocated, LinearDeviceSegmentParams::nPagesMin, CacheTestBase::pCache, SegStorageTestBase::pSegmentFactory, CompoundId::setBlockNum(), and CompoundId::setDeviceId().

Referenced by VersionedSegmentTest::openSegmentStorage(), SnapshotSegmentTestBase::openSegmentStorage(), SegStorageTestBase::openSegmentStorage(), and LinearViewSegmentTest::openSegmentStorage().

00058 {
00059     BlockId blockId(0);
00060     CompoundId::setDeviceId(blockId,deviceId);
00061     CompoundId::setBlockNum(blockId,0);
00062     LinearDeviceSegmentParams deviceParams;
00063     deviceParams.firstBlockId = blockId;
00064     deviceParams.nPagesMin = nPages;
00065     deviceParams.nPagesAllocated = nPages;
00066     return pSegmentFactory->newLinearDeviceSegment(
00067         pCache,deviceParams);
00068 }

void SegStorageTestBase::closeLinearSegment (  )  [inherited]

Definition at line 70 of file SegStorageTestBase.cpp.

References SegStorageTestBase::pLinearSegment.

Referenced by VersionedSegmentTest::closeStorage(), SnapshotSegmentTestBase::closeStorage(), SegStorageTestBase::closeStorage(), and SnapshotSegmentTest::testUncommittedReads().

00071 {
00072     if (pLinearSegment) {
00073         assert(pLinearSegment.unique());
00074         pLinearSegment.reset();
00075     }
00076 }

void SegStorageTestBase::closeRandomSegment (  )  [inherited]

Definition at line 78 of file SegStorageTestBase.cpp.

References SegStorageTestBase::pRandomSegment.

Referenced by VersionedSegmentTest::closeStorage(), and SegStorageTestBase::closeStorage().

00079 {
00080     if (pRandomSegment) {
00081         assert(pRandomSegment.unique());
00082         pRandomSegment.reset();
00083     }
00084 }

void SegStorageTestBase::closeVersionedRandomSegment (  )  [inherited]

Definition at line 86 of file SegStorageTestBase.cpp.

References SegStorageTestBase::pVersionedRandomSegment.

Referenced by SnapshotSegmentTestBase::closeStorage(), and SegStorageTestBase::closeStorage().

00087 {
00088     if (pVersionedRandomSegment) {
00089         assert(pVersionedRandomSegment.unique());
00090         pVersionedRandomSegment.reset();
00091     }
00092 }

void SegStorageTestBase::closeSnapshotRandomSegment (  )  [inherited]

Definition at line 94 of file SegStorageTestBase.cpp.

References SegStorageTestBase::pSnapshotRandomSegment.

Referenced by SnapshotSegmentTestBase::closeStorage().

00095 {
00096     if (pSnapshotRandomSegment) {
00097         assert(pSnapshotRandomSegment.unique());
00098         pSnapshotRandomSegment.reset();
00099     }
00100 }

void SegStorageTestBase::closeStorage (  )  [virtual, inherited]

Reimplemented from CacheTestBase.

Reimplemented in SnapshotSegmentTestBase, and VersionedSegmentTest.

Definition at line 102 of file SegStorageTestBase.cpp.

References SegStorageTestBase::closeLinearSegment(), SegStorageTestBase::closeRandomSegment(), CacheTestBase::closeStorage(), and SegStorageTestBase::closeVersionedRandomSegment().

Referenced by VersionedSegmentTest::closeStorage(), SnapshotSegmentTestBase::closeStorage(), SegStorageTestBase::openRandomSegment(), SegPageIterTest::testIter(), SegPageEntryIterTest::testIter(), SegStreamTest::testMarkReset(), SegStreamTest::testReadSeg(), SegmentTestBase::testSingleThread(), SegStreamTest::testWriteSeg(), and SegStreamTest::testWriteSpillAndRead().

00103 {
00104     closeLinearSegment();
00105     closeRandomSegment();
00106     closeVersionedRandomSegment();
00107     // TODO:  assert pSegmentFactory.unique(), but not here
00108     CacheTestBase::closeStorage();
00109 }

Cache & CacheTestBase::getCache (  )  [inherited]

Definition at line 42 of file CacheTestBase.cpp.

References CacheTestBase::pCache.

Referenced by CacheTest::lockPage(), CacheTest::prefetchBatch(), SegmentTestBase::prefetchPage(), CacheTest::prefetchPage(), PagingTestBase::testCacheResize(), PagingTestBase::testCheckpoint(), PagingTestBase::testOp(), PagingTestBase::testScratch(), SegmentTestBase::unlockPage(), and CacheTest::unlockPage().

00043 {
00044     return *pCache;
00045 }

SharedCache CacheTestBase::newCache (  )  [virtual, inherited]

Definition at line 66 of file CacheTestBase.cpp.

References CacheTestBase::cacheParams, Cache::newCache(), CacheTestBase::victimLRU, CacheTestBase::victimPolicy, CacheTestBase::victimRandom, and CacheTestBase::victimTwoQ.

Referenced by CacheTestBase::openStorage().

00067 {
00068     switch (victimPolicy) {
00069     case victimRandom:
00070         return SharedCache(
00071             new RandomCache(cacheParams),
00072             ClosableObjectDestructor());
00073     case victimLRU:
00074         return SharedCache(
00075             new LRUCache(cacheParams),
00076             ClosableObjectDestructor());
00077     case victimTwoQ:
00078         return Cache::newCache(cacheParams);
00079     default:
00080         permAssert(false);
00081     }
00082 }

SharedRandomAccessDevice CacheTestBase::openDevice ( std::string  devName,
DeviceMode  openMode,
uint  nDevicePages,
DeviceId  deviceId 
) [inherited]

Definition at line 84 of file CacheTestBase.cpp.

References CacheTestBase::cbPageFull, DeviceMode::create, CacheTestBase::pCache, and FileSystem::remove().

Referenced by VersionedSegmentTest::openSegmentStorage(), SnapshotSegmentTestBase::openSegmentStorage(), and CacheTestBase::openStorage().

00087 {
00088     if (openMode.create) {
00089         FileSystem::remove(devName.c_str());
00090     }
00091     SharedRandomAccessDevice pDevice(
00092         new RandomAccessFileDevice(devName,openMode));
00093     if (openMode.create) {
00094         pDevice->setSizeInBytes(nDevicePages*cbPageFull);
00095     }
00096     pCache->registerDevice(deviceId,pDevice);
00097     return pDevice;
00098 }

void CacheTestBase::closeDevice ( DeviceId  deviceId,
SharedRandomAccessDevice pDevice 
) [inherited]

Definition at line 130 of file CacheTestBase.cpp.

References CHECKPOINT_FLUSH_AND_UNMAP, and CacheTestBase::pCache.

Referenced by VersionedSegmentTest::closeStorage(), SnapshotSegmentTestBase::closeStorage(), and CacheTestBase::closeStorage().

00132 {
00133     if (!pDevice) {
00134         return;
00135     }
00136     DeviceIdPagePredicate pagePredicate(deviceId);
00137     pCache->checkpointPages(pagePredicate,CHECKPOINT_FLUSH_AND_UNMAP);
00138     pCache->unregisterDevice(deviceId);
00139     assert(pDevice.unique());
00140     pDevice.reset();
00141 }

void TestBase::snooze ( uint  nSeconds  )  [protected, inherited]

Definition at line 263 of file TestBase.cpp.

Referenced by DatabaseTest::executeForceTxn(), ThreadedTestBase::runThreadedTestCase(), PagingTestBase::testCacheResize(), BTreeTxnTest::testCheckpoint(), PagingTestBase::testCheckpointGuarded(), PagingTestBase::testPrefetch(), and PagingTestBase::testPrefetchBatch().

00264 {
00265 #ifdef __MSVC__
00266     ::_sleep(nSeconds*1000);
00267 #else
00268     ::sleep(nSeconds);
00269 #endif
00270 }

void TestBase::readParams ( int  argc,
char **  argv 
) [static, inherited]

Parses the command line.

format: [-v] [-t TEST | -all] {param=val}* [CONFIGFILE | -] Normally, the test program runs the default test cases. With the option "-all", runs the extra test cases as well. With the option "-t TEST", runs only the single test case named TEST. CONFIGFILE is read to load configuration parameters. Configuration parameters can also be set ad hoc, from the command line, as pairs name=val. These take precedence.

Definition at line 108 of file TestBase.cpp.

References TestBase::configMap, ConfigMap::dumpParams(), ConfigMap::isParamSet(), ConfigMap::mergeFrom(), TestBase::paramDictionaryFileName, ConfigMap::readParams(), TestBase::runAll, TestBase::runSingle, ConfigMap::setStringParam(), and verbose.

00109 {
00110     bool verbose = false;
00111     ConfigMap adhocMap;
00112 
00113     for (int i = 1; i < argc; ++i) {
00114         std::string arg = argv[i];
00115         if (argv[i][0] == '-') {
00116             if (arg == "-v") {
00117                 verbose = true;
00118             } else if (arg == "-") {
00119                 configMap.readParams(std::cin);
00120             } else if (arg == "-all") {
00121                 runAll = true;
00122             } else if (arg == "-t") {   // -t TEST
00123                 permAssert(i + 1 < argc);
00124                 runSingle = argv[++i];
00125             } else if (arg[1] == 't') { // allow -tTEST
00126                 runSingle = arg.substr(2);
00127             }
00128         } else {
00129             int i = arg.find("=");
00130             if ((0 < i) && (i < arg.size())) {
00131                 // an ad hoc parameter
00132                 std::string key = arg.substr(0,i);
00133                 std::string val = arg.substr(i + 1);
00134                 adhocMap.setStringParam(key,val);
00135             } else {
00136                 // a config file name
00137                 std::ifstream configFile(arg.c_str());
00138                 assert(configFile.good());
00139                 configMap.readParams(configFile);
00140             }
00141         }
00142     }
00143     configMap.mergeFrom(adhocMap);
00144 
00145     // set a default dictionary file location for use by tests that need a
00146     // small non-random sorted data set
00147     if (!configMap.isParamSet(paramDictionaryFileName)) {
00148         std::string dictFileName = "dictWords";
00149         configMap.setStringParam(paramDictionaryFileName,dictFileName);
00150     }
00151 
00152     if (verbose) {
00153         configMap.dumpParams(std::cout);
00154     }
00155 }

TestSuite * TestBase::releaseTestSuite (  )  [inherited]

Definition at line 157 of file TestBase.cpp.

References TestBase::TestCaseGroup::addAllToTestSuite(), TestBase::defaultTests, TestBase::extraTests, TestBase::TestCaseGroup::findTest(), TestBase::pTestObj, TestBase::pTestSuite, TestBase::runAll, TestBase::runSingle, and TestBase::testName.

00158 {
00159     assert(pTestObj);
00160     assert(pTestObj.use_count() > 1);
00161 
00162     // release self-reference now that all test cases have been registered
00163     pTestObj.reset();
00164 
00165     TestSuite* pTestSuite = BOOST_TEST_SUITE(testName.c_str());
00166 
00167     if (runSingle.size()) {
00168         test_unit *p =  defaultTests.findTest(runSingle);
00169         if (!p) {
00170             p = extraTests.findTest(runSingle);
00171         }
00172         if (!p) {
00173             std::cerr << "test " << runSingle << " not found\n";
00174             exit(2);
00175         }
00176         pTestSuite->add(p);
00177     } else {
00178         defaultTests.addAllToTestSuite(pTestSuite);
00179         if (runAll) {
00180             extraTests.addAllToTestSuite(pTestSuite);
00181         }
00182     }
00183     return pTestSuite;
00184 }

void TestBase::beforeTestCase ( std::string  testCaseName  )  [inherited]

Definition at line 214 of file TestBase.cpp.

References TestBase::configMap, TraceSource::initTraceSource(), AutoBacktrace::install(), TestBase::notifyTrace(), AutoBacktrace::setOutputStream(), AutoBacktrace::setTraceTarget(), TestBase::testName, and TRACE_INFO.

00215 {
00216     notifyTrace(testName,TRACE_INFO,"ENTER:  " + testCaseName);
00217 
00218     // Install the AutoBacktrace signal handler now, after
00219     // boost::execution_monitor::catch_signals() has installed its own, so that
00220     // on SIGABRT AutoBacktrace goes first, prints the backtrace, then chains
00221     // to boost, which handles the error.
00222     AutoBacktrace::setOutputStream();
00223     AutoBacktrace::setTraceTarget(shared_from_this());
00224     AutoBacktrace::install();
00225     configMap.initTraceSource(shared_from_this(), "testConfig");
00226 }

void TestBase::afterTestCase ( std::string  testCaseName  )  [inherited]

Definition at line 228 of file TestBase.cpp.

References TestBase::configMap, TraceSource::disableTracing(), TestBase::notifyTrace(), AutoBacktrace::setTraceTarget(), TestBase::testName, and TRACE_INFO.

00229 {
00230     AutoBacktrace::setTraceTarget();
00231     configMap.disableTracing();
00232     notifyTrace(testName,TRACE_INFO,"LEAVE:  " + testCaseName);
00233 }

void TestBase::notifyTrace ( std::string  source,
TraceLevel  level,
std::string  message 
) [virtual, inherited]

Receives notification when a trace event occurs.

Parameters:
source the facility from which the message originated
level the trace event severity level
message the text of the message

Implements TraceTarget.

Definition at line 243 of file TestBase.cpp.

References TestBase::traceFile, TestBase::traceMutex, TestBase::traceStdout, and TestBase::traceStream.

Referenced by TestBase::afterTestCase(), and TestBase::beforeTestCase().

00244 {
00245     if (traceFile || traceStdout) {
00246         StrictMutexGuard traceMutexGuard(traceMutex);
00247         if (traceFile) {
00248             traceStream << "[" << source << "] " << message << std::endl;
00249             traceStream.flush();
00250         }
00251         if (traceStdout) {
00252             std::cout << "[" << source << "] " << message << std::endl;
00253             std::cout.flush();
00254         }
00255     }
00256 }

TraceLevel TestBase::getSourceTraceLevel ( std::string  source  )  [virtual, inherited]

Gets the level at which a particular source should be traced.

Parameters:
source name of source to be traced
Returns:
minimum severity level which should be traced

Implements TraceTarget.

Definition at line 258 of file TestBase.cpp.

References TestBase::traceLevel.

Referenced by LbmExecStreamTestBase::generateBitmaps().

00259 {
00260     return traceLevel;
00261 }


Member Data Documentation

const uint LcsRowScanExecStreamTest::NDUPS = 20 [static, protected]

Definition at line 54 of file LcsRowScanExecStreamTest.cpp.

Referenced by loadOneCluster(), testCompressedFiltering(), and testFilterCols().

StandardTypeDescriptorFactory LcsRowScanExecStreamTest::stdTypeFactory [protected]

Definition at line 55 of file LcsRowScanExecStreamTest.cpp.

Referenced by testCaseSetUp(), and testFilterCols().

TupleAttributeDescriptor LcsRowScanExecStreamTest::attrDesc_int64 [protected]

Definition at line 56 of file LcsRowScanExecStreamTest.cpp.

Referenced by loadOneCluster(), testCaseSetUp(), testFilterCols(), testSampleScanCols(), testScanCols(), and testScanOnEmptyCluster().

TupleAttributeDescriptor LcsRowScanExecStreamTest::attrDesc_bitmap [protected]

Definition at line 57 of file LcsRowScanExecStreamTest.cpp.

Referenced by testCaseSetUp(), testFilterCols(), testSampleScanCols(), and testScanCols().

TupleAttributeDescriptor LcsRowScanExecStreamTest::attrDesc_char1 [protected]

Definition at line 58 of file LcsRowScanExecStreamTest.cpp.

Referenced by testCaseSetUp(), and testFilterCols().

uint LcsRowScanExecStreamTest::bitmapColSize [protected]

Definition at line 59 of file LcsRowScanExecStreamTest.cpp.

Referenced by generateBitmaps(), testCaseSetUp(), testFilterCols(), testSampleScanCols(), and testScanCols().

vector<boost::shared_ptr<BTreeDescriptor> > LcsRowScanExecStreamTest::bTreeClusters [protected]

Definition at line 61 of file LcsRowScanExecStreamTest.cpp.

Referenced by loadClusters(), testCaseTearDown(), testFilterCols(), testSampleScanCols(), testScanCols(), testScanOnEmptyCluster(), and testScanPastEndOfCluster().

SharedExecStreamGraph ExecStreamUnitTestBase::pGraph [protected, inherited]

Definition at line 46 of file ExecStreamUnitTestBase.h.

Referenced by ExecStreamUnitTestBase::prepareConfluenceGraph(), ExecStreamUnitTestBase::prepareConfluenceTransformGraph(), ExecStreamUnitTestBase::prepareDAG(), ExecStreamUnitTestBase::prepareTransformGraph(), ExecStreamUnitTestBase::resetExecStreamTest(), LbmSplicerExecStreamTest::spliceInput(), ExecStreamUnitTestBase::tearDownExecStreamTest(), ExecStreamTestSuite::testBTreeInsertExecStream(), ExecStreamUnitTestBase::testCaseSetUp(), CorrelationJoinExecStreamTestSuite::testCorrelationJoin(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), LbmLoadBitmapTest::testLoad(), ExecStreamTestSuite::testReshapeExecStream(), LbmSearchTest::testScanIdx(), ExecStreamUnitTestBase::verifyBufferedOutput(), ExecStreamUnitTestBase::verifyConstantOutput(), FlatFileExecStreamTest::verifyOutput(), and ExecStreamUnitTestBase::verifyOutput().

SharedExecStreamGraphEmbryo ExecStreamUnitTestBase::pGraphEmbryo [protected, inherited]

Definition at line 47 of file ExecStreamUnitTestBase.h.

Referenced by ExecStreamUnitTestBase::prepareConfluenceGraph(), ExecStreamUnitTestBase::prepareConfluenceTransformGraph(), ExecStreamUnitTestBase::prepareDAG(), ExecStreamUnitTestBase::prepareTransformGraph(), ExecStreamUnitTestBase::resetExecStreamTest(), ExecStreamUnitTestBase::tearDownExecStreamTest(), and ExecStreamUnitTestBase::testCaseSetUp().

const uint ExecStreamTestBase::DefaultCacheReservePercent = 5 [static, protected, inherited]

Definition at line 45 of file ExecStreamTestBase.h.

Referenced by ExecStreamTestBase::testCaseSetUp().

const uint ExecStreamTestBase::DefaultConcurrentStatements = 4 [static, protected, inherited]

Definition at line 47 of file ExecStreamTestBase.h.

Referenced by ExecStreamTestBase::testCaseSetUp().

SharedExecStreamScheduler ExecStreamTestBase::pScheduler [protected, inherited]

Definition at line 49 of file ExecStreamTestBase.h.

Referenced by ExecStreamTestBase::newStreamGraphEmbryo(), ExecStreamUnitTestBase::resetExecStreamTest(), ExecStreamTestBase::testCaseSetUp(), ExecStreamTestBase::testCaseTearDown(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), ExecStreamUnitTestBase::verifyBufferedOutput(), ExecStreamUnitTestBase::verifyConstantOutput(), FlatFileExecStreamTest::verifyOutput(), and ExecStreamUnitTestBase::verifyOutput().

SharedExecStreamGovernor ExecStreamTestBase::pResourceGovernor [protected, inherited]

Definition at line 51 of file ExecStreamTestBase.h.

Referenced by ExecStreamUnitTestBase::resetExecStreamTest(), ExternalSortExecStreamTest::testCaseSetUp(), ExecStreamUnitTestBase::testCaseSetUp(), ExecStreamTestBase::testCaseSetUp(), ExecStreamGovernorTest::testCaseSetUp(), ExecStreamTestBase::testCaseTearDown(), ExecStreamGovernorTest::testMinGreaterAllocation(), ExecStreamUnitTestBase::verifyBufferedOutput(), ExecStreamUnitTestBase::verifyConstantOutput(), FlatFileExecStreamTest::verifyOutput(), and ExecStreamUnitTestBase::verifyOutput().

SharedCacheAccessor ExecStreamTestBase::pCacheAccessor [protected, inherited]

Definition at line 53 of file ExecStreamTestBase.h.

Referenced by ExecStreamTestSuite::testBTreeInsertExecStream(), ExecStreamUnitTestBase::testCaseSetUp(), ExecStreamTestBase::testCaseTearDown(), ExecStreamTestSuite::testMergeImplicitPullInputs(), ExecStreamTestSuite::testSegBufferExecStream(), and ExecStreamTestSuite::testSegBufferReaderWriterExecStream().

SharedSegmentFactory SegStorageTestBase::pSegmentFactory [protected, inherited]

Definition at line 40 of file SegStorageTestBase.h.

Referenced by BackupRestoreTest::backup(), SegStorageTestBase::createLinearDeviceSegment(), LogicalTxnTest::createRecoveryLog(), LbmSearchTest::initBTreeExecStreamParam(), LbmLoadBitmapTest::initBTreeExecStreamParam(), LcsClusterReplaceExecStreamTest::initClusterAppendParams(), LbmExecStreamTestBase::initSorterExecStream(), LcsMultiClusterAppendTest::loadClusters(), loadOneCluster(), LbmSearchTest::loadTableAndIndex(), LbmMinusExecStreamTest::newMinusStream(), ExecStreamTestBase::newStreamGraphEmbryo(), SegStorageTestBase::openRandomSegment(), VersionedSegmentTest::openSegmentStorage(), SnapshotSegmentTestBase::openSegmentStorage(), LinearViewSegmentTest::openSegmentStorage(), BackupRestoreTest::restore(), SegStorageTestBase::SegStorageTestBase(), LbmSplicerExecStreamTest::spliceInput(), ExecStreamTestSuite::testBTreeInsertExecStream(), LhxHashTableTest::testCaseSetUp(), LcsClusterReplaceExecStreamTest::testClusterReplace(), LhxAggExecStreamTest::testCountImpl(), ExecStreamTestSuite::testDoubleBufferExecStream(), ExecStreamGovernorTest::testGovernor(), LhxAggExecStreamTest::testGroupCountImpl(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), BTreeTest::testInserts(), LbmIntersectExecStreamTest::testIntersect(), LbmEntryTest::testldb35(), LbmEntryTest::testler5920(), LbmLoadBitmapTest::testLoad(), LcsClusterAppendExecStreamTest::testLoadMultiCol(), LcsClusterAppendExecStreamTest::testLoadSingleCol(), LbmEntryTest::testMergeEntry(), BTreeTest::testMultiKeySearches(), BTreeTest::testScan(), ExecStreamTestSuite::testScratchBufferExecStream(), LhxAggExecStreamTest::testSingleValueImpl(), FlatFileExecStreamTest::testStream(), LhxAggExecStreamTest::testSumImpl(), LogicalTxnTest::testTxn(), SnapshotSegmentTest::testUncommittedReads(), LbmUnionExecStreamTest::testUnion(), SegStreamTest::testWriteSpillAndRead(), and LbmEntryTest::testZeroBytes().

SharedSegment SegStorageTestBase::pLinearSegment [protected, inherited]

Segment supporting linear page allocation.

Definition at line 45 of file SegStorageTestBase.h.

Referenced by SegStorageTestBase::closeLinearSegment(), LogicalTxnTest::createRecoveryLog(), SegmentTestBase::lockPage(), SegStorageTestBase::openRandomSegment(), VersionedSegmentTest::openSegmentStorage(), SnapshotSegmentTestBase::openSegmentStorage(), SegStorageTestBase::openSegmentStorage(), LinearViewSegmentTest::openSegmentStorage(), SegmentTestBase::openStorage(), SegmentTestBase::prefetchPage(), SnapshotSegmentTestBase::testAllocateAll(), LinearViewSegmentTest::testAllocateAll(), VersionedSegmentTest::testCheckpoint(), SegmentTestBase::testCheckpoint(), SegPageIterTest::testIter(), SegPageEntryIterTest::testIter(), SegStreamTest::testMarkReset(), SegStreamTest::testReadSeg(), VersionedSegmentTest::testRecovery(), LogicalTxnTest::testTxn(), SnapshotSegmentTest::testUncommittedReads(), SegStreamTest::testWriteSeg(), and VersionedSegmentTest::verifyPage().

SharedSegment SegStorageTestBase::pRandomSegment [protected, inherited]

(Optional) segment supporting random page allocation.

Definition at line 50 of file SegStorageTestBase.h.

Referenced by SegStorageTestBase::closeRandomSegment(), SnapshotSegmentTestBase::closeStorage(), LbmSplicerExecStreamTest::createBTree(), LbmSplicerExecStreamTest::initBTreeParam(), LbmSearchTest::initBTreeParam(), LbmLoadBitmapTest::initBTreeParam(), LbmLoadBitmapTest::initBTreeTupleDesc(), LcsClusterReplaceExecStreamTest::initClusterAppendParams(), LbmExecStreamTestBase::initSorterExecStream(), LcsClusterReplaceExecStreamTest::loadCluster(), LcsMultiClusterAppendTest::loadClusters(), loadOneCluster(), LbmSearchTest::loadTableAndIndex(), SegStorageTestBase::openRandomSegment(), SnapshotSegmentTestBase::openSegmentStorage(), LinearViewSegmentTest::openSegmentStorage(), SegmentTestBase::openStorage(), SegmentTestBase::testAllocate(), RandomAllocationSegmentTest::testAllocateAndDeallocate(), ExecStreamTestSuite::testBTreeInsertExecStream(), BTreeTest::testBulkLoad(), LhxHashTableTest::testCaseSetUp(), BTreeTest::testCaseSetUp(), BTreeReadersTest::testCaseSetUp(), testCaseSetUp(), LcsMultiClusterAppendTest::testCaseSetUp(), LcsClusterReplaceExecStreamTest::testCaseSetUp(), LcsClusterAppendExecStreamTest::testCaseSetUp(), LbmExecStreamTestBase::testCaseSetUp(), LcsClusterReplaceExecStreamTest::testClusterReplace(), LhxAggExecStreamTest::testCountImpl(), SegmentTestBase::testDeallocate(), LhxAggExecStreamTest::testGroupCountImpl(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), BTreeTest::testInserts(), LbmLoadBitmapTest::testLoad(), LcsClusterAppendExecStreamTest::testLoadMultiCol(), LcsClusterAppendExecStreamTest::testLoadSingleCol(), ExecStreamTestSuite::testMergeImplicitPullInputs(), BTreeTest::testMultiKeySearches(), BTreeReadersTest::testReaders(), testScanOnEmptyCluster(), ExecStreamTestSuite::testSegBufferExecStream(), ExecStreamTestSuite::testSegBufferReaderWriterExecStream(), LhxAggExecStreamTest::testSingleValueImpl(), LhxAggExecStreamTest::testSumImpl(), and LbmUnionExecStreamTest::testUnion().

SharedSegment SegStorageTestBase::pVersionedRandomSegment [protected, inherited]

(Optional) segment supporting versioned random page allocation.

Definition at line 55 of file SegStorageTestBase.h.

Referenced by BackupRestoreTest::backup(), SnapshotSegmentTestBase::closeStorage(), SegStorageTestBase::closeVersionedRandomSegment(), SnapshotSegmentTest::deallocateOldPages(), SnapshotSegmentTestBase::openSegmentStorage(), BackupRestoreTest::restore(), LcsClusterReplaceExecStreamTest::testClusterReplace(), SnapshotSegmentTest::testRollback(), and SnapshotSegmentTest::testUncommittedReads().

SharedSegment SegStorageTestBase::pSnapshotRandomSegment [protected, inherited]

(Optional) segment supporting snapshot random page allocation.

Definition at line 60 of file SegStorageTestBase.h.

Referenced by SegStorageTestBase::closeSnapshotRandomSegment(), SnapshotSegmentTestBase::commitChanges(), SnapshotSegmentTestBase::openSegmentStorage(), LcsClusterReplaceExecStreamTest::testClusterReplace(), and SnapshotSegmentTest::testDeallocateOld().

VictimPolicy CacheTestBase::victimPolicy [protected, inherited]

VictimPolicy to instantiate.

Definition at line 53 of file CacheTestBase.h.

Referenced by CacheTestBase::CacheTestBase(), and CacheTestBase::newCache().

CacheParams CacheTestBase::cacheParams [protected, inherited]

Parameters for cache initialization.

Definition at line 58 of file CacheTestBase.h.

Referenced by CacheTestBase::CacheTestBase(), CacheTestBase::newCache(), BackupRestoreTest::testBackupCleanup(), BackupRestoreTest::testHeaderBackupRestore(), and SegPageEntryIterTest::testIter().

SharedCache CacheTestBase::pCache [protected, inherited]

Cache instance being tested.

Definition at line 63 of file CacheTestBase.h.

Referenced by BackupRestoreTest::backup(), CacheTestBase::closeDevice(), CacheTestBase::closeStorage(), LbmSplicerExecStreamTest::createBTree(), SegStorageTestBase::createLinearDeviceSegment(), LogicalTxnTest::createRecoveryLog(), BackupRestoreTest::createSnapshotData(), BackupRestoreTest::executeSnapshotTxn(), CacheTestBase::getCache(), LbmSearchTest::initBTreeExecStreamParam(), LbmLoadBitmapTest::initBTreeExecStreamParam(), LbmSearchTest::initBTreeParam(), LbmLoadBitmapTest::initBTreeParam(), LcsClusterReplaceExecStreamTest::initClusterAppendParams(), LbmExecStreamTestBase::initSorterExecStream(), LcsClusterReplaceExecStreamTest::loadCluster(), LcsMultiClusterAppendTest::loadClusters(), loadOneCluster(), LbmSearchTest::loadTableAndIndex(), SegmentTestBase::lockPage(), LbmMinusExecStreamTest::newMinusStream(), ExecStreamTestBase::newStreamGraphEmbryo(), CacheTestBase::openDevice(), CacheTestBase::openStorage(), LcsClusterReplaceExecStreamTest::replaceCluster(), BackupRestoreTest::restore(), LbmSplicerExecStreamTest::spliceInput(), SegmentTestBase::testAllocate(), RandomAllocationSegmentTest::testAllocateAndDeallocate(), BackupRestoreTest::testBackupCleanup(), ExecStreamTestSuite::testBTreeInsertExecStream(), BTreeTest::testBulkLoad(), LhxHashTableTest::testCaseSetUp(), ExecStreamUnitTestBase::testCaseSetUp(), BTreeTest::testCaseSetUp(), BTreeReadersTest::testCaseSetUp(), LhxAggExecStreamTest::testCountImpl(), SegmentTestBase::testDeallocate(), SnapshotSegmentTest::testDeallocateOld(), ExecStreamTestSuite::testDoubleBufferExecStream(), ExecStreamGovernorTest::testGovernor(), LhxAggExecStreamTest::testGroupCountImpl(), BackupRestoreTest::testHeaderBackupRestore(), LhxJoinExecStreamTest::testImpl(), ExternalSortExecStreamTest::testImpl(), BTreeTest::testInserts(), LbmIntersectExecStreamTest::testIntersect(), SegPageIterTest::testIter(), SegPageEntryIterTest::testIter(), CacheTest::testLargeCacheInit(), CacheTest::testLargeCacheRequest(), LbmEntryTest::testldb35(), LbmEntryTest::testler5920(), LbmLoadBitmapTest::testLoad(), LcsClusterAppendExecStreamTest::testLoadMultiCol(), LcsClusterAppendExecStreamTest::testLoadSingleCol(), SegStreamTest::testMarkReset(), LbmEntryTest::testMergeEntry(), BTreeTest::testMultiKeySearches(), CacheTest::testQuotaCacheAccessor(), BTreeReadersTest::testReaders(), SegStreamTest::testReadSeg(), BTreeTest::testScan(), testScanOnEmptyCluster(), ExecStreamTestSuite::testScratchBufferExecStream(), LhxAggExecStreamTest::testSingleValueImpl(), FlatFileExecStreamTest::testStream(), LhxAggExecStreamTest::testSumImpl(), LogicalTxnTest::testTxn(), LogicalTxnTest::testTxnIdSequence(), LbmUnionExecStreamTest::testUnion(), SegStreamTest::testWriteSeg(), SegStreamTest::testWriteSpillAndRead(), LbmEntryTest::testZeroBytes(), and BackupRestoreTest::verifySnapshotData().

SharedRandomAccessDevice CacheTestBase::pRandomAccessDevice [protected, inherited]

The default cached device.

Definition at line 68 of file CacheTestBase.h.

Referenced by BackupRestoreTest::backup(), CacheTestBase::closeStorage(), SegStorageTestBase::openSegmentStorage(), CacheTestBase::openStorage(), and BackupRestoreTest::restore().

uint CacheTestBase::nMemPages [protected, inherited]

Size of cache in memory pages.

Definition at line 73 of file CacheTestBase.h.

Referenced by CacheTestBase::CacheTestBase(), PagingTestBase::testCacheResize(), and ExecStreamTestBase::testCaseSetUp().

uint CacheTestBase::nDiskPages [protected, inherited]

Size of device in disk pages.

Definition at line 78 of file CacheTestBase.h.

Referenced by CacheTestBase::CacheTestBase(), LinearViewSegmentTest::LinearViewSegmentTest(), CacheTest::makeBlockId(), VersionedSegmentTest::openSegmentStorage(), SnapshotSegmentTestBase::openSegmentStorage(), LinearViewSegmentTest::openSegmentStorage(), CacheTestBase::openStorage(), SegStreamTest::SegStreamTest(), SnapshotSegmentTestBase::SnapshotSegmentTestBase(), SnapshotSegmentTest::testDeallocateOld(), PagingTestBase::testPrefetch(), PagingTestBase::testPrefetchBatch(), PagingTestBase::testRandomOp(), SnapshotSegmentTest::testRollback(), PagingTestBase::testSequentialOp(), and PagingTestBase::testSkipOp().

uint CacheTestBase::cbPageFull [protected, inherited]

Disk page size.

Definition at line 83 of file CacheTestBase.h.

Referenced by CacheTest::CacheTest(), CacheTestBase::CacheTestBase(), CacheTestBase::openDevice(), and SegStorageTestBase::openSegmentStorage().

DeviceId CacheTestBase::dataDeviceId [protected, inherited]

Fixed ID to assign to data device.

Definition at line 88 of file CacheTestBase.h.

Referenced by CacheTestBase::CacheTestBase(), CacheTestBase::closeStorage(), CacheTest::makeBlockId(), SnapshotSegmentTestBase::openSegmentStorage(), SegStorageTestBase::openSegmentStorage(), LinearViewSegmentTest::openSegmentStorage(), CacheTestBase::openStorage(), and PagingTestBase::testCheckpoint().

TestSuite* TestBase::pTestSuite [protected, inherited]

Boost test suite.

Definition at line 59 of file TestBase.h.

Referenced by TestBase::releaseTestSuite().

boost::shared_ptr<TestBase> TestBase::pTestObj [protected, inherited]

Definition at line 61 of file TestBase.h.

Referenced by TestBase::releaseTestSuite(), and TestBase::TestBase().

std::ofstream TestBase::traceStream [protected, inherited]

Output file stream for tracing.

Definition at line 66 of file TestBase.h.

Referenced by TestBase::notifyTrace(), TestBase::TestBase(), and TestBase::~TestBase().

StrictMutex TestBase::traceMutex [protected, inherited]

Protects traceStream.

Definition at line 71 of file TestBase.h.

Referenced by TestBase::notifyTrace().

std::string TestBase::testName [protected, inherited]

Name of test.

Definition at line 76 of file TestBase.h.

Referenced by TestBase::afterTestCase(), TestBase::beforeTestCase(), TestBase::releaseTestSuite(), TestBase::TestBase(), LhxHashTableTest::testInsert1Ka(), and LhxHashTableTest::testInsert1Kb().

TraceLevel TestBase::traceLevel [protected, inherited]

Level at which to trace test execution.

Definition at line 81 of file TestBase.h.

Referenced by TestBase::getSourceTraceLevel(), and TestBase::TestBase().

FileStatsTarget TestBase::statsTarget [protected, inherited]

Output for stats.

Definition at line 86 of file TestBase.h.

StatsTimer TestBase::statsTimer [protected, inherited]

Timer for stats collection.

Definition at line 91 of file TestBase.h.

Referenced by CacheTestBase::closeStorage(), CacheTestBase::openStorage(), BTreeTxnTest::testCaseSetUp(), BTreeTxnTest::testCaseTearDown(), and BTreeTxnTest::testTxns().

bool TestBase::traceStdout [protected, inherited]

Copy trace output to stdout.

Definition at line 99 of file TestBase.h.

Referenced by TestBase::notifyTrace(), and TestBase::TestBase().

bool TestBase::traceFile [protected, inherited]

Copy trace output to file.

Definition at line 104 of file TestBase.h.

Referenced by TestBase::notifyTrace(), and TestBase::TestBase().

bool TestBase::runAll [static, protected, inherited]

Run all test cases, including the extra tests.

(static, since set by readParams())

Definition at line 110 of file TestBase.h.

Referenced by TestBase::readParams(), and TestBase::releaseTestSuite().

std::string TestBase::runSingle [static, protected, inherited]

Run only the test case of this name.

(static, since set by readParams())

Definition at line 116 of file TestBase.h.

Referenced by TestBase::readParams(), and TestBase::releaseTestSuite().

TestCaseGroup TestBase::defaultTests [protected, inherited]

Definition at line 139 of file TestBase.h.

Referenced by TestBase::releaseTestSuite().

TestCaseGroup TestBase::extraTests [protected, inherited]

Definition at line 140 of file TestBase.h.

Referenced by TestBase::releaseTestSuite().

ParamName TestBase::paramTestSuiteName [static, inherited]

Definition at line 143 of file TestBase.h.

Referenced by TestBase::TestBase().

ParamName TestBase::paramTraceFileName [static, inherited]

Definition at line 144 of file TestBase.h.

Referenced by TestBase::TestBase().

ParamName TestBase::paramDictionaryFileName [static, inherited]

Definition at line 145 of file TestBase.h.

Referenced by TestBase::readParams(), SegStreamTest::testRead(), and SegStreamTest::testWrite().

ParamName TestBase::paramTraceLevel [static, inherited]

Definition at line 146 of file TestBase.h.

Referenced by TestBase::TestBase().

ParamName TestBase::paramStatsFileName [static, inherited]

Definition at line 147 of file TestBase.h.

ParamName TestBase::paramTraceStdout [static, inherited]

Definition at line 148 of file TestBase.h.

Referenced by TestBase::TestBase().

ParamName TestBase::paramDegreeOfParallelism [static, inherited]

Definition at line 149 of file TestBase.h.

Referenced by ParallelExecStreamSchedulerTest::ParallelExecStreamSchedulerTest().

ConfigMap TestBase::configMap [static, inherited]

Configuration parameters.

The reason this is static is so that no constructor parameters (which burden virtual bases) are needed.

Definition at line 155 of file TestBase.h.

Referenced by TestBase::afterTestCase(), TestBase::beforeTestCase(), BTreeTxnTest::BTreeTxnTest(), CacheTestBase::CacheTestBase(), BackupRestoreTest::createSnapshotData(), DatabaseTest::DatabaseTest(), TestOptionsTest::extra(), DatabaseTest::loadDatabase(), SparseBitmapTest::openStorage(), PagingTestBase::PagingTestBase(), ParallelExecStreamSchedulerTest::ParallelExecStreamSchedulerTest(), RandomAccessFileDeviceTest::RandomAccessFileDeviceTest(), TestBase::readParams(), SegStorageTestBase::SegStorageTestBase(), TestOptionsTest::test1(), TestOptionsTest::test2(), BackupRestoreTest::testBackupCleanup(), TestBase::TestBase(), BTreeTxnTest::testCaseSetUp(), BTreeTxnTest::testCheckpoint(), DatabaseTest::testCreateEmpty(), DatabaseTest::testForceTxns(), BackupRestoreTest::testHeaderBackupRestore(), SegPageEntryIterTest::testIter(), SegStreamTest::testRead(), BTreeTxnTest::testTxns(), SegStreamTest::testWrite(), ThreadedTestBase::ThreadedTestBase(), and TestBase::~TestBase().


The documentation for this class was generated from the following file:
Generated on Mon Jun 22 04:00:38 2009 for Fennel by  doxygen 1.5.1