eclhelper_base.hpp 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587
  1. /*##############################################################################
  2. # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ##############################################################################
  16. */
  17. #ifndef ECLHELPER_BASE_HPP
  18. #define ECLHELPER_BASE_HPP
  19. // Only the base classes for Activity helpers - CHThorArg and derived classes - should be included in this file.
  20. /*
  21. This file contains base class definitions for the different helper classes. Any common methods are implemented here.
  22. Doesn't include jlib.hpp yet, so different implementation of CInterface (RtlCInterface) in eclrtl.hpp
  23. */
  24. //---------------------------------------------------------------------------
  25. template <class INTERFACE>
  26. class ECLRTL_API CThorArgOf : public INTERFACE, public RtlCInterface
  27. {
  28. public:
  29. ICodeContext * ctx;
  30. virtual void Link() const override { RtlCInterface::Link(); }
  31. virtual bool Release() const override { return RtlCInterface::Release(); }
  32. virtual void onCreate(ICodeContext * _ctx, IHThorArg *, MemoryBuffer *) override { ctx = _ctx; }
  33. virtual void serializeCreateContext(MemoryBuffer &) override {}
  34. virtual void onStart(const byte *, MemoryBuffer *) override {}
  35. virtual void serializeStartContext(MemoryBuffer &) override {}
  36. };
  37. template <class INTERFACE>
  38. class ECLRTL_API CThorSinkArgOf : public CThorArgOf<INTERFACE>
  39. {
  40. public:
  41. virtual IOutputMetaData * queryOutputMeta() override { return NULL; }
  42. };
  43. class ECLRTL_API CThorSinkLibraryArg : public CThorArgOf<IHThorLibraryCallArg>
  44. {
  45. public:
  46. virtual IOutputMetaData * queryOutputMeta() override { return NULL; }
  47. virtual IOutputMetaData * queryOutputMeta(unsigned whichOutput) override { return NULL; }
  48. };
  49. class ECLRTL_API CThorIndexWriteArg : public CThorSinkArgOf<IHThorIndexWriteArg>
  50. {
  51. public:
  52. virtual unsigned getFlags() override;
  53. virtual const char * getDistributeIndexName() override;
  54. virtual unsigned getExpiryDays() override;
  55. virtual void getUpdateCRCs(unsigned & eclCRC, unsigned __int64 & totalCRC) override;
  56. virtual unsigned getFormatCrc() override = 0;
  57. virtual const char * getCluster(unsigned idx) override;
  58. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  59. virtual bool getIndexMeta(size32_t & lenName, char * & name, size32_t & lenValue, char * & value, unsigned idx) override;
  60. virtual unsigned getWidth() override;
  61. virtual ICompare * queryCompare() override;
  62. virtual const IBloomBuilderInfo * const *queryBloomInfo() const override;
  63. virtual __uint64 getPartitionFieldMask() const override;
  64. };
  65. class ECLRTL_API CBloomBuilderInfo : public IBloomBuilderInfo
  66. {
  67. virtual bool getBloomEnabled() const override;
  68. virtual __uint64 getBloomFields() const override;
  69. virtual unsigned getBloomLimit() const override;
  70. virtual double getBloomProbability() const override;
  71. };
  72. class ECLRTL_API CThorFirstNArg : public CThorArgOf<IHThorFirstNArg>
  73. {
  74. virtual __int64 numToSkip() override;
  75. virtual bool preserveGrouping() override;
  76. };
  77. class ECLRTL_API CThorChooseSetsArg : public CThorArgOf<IHThorChooseSetsArg>
  78. {
  79. };
  80. class ECLRTL_API CThorChooseSetsExArg : public CThorArgOf<IHThorChooseSetsExArg>
  81. {
  82. };
  83. class ECLRTL_API CThorDiskWriteArg : public CThorSinkArgOf<IHThorDiskWriteArg>
  84. {
  85. virtual int getSequence() override;
  86. virtual unsigned getFlags() override;
  87. virtual unsigned getTempUsageCount() override;
  88. virtual unsigned getExpiryDays() override;
  89. virtual void getUpdateCRCs(unsigned & eclCRC, unsigned __int64 & totalCRC) override;
  90. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  91. virtual const char * getCluster(unsigned idx) override;
  92. };
  93. class ECLRTL_API CThorPipeReadArg : public CThorArgOf<IHThorPipeReadArg>
  94. {
  95. public:
  96. virtual unsigned getPipeFlags() override;
  97. virtual ICsvToRowTransformer * queryCsvTransformer() override;
  98. virtual IXmlToRowTransformer * queryXmlTransformer() override;
  99. virtual const char * getXmlIteratorPath() override;
  100. };
  101. //A class which only implements default values for the interface
  102. class ECLRTL_API CHThorXmlWriteExtra : public IHThorXmlWriteExtra
  103. {
  104. virtual const char * getXmlIteratorPath() override;
  105. virtual const char * getHeader() override;
  106. virtual const char * getFooter() override;
  107. virtual unsigned getXmlFlags() override;
  108. };
  109. class ECLRTL_API CThorPipeWriteArg : public CThorSinkArgOf<IHThorPipeWriteArg>
  110. {
  111. public:
  112. virtual char * getNameFromRow(const void * _self) override;
  113. virtual bool recreateEachRow() override;
  114. virtual unsigned getPipeFlags() override;
  115. virtual IHThorCsvWriteExtra * queryCsvOutput() override;
  116. virtual IHThorXmlWriteExtra * queryXmlOutput() override;
  117. };
  118. class ECLRTL_API CThorPipeThroughArg : public CThorArgOf<IHThorPipeThroughArg>
  119. {
  120. public:
  121. virtual char * getNameFromRow(const void * _self) override;
  122. virtual bool recreateEachRow() override;
  123. virtual unsigned getPipeFlags() override;
  124. virtual IHThorCsvWriteExtra * queryCsvOutput() override;
  125. virtual IHThorXmlWriteExtra * queryXmlOutput() override;
  126. virtual ICsvToRowTransformer * queryCsvTransformer() override;
  127. virtual IXmlToRowTransformer * queryXmlTransformer() override;
  128. virtual const char * getXmlIteratorPath() override;
  129. };
  130. class ECLRTL_API CThorFilterArg : public CThorArgOf<IHThorFilterArg>
  131. {
  132. virtual bool canMatchAny() override;
  133. virtual bool isValid(const void * _left) override;
  134. };
  135. class ECLRTL_API CThorFilterGroupArg : public CThorArgOf<IHThorFilterGroupArg>
  136. {
  137. virtual bool canMatchAny() override;
  138. virtual bool isValid(unsigned _num, const void * * _rows) override;
  139. };
  140. class ECLRTL_API CThorGroupArg : public CThorArgOf<IHThorGroupArg>
  141. {
  142. };
  143. class ECLRTL_API CThorDegroupArg : public CThorArgOf<IHThorDegroupArg>
  144. {
  145. };
  146. class ECLRTL_API CThorIterateArg : public CThorArgOf<IHThorIterateArg>
  147. {
  148. virtual bool canFilter() override;
  149. };
  150. typedef CThorIterateArg CThorGroupIterateArg;
  151. class ECLRTL_API CThorProcessArg : public CThorArgOf<IHThorProcessArg>
  152. {
  153. virtual bool canFilter() override;
  154. };
  155. class ECLRTL_API CThorProjectArg : public CThorArgOf<IHThorProjectArg>
  156. {
  157. virtual bool canFilter() override;
  158. };
  159. class ECLRTL_API CThorQuantileArg : public CThorArgOf<IHThorQuantileArg>
  160. {
  161. virtual unsigned getFlags() override;
  162. virtual unsigned __int64 getNumDivisions() override;
  163. virtual double getSkew() override;
  164. virtual unsigned __int64 getScore(const void * _left) override;
  165. virtual void getRange(bool & isAll, size32_t & tlen, void * & tgt) override;
  166. };
  167. class ECLRTL_API CThorPrefetchProjectArg : public CThorArgOf<IHThorPrefetchProjectArg>
  168. {
  169. virtual bool canFilter() override;
  170. virtual bool canMatchAny() override;
  171. virtual unsigned getFlags() override;
  172. virtual unsigned getLookahead() override;
  173. virtual IThorChildGraph *queryChild() override;
  174. virtual bool preTransform(rtlRowBuilder & extract, const void * _left, unsigned __int64 _counter) override;
  175. };
  176. class ECLRTL_API CThorFilterProjectArg : public CThorArgOf<IHThorFilterProjectArg>
  177. {
  178. virtual bool canFilter() override;
  179. virtual bool canMatchAny() override;
  180. };
  181. class ECLRTL_API CThorCountProjectArg : public CThorArgOf<IHThorCountProjectArg>
  182. {
  183. virtual bool canFilter() override;
  184. };
  185. class ECLRTL_API CThorNormalizeArg : public CThorArgOf<IHThorNormalizeArg>
  186. {
  187. };
  188. class ECLRTL_API CThorSelectNArg : public CThorArgOf<IHThorSelectNArg>
  189. {
  190. };
  191. class ECLRTL_API CThorCombineArg : public CThorArgOf<IHThorCombineArg>
  192. {
  193. virtual bool canFilter() override;
  194. };
  195. class ECLRTL_API CThorCombineGroupArg : public CThorArgOf<IHThorCombineGroupArg>
  196. {
  197. virtual bool canFilter() override;
  198. };
  199. class ECLRTL_API CThorRollupGroupArg : public CThorArgOf<IHThorRollupGroupArg>
  200. {
  201. virtual bool canFilter() override;
  202. };
  203. class ECLRTL_API CThorRegroupArg : public CThorArgOf<IHThorRegroupArg>
  204. {
  205. };
  206. class ECLRTL_API CThorNullArg : public CThorSinkArgOf<IHThorNullArg>
  207. {
  208. };
  209. class ECLRTL_API CThorActionArg : public CThorSinkArgOf<IHThorActionArg>
  210. {
  211. virtual void action() override;;
  212. };
  213. typedef CThorActionArg CThorSideEffectArg;
  214. class ECLRTL_API CThorLimitArg : public CThorArgOf<IHThorLimitArg>
  215. {
  216. virtual void onLimitExceeded() override; // nothing generated for skip.
  217. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  218. };
  219. class ECLRTL_API CThorCatchArg : public CThorArgOf<IHThorCatchArg>
  220. {
  221. virtual unsigned getFlags() override;
  222. virtual bool isHandler(IException * e) override;
  223. virtual void onExceptionCaught() override;
  224. virtual size32_t transformOnExceptionCaught(ARowBuilder & rowBuilder, IException * e) override;
  225. };
  226. class ECLRTL_API CThorSplitArg : public CThorArgOf<IHThorSplitArg>
  227. {
  228. virtual unsigned numBranches() override;
  229. virtual bool isBalanced() override;
  230. };
  231. class ECLRTL_API CThorSpillArg : public CThorArgOf<IHThorSpillArg>
  232. {
  233. virtual IOutputMetaData * queryDiskRecordSize() override;
  234. virtual int getSequence() override;
  235. virtual unsigned getFlags() override;
  236. virtual unsigned getTempUsageCount() override;
  237. virtual unsigned getExpiryDays() override;
  238. virtual void getUpdateCRCs(unsigned & eclCRC, unsigned __int64 & totalCRC) override;
  239. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  240. virtual const char * getCluster(unsigned idx) override;
  241. };
  242. class ECLRTL_API CThorNormalizeChildArg : public CThorArgOf<IHThorNormalizeChildArg>
  243. {
  244. };
  245. class ECLRTL_API CThorNormalizeLinkedChildArg : public CThorArgOf<IHThorNormalizeLinkedChildArg>
  246. {
  247. };
  248. class ECLRTL_API CThorChildIteratorArg : public CThorArgOf<IHThorChildIteratorArg>
  249. {
  250. };
  251. class ECLRTL_API CThorRawIteratorArg : public CThorArgOf<IHThorRawIteratorArg>
  252. {
  253. };
  254. class ECLRTL_API CThorLinkedRawIteratorArg : public CThorArgOf<IHThorLinkedRawIteratorArg>
  255. {
  256. };
  257. class ECLRTL_API CThorRollupArg : public CThorArgOf<IHThorRollupArg>
  258. {
  259. virtual unsigned getFlags() override;
  260. virtual bool matches(const void * _left, const void * _right) override;
  261. };
  262. class ECLRTL_API CThorDedupArg : public CThorArgOf<IHThorDedupArg>
  263. {
  264. virtual bool matches(const void * _left, const void * _right) override;
  265. virtual unsigned numToKeep() override;
  266. virtual ICompare * queryComparePrimary() override;
  267. virtual unsigned getFlags() override;
  268. virtual ICompare * queryCompareBest() override;
  269. };
  270. class ECLRTL_API CThorAggregateArg : public CThorArgOf<IHThorAggregateArg>
  271. {
  272. virtual unsigned getAggregateFlags() override;
  273. virtual size32_t clearAggregate(ARowBuilder & rowBuilder) override = 0;
  274. virtual size32_t processFirst(ARowBuilder & rowBuilder, const void * src) override = 0;
  275. virtual size32_t processNext(ARowBuilder & rowBuilder, const void * src) override = 0;
  276. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  277. };
  278. class ECLRTL_API CThorCountAggregateArg : public CThorAggregateArg
  279. {
  280. virtual size32_t clearAggregate(ARowBuilder & rowBuilder) override;
  281. virtual size32_t processFirst(ARowBuilder & rowBuilder, const void * src) override;
  282. virtual size32_t processNext(ARowBuilder & rowBuilder, const void * src) override;
  283. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  284. };
  285. class ECLRTL_API CThorExistsAggregateArg : public CThorAggregateArg
  286. {
  287. virtual size32_t clearAggregate(ARowBuilder & rowBuilder) override;
  288. virtual size32_t processFirst(ARowBuilder & rowBuilder, const void * src) override;
  289. virtual size32_t processNext(ARowBuilder & rowBuilder, const void * src) override;
  290. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  291. };
  292. class ECLRTL_API CThorThroughAggregateArg : public CThorArgOf<IHThorThroughAggregateArg>
  293. {
  294. virtual unsigned getAggregateFlags() override;
  295. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  296. };
  297. class ECLRTL_API CThorDistributionArg : public CThorSinkArgOf<IHThorDistributionArg>
  298. {
  299. };
  300. class ECLRTL_API CThorGroupAggregateArg : public CThorArgOf<IHThorGroupAggregateArg>
  301. {
  302. virtual unsigned getAggregateFlags() override;
  303. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  304. };
  305. class ECLRTL_API CThorHashAggregateArg : public CThorArgOf<IHThorHashAggregateArg>
  306. {
  307. virtual unsigned getAggregateFlags() override;
  308. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  309. };
  310. class ECLRTL_API CThorInlineTableArg : public CThorArgOf<IHThorInlineTableArg>
  311. {
  312. public:
  313. virtual unsigned getFlags() override;
  314. };
  315. class ECLRTL_API CThorInlineRowArg : public CThorInlineTableArg
  316. {
  317. virtual __uint64 numRows() override;
  318. };
  319. class ECLRTL_API CThorSampleArg : public CThorArgOf<IHThorSampleArg>
  320. {
  321. };
  322. class ECLRTL_API CThorEnthArg : public CThorArgOf<IHThorEnthArg>
  323. {
  324. };
  325. class ECLRTL_API CThorFunnelArg : public CThorArgOf<IHThorFunnelArg>
  326. {
  327. virtual bool isOrdered() override;
  328. virtual bool pullSequentially() override;
  329. };
  330. class ECLRTL_API CThorNonEmptyArg : public CThorArgOf<IHThorNonEmptyArg>
  331. {
  332. };
  333. class ECLRTL_API CThorMergeArg : public CThorArgOf<IHThorMergeArg>
  334. {
  335. virtual ISortKeySerializer * querySerialize() override; // only if global
  336. virtual ICompare * queryCompareKey() override;
  337. virtual ICompare * queryCompareRowKey() override; // row is lhs, key is rhs
  338. virtual bool dedup() override;
  339. };
  340. class ECLRTL_API CThorRemoteResultArg : public CThorSinkArgOf<IHThorRemoteResultArg>
  341. {
  342. virtual int getSequence() override;
  343. };
  344. class ECLRTL_API CThorApplyArg : public CThorArgOf<IHThorApplyArg>
  345. {
  346. virtual void start() override;
  347. virtual void end() override;
  348. };
  349. class ECLRTL_API CThorSortArg : public CThorArgOf<IHThorSortArg>
  350. {
  351. virtual double getSkew() override; // 0=default
  352. virtual bool hasManyRecords() override;
  353. virtual double getTargetSkew() override;
  354. virtual ISortKeySerializer * querySerialize() override;
  355. virtual unsigned __int64 getThreshold() override;
  356. virtual IOutputMetaData * querySortedRecordSize() override;
  357. virtual const char * getSortedFilename() override;
  358. virtual ICompare * queryCompareLeftRight() override;
  359. virtual ICompare * queryCompareSerializedRow() override;
  360. virtual unsigned getAlgorithmFlags() override;
  361. virtual const char * getAlgorithm() override;
  362. };
  363. class ECLRTL_API CThorTopNArg : public CThorArgOf<IHThorTopNArg>
  364. {
  365. virtual double getSkew() override; // 0=default
  366. virtual bool hasManyRecords() override;
  367. virtual double getTargetSkew() override;
  368. virtual ISortKeySerializer * querySerialize() override;
  369. virtual unsigned __int64 getThreshold() override;
  370. virtual IOutputMetaData * querySortedRecordSize() override;
  371. virtual const char * getSortedFilename() override;
  372. virtual ICompare * queryCompareLeftRight() override;
  373. virtual ICompare * queryCompareSerializedRow() override;
  374. virtual unsigned getAlgorithmFlags() override;
  375. virtual const char * getAlgorithm() override;
  376. virtual bool hasBest() override;
  377. virtual int compareBest(const void * _left) override;
  378. };
  379. class ECLRTL_API CThorSubSortArg : public CThorArgOf<IHThorSubSortArg>
  380. {
  381. virtual double getSkew() override; // 0=default
  382. virtual bool hasManyRecords() override;
  383. virtual double getTargetSkew() override;
  384. virtual ISortKeySerializer * querySerialize() override;
  385. virtual unsigned __int64 getThreshold() override;
  386. virtual IOutputMetaData * querySortedRecordSize() override;
  387. virtual const char * getSortedFilename() override;
  388. virtual ICompare * queryCompareLeftRight() override;
  389. virtual ICompare * queryCompareSerializedRow() override;
  390. };
  391. class ECLRTL_API CThorKeyedJoinArg : public CThorArgOf<IHThorKeyedJoinArg>
  392. {
  393. virtual bool diskAccessRequired() override;
  394. virtual const char * getFileName() override;
  395. virtual IOutputMetaData * queryDiskRecordSize() override;
  396. virtual IOutputMetaData * queryProjectedDiskRecordSize() override;
  397. virtual unsigned __int64 extractPosition(const void * _right) override;
  398. // For the data going to the indexRead remote activity:
  399. virtual bool leftCanMatch(const void * inputRow) override;
  400. virtual bool indexReadMatch(const void * indexRow, const void * inputRow, IBlobProvider * blobs) override;
  401. virtual unsigned __int64 getRowLimit() override;
  402. virtual void onLimitExceeded() override;
  403. virtual unsigned __int64 getSkipLimit() override;
  404. virtual unsigned getMatchAbortLimit() override;
  405. virtual void onMatchAbortLimitExceeded() override;
  406. virtual unsigned getFetchFlags() override;
  407. virtual unsigned getDiskFormatCrc() override;
  408. virtual unsigned getProjectedFormatCrc() override;
  409. virtual void getFileEncryptKey(size32_t & keyLen, void * & key) override;
  410. virtual unsigned getJoinLimit() override;
  411. virtual unsigned getKeepLimit() override;
  412. virtual unsigned getJoinFlags() override;
  413. virtual unsigned getProjectedIndexFormatCrc() override;
  414. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  415. virtual size32_t extractFetchFields(ARowBuilder & rowBuilder, const void * _input) override;
  416. virtual bool fetchMatch(const void * diskRow, const void * inputRow) override;
  417. virtual size32_t createDefaultRight(ARowBuilder & rowBuilder) override;
  418. virtual size32_t onFailTransform(ARowBuilder & rowBuilder, const void * _dummyRight, const void * _origRow, unsigned __int64 keyedFpos, IException * e) override;
  419. //Join:
  420. //Denormalize:
  421. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _joinFields, const void * _origRow, unsigned __int64 keyedFpos, unsigned counter) override;
  422. //Denormalize group:
  423. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _joinFields, const void * _origRow, unsigned _numRows, const void * * _rows) override;
  424. };
  425. typedef CThorKeyedJoinArg CThorKeyedDenormalizeArg;
  426. typedef CThorKeyedJoinArg CThorKeyedDenormalizeGroupArg;
  427. class ECLRTL_API CThorJoinArg : public CThorArgOf<IHThorJoinArg>
  428. {
  429. virtual bool isLeftAlreadySorted() override;
  430. virtual bool isRightAlreadySorted() override;
  431. virtual size32_t createDefaultLeft(ARowBuilder & rowBuilder) override;
  432. virtual size32_t createDefaultRight(ARowBuilder & rowBuilder) override;
  433. virtual bool match(const void * _left, const void * _right) override;
  434. virtual ISortKeySerializer * querySerializeLeft() override;
  435. virtual ISortKeySerializer * querySerializeRight() override;
  436. virtual unsigned __int64 getThreshold() override;
  437. virtual double getSkew() override; // 0=default
  438. virtual double getTargetSkew() override; // 0=default
  439. virtual unsigned getJoinLimit() override;
  440. virtual unsigned getKeepLimit() override;
  441. virtual unsigned getJoinFlags() override;
  442. virtual unsigned getMatchAbortLimit() override;
  443. virtual void onMatchAbortLimitExceeded() override;
  444. virtual ICompare * queryCompareLeftRightLower() override;
  445. virtual ICompare * queryCompareLeftRightUpper() override;
  446. virtual ICompare * queryPrefixCompare() override;
  447. virtual ICompare * queryCompareLeftKeyRightRow() override;
  448. virtual ICompare * queryCompareRightKeyLeftRow() override;
  449. virtual size32_t onFailTransform(ARowBuilder & rowBuilder, const void * _left, const void * _right, IException * e, unsigned flags) override;
  450. //Join:
  451. //Denormalize
  452. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _count, unsigned flags) override;
  453. //Denormalize group
  454. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _numRows, const void * * _rows, unsigned flags) override;
  455. };
  456. typedef CThorJoinArg CThorDenormalizeArg;
  457. typedef CThorJoinArg CThorDenormalizeGroupArg;
  458. class ECLRTL_API CThorAllJoinArg : public CThorArgOf<IHThorAllJoinArg>
  459. {
  460. virtual size32_t createDefaultLeft(ARowBuilder & rowBuilder) override;
  461. virtual size32_t createDefaultRight(ARowBuilder & rowBuilder) override;
  462. virtual bool match(const void * _left, const void * _right) override;
  463. virtual unsigned getKeepLimit() override;
  464. virtual unsigned getJoinFlags() override;
  465. virtual unsigned getMatchAbortLimit() override;
  466. virtual void onMatchAbortLimitExceeded() override;
  467. //Join:
  468. //Denormalize
  469. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _count, unsigned flags) override;
  470. //Denormalize group
  471. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _numRows, const void * * _rows, unsigned flags) override;
  472. };
  473. typedef CThorAllJoinArg CThorAllDenormalizeArg;
  474. typedef CThorAllJoinArg CThorAllDenormalizeGroupArg;
  475. // Used for hash and lookup joins.
  476. class ECLRTL_API CThorHashJoinArg : public CThorArgOf<IHThorHashJoinArg>
  477. {
  478. virtual bool isLeftAlreadySorted() override;
  479. virtual bool isRightAlreadySorted() override;
  480. virtual size32_t createDefaultLeft(ARowBuilder & rowBuilder) override;
  481. virtual size32_t createDefaultRight(ARowBuilder & rowBuilder) override;
  482. virtual bool match(const void * _left, const void * _right) override;
  483. virtual ISortKeySerializer * querySerializeLeft() override;
  484. virtual ISortKeySerializer * querySerializeRight() override;
  485. virtual unsigned __int64 getThreshold() override;
  486. virtual double getSkew() override; // 0=default
  487. virtual double getTargetSkew() override; // 0=default
  488. virtual unsigned getJoinLimit() override;
  489. virtual unsigned getKeepLimit() override;
  490. virtual unsigned getJoinFlags() override;
  491. virtual unsigned getMatchAbortLimit() override;
  492. virtual void onMatchAbortLimitExceeded() override;
  493. virtual ICompare * queryCompareLeftRightLower() override;
  494. virtual ICompare * queryCompareLeftRightUpper() override;
  495. virtual ICompare * queryCompareLeft() override; // not needed for lookup
  496. virtual ICompare * queryCompareRight() override; // not needed for many lookup
  497. virtual ICompare * queryPrefixCompare() override;
  498. virtual ICompare * queryCompareLeftKeyRightRow() override;
  499. virtual ICompare * queryCompareRightKeyLeftRow() override;
  500. virtual size32_t onFailTransform(ARowBuilder & rowBuilder, const void * _left, const void * _right, IException * e, unsigned flags) override;
  501. //Join:
  502. //Denormalize
  503. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _count, unsigned flags) override;
  504. //Denormalize group
  505. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left, const void * _right, unsigned _numRows, const void * * _rows, unsigned flags) override;
  506. };
  507. typedef CThorHashJoinArg CThorHashDenormalizeArg;
  508. typedef CThorHashJoinArg CThorHashDenormalizeGroupArg;
  509. class ECLRTL_API CThorKeyedDistributeArg : public CThorArgOf<IHThorKeyedDistributeArg>
  510. {
  511. virtual unsigned getFlags() override;
  512. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  513. };
  514. class ECLRTL_API CThorFetchArg : public CThorArgOf<IHThorFetchArg>
  515. {
  516. virtual unsigned getFetchFlags() override;
  517. virtual unsigned getDiskFormatCrc() override;
  518. virtual unsigned getProjectedFormatCrc() override;
  519. virtual void getFileEncryptKey(size32_t & keyLen, void * & key) override;
  520. virtual unsigned __int64 getRowLimit() override;
  521. virtual void onLimitExceeded() override;
  522. virtual size32_t extractJoinFields(ARowBuilder & rowBuilder, const void * _right) override;
  523. virtual bool extractAllJoinFields() override;
  524. virtual IOutputMetaData * queryExtractedSize() override;
  525. };
  526. class ECLRTL_API CThorWorkUnitWriteArg : public CThorSinkArgOf<IHThorWorkUnitWriteArg>
  527. {
  528. virtual int getSequence() override;
  529. virtual const char * queryName() override;
  530. virtual unsigned getFlags() override;
  531. virtual void serializeXml(const byte * self, IXmlWriter & out) override;
  532. virtual unsigned getMaxSize() override;
  533. };
  534. class ECLRTL_API CThorXmlWorkunitWriteArg : public CThorSinkArgOf<IHThorXmlWorkunitWriteArg>
  535. {
  536. virtual int getSequence() override;
  537. virtual const char * queryName() override;
  538. virtual unsigned getFlags() override;
  539. };
  540. class ECLRTL_API CThorDictionaryWorkUnitWriteArg : public CThorSinkArgOf<IHThorDictionaryWorkUnitWriteArg>
  541. {
  542. virtual int getSequence() override;
  543. virtual const char * queryName() override;
  544. virtual unsigned getFlags() override;
  545. };
  546. class ECLRTL_API CThorDictionaryResultWriteArg : public CThorSinkArgOf<IHThorDictionaryResultWriteArg>
  547. {
  548. virtual bool usedOutsideGraph() override;
  549. };
  550. class ECLRTL_API CThorHashDistributeArg : public CThorArgOf<IHThorHashDistributeArg>
  551. {
  552. virtual IHash * queryHash() override;
  553. virtual double getSkew() override; // 0=default
  554. virtual double getTargetSkew() override; // 0=default
  555. virtual ICompare * queryMergeCompare() override;
  556. };
  557. class ECLRTL_API CThorNWayDistributeArg : public CThorArgOf<IHThorNWayDistributeArg>
  558. {
  559. virtual unsigned getFlags() override;
  560. virtual bool include(const byte * left, unsigned targetNode) override;
  561. };
  562. class ECLRTL_API CThorHashDedupArg : public CThorArgOf<IHThorHashDedupArg>
  563. {
  564. virtual unsigned getFlags() override;
  565. virtual ICompare * queryCompareBest() override;
  566. virtual IOutputMetaData * queryKeySize() override;
  567. virtual size32_t recordToKey(ARowBuilder & rowBuilder, const void * _record) override;
  568. };
  569. class ECLRTL_API CThorHashMinusArg : public CThorArgOf<IHThorHashMinusArg>
  570. {
  571. };
  572. class ECLRTL_API CThorIfArg : public CThorSinkArgOf<IHThorIfArg>
  573. {
  574. };
  575. class ECLRTL_API CThorCaseArg : public CThorSinkArgOf<IHThorCaseArg>
  576. {
  577. };
  578. class ECLRTL_API CThorSequentialArg : public CThorSinkArgOf<IHThorSequentialArg>
  579. {
  580. };
  581. class ECLRTL_API CThorParallelArg : public CThorSinkArgOf<IHThorParallelArg>
  582. {
  583. };
  584. class ECLRTL_API CThorKeyDiffArg : public CThorSinkArgOf<IHThorKeyDiffArg>
  585. {
  586. virtual unsigned getFlags() override;
  587. virtual unsigned getExpiryDays() override;
  588. };
  589. class ECLRTL_API CThorKeyPatchArg : public CThorSinkArgOf<IHThorKeyPatchArg>
  590. {
  591. virtual unsigned getFlags() override;
  592. virtual unsigned getExpiryDays() override;
  593. };
  594. class ECLRTL_API CThorWorkunitReadArg : public CThorArgOf<IHThorWorkunitReadArg>
  595. {
  596. virtual int querySequence() override;
  597. virtual const char * getWUID() override;
  598. virtual ICsvToRowTransformer * queryCsvTransformer() override;
  599. virtual IXmlToRowTransformer * queryXmlTransformer() override;
  600. };
  601. class ECLRTL_API CThorLocalResultReadArg : public CThorArgOf<IHThorLocalResultReadArg>
  602. {
  603. };
  604. class ECLRTL_API CThorLocalResultWriteArg : public CThorSinkArgOf<IHThorLocalResultWriteArg>
  605. {
  606. virtual bool usedOutsideGraph() override;
  607. };
  608. typedef CThorLocalResultWriteArg CThorLocalResultSpillArg;
  609. class ECLRTL_API CThorGraphLoopResultReadArg : public CThorArgOf<IHThorGraphLoopResultReadArg>
  610. {
  611. };
  612. class ECLRTL_API CThorGraphLoopResultWriteArg : public CThorSinkArgOf<IHThorGraphLoopResultWriteArg>
  613. {
  614. };
  615. //-- Csv --
  616. class ECLRTL_API CThorCsvWriteArg : public CThorSinkArgOf<IHThorCsvWriteArg>
  617. {
  618. virtual int getSequence() override;
  619. virtual unsigned getFlags() override;
  620. virtual unsigned getTempUsageCount() override;
  621. virtual unsigned getExpiryDays() override;
  622. virtual void getUpdateCRCs(unsigned & eclCRC, unsigned __int64 & totalCRC) override;
  623. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  624. virtual const char * getCluster(unsigned idx) override;
  625. };
  626. class ECLRTL_API CThorCsvFetchArg: public CThorArgOf<IHThorCsvFetchArg>
  627. {
  628. virtual unsigned getFetchFlags() override;
  629. virtual unsigned getDiskFormatCrc() override;
  630. virtual unsigned getProjectedFormatCrc() override;
  631. virtual void getFileEncryptKey(size32_t & keyLen, void * & key) override;
  632. virtual unsigned __int64 getRowLimit() override;
  633. virtual void onLimitExceeded() override;
  634. virtual size32_t extractJoinFields(ARowBuilder & rowBuilder, const void * _right) override;
  635. virtual bool extractAllJoinFields() override;
  636. virtual IOutputMetaData * queryExtractedSize() override;
  637. };
  638. //-- Xml --
  639. class ECLRTL_API CThorXmlParseArg : public CThorArgOf<IHThorXmlParseArg>
  640. {
  641. virtual bool requiresContents() override;
  642. };
  643. class ECLRTL_API CThorXmlFetchArg : public CThorArgOf<IHThorXmlFetchArg>
  644. {
  645. virtual unsigned getFetchFlags() override;
  646. virtual unsigned getDiskFormatCrc() override;
  647. virtual unsigned getProjectedFormatCrc() override;
  648. virtual void getFileEncryptKey(size32_t & keyLen, void * & key) override;
  649. virtual bool requiresContents() override;
  650. virtual unsigned __int64 getRowLimit() override;
  651. virtual void onLimitExceeded() override;
  652. virtual size32_t extractJoinFields(ARowBuilder & rowBuilder, const void * _right) override;
  653. virtual bool extractAllJoinFields() override;
  654. virtual IOutputMetaData * queryExtractedSize() override;
  655. };
  656. //Simple xml generation...
  657. class ECLRTL_API CThorXmlWriteArg : public CThorSinkArgOf<IHThorXmlWriteArg>
  658. {
  659. virtual const char * getXmlIteratorPath() override; // supplies the prefix and suffix for a row
  660. virtual const char * getHeader() override;
  661. virtual const char * getFooter() override;
  662. virtual unsigned getXmlFlags() override;
  663. virtual int getSequence() override;
  664. virtual unsigned getFlags() override;
  665. virtual unsigned getTempUsageCount() override;
  666. virtual unsigned getExpiryDays() override;
  667. virtual void getUpdateCRCs(unsigned & eclCRC, unsigned __int64 & totalCRC) override;
  668. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  669. virtual const char * getCluster(unsigned idx) override;
  670. };
  671. //-- SOAP --
  672. class ECLRTL_API CThorSoapActionArg : public CThorSinkArgOf<IHThorSoapActionArg>
  673. {
  674. virtual void toXML(const byte * self, IXmlWriter & out) override;
  675. virtual const char * getHeader() override;
  676. virtual const char * getFooter() override;
  677. virtual unsigned getFlags() override;
  678. virtual unsigned numParallelThreads() override;
  679. virtual unsigned numRecordsPerBatch() override;
  680. virtual int numRetries() override;
  681. virtual double getTimeout() override;
  682. virtual double getTimeLimit() override;
  683. virtual const char * getSoapAction() override;
  684. virtual const char * getNamespaceName() override;
  685. virtual const char * getNamespaceVar() override;
  686. virtual const char * getHttpHeaderName() override;
  687. virtual const char * getHttpHeaderValue() override;
  688. virtual const char * getHttpHeaders() override;
  689. virtual const char * getProxyAddress() override;
  690. virtual const char * getAcceptType() override;
  691. virtual IXmlToRowTransformer * queryInputTransformer() override;
  692. virtual const char * getInputIteratorPath() override;
  693. virtual size32_t onFailTransform(ARowBuilder & rowBuilder, const void * left, IException * e) override;
  694. virtual void getLogText(size32_t & lenText, char * & text, const void * left) override;
  695. virtual const char * getXpathHintsXml() override;
  696. virtual const char * getRequestHeader() override;
  697. virtual const char * getRequestFooter() override;
  698. };
  699. class ECLRTL_API CThorSoapCallArg : public CThorArgOf<IHThorSoapCallArg>
  700. {
  701. //writing to the soap service.
  702. virtual void toXML(const byte * self, IXmlWriter & out) override;
  703. virtual const char * getHeader() override;
  704. virtual const char * getFooter() override;
  705. virtual unsigned getFlags() override;
  706. virtual unsigned numParallelThreads() override;
  707. virtual unsigned numRecordsPerBatch() override;
  708. virtual int numRetries() override;
  709. virtual double getTimeout() override;
  710. virtual double getTimeLimit() override;
  711. virtual const char * getSoapAction() override;
  712. virtual const char * getNamespaceName() override;
  713. virtual const char * getNamespaceVar() override;
  714. virtual const char * getHttpHeaderName() override;
  715. virtual const char * getHttpHeaderValue() override;
  716. virtual const char * getHttpHeaders() override;
  717. virtual const char * getProxyAddress() override;
  718. virtual const char * getAcceptType() override;
  719. virtual IXmlToRowTransformer * queryInputTransformer() override;
  720. virtual const char * getInputIteratorPath() override;
  721. virtual size32_t onFailTransform(ARowBuilder & rowBuilder, const void * left, IException * e) override;
  722. virtual void getLogText(size32_t & lenText, char * & text, const void * left) override;
  723. virtual const char * getXpathHintsXml() override;
  724. virtual const char * getRequestHeader() override;
  725. virtual const char * getRequestFooter() override;
  726. };
  727. typedef CThorSoapCallArg CThorHttpCallArg;
  728. typedef CThorNullArg CThorDatasetResultArg;
  729. typedef CThorNullArg CThorRowResultArg;
  730. typedef CThorNullArg CThorPullArg;
  731. class ECLRTL_API CThorParseArg : public CThorArgOf<IHThorParseArg>
  732. {
  733. virtual INlpHelper * queryHelper() override;
  734. virtual unsigned getFlags() override;
  735. virtual IOutputMetaData * queryProductionMeta(unsigned id) override;
  736. virtual size32_t executeProduction(ARowBuilder & rowBuilder, unsigned id, IProductionCallback * input) override;
  737. };
  738. class ECLRTL_API CThorIndexReadArg : public CThorArgOf<IHThorIndexReadArg>
  739. {
  740. virtual unsigned getFlags() override;
  741. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  742. virtual void setCallback(IThorIndexCallback * _tc) override;
  743. virtual bool canMatchAny() override;
  744. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  745. virtual bool canMatch(const void * row) override;
  746. virtual bool hasMatchFilter() override;
  747. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  748. virtual unsigned __int64 getChooseNLimit() override;
  749. virtual unsigned __int64 getRowLimit() override;
  750. virtual void onLimitExceeded() override;
  751. virtual bool needTransform() override;
  752. virtual bool transformMayFilter() override;
  753. virtual unsigned __int64 getKeyedLimit() override;
  754. virtual void onKeyedLimitExceeded() override;
  755. virtual ISteppingMeta * queryRawSteppingMeta() override;
  756. virtual ISteppingMeta * queryProjectedSteppingMeta() override;
  757. virtual void mapOutputToInput(ARowBuilder & rowBuilder, const void * projectedRow, unsigned numFields) override;
  758. virtual size32_t unfilteredTransform(ARowBuilder & rowBuilder, const void * src) override;
  759. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  760. virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & rowBuilder) override;
  761. public:
  762. IThorIndexCallback * fpp;
  763. };
  764. class ECLRTL_API CThorSteppedIndexReadArg : public CThorIndexReadArg, implements IHThorSteppedSourceExtra
  765. {
  766. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  767. virtual unsigned getSteppedFlags() override;
  768. virtual double getPriority() override;
  769. virtual unsigned getPrefetchSize() override;
  770. };
  771. class ECLRTL_API CThorIndexNormalizeArg : public CThorArgOf<IHThorIndexNormalizeArg>
  772. {
  773. virtual unsigned getFlags() override;
  774. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  775. virtual void setCallback(IThorIndexCallback * _tc) override;
  776. virtual bool canMatchAny() override;
  777. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  778. virtual bool canMatch(const void * row) override;
  779. virtual bool hasMatchFilter() override;
  780. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  781. virtual unsigned __int64 getChooseNLimit() override;
  782. virtual unsigned __int64 getRowLimit() override;
  783. virtual void onLimitExceeded() override;
  784. virtual unsigned __int64 getKeyedLimit() override;
  785. virtual void onKeyedLimitExceeded() override;
  786. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  787. virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & rowBuilder) override;
  788. public:
  789. IThorIndexCallback * fpp;
  790. };
  791. class ECLRTL_API CThorIndexAggregateArg : public CThorArgOf<IHThorIndexAggregateArg>
  792. {
  793. virtual unsigned getFlags() override;
  794. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  795. virtual void setCallback(IThorIndexCallback * _tc) override;
  796. virtual bool canMatchAny() override;
  797. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  798. virtual bool canMatch(const void * row) override;
  799. virtual bool hasMatchFilter() override;
  800. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  801. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  802. virtual void processRows(ARowBuilder & rowBuilder, size32_t srcLen, const void * src) override;
  803. public:
  804. IThorIndexCallback * fpp;
  805. };
  806. class ECLRTL_API CThorIndexCountArg : public CThorArgOf<IHThorIndexCountArg>
  807. {
  808. virtual unsigned getFlags() override;
  809. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  810. virtual void setCallback(IThorIndexCallback * _tc) override;
  811. virtual bool canMatchAny() override;
  812. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  813. virtual bool canMatch(const void * row) override;
  814. virtual bool hasMatchFilter() override;
  815. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  816. virtual unsigned __int64 getRowLimit() override;
  817. virtual void onLimitExceeded() override;
  818. virtual unsigned __int64 getKeyedLimit() override;
  819. virtual void onKeyedLimitExceeded() override;
  820. virtual bool hasFilter() override;
  821. virtual size32_t numValid(const void * src) override;
  822. virtual size32_t numValid(size32_t srcLen, const void * _src) override;
  823. virtual unsigned __int64 getChooseNLimit() override;
  824. public:
  825. IThorIndexCallback * fpp;
  826. };
  827. class ECLRTL_API CThorIndexGroupAggregateArg : public CThorArgOf<IHThorIndexGroupAggregateArg>
  828. {
  829. virtual unsigned getFlags() override;
  830. virtual bool getIndexLayout(size32_t & _retLen, void * & _retData) override;
  831. virtual void setCallback(IThorIndexCallback * _tc) override;
  832. virtual bool canMatchAny() override;
  833. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  834. virtual bool canMatch(const void * row) override;
  835. virtual bool hasMatchFilter() override;
  836. virtual IHThorSteppedSourceExtra *querySteppingExtra() override;
  837. virtual bool createGroupSegmentMonitors(IIndexReadContext *ctx) override;
  838. virtual unsigned getGroupingMaxField() override;
  839. virtual size32_t initialiseCountGrouping(ARowBuilder & rowBuilder, const void * src) override;
  840. virtual size32_t processCountGrouping(ARowBuilder & rowBuilder, unsigned __int64 count) override;
  841. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  842. virtual void processRows(size32_t srcLen, const void * src, IHThorGroupAggregateCallback * callback) override;
  843. public:
  844. IThorIndexCallback * fpp;
  845. };
  846. class ECLRTL_API CThorDiskReadArg : public CThorArgOf<IHThorDiskReadArg>
  847. {
  848. virtual unsigned getFlags() override;
  849. virtual void setCallback(IThorDiskCallback * _tc) override;
  850. virtual bool canMatchAny() override;
  851. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  852. virtual bool canMatch(const void * row) override;
  853. virtual bool hasMatchFilter() override;
  854. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  855. virtual unsigned __int64 getChooseNLimit() override;
  856. virtual unsigned __int64 getRowLimit() override;
  857. virtual void onLimitExceeded() override;
  858. virtual bool needTransform() override;
  859. virtual bool transformMayFilter() override;
  860. virtual unsigned __int64 getKeyedLimit() override;
  861. virtual void onKeyedLimitExceeded() override;
  862. virtual ISteppingMeta * queryRawSteppingMeta() override;
  863. virtual ISteppingMeta * queryProjectedSteppingMeta() override;
  864. virtual void mapOutputToInput(ARowBuilder & rowBuilder, const void * projectedRow, unsigned numFields) override;
  865. virtual size32_t transform(ARowBuilder & rowBuilder, const void * src) override;
  866. virtual size32_t unfilteredTransform(ARowBuilder & rowBuilder, const void * src) override;
  867. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  868. virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & rowBuilder) override;
  869. public:
  870. IThorDiskCallback * fpp;
  871. };
  872. class ECLRTL_API CThorDiskNormalizeArg : public CThorArgOf<IHThorDiskNormalizeArg>
  873. {
  874. virtual unsigned getFlags() override;
  875. virtual void setCallback(IThorDiskCallback * _tc) override;
  876. virtual bool canMatchAny() override;
  877. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  878. virtual bool canMatch(const void * row) override;
  879. virtual bool hasMatchFilter() override;
  880. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  881. virtual unsigned __int64 getChooseNLimit() override;
  882. virtual unsigned __int64 getRowLimit() override;
  883. virtual void onLimitExceeded() override;
  884. virtual unsigned __int64 getKeyedLimit() override;
  885. virtual void onKeyedLimitExceeded() override;
  886. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  887. virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & rowBuilder) override;
  888. public:
  889. IThorDiskCallback * fpp;
  890. };
  891. class ECLRTL_API CThorDiskAggregateArg : public CThorArgOf<IHThorDiskAggregateArg>
  892. {
  893. virtual unsigned getFlags() override;
  894. virtual void setCallback(IThorDiskCallback * _tc) override;
  895. virtual bool canMatchAny() override;
  896. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  897. virtual bool canMatch(const void * row) override;
  898. virtual bool hasMatchFilter() override;
  899. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  900. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  901. public:
  902. IThorDiskCallback * fpp;
  903. };
  904. class ECLRTL_API CThorDiskCountArg : public CThorArgOf<IHThorDiskCountArg>
  905. {
  906. virtual unsigned getFlags() override;
  907. virtual void setCallback(IThorDiskCallback * _tc) override;
  908. virtual bool canMatchAny() override;
  909. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  910. virtual bool canMatch(const void * row) override;
  911. virtual bool hasMatchFilter() override;
  912. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  913. virtual unsigned __int64 getRowLimit() override;
  914. virtual void onLimitExceeded() override;
  915. virtual unsigned __int64 getKeyedLimit() override;
  916. virtual void onKeyedLimitExceeded() override;
  917. virtual bool hasFilter() override;
  918. virtual size32_t numValid(const void * src) override;
  919. virtual unsigned __int64 getChooseNLimit() override;
  920. public:
  921. IThorDiskCallback * fpp;
  922. };
  923. class ECLRTL_API CThorDiskGroupAggregateArg : public CThorArgOf<IHThorDiskGroupAggregateArg>
  924. {
  925. virtual unsigned getFlags() override;
  926. virtual void setCallback(IThorDiskCallback * _tc) override;
  927. virtual bool canMatchAny() override;
  928. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  929. virtual bool canMatch(const void * row) override;
  930. virtual bool hasMatchFilter() override;
  931. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  932. virtual bool createGroupSegmentMonitors(IIndexReadContext *ctx) override;
  933. virtual unsigned getGroupingMaxField() override;
  934. virtual size32_t initialiseCountGrouping(ARowBuilder & rowBuilder, const void * src) override;
  935. virtual size32_t processCountGrouping(ARowBuilder & rowBuilder, unsigned __int64 count) override;
  936. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  937. public:
  938. IThorDiskCallback * fpp;
  939. };
  940. class ECLRTL_API CThorCsvReadArg: public CThorArgOf<IHThorCsvReadArg>
  941. {
  942. virtual unsigned getFlags() override;
  943. virtual unsigned __int64 getChooseNLimit() override;
  944. virtual unsigned __int64 getRowLimit() override;
  945. virtual void onLimitExceeded() override;
  946. virtual unsigned getDiskFormatCrc() override; // no meaning
  947. virtual unsigned getProjectedFormatCrc() override; // no meaning
  948. virtual void setCallback(IThorDiskCallback * _tc) override;
  949. virtual bool canMatchAny() override;
  950. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  951. virtual bool canMatch(const void * row) override;
  952. virtual bool hasMatchFilter() override;
  953. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  954. public:
  955. IThorDiskCallback * fpp;
  956. };
  957. class ECLRTL_API CThorXmlReadArg: public CThorArgOf<IHThorXmlReadArg>
  958. {
  959. virtual unsigned getFlags() override;
  960. virtual unsigned __int64 getChooseNLimit() override;
  961. virtual unsigned __int64 getRowLimit() override;
  962. virtual void onLimitExceeded() override;
  963. virtual unsigned getDiskFormatCrc() override; // no meaning
  964. virtual unsigned getProjectedFormatCrc() override; // no meaning
  965. virtual void setCallback(IThorDiskCallback * _tc) override;
  966. virtual bool canMatchAny() override;
  967. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  968. virtual bool canMatch(const void * row) override;
  969. virtual bool hasMatchFilter() override;
  970. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  971. public:
  972. IThorDiskCallback * fpp;
  973. };
  974. class ECLRTL_API CThorNewDiskReadArg : public CThorArgOf<IHThorNewDiskReadArg>
  975. {
  976. virtual unsigned getFlags() override;
  977. virtual void setCallback(IThorDiskCallback * _tc) override;
  978. virtual bool canMatchAny() override;
  979. virtual void createSegmentMonitors(IIndexReadContext *ctx) override;
  980. virtual bool canMatch(const void * row) override;
  981. virtual bool hasMatchFilter() override;
  982. virtual void getEncryptKey(size32_t & keyLen, void * & key) override;
  983. virtual unsigned __int64 getChooseNLimit() override;
  984. virtual unsigned __int64 getRowLimit() override;
  985. virtual void onLimitExceeded() override;
  986. virtual bool needTransform() override;
  987. virtual bool transformMayFilter() override;
  988. virtual unsigned __int64 getKeyedLimit() override;
  989. virtual void onKeyedLimitExceeded() override;
  990. virtual ISteppingMeta * queryRawSteppingMeta() override;
  991. virtual ISteppingMeta * queryProjectedSteppingMeta() override;
  992. virtual void mapOutputToInput(ARowBuilder & rowBuilder, const void * projectedRow, unsigned numFields) override;
  993. virtual size32_t transform(ARowBuilder & rowBuilder, const void * src) override;
  994. virtual size32_t unfilteredTransform(ARowBuilder & rowBuilder, const void * src) override;
  995. virtual size32_t transformOnLimitExceeded(ARowBuilder & rowBuilder) override;
  996. virtual size32_t transformOnKeyedLimitExceeded(ARowBuilder & rowBuilder) override;
  997. virtual const char * queryFormat() override;
  998. virtual void getFormatOptions(IXmlWriter & options) override;
  999. virtual void getFormatDynOptions(IXmlWriter & options) override;
  1000. public:
  1001. IThorDiskCallback * fpp;
  1002. };
  1003. //Normalize
  1004. class ECLRTL_API CThorChildNormalizeArg : public CThorArgOf<IHThorChildNormalizeArg>
  1005. {
  1006. };
  1007. //Aggregate
  1008. class ECLRTL_API CThorChildAggregateArg : public CThorArgOf<IHThorChildAggregateArg>
  1009. {
  1010. };
  1011. //NormalizedAggregate
  1012. //NB: The child may actually be a grandchild/great-grand child, so need to store some sort of current state in the hash table
  1013. class ECLRTL_API CThorChildGroupAggregateArg : public CThorArgOf<IHThorChildGroupAggregateArg>
  1014. {
  1015. virtual size32_t mergeAggregate(ARowBuilder & rowBuilder, const void * src) override;
  1016. };
  1017. //Normalize
  1018. class ECLRTL_API CThorChildThroughNormalizeArg : public CThorArgOf<IHThorChildThroughNormalizeArg>
  1019. {
  1020. virtual unsigned __int64 getChooseNLimit() override;
  1021. virtual unsigned __int64 getRowLimit() override;
  1022. virtual void onLimitExceeded() override;
  1023. virtual unsigned __int64 getKeyedLimit() override;
  1024. virtual void onKeyedLimitExceeded() override;
  1025. };
  1026. class ECLRTL_API CThorLoopArg : public CThorArgOf<IHThorLoopArg>
  1027. {
  1028. virtual unsigned getFlags() override;
  1029. virtual bool sendToLoop(unsigned counter, const void * in) override;
  1030. virtual unsigned numIterations() override;
  1031. virtual bool loopAgain(unsigned counter, unsigned num, const void * * _rows) override;
  1032. virtual unsigned defaultParallelIterations() override;
  1033. virtual bool loopFirstTime() override;
  1034. virtual unsigned loopAgainResult() override;
  1035. };
  1036. class ECLRTL_API CThorGraphLoopArg : public CThorArgOf<IHThorGraphLoopArg>
  1037. {
  1038. virtual unsigned getFlags() override;
  1039. };
  1040. class ECLRTL_API CThorRemoteArg : public CThorArgOf<IHThorRemoteArg>
  1041. {
  1042. virtual IOutputMetaData * queryOutputMeta() override; // for action variety
  1043. virtual unsigned __int64 getRowLimit() override;
  1044. virtual void onLimitExceeded() override;
  1045. };
  1046. class ECLRTL_API CThorLibraryCallArg : public CThorSinkLibraryArg
  1047. {
  1048. };
  1049. class ECLRTL_API CThorNWayInputArg : public CThorArgOf<IHThorNWayInputArg>
  1050. {
  1051. };
  1052. class ECLRTL_API CThorNWayGraphLoopResultReadArg : public CThorArgOf<IHThorNWayGraphLoopResultReadArg>
  1053. {
  1054. virtual bool isGrouped() const override;
  1055. };
  1056. class ECLRTL_API CThorNWayMergeArg : public CThorArgOf<IHThorNWayMergeArg>
  1057. {
  1058. virtual ISortKeySerializer * querySerialize() override; // only if global
  1059. virtual ICompare * queryCompareKey() override;
  1060. virtual ICompare * queryCompareRowKey() override; // row is lhs, key is rhs
  1061. virtual bool dedup() override;
  1062. virtual ISteppingMeta * querySteppingMeta() override;
  1063. };
  1064. class ECLRTL_API CThorNWayMergeJoinArg : public CThorArgOf<IHThorNWayMergeJoinArg>
  1065. {
  1066. virtual unsigned getJoinFlags() override;
  1067. virtual ICompareEq * queryNonSteppedCompare() override;
  1068. //For range comparison
  1069. virtual void adjustRangeValue(ARowBuilder & rowBuilder, const void * input, __int64 delta) override;
  1070. virtual unsigned __int64 extractRangeValue(const void * input) override;
  1071. virtual __int64 maxRightBeforeLeft() override;
  1072. virtual __int64 maxLeftBeforeRight() override;
  1073. //MJFtransform
  1074. virtual size32_t transform(ARowBuilder & rowBuilder, unsigned _num, const void * * _rows) override;
  1075. //MJFleftonly helper
  1076. virtual bool createNextJoinValue(ARowBuilder & rowBuilder, const void * _value) override;
  1077. //MJFmofn helper
  1078. virtual unsigned getMinMatches() override;
  1079. virtual unsigned getMaxMatches() override;
  1080. virtual INaryCompareEq * queryGlobalCompare() override;
  1081. virtual size32_t createLowInputRow(ARowBuilder & rowBuilder) override;
  1082. virtual ICompareEq * queryPartitionCompareEq() override;
  1083. };
  1084. class ECLRTL_API CThorNWaySelectArg : public CThorArgOf<IHThorNWaySelectArg>
  1085. {
  1086. };
  1087. class ECLRTL_API CThorSectionArg : public CThorArgOf<IHThorSectionArg>
  1088. {
  1089. virtual unsigned getFlags() override;
  1090. virtual void getDescription(size32_t & _retLen, char * & _retData) override;
  1091. };
  1092. class ECLRTL_API CThorSectionInputArg : public CThorArgOf<IHThorSectionInputArg>
  1093. {
  1094. virtual unsigned getFlags() override;
  1095. };
  1096. class ECLRTL_API CThorTraceArg : public CThorArgOf<IHThorTraceArg>
  1097. {
  1098. virtual bool isValid(const void * _left) override;
  1099. virtual bool canMatchAny() override;
  1100. virtual unsigned getKeepLimit() override;
  1101. virtual unsigned getSample() override;
  1102. virtual unsigned getSkip() override;
  1103. virtual const char *getName() override;
  1104. };
  1105. class ECLRTL_API CThorWhenActionArg : public CThorArgOf<IHThorWhenActionArg>
  1106. {
  1107. };
  1108. class ECLRTL_API CThorStreamedIteratorArg : public CThorArgOf<IHThorStreamedIteratorArg>
  1109. {
  1110. };
  1111. class ECLRTL_API CThorExternalArg : public CThorArgOf<IHThorExternalArg>
  1112. {
  1113. public:
  1114. CThorExternalArg(unsigned _numInputs);
  1115. virtual ~CThorExternalArg();
  1116. virtual IRowStream * createOutput(IThorActivityContext * activityContext) override;
  1117. virtual void execute(IThorActivityContext * activityContext) override;
  1118. virtual void setInput(unsigned whichInput, IRowStream * input) override;
  1119. protected:
  1120. IRowStream * * inputs;
  1121. };
  1122. //-- Full implementations of selective activities that don't ever require any access to the context.
  1123. class ECLRTL_API CLibraryNullArg : public CThorNullArg
  1124. {
  1125. public:
  1126. inline CLibraryNullArg(IOutputMetaData * _meta = NULL) : meta(_meta) {}
  1127. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1128. protected:
  1129. IOutputMetaData * meta;
  1130. };
  1131. class ECLRTL_API CLibrarySplitArg : public CThorSplitArg
  1132. {
  1133. public:
  1134. CLibrarySplitArg(unsigned _tempUsageCount, bool _balanced, IOutputMetaData * _meta) :
  1135. tempUsageCount(_tempUsageCount), meta(_meta), balanced(_balanced) {}
  1136. virtual unsigned numBranches() { return tempUsageCount; }
  1137. virtual bool isBalanced() { return balanced; }
  1138. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1139. protected:
  1140. unsigned tempUsageCount;
  1141. IOutputMetaData * meta;
  1142. bool balanced;
  1143. };
  1144. class ECLRTL_API CLibraryFunnelArg : public CThorFunnelArg
  1145. {
  1146. public:
  1147. CLibraryFunnelArg(bool _ordered, bool _sequential, IOutputMetaData * _meta) :
  1148. meta(_meta), ordered(_ordered), sequential(_sequential) {}
  1149. virtual bool isOrdered() { return ordered; }
  1150. virtual bool pullSequentially() { return sequential; }
  1151. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1152. protected:
  1153. IOutputMetaData * meta;
  1154. bool ordered;
  1155. bool sequential;
  1156. };
  1157. class ECLRTL_API CLibraryLocalResultSpillArg : public CThorLocalResultSpillArg
  1158. {
  1159. public:
  1160. CLibraryLocalResultSpillArg(unsigned _sequence, bool _usedOutside, IOutputMetaData * _meta) :
  1161. sequence(_sequence), meta(_meta), usedOutside(_usedOutside) {}
  1162. virtual unsigned querySequence() { return sequence; }
  1163. virtual bool usedOutsideGraph() { return usedOutside; }
  1164. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1165. protected:
  1166. unsigned sequence;
  1167. IOutputMetaData * meta;
  1168. bool usedOutside;
  1169. };
  1170. class ECLRTL_API CLibraryWorkUnitReadArg : public CThorWorkunitReadArg
  1171. {
  1172. public:
  1173. CLibraryWorkUnitReadArg(const char * _name, IOutputMetaData * _meta) :
  1174. name(_name), meta(_meta) {}
  1175. virtual const char * queryName() { return name; }
  1176. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1177. protected:
  1178. const char * name;
  1179. IOutputMetaData * meta;
  1180. };
  1181. class ECLRTL_API CLibraryWorkUnitWriteArg : public CThorWorkUnitWriteArg
  1182. {
  1183. public:
  1184. CLibraryWorkUnitWriteArg(const char * _name, unsigned _flags, IOutputMetaData * _meta) :
  1185. name(_name), meta(_meta), flags(_flags) {}
  1186. virtual const char * queryName() { return name; }
  1187. virtual unsigned getFlags() { return flags; }
  1188. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1189. protected:
  1190. const char * name;
  1191. IOutputMetaData * meta;
  1192. unsigned flags;
  1193. };
  1194. class ECLRTL_API CLibraryMemorySpillSplitArg : public CThorSpillArg
  1195. {
  1196. public:
  1197. CLibraryMemorySpillSplitArg(unsigned _tempUsageCount, const char * _filename, IOutputMetaData * _meta) :
  1198. meta(_meta), filename(_filename), tempUsageCount(_tempUsageCount) {}
  1199. virtual unsigned getFlags() { return TDXtemporary|TDXcompress|TDWnoreplicate; }
  1200. virtual unsigned getTempUsageCount() { return tempUsageCount; }
  1201. virtual unsigned getFormatCrc() { rtlFailUnexpected(); return 0; }
  1202. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1203. virtual const char * queryRecordECL() { rtlFailUnexpected(); return NULL; }
  1204. virtual const char * getFileName() { return filename; }
  1205. protected:
  1206. IOutputMetaData * meta;
  1207. const char * filename;
  1208. unsigned tempUsageCount;
  1209. };
  1210. class ECLRTL_API CLibraryMemorySpillReadArg : public CThorDiskReadArg
  1211. {
  1212. public:
  1213. CLibraryMemorySpillReadArg(const char * _filename, IOutputMetaData * _meta) :
  1214. filename(_filename), meta(_meta) {}
  1215. virtual unsigned getFlags() { return TDXtemporary|TDXcompress; }
  1216. virtual unsigned getDiskFormatCrc() { rtlFailUnexpected(); return 0; }
  1217. virtual unsigned getProjectedFormatCrc() { rtlFailUnexpected(); return 0; }
  1218. virtual IOutputMetaData * queryDiskRecordSize() { return meta; }
  1219. virtual IOutputMetaData * queryProjectedDiskRecordSize() { return meta; }
  1220. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1221. virtual const char * getFileName() { return filename; }
  1222. virtual size32_t transform(ARowBuilder & rowBuilder, const void * _left) { rtlFailUnexpected(); return 0; }
  1223. protected:
  1224. const char * filename;
  1225. IOutputMetaData * meta;
  1226. };
  1227. class ECLRTL_API CLibraryWhenActionArg : public CThorWhenActionArg
  1228. {
  1229. public:
  1230. inline CLibraryWhenActionArg(IOutputMetaData * _meta) : meta(_meta) {}
  1231. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1232. protected:
  1233. IOutputMetaData * meta;
  1234. };
  1235. class ECLRTL_API CLibraryDegroupArg : public CThorDegroupArg
  1236. {
  1237. public:
  1238. inline CLibraryDegroupArg(IOutputMetaData * _meta = NULL) : meta(_meta) {}
  1239. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1240. protected:
  1241. IOutputMetaData * meta;
  1242. };
  1243. typedef size32_t (*rowClearFunction)(ARowBuilder & crSelf, IResourceContext * ctx);
  1244. class ECLRTL_API CLibrarySelectNArg : public CThorSelectNArg
  1245. {
  1246. public:
  1247. inline CLibrarySelectNArg(unsigned __int64 _row, rowClearFunction _rowClear, IOutputMetaData * _meta = NULL)
  1248. : meta(_meta), row(_row), rowClear(_rowClear) {}
  1249. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1250. virtual unsigned __int64 getRowToSelect() { return row; }
  1251. virtual size32_t createDefault(ARowBuilder & rowBuilder) { return rowClear(rowBuilder, ctx); }
  1252. protected:
  1253. IOutputMetaData * meta;
  1254. unsigned __int64 row;
  1255. rowClearFunction rowClear;
  1256. };
  1257. class ECLRTL_API CLibraryLocalResultReadArg : public CThorLocalResultReadArg
  1258. {
  1259. public:
  1260. inline CLibraryLocalResultReadArg(unsigned _sequence, IOutputMetaData * _meta = NULL)
  1261. : meta(_meta), sequence(_sequence) {}
  1262. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1263. virtual unsigned querySequence() { return sequence; }
  1264. protected:
  1265. IOutputMetaData * meta;
  1266. unsigned sequence;
  1267. };
  1268. class ECLRTL_API CLibraryGraphLoopResultWriteArg : public CThorGraphLoopResultWriteArg
  1269. {
  1270. public:
  1271. inline CLibraryGraphLoopResultWriteArg(IOutputMetaData * _meta)
  1272. : meta(_meta) {}
  1273. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1274. protected:
  1275. IOutputMetaData * meta;
  1276. };
  1277. class ECLRTL_API CLibraryCountAggregateArg : public CThorCountAggregateArg
  1278. {
  1279. public:
  1280. inline CLibraryCountAggregateArg(IOutputMetaData * _meta) : meta(_meta) {}
  1281. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1282. protected:
  1283. IOutputMetaData * meta;
  1284. };
  1285. class ECLRTL_API CLibraryExistsAggregateArg : public CThorExistsAggregateArg
  1286. {
  1287. public:
  1288. inline CLibraryExistsAggregateArg(IOutputMetaData * _meta) : meta(_meta) {}
  1289. virtual IOutputMetaData * queryOutputMeta() { return meta; }
  1290. protected:
  1291. IOutputMetaData * meta;
  1292. };
  1293. class ECLRTL_API CLibraryConstantRawIteratorArg : public CThorLinkedRawIteratorArg
  1294. {
  1295. public:
  1296. inline CLibraryConstantRawIteratorArg(unsigned _numRows, const byte * * _rows, IOutputMetaData * _meta)
  1297. : numRows(_numRows), meta(_meta), rows(_rows)
  1298. {
  1299. cur = 0;
  1300. }
  1301. virtual void onStart(const byte *, MemoryBuffer * ) override { cur = 0U; }
  1302. virtual const byte * next() override
  1303. {
  1304. if (cur < numRows)
  1305. return rows[cur++];
  1306. return NULL;
  1307. }
  1308. virtual IOutputMetaData * queryOutputMeta() override { return meta; }
  1309. protected:
  1310. unsigned numRows;
  1311. IOutputMetaData * meta;
  1312. const byte * * rows;
  1313. unsigned cur;
  1314. };
  1315. class ECLRTL_API EclProcess : implements IEclProcess, public RtlCInterface
  1316. {
  1317. public:
  1318. RTLIMPLEMENT_IINTERFACE
  1319. };
  1320. #endif