Fennel: /home/pub/open/dev/fennel/farrago/ExecStreamFactory.h Source File (original) (raw)

00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 #ifndef Fennel_ExecStreamFactory_Included 00025 #define Fennel_ExecStreamFactory_Included 00026 00027 #include "fennel/farrago/Fem.h" 00028 #include "fennel/common/ClosableObject.h" 00029 #include "fennel/exec/ExecStream.h" 00030 #include "fennel/exec/ExecStreamEmbryo.h" 00031 #include "fennel/farrago/CmdInterpreter.h" 00032 00033 #include <boost/utility.hpp> 00034 00035 FENNEL_BEGIN_NAMESPACE 00036 00037 class BarrierExecStreamParams; 00038 class BTreeExecStreamParams; 00039 class BTreePrefetchSearchExecStreamParams; 00040 class BTreeReadExecStreamParams; 00041 class BTreeScanExecStreamParams; 00042 class BTreeSearchExecStreamParams; 00043 class FtrsTableIndexWriterParams; 00044 class FtrsTableWriterExecStreamParams; 00045 class JavaExecStreamParams; 00046 class TupleDescriptor; 00047 class TupleProjection; 00048 class StoredTypeDescriptorFactory; 00049 class SingleOutputExecStreamParams; 00050 class SortedAggExecStreamParams; 00051 00058 class FENNEL_FARRAGO_EXPORT ExecStreamFactory 00059 : public boost::noncopyable, virtual public FemVisitor 00060 { 00061 protected: 00065 SharedDatabase pDatabase; 00066 00070 SharedFtrsTableWriterFactory pTableWriterFactory; 00071 00075 CmdInterpreter::StreamGraphHandle *pStreamGraphHandle; 00076 00080 SegmentAccessor scratchAccessor; 00081 00085 ExecStreamEmbryo embryo; 00086 00090 ExecStreamGraphEmbryo *pGraphEmbryo; 00091 00095 std::vector subFactories; 00096 00101 virtual void invokeVisit( 00102 ProxyExecutionStreamDef &); 00103 00104
00105 virtual void visit(ProxyBarrierStreamDef &); 00106 virtual void visit(ProxyBufferingTupleStreamDef &); 00107 virtual void visit(ProxyBufferReaderStreamDef &); 00108 virtual void visit(ProxyBufferWriterStreamDef &); 00109 virtual void visit(ProxyCartesianProductStreamDef &); 00110 virtual void visit(ProxyIndexLoaderDef &); 00111 virtual void visit(ProxyIndexScanDef &); 00112 virtual void visit(ProxyIndexSearchDef &); 00113 virtual void visit(ProxyJavaSinkStreamDef &); 00114 virtual void visit(ProxyJavaTransformStreamDef &); 00115 virtual void visit(ProxyMergeStreamDef &); 00116 virtual void visit(ProxyMockTupleStreamDef &); 00117 virtual void visit(ProxyTableDeleterDef &); 00118 virtual void visit(ProxyTableInserterDef &); 00119 virtual void visit(ProxyTableUpdaterDef &); 00120 virtual void visit(ProxySortedAggStreamDef &); 00121 virtual void visit(ProxySortingStreamDef &); 00122 virtual void visit(ProxySplitterStreamDef &); 00123 virtual void visit(ProxyValuesStreamDef &); 00124 virtual void visit(ProxyReshapeStreamDef &); 00125 virtual void visit(ProxyNestedLoopJoinStreamDef &); 00126 virtual void visit(ProxyBernoulliSamplingStreamDef &); 00127 virtual void visit(ProxyCalcTupleStreamDef &streamDef); 00128 virtual void visit(ProxyCorrelationJoinStreamDef &streamDef); 00129 virtual void visit(ProxyCollectTupleStreamDef &streamDef); 00130 virtual void visit(ProxyUncollectTupleStreamDef &streamDef); 00131 virtual void visit(ProxyFlatFileTupleStreamDef &streamDef); 00132 virtual void visit(ProxyLhxJoinStreamDef &streamDef); 00133 virtual void visit(ProxyLhxAggStreamDef &streamDef); 00134 00135
00136 00137 void readBTreeReadStreamParams( 00138 BTreeReadExecStreamParams &, 00139 ProxyIndexScanDef &); 00140 00141 void readIndexWriterParams( 00142 FtrsTableIndexWriterParams &, 00143 ProxyIndexWriterDef &); 00144 00145 void readTableWriterStreamParams( 00146 FtrsTableWriterExecStreamParams &, 00147 ProxyTableWriterDef &); 00148 00149 void readBarrierDynamicParams( 00150 BarrierExecStreamParams &, 00151 ProxyBarrierStreamDef &); 00152 00153 void readColumnList( 00154 ProxyFlatFileTupleStreamDef &streamDef, 00155 std::vectorstd::string &names); 00156 00157 void implementSortWithBTree(ProxySortingStreamDef &streamDef); 00158 00159 char readCharParam(const std::string &val); 00160 00161 public: 00162 explicit ExecStreamFactory( 00163 SharedDatabase pDatabase, 00164 SharedFtrsTableWriterFactory pTableWriterFactory, 00165 CmdInterpreter::StreamGraphHandle *pStreamGraphHandle); 00166 00167 void setGraphEmbryo( 00168 ExecStreamGraphEmbryo &graphEmbryo); 00169 00170 void setScratchAccessor(SegmentAccessor &scratchAccessor); 00171 00172 void addSubFactory(SharedExecStreamSubFactory pSubFactory); 00173 00174 SharedDatabase getDatabase(); 00175 00179 virtual ExecStreamEmbryo const &visitStream( 00180 ProxyExecutionStreamDef &); 00181 00182
00183 00185 void readTupleDescriptor( 00186 TupleDescriptor& desc, const SharedProxyTupleDescriptor def); 00187 00198 void createPrivateScratchSegment(ExecStreamParams &params); 00199 00200 void createQuotaAccessors(ExecStreamParams &params); 00201 00202 void readExecStreamParams( 00203 ExecStreamParams &, 00204 ProxyExecutionStreamDef &); 00205 00206 void readTupleStreamParams( 00207 SingleOutputExecStreamParams &, 00208 ProxyTupleStreamDef &); 00209 00210 void initBTreePrefetchSearchParams( 00211 BTreePrefetchSearchExecStreamParams &, 00212 ProxyIndexSearchDef &); 00213 00214 void readBTreeStreamParams( 00215 BTreeExecStreamParams &, 00216 ProxyIndexAccessorDef &); 00217 00218 void readBTreeParams( 00219 BTreeParams &, 00220 ProxyIndexAccessorDef &); 00221 00222 void readBTreeSearchStreamParams( 00223 BTreeSearchExecStreamParams &, 00224 ProxyIndexSearchDef &); 00225 00226 void readAggStreamParams( 00227 SortedAggExecStreamParams &, 00228 ProxyAggStreamDef &); 00229 00230 DynamicParamId readDynamicParamId(const int val); 00231 }; 00232 00233 class FENNEL_FARRAGO_EXPORT ExecStreamSubFactory 00234 : public boost::noncopyable 00235 { 00236 public: 00237 virtual ~ExecStreamSubFactory(); 00238 00250 virtual bool createStream( 00251 ExecStreamFactory &factory, 00252 ProxyExecutionStreamDef &streamDef, 00253 ExecStreamEmbryo &embryo) = 0; 00254 }; 00255 00256 FENNEL_END_NAMESPACE 00257 00258 #endif 00259 00260