Exemplo n.º 1
0
 virtual CActivityBase *queryActivity(bool checkNull)
 {
     if (checkNull && hasNullInput)
     {
         CriticalBlock b(nullActivityCs);
         if (!nullActivity)
             nullActivity.setown(createNullSlave(this));
         return nullActivity;
     }
     else
         return activity;
 }
Exemplo n.º 2
0
 virtual CActivityBase *factory(ThorActivityKind kind)
 {
     CActivityBase *ret = NULL;
     switch (kind)
     {
         case TAKdiskread:
             ret = createDiskReadSlave(this);
             break;
         case TAKdisknormalize:
             ret = createDiskNormalizeSlave(this);
             break;
         case TAKdiskaggregate:
             ret = createDiskAggregateSlave(this);
             break;
         case TAKdiskcount:
             ret = createDiskCountSlave(this);
             break;
         case TAKdiskgroupaggregate:
             ret = createDiskGroupAggregateSlave(this);
             break;  
         case TAKindexread:
             ret = createIndexReadSlave(this);
             break;
         case TAKindexcount:
             ret = createIndexCountSlave(this);
             break;
         case TAKindexnormalize:
             ret = createIndexNormalizeSlave(this);
             break;
         case TAKindexaggregate:
             ret = createIndexAggregateSlave(this);
             break;
         case TAKindexgroupaggregate:
         case TAKindexgroupexists:
         case TAKindexgroupcount:
             ret = createIndexGroupAggregateSlave(this);
             break;
         case TAKchildaggregate:
             ret = createChildAggregateSlave(this);
             break;
         case TAKchildgroupaggregate:
             ret = createChildGroupAggregateSlave(this);
             break;
         case TAKchildthroughnormalize:
             ret = createChildThroughNormalizeSlave(this);
             break;
         case TAKchildnormalize:
             ret = createChildNormalizeSlave(this);
             break;
         case TAKspill:
             ret = createSpillSlave(this);
             break;
         case TAKdiskwrite:
             ret = createDiskWriteSlave(this);
             break;
         case TAKsort:
             if (queryGrouped())
                 ret = createGroupSortSlave(this);
             else if (queryLocal())
                 ret = createLocalSortSlave(this);
             else
                 ret = createMSortSlave(this);
             break;
         case TAKsorted:
             ret = createSortedSlave(this);
             break;
         case TAKdedup:
             if (queryGrouped())
                 ret = createGroupDedupSlave(this);
             else if (queryLocal())
                 ret = createLocalDedupSlave(this);
             else
                 ret = createDedupSlave(this);
             break;
         case TAKrollupgroup:
             ret = createRollupGroupSlave(this);
             break;
         case TAKrollup:
             if (queryGrouped())
                 ret = createGroupRollupSlave(this);
             else if (queryLocal())
                 ret = createLocalRollupSlave(this);
             else
                 ret = createRollupSlave(this);
             break;
         case TAKprocess:
             if (queryGrouped())
                 ret = createGroupProcessSlave(this);
             else if (queryLocal())
                 ret = createLocalProcessSlave(this);
             else
                 ret = createProcessSlave(this);
             break;
         case TAKfilter:
             ret = createFilterSlave(this);
             break;
         case TAKfilterproject:
             ret = createFilterProjectSlave(this);
             break;
         case TAKfiltergroup:
             ret = createFilterGroupSlave(this);
             break;
         case TAKsplit:
             ret = createNSplitterSlave(this);
             break;
         case TAKproject:
             ret = createProjectSlave(this);
             break;
         case TAKprefetchproject:
             ret = createPrefetchProjectSlave(this);
             break;
         case TAKprefetchcountproject:
             break;
         case TAKiterate:
             if (queryGrouped())
                 ret = createGroupIterateSlave(this);
             else if (queryLocal())
                 ret = createLocalIterateSlave(this);
             else
                 ret = createIterateSlave(this);
             break;
         case TAKaggregate:
         case TAKexistsaggregate:
         case TAKcountaggregate:
             if (queryLocalOrGrouped())
                 ret = createGroupAggregateSlave(this);
             else
                 ret = createAggregateSlave(this);
             break;
         case TAKhashaggregate:
             ret = createHashAggregateSlave(this);
             break;
         case TAKfirstn:
             ret = createFirstNSlave(this);
             break;
         case TAKsample:
             ret = createSampleSlave(this);
             break;
         case TAKdegroup:
             ret = createDegroupSlave(this);
             break;
         case TAKjoin:
             if (queryLocalOrGrouped())
                 ret = createLocalJoinSlave(this);
             else
                 ret = createJoinSlave(this);
             break;
         case TAKhashjoin:
         case TAKhashdenormalize:
         case TAKhashdenormalizegroup:
             ret = createHashJoinSlave(this);
             break;
         case TAKlookupjoin:
             ret = createLookupJoinSlave(this);
             break;
         case TAKalljoin:
             ret = createAllJoinSlave(this);
             break;
         case TAKselfjoin:
             if (queryLocalOrGrouped())
                 ret = createLocalSelfJoinSlave(this);
             else
                 ret = createSelfJoinSlave(this);
             break;
         case TAKselfjoinlight:
             ret = createLightweightSelfJoinSlave(this);
             break;
         case TAKkeyedjoin:
         case TAKkeyeddenormalize:
         case TAKkeyeddenormalizegroup:
             ret = createKeyedJoinSlave(this);
             break;
         case TAKgroup:
             if (queryLocalOrGrouped())
                 ret = createLocalGroupSlave(this);
             else
                 ret = createGroupSlave(this);
             break;
         case TAKworkunitwrite:
             ret = createWorkUnitWriteSlave(this);
             break;
         case TAKfunnel:
             ret = createFunnelSlave(this);
             break;
         case TAKcombine:
             ret = createCombineSlave(this);
             break;
         case TAKregroup:
             ret = createRegroupSlave(this);
             break;
         case TAKapply:
             ret = createApplySlave(this);
             break;
         case TAKtemptable:
         case TAKtemprow:
             ret = createTempTableSlave(this);
             break;
         case TAKkeyeddistribute:
             ret = createIndexDistributeSlave(this);
             break;
         case TAKhashdistribute:
             ret = createHashDistributeSlave(this);
             break;
         case TAKhashdistributemerge:
             ret = createHashDistributeMergeSlave(this);
             break;
         case TAKhashdedup:
             if (queryLocalOrGrouped())
                 ret = createHashLocalDedupSlave(this);
             else
                 ret = createHashDedupSlave(this);
             break;
         case TAKnormalize:
             ret = createNormalizeSlave(this);
             break;
         case TAKnormalizechild:
             ret = createNormalizeChildSlave(this);
             break;
         case TAKnormalizelinkedchild:
             ret = createNormalizeLinkedChildSlave(this);
             break;
         case TAKremoteresult:
             ret = createResultSlave(this);
             break;
         case TAKpull:
             ret = createPullSlave(this);
             break;
         case TAKdenormalize:
         case TAKdenormalizegroup:
             if (queryLocalOrGrouped())
                 ret = createLocalDenormalizeSlave(this);
             else
                 ret = createDenormalizeSlave(this);
             break;
         case TAKnwayinput:
             ret = createNWayInputSlave(this);
             break;
         case TAKnwayselect:
             ret = createNWaySelectSlave(this);
             break;
         case TAKnwaymerge:
             ret = createNWayMergeActivity(this);
             break;
         case TAKnwaymergejoin:
         case TAKnwayjoin:
             ret = createNWayMergeJoinActivity(this);
             break;
         case TAKalldenormalize:
         case TAKalldenormalizegroup:
             ret = createAllDenormalizeSlave(this);
             break;
         case TAKlookupdenormalize:
         case TAKlookupdenormalizegroup:
             ret = createLookupDenormalizeSlave(this);
             break;
         case TAKchilddataset:
             UNIMPLEMENTED;
         case TAKchilditerator:
             ret = createChildIteratorSlave(this);
             break;
         case TAKrawiterator:
             ret = createRawIteratorSlave(this);
             break;
         case TAKlinkedrawiterator:
             ret = createLinkedRawIteratorSlave(this);
             break;
         case TAKselectn:
             if (queryLocalOrGrouped())
                 ret = createLocalSelectNthSlave(this);
             else
                 ret = createSelectNthSlave(this);
             break;
         case TAKenth:
             if (queryLocalOrGrouped())
                 ret = createLocalEnthSlave(this);
             else
                 ret = createEnthSlave(this);
             break;
         case TAKnull:
             ret = createNullSlave(this);
             break;
         case TAKdistribution:
             ret = createDistributionSlave(this);
             break;
         case TAKcountproject:
             if (queryLocalOrGrouped())
                 ret = createLocalCountProjectSlave(this);
             else
                 ret = createCountProjectSlave(this);
             break;
         case TAKchoosesets:
             if (queryLocalOrGrouped())
                 ret = createLocalChooseSetsSlave(this);
             else
                 ret = createChooseSetsSlave(this);
             break;
         case TAKpiperead:
             ret = createPipeReadSlave(this);
             break;
         case TAKpipewrite:
             ret = createPipeWriteSlave(this);
             break;
         case TAKcsvread:
             ret = createCsvReadSlave(this);
             break;
         case TAKcsvwrite:
             ret = createCsvWriteSlave(this);
             break;
         case TAKpipethrough:
             ret = createPipeThroughSlave(this);
             break;
         case TAKindexwrite:
             ret = createIndexWriteSlave(this);
             break;
         case TAKchoosesetsenth:
             ret = createChooseSetsEnthSlave(this);
             break;
         case TAKchoosesetslast:
             ret = createChooseSetsLastSlave(this);
             break;
         case TAKfetch:
             ret = createFetchSlave(this);
             break;
         case TAKcsvfetch:
             ret = createCsvFetchSlave(this);
             break;
         case TAKxmlfetch:
             ret = createXmlFetchSlave(this);
             break;
         case TAKthroughaggregate:
             ret = createThroughAggregateSlave(this);
             break;
         case TAKcase:
         case TAKif:
             throwUnexpected();
             break;
         case TAKwhen_dataset:
             ret = createWhenSlave(this);
             break;
         case TAKworkunitread:
         {
             if (wuidread2diskread)
             {
                 Owned<IHThorDiskReadArg> diskReadHelper = createWorkUnitReadArg(wuidreadFilename, (IHThorWorkunitReadArg *)LINK(baseHelper));
                 Owned<CActivityBase> retAct = createDiskReadSlave(this, diskReadHelper);
                 return retAct.getClear();
             }
             else
                 ret = createWuidReadSlave(this);
             break;
         }
         case TAKparse:
             ret = createParseSlave(this);
             break;
         case TAKsideeffect:
             ret = createNullActionSlave(this);
             break;
         case TAKsimpleaction:
             ret = createNullSlave(this);
             break;
         case TAKtopn:
             if (queryGrouped())
                 ret = createGroupedTopNSlave(this);
             else if (queryLocal())
                 ret = createLocalTopNSlave(this);
             else
                 ret = createGlobalTopNSlave(this);
             break;
         case TAKxmlparse:
             ret = createXmlParseSlave(this);
             break;
         case TAKxmlread:
             ret = createXmlReadSlave(this);
             break;
         case TAKxmlwrite:
             ret = createXmlWriteSlave(this);
             break;
         case TAKmerge:
             if (queryLocalOrGrouped())
                 ret = createLocalMergeSlave(this);
             else
                 ret = createGlobalMergeSlave(this);
             break;
         case TAKsoap_rowdataset:
             ret = createSoapRowCallSlave(this);
             break;
         case TAKsoap_rowaction:
             ret = createSoapRowActionSlave(this);
             break;
         case TAKsoap_datasetdataset:
             ret = createSoapDatasetCallSlave(this);
             break;
         case TAKsoap_datasetaction:
             ret = createSoapDatasetActionSlave(this);
             break;
         case TAKcountdisk:
             return new CSlaveActivity(this); 
         case TAKkeydiff:
             ret = createKeyDiffSlave(this);
             break;
         case TAKkeypatch:
             ret = createKeyPatchSlave(this);
             break;
         case TAKlimit:
             ret = createLimitSlave(this);
             break;
         case TAKskiplimit:
             ret = createSkipLimitSlave(this);
             break;
         case TAKcreaterowlimit:
             ret = createRowLimitSlave(this);
             break;
         case TAKnonempty:
             ret = createNonEmptySlave(this);
             break;
         case TAKlocalresultread:
             ret = createLocalResultReadSlave(this);
             break;
         case TAKlocalresultwrite:
             ret = createLocalResultWriteSlave(this);
             break;
         case TAKlocalresultspill:
             ret = createLocalResultSpillSlave(this);
             break;
         case TAKchildif:
             ret = createIfSlave(this);
             break;
         case TAKcatch:
         case TAKskipcatch:
         case TAKcreaterowcatch:
             ret = createCatchSlave(this);
             break;
         case TAKlooprow:
         case TAKloopcount:
         case TAKloopdataset:
             ret = createLoopSlave(this);
             break;
         case TAKgraphloop:
         case TAKparallelgraphloop:
             ret = createGraphLoopSlave(this);
             break;
         case TAKgraphloopresultread:
             ret = createGraphLoopResultReadSlave(this);
             break;
         case TAKgraphloopresultwrite:
             ret = createGraphLoopResultWriteSlave(this);
             break;
         case TAKstreamediterator:
             ret = createStreamedIteratorSlave(this);
             break;
         case TAKifaction:
             ret = createIfActionSlave(this);
             break;
         default:
             throw MakeStringException(TE_UnsupportedActivityKind, "Unsupported activity kind: %s", activityKindStr(kind));
     }
     return ret;
 }