Skip to content

Commit 328eb39

Browse files
committed
More transparent code and other fixes according to @asfernandes.
1 parent 8f660b8 commit 328eb39

File tree

4 files changed

+22
-37
lines changed

4 files changed

+22
-37
lines changed

src/jrd/RecordSourceNodes.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4429,13 +4429,12 @@ dsql_fld* GenSeriesFunctionSourceNode::makeField(DsqlCompilerScratch* dsqlScratc
44294429

44304430
if (!field)
44314431
{
4432-
const auto newField = FB_NEW_POOL(dsqlScratch->getPool()) dsql_fld(dsqlScratch->getPool());
4433-
field = newField;
4432+
field = FB_NEW_POOL(dsqlScratch->getPool()) dsql_fld(dsqlScratch->getPool());
44344433

44354434
dsc desc;
44364435
desc.makeInt64(scale);
4437-
MAKE_field(newField, &desc);
4438-
newField->fld_id = 0;
4436+
MAKE_field(field, &desc);
4437+
field->fld_id = 0;
44394438
}
44404439

44414440
if (dsqlNameColumns.hasData())

src/jrd/RecordSourceNodes.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,19 +1081,20 @@ class UnlistFunctionSourceNode : public TableValueFunctionSourceNode
10811081
}
10821082
};
10831083

1084-
class GenSeriesFunctionSourceNode : public TableValueFunctionSourceNode
1084+
class GenSeriesFunctionSourceNode final : public TableValueFunctionSourceNode
10851085
{
10861086
public:
1087-
explicit GenSeriesFunctionSourceNode(MemoryPool& pool) : TableValueFunctionSourceNode(pool)
1087+
explicit GenSeriesFunctionSourceNode(MemoryPool& pool)
1088+
: TableValueFunctionSourceNode(pool)
10881089
{
10891090
}
10901091

1091-
RecordSource* compile(thread_db* tdbb, Optimizer* opt, bool innerSubStream) final;
1092-
dsql_fld* makeField(DsqlCompilerScratch* dsqlScratch) final;
1092+
RecordSource* compile(thread_db* tdbb, Optimizer* opt, bool innerSubStream) override;
1093+
dsql_fld* makeField(DsqlCompilerScratch* dsqlScratch) override;
10931094

10941095
static constexpr char const* FUNC_NAME = "GENERATE_SERIES";
10951096

1096-
const char* getName() const final
1097+
const char* getName() const override
10971098
{
10981099
return FUNC_NAME;
10991100
}

src/jrd/recsrc/RecordSource.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,7 @@ namespace Jrd
16171617

16181618
class GenSeriesFunctionScan final : public TableValueFunctionScan
16191619
{
1620-
enum GenSeriesTypeItemIndex : unsigned
1620+
enum GenSeriesTypeItemIndex : UCHAR
16211621
{
16221622
GEN_SERIES_INDEX_START = 0,
16231623
GEN_SERIES_INDEX_FINISH = 1,
@@ -1632,21 +1632,20 @@ namespace Jrd
16321632
SINT64 m_step;
16331633
SINT64 m_result;
16341634
SCHAR m_scale;
1635-
bool m_recordExists;
16361635
};
16371636

16381637
public:
16391638
GenSeriesFunctionScan(CompilerScratch* csb, StreamType stream, const Firebird::string& alias,
16401639
ValueListNode* list);
16411640

16421641
protected:
1643-
void close(thread_db* tdbb) const final;
1644-
void internalOpen(thread_db* tdbb) const final;
1642+
void close(thread_db* tdbb) const override;
1643+
void internalOpen(thread_db* tdbb) const override;
16451644
void internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, unsigned level,
1646-
bool recurse) const final;
1647-
bool internalGetRecord(thread_db* tdbb) const final;
1645+
bool recurse) const override;
1646+
bool internalGetRecord(thread_db* tdbb) const override;
16481647

1649-
bool nextBuffer(thread_db* tdbb) const final;
1648+
bool nextBuffer(thread_db* tdbb) const override;
16501649

16511650
private:
16521651
NestConst<ValueListNode> m_inputList;

src/jrd/recsrc/TableValueFunctionScan.cpp

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -431,16 +431,8 @@ void GenSeriesFunctionScan::internalOpen(thread_db* tdbb) const
431431
impure->m_step = step;
432432
impure->m_result = start;
433433
impure->m_scale = scale;
434-
impure->m_recordExists = true;
435434

436-
Record* const record = VIO_record(tdbb, rpb, m_format, &pool);
437-
438-
auto toDesc = m_format->fmt_desc.begin();
439-
440-
dsc fromDesc;
441-
fromDesc.makeInt64(scale, &impure->m_result);
442-
443-
assignParameter(tdbb, &fromDesc, toDesc, 0, record);
435+
VIO_record(tdbb, rpb, m_format, &pool);
444436
}
445437

446438
void GenSeriesFunctionScan::internalGetPlan(thread_db* tdbb, PlanEntry& planEntry, unsigned /*level*/,
@@ -473,15 +465,10 @@ bool GenSeriesFunctionScan::internalGetRecord(thread_db* tdbb) const
473465

474466
rpb->rpb_number.increment();
475467

476-
do
477-
{
478-
if (impure->m_recordExists)
479-
{
480-
impure->m_recordExists = false;
481-
rpb->rpb_number.setValid(true);
482-
return true;
483-
}
484-
} while (nextBuffer(tdbb));
468+
if (nextBuffer(tdbb)) {
469+
rpb->rpb_number.setValid(true);
470+
return true;
471+
}
485472

486473
rpb->rpb_number.setValid(false);
487474
return false;
@@ -492,8 +479,6 @@ bool GenSeriesFunctionScan::nextBuffer(thread_db* tdbb) const
492479
const auto request = tdbb->getRequest();
493480
const auto impure = request->getImpure<Impure>(m_impure);
494481

495-
impure->m_result += impure->m_step;
496-
497482
if (((impure->m_step > 0) && (impure->m_result <= impure->m_finish)) ||
498483
((impure->m_step < 0) && (impure->m_result >= impure->m_finish)))
499484
{
@@ -504,7 +489,8 @@ bool GenSeriesFunctionScan::nextBuffer(thread_db* tdbb) const
504489
dsc fromDesc;
505490
fromDesc.makeInt64(impure->m_scale, &impure->m_result);
506491
assignParameter(tdbb, &fromDesc, toDesc, 0, record);
507-
impure->m_recordExists = true;
492+
493+
impure->m_result += impure->m_step;
508494

509495
return true;
510496
}

0 commit comments

Comments
 (0)