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_NestedLoopJoinExecStream_Included
00025 #define Fennel_NestedLoopJoinExecStream_Included
00026
00027 #include "fennel/exec/CartesianJoinExecStream.h"
00028 #include "fennel/exec/DynamicParam.h"
00029
00030 FENNEL_BEGIN_NAMESPACE
00031
00036 struct FENNEL_EXEC_EXPORT NestedLoopJoinKey
00037 {
00038 DynamicParamId dynamicParamId;
00039 uint leftAttributeOrdinal;
00040
00041 NestedLoopJoinKey(DynamicParamId id, uint offset) :
00042 dynamicParamId(id),
00043 leftAttributeOrdinal(offset)
00044 {
00045 }
00046 };
00047
00052 struct FENNEL_EXEC_EXPORT NestedLoopJoinExecStreamParams
00053 : public CartesianJoinExecStreamParams
00054 {
00055 std::vector<NestedLoopJoinKey> leftJoinKeys;
00056 };
00057
00075 class FENNEL_EXEC_EXPORT NestedLoopJoinExecStream
00076 : public CartesianJoinExecStream
00077 {
00081 bool preProcessingDone;
00082
00086 std::vector<NestedLoopJoinKey> leftJoinKeys;
00087
00088 virtual bool checkNumInputs();
00089
00096 virtual ExecStreamResult preProcessRightInput();
00097
00102 virtual void processLeftInput();
00103
00104 public:
00105
00106 virtual void prepare(NestedLoopJoinExecStreamParams const ¶ms);
00107 virtual void open(bool restart);
00108 };
00109
00110 FENNEL_END_NAMESPACE
00111
00112 #endif
00113
00114