53 char* location = (
char*)&out;
70 static U
test(U x,
int);
72 template <
typename U,
typename... Rest>
75 static decltype(test<T>(*((T*)0), 1))
val;
86 template <typename HoldMe, typename MeTo>
96 static
void* allocate(
TupleSet& processMe,
int where) {
97 std::vector<Handle<HoldMe>>* me =
new std::vector<Handle<HoldMe>>;
98 processMe.addColumn(where, me,
true);
112 std::vector<Handle<HoldMe>>& me = *((std::vector<Handle<HoldMe>>*)input);
117 std::vector<Handle<HoldMe>>& me = *((std::vector<Handle<HoldMe>>*)input);
119 if (whichPos >= me.size()) {
129 std::vector<Handle<HoldMe>>& valColumn = *((std::vector<Handle<HoldMe>>*)(input));
130 valColumn.erase(valColumn.begin(), valColumn.begin() + i);
134 std::vector<Handle<HoldMe>>& valColumn = *((std::vector<Handle<HoldMe>>*)(input));
144 template <
typename TypeToCreate>
145 typename std::enable_if<sizeof(TypeToCreate::myOtherData) == 0, void>::type
createCols(
146 void** putUsHere,
TupleSet& processMe,
int offset,
int whichPos, std::vector<int> positions) {
147 putUsHere[whichPos] = TypeToCreate::allocate(processMe, offset + positions[whichPos]);
151 template <
typename TypeToCreate>
152 typename std::enable_if<sizeof(TypeToCreate::myOtherData) != 0, void>::type
createCols(
153 void** putUsHere,
TupleSet& processMe,
int offset,
int whichPos, std::vector<int> positions) {
154 putUsHere[whichPos] = TypeToCreate::allocate(processMe, offset + positions[whichPos]);
155 createCols<decltype(TypeToCreate::myOtherData)>(
156 putUsHere, processMe, offset, whichPos + 1, positions);
165 template <
typename TypeToPackData>
166 typename std::enable_if<(
sizeof(TypeToPackData::myOtherData) == 0) &&
167 (
sizeof(TypeToPackData::myData) != 0),
169 packData(TypeToPackData& arg, TypeToPackData data) {
170 arg.copyDataFrom(data.myData);
175 template <
typename TypeToPackData>
176 typename std::enable_if<(
sizeof(TypeToPackData::myOtherData) != 0) &&
177 (
sizeof(TypeToPackData::myData) != 0),
179 packData(TypeToPackData& arg, TypeToPackData data) {
180 arg.copyDataFrom(data.myData);
181 packData(arg.myOtherData, data.myOtherData);
190 template <
typename TypeToPack>
191 typename std::enable_if<sizeof(TypeToPack::myOtherData) == 0, void>::type
pack(
192 TypeToPack& arg,
int whichPosInTupleSet,
int whichVec,
void** us) {
193 arg.copyFrom(us[whichVec], whichPosInTupleSet);
203 template <
typename TypeToPack>
204 typename std::enable_if<sizeof(TypeToPack::myOtherData) != 0, void>::type
pack(
205 TypeToPack& arg,
int whichPosInTupleSet,
int whichVec,
void** us) {
207 arg.copyFrom(us[whichVec], whichPosInTupleSet);
208 pack(arg.myOtherData, whichPosInTupleSet, whichVec + 1, us);
214 template <
typename TypeToUnPack>
215 typename std::enable_if<sizeof(TypeToUnPack::myOtherData) == 0, void>::type
unpack(
216 TypeToUnPack& arg,
int whichPosInTupleSet,
int whichVec,
void** us) {
217 arg.copyTo(us[whichVec], whichPosInTupleSet);
221 template <
typename TypeToUnPack>
222 typename std::enable_if<sizeof(TypeToUnPack::myOtherData) != 0, void>::type
unpack(
223 TypeToUnPack& arg,
int whichPosInTupleSet,
int whichVec,
void** us) {
225 arg.copyTo(us[whichVec], whichPosInTupleSet);
226 unpack(arg.myOtherData, whichPosInTupleSet, whichVec + 1, us);
232 template <
typename TypeToTruncate>
233 typename std::enable_if<sizeof(TypeToTruncate::myOtherData) == 0, void>::type
eraseEnd(
int i,
241 template <
typename TypeToTruncate>
242 typename std::enable_if<sizeof(TypeToTruncate::myOtherData) != 0, void>::type
eraseEnd(
int i,
247 eraseEnd<decltype(TypeToTruncate::myOtherData)>(i, whichVec + 1, us);
253 template <
typename TypeToTruncate>
254 typename std::enable_if<sizeof(TypeToTruncate::myOtherData) == 0, void>::type
truncate(
int i,
263 template <
typename TypeToTruncate>
264 typename std::enable_if<sizeof(TypeToTruncate::myOtherData) != 0, void>::type
truncate(
int i,
269 truncate<decltype(TypeToTruncate::myOtherData)>(i, whichVec + 1, us);
273 template <
typename RHSType>
302 if (columns !=
nullptr)
316 std::vector<int>& positions,
320 bool needToSwapLHSAndRhs)
321 : myMachine(inputSchema, attsToIncludeInOutput) {
328 output = std::make_shared<TupleSet>();
329 columns =
new void*[positions.size()];
330 if (needToSwapLHSAndRhs) {
331 offset = positions.size();
332 createCols<RHSType>(columns, *output, 0, 0, positions);
336 columns, *output, attsToIncludeInOutput.
getAtts().size(), 0, positions);
340 std::vector<int> matches = myMachine.match(attsToOperateOn);
341 whichAtt = matches[0];
350 std::vector<size_t> inputHash = input->getColumn<
size_t>(whichAtt);
354 if (counts.size() != inputHash.size()) {
355 counts.resize(inputHash.size());
359 int overallCounter = 0;
360 for (
int i = 0; i < inputHash.size(); i++) {
363 auto a = inputTableRef.
lookup(inputHash[i]);
364 int numHits = a.size();
366 for (
int which = 0; which < numHits; which++) {
367 unpack(a[which], overallCounter, 0, columns);
376 eraseEnd<RHSType>(overallCounter, 0, columns);
379 myMachine.replicate(input, output, counts, offset);
389 template <
typename RHSType>
416 size_t mySize = myList->
size();
417 size_t myHash = myList->
getHash();
419 for (
size_t i = 0; i < mySize; i++) {
421 RHSType* temp = &(myMap.push(myHash));
424 std::cout <<
"ERROR: join data is too large to be built in one map, "
425 "results are truncated!"
442 unsafeCast<Vector<Handle<JoinMap<RHSType>>>>(mergeMe);
444 for (
int i = 0; i < theOtherMaps.size(); i++) {
449 size_t mySize = myList->
size();
450 size_t myHash = myList->
getHash();
452 for (
size_t j = 0; j < mySize; j++) {
454 RHSType* temp = &(myMap.push(myHash));
457 std::cout <<
"ERROR: join data is too large to be built in one map, "
458 "results are truncated!"
475 template <
typename RHSType>
529 size_t myListSize = 0;
544 std::function<
void(
PDBPagePtr)> doneWithVector,
546 std::vector<int> positions)
547 : getAnotherVector(getAnotherVector), doneWithVector(doneWithVector), chunkSize(chunkSize) {
550 this->myPartitionId = myPartitionId;
553 output = std::make_shared<TupleSet>();
555 myPage = getAnotherVector();
556 if (myPage !=
nullptr) {
557 myIter = make_shared<RecordIterator>(myPage);
558 if (myIter->hasNext() ==
true) {
567 if (myRec !=
nullptr) {
569 iterateOverMe = myRec->getRootObject();
570 PDB_COUT <<
"Got iterateOverMe" << std::endl;
572 columns =
new void*[positions.size()];
573 createCols<RHSType>(columns, *output, 0, 0, positions);
575 hashColumn =
new std::vector<size_t>;
576 output->addColumn(positions.size(), hashColumn,
true);
580 iterateOverMe =
nullptr;
587 curJoinMap =
nullptr;
595 this->chunkSize = chunkSize;
603 if ((iterateOverMe ==
nullptr) || (isDone ==
true)) {
607 size_t posToRecover = pos;
611 size_t posInRecordListToRecover = posInRecordList;
613 size_t myListSizeToRecover = myListSize;
614 size_t myHashToRecover = myHash;
616 int overallCounter = 0;
625 if ((lastRec !=
nullptr) && (lastPage !=
nullptr)) {
626 doneWithVector(lastPage);
631 while (curJoinMap ==
nullptr) {
632 curJoinMap = (*iterateOverMe)[pos];
634 if (curJoinMap !=
nullptr) {
635 if ((curJoinMap->getPartitionId() % curJoinMap->getNumPartitions()) !=
637 curJoinMap =
nullptr;
639 curJoinMapIter = curJoinMap->begin();
640 joinMapEndIter = curJoinMap->end();
644 if (curJoinMap ==
nullptr) {
645 if (pos == iterateOverMe->size()) {
653 if (curJoinMap !=
nullptr) {
654 if (myList ==
nullptr) {
655 if (curJoinMapIter != joinMapEndIter) {
656 myList = *curJoinMapIter;
657 myListSize = myList->size();
658 myHash = myList->getHash();
662 while (curJoinMapIter != joinMapEndIter) {
663 for (
size_t i = posInRecordList; i < myListSize; i++) {
665 unpack((*myList)[i], overallCounter, 0, columns);
668 curJoinMap = curJoinMapToRecover;
669 curJoinMapIter = curJoinMapIterToRecover;
670 joinMapEndIter = joinMapEndIterToRecover;
671 posInRecordList = posInRecordListToRecover;
672 myList = myListToRecover;
673 myListSize = myListSizeToRecover;
674 myHash = myHashToRecover;
677 hashColumn->push_back(myHash);
680 if (overallCounter == this->chunkSize) {
681 hashColumn->resize(overallCounter);
682 eraseEnd<RHSType>(overallCounter, 0, columns);
686 if (posInRecordList >= myListSize) {
689 if (curJoinMapIter != joinMapEndIter) {
690 myList = *curJoinMapIter;
691 myListSize = myList->size();
692 myHash = myList->getHash();
700 curJoinMap =
nullptr;
702 if ((curJoinMap ==
nullptr) && (pos == iterateOverMe->size())) {
705 if (myIter->hasNext() ==
true) {
710 myPage = getAnotherVector();
711 if (myPage !=
nullptr) {
712 myIter = std::make_shared<RecordIterator>(myPage);
713 if (myIter->hasNext() ==
true) {
725 if (myRec ==
nullptr) {
727 iterateOverMe =
nullptr;
728 if (overallCounter > 0) {
730 hashColumn->resize(overallCounter);
731 eraseEnd<RHSType>(overallCounter, 0, columns);
739 iterateOverMe = myRec->getRootObject();
745 iterateOverMe =
nullptr;
753 if ((lastRec !=
nullptr) && (lastPage !=
nullptr)) {
755 doneWithVector(lastPage);
766 template <
typename RHSType>
778 this->nodeId = nodeId;
789 makeObject<Vector<Handle<JoinMap<RHSType>>>>();
800 unsafeCast<Vector<Handle<JoinMap<RHSType>>>,
Object>(shuffleToMe);
804 thisMap = makeObject<JoinMap<RHSType>>(mapToShuffle.size(),
805 mapToShuffle.getPartitionId(),
806 mapToShuffle.getNumPartitions());
808 std::cout <<
"ERROR: can't allocate for new map" << std::endl;
817 size_t mySize = myList->
size();
818 size_t myHash = myList->
getHash();
822 for (
size_t i = 0; i < mySize; i++) {
823 if (myMap.
count(myHash) == 0) {
825 RHSType* temp = &(myMap.
push(myHash));
830 std::cout <<
"Run out of space in shuffling, to allocate a new page"
838 temp = &(myMap.
push(myHash));
840 std::cout <<
"Run out of space in shuffling, to allocate a new page!"
849 std::cout <<
"Run out of space in shuffling, to allocate a new page"
861 myMaps.push_back(thisMap);
868 template <
typename RHSType>
890 void** columns =
nullptr;
894 if (columns !=
nullptr)
903 std::vector<int>& whereEveryoneGoes)
904 : whereEveryoneGoes(whereEveryoneGoes) {
906 this->numPartitionsPerNode = numPartitionsPerNode;
908 this->numNodes = numNodes;
914 std::vector<int> matches = myMachine.
match(attsToOperateOn);
918 useTheseAtts = myMachine.
match(additionalAtts);
924 makeObject<Vector<Handle<Vector<Handle<JoinMap<RHSType>>>>>>(numNodes);
925 for (
int i = 0; i < numNodes; i++) {
927 makeObject<Vector<Handle<JoinMap<RHSType>>>>(numPartitionsPerNode);
928 for (
int j = 0; j < numPartitionsPerNode; j++) {
930 2, i * numPartitionsPerNode + j, numPartitionsPerNode);
931 myVector->push_back(myMap);
933 returnVal->push_back(myVector);
939 PDB_COUT <<
"PartitionedJoinSink: write out tuples in this tuple set" << std::endl;
942 unsafeCast<Vector<Handle<Vector<Handle<JoinMap<RHSType>>>>>>(writeToMe);
944 if (columns ==
nullptr)
945 columns =
new void*[whereEveryoneGoes.size()];
949 for (counter = 0; counter < whereEveryoneGoes.size(); counter++) {
952 (
void*)&(input->getColumn<
int>(useTheseAtts[whereEveryoneGoes[counter]]));
957 std::vector<size_t>& keyColumn = input->getColumn<
size_t>(keyAtt);
959 size_t length = keyColumn.size();
960 for (
size_t i = 0; i < length; i++) {
961 #ifndef NO_MOD_PARTITION
962 size_t index = keyColumn[i] % (this->numPartitionsPerNode * this->numNodes);
964 size_t index = (keyColumn[i] / (this->numPartitionsPerNode * this->numNodes)) %
965 (this->numPartitionsPerNode * this->numNodes);
967 size_t nodeIndex = index / this->numPartitionsPerNode;
968 size_t partitionIndex = index % this->numPartitionsPerNode;
971 if (myMap.
count(keyColumn[i]) == 0) {
973 RHSType& temp = myMap.
push(keyColumn[i]);
974 pack(temp, i, 0, columns);
978 std::cout <<
"we are running out of space in writing join sink" << std::endl;
983 truncate<RHSType>(i, 0, columns);
984 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
994 temp = &(myMap.
push(keyColumn[i]));
999 std::cout <<
"we are running out of space in writing join sink" << std::endl;
1000 truncate<RHSType>(i, 0, columns);
1001 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
1008 pack(*temp, i, 0, columns);
1012 std::cout <<
"we are running out of space in writing join sink" << std::endl;
1014 truncate<RHSType>(i, 0, columns);
1015 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
1026 template <
typename RHSType>
1042 void** columns =
nullptr;
1046 if (columns !=
nullptr)
1053 std::vector<int>& whereEveryoneGoes)
1054 : whereEveryoneGoes(whereEveryoneGoes) {
1060 std::vector<int> matches = myMachine.
match(attsToOperateOn);
1061 keyAtt = matches[0];
1064 useTheseAtts = myMachine.
match(additionalAtts);
1068 PDB_COUT <<
"JoinSink: to create new JoinMap instance" << std::endl;
1075 PDB_COUT <<
"JoinSink: write out tuples in this tuple set" << std::endl;
1081 if (columns ==
nullptr)
1082 columns =
new void*[whereEveryoneGoes.size()];
1086 for (counter = 0; counter < whereEveryoneGoes.size(); counter++) {
1089 (
void*)&(input->getColumn<
int>(useTheseAtts[whereEveryoneGoes[counter]]));
1094 std::vector<size_t>& keyColumn = input->getColumn<
size_t>(keyAtt);
1096 size_t length = keyColumn.size();
1097 for (
size_t i = 0; i < length; i++) {
1100 if (myMap.count(keyColumn[i]) == 0) {
1103 RHSType& temp = myMap.push(keyColumn[i]);
1104 pack(temp, i, 0, columns);
1111 myMap.setUnused(keyColumn[i]);
1112 truncate<RHSType>(i, 0, columns);
1113 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
1124 temp = &(myMap.push(keyColumn[i]));
1129 truncate<RHSType>(i, 0, columns);
1130 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
1137 pack(*temp, i, 0, columns);
1141 myMap.setUnused(keyColumn[i]);
1142 truncate<RHSType>(i, 0, columns);
1143 keyColumn.erase(keyColumn.begin(), keyColumn.begin() + i);
1156 std::vector<int>& positions,
1160 bool needToSwapLHSAndRhs) = 0;
1165 std::vector<int>& whereEveryoneGoes) = 0;
1167 virtual ComputeSinkPtr getPartitionedSink(
int numPartitionsPerNode,
1172 std::vector<int>& whereEveryoneGoes) = 0;
1176 std::function<
PDBPagePtr()> getAnotherVector,
1177 std::function<
void(
PDBPagePtr)> doneWithVector,
1179 std::vector<int>& whereEveryoneGoes) = 0;
1187 template <
typename HoldMe>
1196 std::vector<int>& positions,
1200 bool needToSwapLHSAndRhs)
override {
1201 return std::make_shared<JoinProbe<HoldMe>>(hashTable,
1205 attsToIncludeInOutput,
1206 needToSwapLHSAndRhs);
1213 std::vector<int>& whereEveryoneGoes)
override {
1214 return std::make_shared<JoinSink<HoldMe>>(
1215 consumeMe, attsToOpOn, projection, whereEveryoneGoes);
1224 std::vector<int>& whereEveryoneGoes)
override {
1225 return std::make_shared<PartitionedJoinSink<HoldMe>>(
1226 numPartitionsPerNode, numNodes, consumeMe, attsToOpOn, projection, whereEveryoneGoes);
1231 std::function<
PDBPagePtr()> getAnotherVector,
1232 std::function<
void(
PDBPagePtr)> doneWithVector,
1234 std::vector<int>& whereEveryoneGoes)
override {
1235 return std::make_shared<PartitionedJoinMapTupleSetIterator<HoldMe>>(
1236 myPartitionId, getAnotherVector, doneWithVector, chunkSize, whereEveryoneGoes);
1242 return std::make_shared<JoinSinkMerger<HoldMe>>();
1247 return std::make_shared<JoinSinkShuffler<HoldMe>>();
1253 inline int findType(std::string& findMe, std::vector<std::string>& typeList) {
1254 for (
int i = 0; i < typeList.size(); i++) {
1255 if (typeList[i] == findMe) {
1256 typeList[i] = std::string(
"");
1263 template <
typename In1>
1264 typename std::enable_if<std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1267 template <
typename In1,
typename... Rest>
1268 typename std::enable_if<
sizeof...(Rest) != 0 && !std::is_base_of<JoinTupleBase, In1>::value,
1272 template <
typename In1,
typename In2,
typename... Rest>
1273 typename std::enable_if<std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1276 template <
typename In1>
1277 typename std::enable_if<!std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1280 template <
typename In1>
1281 typename std::enable_if<!std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1286 std::string in1Name = getTypeName<Handle<In1>>();
1287 int in1Pos =
findType(in1Name, typeList);
1290 whereEveryoneGoes.push_back(in1Pos);
1291 typeList[in1Pos] = in1Name;
1292 return std::make_shared<JoinSingleton<JoinTuple<In1, char[0]>>>();
1294 std::cout <<
"Why did we not find a type?\n";
1299 template <
typename In1>
1300 typename std::enable_if<std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1302 return std::make_shared<JoinSingleton<In1>>();
1305 template <
typename In1,
typename... Rest>
1306 typename std::enable_if<
sizeof...(Rest) != 0 && !std::is_base_of<JoinTupleBase, In1>::value,
1311 std::string in1Name = getTypeName<Handle<In1>>();
1312 int in1Pos =
findType(in1Name, typeList);
1316 findCorrectJoinTuple<JoinTuple<In1, char[0]>, Rest...>(typeList, whereEveryoneGoes);
1317 whereEveryoneGoes.push_back(in1Pos);
1318 typeList[in1Pos] = in1Name;
1326 template <
typename In1,
typename In2,
typename... Rest>
1327 typename std::enable_if<std::is_base_of<JoinTupleBase, In1>::value,
JoinTuplePtr>::type
1331 std::string in2Name = getTypeName<Handle<In2>>();
1332 int in2Pos =
findType(in2Name, typeList);
1334 returnVal = findCorrectJoinTuple<JoinTuple<In2, In1>, Rest...>(typeList, whereEveryoneGoes);
1335 whereEveryoneGoes.push_back(in2Pos);
1336 typeList[in2Pos] = in2Name;
std::enable_if< sizeof(TypeToCreate::myOtherData)==0, void >::type createCols(void **putUsHere, TupleSet &processMe, int offset, int whichPos, std::vector< int > positions)
shared_ptr< PDBPage > PDBPagePtr
std::shared_ptr< ComputeSource > ComputeSourcePtr
std::enable_if< sizeof(TypeToTruncate::myOtherData)==0, void >::type eraseEnd(int i, int whichVec, void **us)
#define REF_COUNT_PREAMBLE_SIZE
static void eraseEnd(void *input, int i)
std::vector< int > useTheseAtts
std::vector< int > useTheseAtts
Handle< ObjType > getRootObject()
std::vector< int > whereEveryoneGoes
Handle< JoinMap< RHSType > > inputTable
PartitionedJoinMapTupleSetIterator(size_t myPartitionId, std::function< PDBPagePtr()> getAnotherVector, std::function< void(PDBPagePtr)> doneWithVector, size_t chunkSize, std::vector< int > positions)
std::shared_ptr< JoinTupleSingleton > JoinTuplePtr
void copyDataFrom(HoldMe me)
std::vector< std::string > & getAtts()
SinkMergerPtr getMerger() override
std::shared_ptr< SinkShuffler > SinkShufflerPtr
TupleSetPtr getNextTupleSet() override
void setUnused(const size_t &clearMe)
std::shared_ptr< SinkMerger > SinkMergerPtr
void setChunkSize(size_t chunkSize) override
void copyTo(T &out, Handle< T > &in)
void setNodeId(int nodeId) override
std::enable_if<(sizeof(TypeToPackData::myOtherData)==0)&&(sizeof(TypeToPackData::myData)!=0), void >::type packData(TypeToPackData &arg, TypeToPackData data)
ComputeSinkPtr getPartitionedSink(int numPartitionsPerNode, int numNodes, TupleSpec &consumeMe, TupleSpec &attsToOpOn, TupleSpec &projection, std::vector< int > &whereEveryoneGoes) override
Handle< Object > createNewOutputContainer() override
Record< Vector< Handle< JoinMap< RHSType > > > > * myRec
std::vector< int > match(TupleSpec &attsToMatch)
std::enable_if< sizeof(TypeToTruncate::myOtherData)!=0, void >::type truncate(int i, int whichVec, void **us)
JoinMapIterator< ValueType > begin()
int findType(std::string &findMe, std::vector< std::string > &typeList)
Handle< Vector< Handle< JoinMap< RHSType > > > > iterateOverMe
void writeOut(TupleSetPtr input, Handle< Object > &writeToMe) override
std::function< void(PDBPagePtr)> doneWithVector
PartitionedJoinSink(int numPartitionsPerNode, int numNodes, TupleSpec &inputSchema, TupleSpec &attsToOperateOn, TupleSpec &additionalAtts, std::vector< int > &whereEveryoneGoes)
std::string getType() override
std::enable_if< sizeof(TypeToTruncate::myOtherData)==0, void >::type truncate(int i, int whichVec, void **us)
JoinProbe(void *hashTable, std::vector< int > &positions, TupleSpec &inputSchema, TupleSpec &attsToOperateOn, TupleSpec &attsToIncludeInOutput, bool needToSwapLHSAndRhs)
TupleSetPtr process(TupleSetPtr input) override
std::vector< size_t > * hashColumn
Handle< JoinMap< RHSType > > curJoinMap
ComputeExecutorPtr getProber(void *hashTable, std::vector< int > &positions, TupleSpec &inputSchema, TupleSpec &attsToOperateOn, TupleSpec &attsToIncludeInOutput, bool needToSwapLHSAndRhs) override
std::enable_if< std::is_base_of< JoinTupleBase, In1 >::value, JoinTuplePtr >::type findCorrectJoinTuple(std::vector< std::string > &typeList, std::vector< int > &whereEveryoneGoes)
std::shared_ptr< ComputeSink > ComputeSinkPtr
std::enable_if< sizeof(TypeToUnPack::myOtherData)==0, void >::type unpack(TypeToUnPack &arg, int whichPosInTupleSet, int whichVec, void **us)
std::function< PDBPagePtr()> getAnotherVector
void copyTo(void *input, int whichPos)
std::shared_ptr< TupleSet > TupleSetPtr
static decltype(test< T >(*((T *) 0), 1) val)
JoinRecordList< ValueType > lookup(const size_t &which)
void copyDataFrom(Handle< HoldMe > me)
std::shared_ptr< ComputeExecutor > ComputeExecutorPtr
ComputeSinkPtr getSink(TupleSpec &consumeMe, TupleSpec &attsToOpOn, TupleSpec &projection, std::vector< int > &whereEveryoneGoes) override
~PartitionedJoinMapTupleSetIterator()
std::shared_ptr< RecordIterator > RecordIteratorPtr
Handle< Object > createNewOutputContainer() override
void writeOut(Handle< Object > mergeMe, Handle< Object > &mergeToMe) override
std::vector< uint32_t > counts
void copyFrom(T &out, Handle< T > &in)
static void truncate(void *input, int i)
bool writeOut(Handle< Object > shuffleMe, Handle< Object > &shuffleToMe) override
void copyFrom(void *input, int whichPos)
TupleSetSetupMachine myMachine
ValueType & push(const size_t &which)
Handle< Object > createNewOutputContainer() override
JoinMapIterator< RHSType > curJoinMapIter
ComputeSourcePtr getPartitionedSource(size_t myPartitionId, std::function< PDBPagePtr()> getAnotherVector, std::function< void(PDBPagePtr)> doneWithVector, size_t chunkSize, std::vector< int > &whereEveryoneGoes) override
int count(const size_t &which)
std::enable_if< sizeof(TypeToPack::myOtherData)==0, void >::type pack(TypeToPack &arg, int whichPosInTupleSet, int whichVec, void **us)
std::enable_if< sizeof(TypeToTruncate::myOtherData)!=0, void >::type eraseEnd(int i, int whichVec, void **us)
void makeObjectAllocatorBlock(size_t numBytesIn, bool throwExceptionOnFail)
JoinMapIterator< RHSType > joinMapEndIter
void writeOut(TupleSetPtr input, Handle< Object > &writeToMe) override
JoinMapIterator< ValueType > end()
void writeVectorOut(Handle< Object > mergeMe, Handle< Object > &mergeToMe) override
JoinSink(TupleSpec &inputSchema, TupleSpec &attsToOperateOn, TupleSpec &additionalAtts, std::vector< int > &whereEveryoneGoes)
SinkShufflerPtr getShuffler() override
std::vector< int > whereEveryoneGoes
Handle< Object > createNewOutputContainer() override