|
@@ -216,6 +216,7 @@ class CFirstNSlaveGlobal : public CFirstNSlaveBase, implements ILookAheadStopNot
|
|
|
rowcount_t maxres, skipped, totallimit;
|
|
|
bool firstget;
|
|
|
ThorDataLinkMetaInfo inputMeta;
|
|
|
+ IEngineRowStream *originalInputStream = nullptr;
|
|
|
|
|
|
protected:
|
|
|
virtual void doStop()
|
|
@@ -234,6 +235,11 @@ public:
|
|
|
PARENT::init(data, slaveData);
|
|
|
mpTag = container.queryJobChannel().deserializeMPTag(data);
|
|
|
}
|
|
|
+ virtual void setInputStream(unsigned index, CThorInput &_input, bool consumerOrdered) override
|
|
|
+ {
|
|
|
+ PARENT::setInputStream(index, _input, consumerOrdered);
|
|
|
+ originalInputStream = inputStream;
|
|
|
+ }
|
|
|
virtual void start() override
|
|
|
{
|
|
|
ActivityTimer s(totalCycles, timeActivities);
|
|
@@ -246,7 +252,7 @@ public:
|
|
|
totallimit = (rowcount_t)helper->getLimit();
|
|
|
rowcount_t _skipCount = validRC(helper->numToSkip()); // max
|
|
|
rowcount_t maxRead = (totallimit>(RCUNBOUND-_skipCount))?RCUNBOUND:totallimit+_skipCount;
|
|
|
- IStartableEngineRowStream *lookAhead = createRowStreamLookAhead(this, inputStream, queryRowInterfaces(input), FIRSTN_SMART_BUFFER_SIZE, isSmartBufferSpillNeeded(this), false,
|
|
|
+ IStartableEngineRowStream *lookAhead = createRowStreamLookAhead(this, originalInputStream, queryRowInterfaces(input), FIRSTN_SMART_BUFFER_SIZE, isSmartBufferSpillNeeded(this), false,
|
|
|
maxRead, this, &container.queryJob().queryIDiskUsage()); // if a very large limit don't bother truncating
|
|
|
setLookAhead(0, lookAhead);
|
|
|
lookAhead->start();
|