19 #ifndef PDB_SCANUSERSETBASE_H
20 #define PDB_SCANUSERSETBASE_H
34 template<
class OutputClass>
58 this->
proxy =
nullptr;
87 return std::make_shared<VectorTupleSetIterator>(
96 if (page !=
nullptr) {
97 return page->getBytes();
105 [&](
void *freeMe) ->
void {
106 if (this->
proxy !=
nullptr) {
107 char *pageRawBytes = (
char *) freeMe -
109 sizeof(
PageID) +
sizeof(int) +
sizeof(
size_t));
111 PDBPagePtr page = make_shared<PDBPage>(pageRawBytes, 0, 0);
112 NodeID nodeId = page->getNodeID();
115 SetID setId = page->getSetID();
117 this->
proxy->unpinUserPage(nodeId, dbId, typeId, setId, page,
false);
120 this->
proxy->unpinUserPage(nodeId, dbId, typeId, setId, page,
false);
173 return std::string(
"ScanUserSet");
193 std::string
toTCAPString(std::vector<InputTupleSetSpecifier> &inputTupleSets,
194 int computationLabel,
196 std::vector<std::string> &outputColumnNames,
197 std::string &addedOutputColumnName)
override {
200 if (!inputTupleSets.empty()) {
201 inputTupleSet = inputTupleSets[0];
209 addedOutputColumnName);
224 std::vector<std::string> &inputColumnNames,
225 std::vector<std::string> &inputColumnsToApply,
226 int computationLabel,
228 std::vector<std::string> &outputColumnNames,
229 std::string &addedOutputColumnName) {
232 mustache::mustache scanSetTemplate{
"inputDataFor{{computationType}}_{{computationLabel}}(in{{computationLabel}})"
233 " <= SCAN ('{{setName}}', '{{dbName}}', '{{computationType}}_{{computationLabel}}')\n"};
236 mustache::data scanSetData;
238 scanSetData.set(
"computationLabel", std::to_string(computationLabel));
239 scanSetData.set(
"setName", std::string(
setName));
240 scanSetData.set(
"dbName", std::string(
dbName));
243 mustache::mustache outputColumnNameTemplate{
"in{{computationLabel}}"};
246 addedOutputColumnName = outputColumnNameTemplate.render(scanSetData);
247 outputColumnNames.push_back(addedOutputColumnName);
250 mustache::mustache outputTupleSetTemplate{
"inputDataFor{{computationType}}_{{computationLabel}}"};
251 outputTupleSetName = outputTupleSetTemplate.render(scanSetData);
259 return scanSetTemplate.render(scanSetData);
303 #endif //PDB_SCANUSERSETBASE_H
void setOutput(std::string dbName, std::string setName) override
shared_ptr< PDBPage > PDBPagePtr
std::shared_ptr< ComputeSource > ComputeSourcePtr
PageCircularBufferIteratorPtr iterator
void setUpAndCopyFrom(void *target, void *source) const override
shared_ptr< DataProxy > DataProxyPtr
std::string getOutputType() override
std::string getComputationType() override
void deleter(void *deleteMe, ObjType *dummy)
ScanUserSetBase(std::string dbName, std::string setName)
ComputationTypeID getComputationTypeID() override
void setDatabaseName(std::string dbName)
void setSetName(std::string setName)
ScanUserSetBase()=default
void setProxy(DataProxyPtr proxy)
int getNumInputs() override
ComputeSourcePtr getComputeSource(TupleSpec &schema, ComputePlan &plan) override
std::string getDatabaseName() override
std::string toTCAPString(std::string inputTupleSetName, std::vector< std::string > &inputColumnNames, std::vector< std::string > &inputColumnsToApply, int computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName)
void setOutputColumnToApply(std::string outputColumnToApply)
void setBatchSize(int batchSize) override
void setTraversed(bool traversed)
bool needsMaterializeOutput() override
void deleteObject(void *deleteMe) override
void setOutputTupleSetName(std::string outputTupleSetName)
std::string getIthInputType(int i) override
std::string getSetName() override
void makeObjectAllocatorBlock(size_t numBytesIn, bool throwExceptionOnFail)
std::string toTCAPString(std::vector< InputTupleSetSpecifier > &inputTupleSets, int computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName) override
void setIterator(PageCircularBufferIteratorPtr iterator)
shared_ptr< PageCircularBufferIterator > PageCircularBufferIteratorPtr
size_t getSize(void *forMe) override
String outputTupleSetName