19 #ifndef PDB_SELECTIONCOMPBASE_H
20 #define PDB_SELECTIONCOMPBASE_H
28 template<
class OutputClass,
class InputClass>
52 void extractLambdas(std::map<std::string, GenericLambdaObjectPtr> &returnVal)
override {
57 selectionLambda.
toMap(returnVal, suffix);
58 projectionLambda.
toMap(returnVal, suffix);
66 return std::string(
"SelectionComp");
84 return getTypeName<InputClass>();
103 return getTypeName<OutputClass>();
115 std::string
toTCAPString(std::vector<InputTupleSetSpecifier> &inputTupleSets,
116 int computationLabel,
118 std::vector<std::string> &outputColumnNames,
119 std::string &addedOutputColumnName)
override {
121 if (inputTupleSets.empty()) {
125 std::vector<std::string> childrenLambdaNames;
126 std::string myLambdaName;
134 addedOutputColumnName,
152 std::vector<std::string> &inputColumnNames,
153 std::vector<std::string> &inputColumnsToApply,
154 std::vector<std::string> &childrenLambdaNames,
155 int computationLabel,
157 std::vector<std::string> &outputColumnNames,
158 std::string &addedOutputColumnName,
159 std::string &myLambdaName) {
161 PDB_COUT <<
"ABOUT TO GET TCAP STRING FOR SELECTION" << std::endl;
163 std::string tupleSetName;
164 std::vector<std::string> columnNames;
165 std::string addedColumnName;
168 PDB_COUT <<
"ABOUT TO GET TCAP STRING FOR SELECTION LAMBDA" << std::endl;
171 std::string tcapString;
172 tcapString +=
"\n/* Apply selection filtering */\n";
173 tcapString += selectionLambda.
toTCAPString(inputTupleSetName,
186 PDB_COUT <<
"The tcapString after parsing selection lambda: " << tcapString <<
"\n";
187 PDB_COUT <<
"lambdaLabel=" << lambdaLabel <<
"\n";
190 mustache::data inputColumnData = mustache::data::type::list;
191 for(
int i = 0; i < inputColumnNames.size(); i++) {
193 mustache::data columnData;
196 columnData.set(
"columnName", inputColumnNames[i]);
197 columnData.set(
"isLast", i == inputColumnNames.size()-1);
199 inputColumnData.push_back(columnData);
203 mustache::data selectionCompData;
205 selectionCompData.set(
"computationLabel", std::to_string(computationLabel));
206 selectionCompData.set(
"inputColumns", inputColumnData);
207 selectionCompData.set(
"tupleSetName", tupleSetName);
208 selectionCompData.set(
"addedColumnName", addedColumnName);
211 mustache::mustache scanSetTemplate{
"filteredInputFor{{computationType}}{{computationLabel}}({{#inputColumns}}{{columnName}}{{^isLast}}, {{/isLast}}{{/inputColumns}}) "
212 "<= FILTER ({{tupleSetName}}({{addedColumnName}}), {{tupleSetName}}({{#inputColumns}}{{columnName}}{{^isLast}}, {{/isLast}}{{/inputColumns}}), '{{computationType}}_{{computationLabel}}')\n"};
215 tcapString += scanSetTemplate.render(selectionCompData);
218 mustache::mustache newTupleSetNameTemplate{
"filteredInputFor{{computationType}}{{computationLabel}}"};
221 std::string newTupleSetName = newTupleSetNameTemplate.render(selectionCompData);
223 PDB_COUT <<
"TO GET TCAP STRING FOR PROJECTION LAMBDA\n";
227 tcapString +=
"\n/* Apply selection projection */\n";
228 tcapString += projectionLambda.
toTCAPString(newTupleSetName,
237 addedOutputColumnName,
250 void setOutput(std::string dbName, std::string setName)
override {
292 std::cout <<
"ERROR: get compute source for " << outputScheme <<
" returns nullptr" << std::endl;
308 return std::make_shared<VectorSink<OutputClass>>(consumeMe, projection);
328 #endif //PDB_SELECTIONCOMPBASE_H
std::shared_ptr< ComputeSource > ComputeSourcePtr
bool materializeSelectionOut
std::string toTCAPString(std::vector< InputTupleSetSpecifier > &inputTupleSets, int computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName) override
std::string toTCAPString(std::string inputTupleSetName, std::vector< std::string > &inputColumnNames, std::vector< std::string > &inputColumnsToApply, std::vector< std::string > &childrenLambdaNames, int computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName, std::string &myLambdaName)
void setOutput(std::string dbName, std::string setName) override
void toMap(std::map< std::string, GenericLambdaObjectPtr > &returnVal, int &suffix)
ComputeSourcePtr getComputeSource(TupleSpec &outputScheme, ComputePlan &plan) override
void setBatchSize(int batchSize) override
virtual Lambda< bool > getSelection(Handle< InputClass > checkMe)=0
std::string getDatabaseName() override
std::string getOutputType() override
std::shared_ptr< ComputeSink > ComputeSinkPtr
void extractLambdas(std::map< std::string, GenericLambdaObjectPtr > &returnVal) override
virtual Lambda< Handle< OutputClass > > getProjection(Handle< InputClass > checkMe)=0
std::string getComputationType() override
void setOutputColumnToApply(std::string outputColumnToApply)
int getNumInputs() override
ComputationTypeID getComputationTypeID() override
std::string getIthInputType(int i) override
ComputeSinkPtr getComputeSink(TupleSpec &consumeMe, TupleSpec &projection, ComputePlan &plan) override
std::string getSetName() override
void setTraversed(bool traversed)
void setOutputTupleSetName(std::string outputTupleSetName)
bool needsMaterializeOutput() override
std::string toTCAPString(std::string inputTupleSetName, std::vector< std::string > &inputColumnNames, std::vector< std::string > &inputColumnsToApply, std::vector< std::string > &childrenLambdaNames, int &lambdaLabel, std::string computationName, int computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName, std::string &myLambdaName, bool whetherToRemoveUnusedOutputColumns, MultiInputsBase *multiInputsComp=nullptr, bool amIPartOfJoinPredicate=false)
Handle< ScanUserSet< OutputClass > > outputSetScanner
Handle< ScanUserSet< OutputClass > > & getOutputSetScanner()
String outputTupleSetName