FtrsTableWriterFactory.cpp

Go to the documentation of this file.
00001 /*
00002 // $Id: //open/dev/fennel/ftrs/FtrsTableWriterFactory.cpp#9 $
00003 // Fennel is a library of data storage and processing components.
00004 // Copyright (C) 2005-2009 The Eigenbase Project
00005 // Copyright (C) 2005-2009 SQLstream, Inc.
00006 // Copyright (C) 2005-2009 LucidEra, Inc.
00007 // Portions Copyright (C) 1999-2009 John V. Sichi
00008 //
00009 // This program is free software; you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by the Free
00011 // Software Foundation; either version 2 of the License, or (at your option)
00012 // any later version approved by The Eigenbase Project.
00013 //
00014 // This program is distributed in the hope that it will be useful,
00015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with this program; if not, write to the Free Software
00021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 */
00023 
00024 #include "fennel/common/CommonPreamble.h"
00025 #include "fennel/ftrs/FtrsTableWriterFactory.h"
00026 #include "fennel/common/ByteInputStream.h"
00027 #include "fennel/tuple/TupleDescriptor.h"
00028 #include "fennel/segment/SegmentMap.h"
00029 
00030 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/ftrs/FtrsTableWriterFactory.cpp#9 $");
00031 
00032 FtrsTableWriterFactory::FtrsTableWriterFactory(
00033     SharedSegmentMap pSegmentMapInit,
00034     SharedCacheAccessor pCacheAccessorInit,
00035     StoredTypeDescriptorFactory const &typeFactoryInit,
00036     SegmentAccessor scratchAccessorInit)
00037     : pSegmentMap(pSegmentMapInit),
00038       pCacheAccessor(pCacheAccessorInit),
00039       typeFactory(typeFactoryInit)
00040 {
00041     scratchAccessor = scratchAccessorInit;
00042 }
00043 
00044 SharedFtrsTableWriter FtrsTableWriterFactory::newTableWriter(
00045     FtrsTableWriterParams const &params)
00046 {
00047     // check pool first
00048     for (uint i = 0; i < pool.size(); ++i) {
00049         SharedFtrsTableWriter pPooledWriter = pool[i];
00050         if (pPooledWriter->getTableId() != params.tableId) {
00051             continue;
00052         }
00053         if (pPooledWriter->updateProj != params.updateProj) {
00054             continue;
00055         }
00056         // TODO:  assert that other parameters match?
00057         return pPooledWriter;
00058     }
00059     SharedFtrsTableWriter pNewWriter(new FtrsTableWriter(params));
00060     pool.push_back(pNewWriter);
00061     return pNewWriter;
00062 }
00063 
00064 SharedLogicalTxnParticipant FtrsTableWriterFactory::loadParticipant(
00065     LogicalTxnClassId classId,
00066     ByteInputStream &logStream)
00067 {
00068     assert(classId == getParticipantClassId());
00069 
00070     TupleDescriptor clusteredTupleDesc;
00071     clusteredTupleDesc.readPersistent(logStream,typeFactory);
00072 
00073     uint nIndexes;
00074     logStream.readValue(nIndexes);
00075 
00076     FtrsTableWriterParams params;
00077     params.indexParams.resize(nIndexes);
00078 
00079     for (uint i = 0; i < nIndexes; ++i) {
00080         loadIndex(clusteredTupleDesc,params.indexParams[i],logStream);
00081     }
00082 
00083     params.updateProj.readPersistent(logStream);
00084 
00085     return SharedLogicalTxnParticipant(
00086         new FtrsTableWriter(params));
00087 }
00088 
00089 void FtrsTableWriterFactory::loadIndex(
00090     TupleDescriptor const &clusteredTupleDesc,
00091     FtrsTableIndexWriterParams &params,
00092     ByteInputStream &logStream)
00093 {
00094     logStream.readValue(params.segmentId);
00095     logStream.readValue(params.pageOwnerId);
00096     logStream.readValue(params.rootPageId);
00097     logStream.readValue(params.distinctness);
00098     logStream.readValue(params.updateInPlace);
00099     params.inputProj.readPersistent(logStream);
00100     params.keyProj.readPersistent(logStream);
00101     if (params.inputProj.empty()) {
00102         params.tupleDesc = clusteredTupleDesc;
00103     } else {
00104         params.tupleDesc.projectFrom(clusteredTupleDesc,params.inputProj);
00105     }
00106     params.pCacheAccessor = pCacheAccessor;
00107     SharedSegment pSegment;
00108     params.pSegment = pSegmentMap->getSegmentById(params.segmentId, pSegment);
00109     params.scratchAccessor = scratchAccessor;
00110 }
00111 
00112 LogicalTxnClassId FtrsTableWriterFactory::getParticipantClassId()
00113 {
00114     return LogicalTxnClassId(0xaa6576b8efadbcdcLL);
00115 }
00116 
00117 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/ftrs/FtrsTableWriterFactory.cpp#9 $");
00118 
00119 // End FtrsTableWriterFactory.cpp

Generated on Mon Jun 22 04:00:19 2009 for Fennel by  doxygen 1.5.1