From 716cc629f12f7932486db54c3db5da4a767d4f41 Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Tue, 13 Apr 2021 10:44:00 +0300 Subject: [PATCH] Refactor ColumnarReadNextRow for better readability (#4823) --- src/backend/columnar/columnar_reader.c | 54 ++++++++++++++++++++------ 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/src/backend/columnar/columnar_reader.c b/src/backend/columnar/columnar_reader.c index 4cfb213e8..f0995bf8a 100644 --- a/src/backend/columnar/columnar_reader.c +++ b/src/backend/columnar/columnar_reader.c @@ -83,11 +83,14 @@ struct ColumnarReadState }; /* static function declarations */ +static bool StripeReadInProgress(ColumnarReadState *readState); +static bool HasUnreadStripe(ColumnarReadState *readState); static StripeReadState * BeginStripeRead(StripeMetadata *stripeMetadata, Relation rel, TupleDesc tupleDesc, List *projectedColumnList, List *whereClauseList, List *whereClauseVars, MemoryContext stripeReadContext); static void EndStripeRead(StripeReadState *stripeReadState); +static void AdvanceStripeRead(ColumnarReadState *readState); static bool ReadStripeNextRow(StripeReadState *stripeReadState, Datum *columnValues, bool *columnNulls); static ChunkGroupReadState * BeginChunkGroupRead(StripeBuffers *stripeBuffers, int @@ -188,18 +191,15 @@ ColumnarReadNextRow(ColumnarReadState *readState, Datum *columnValues, bool *col { while (true) { - if (readState->stripeReadState == NULL) + if (!StripeReadInProgress(readState)) { - uint32 stripeCount = list_length(readState->stripeList); - - if (readState->currentStripe >= stripeCount) + if (!HasUnreadStripe(readState)) { return false; } StripeMetadata *stripeMetadata = list_nth(readState->stripeList, readState->currentStripe); - readState->stripeReadState = BeginStripeRead(stripeMetadata, readState->relation, readState->tupleDescriptor, @@ -211,13 +211,8 @@ ColumnarReadNextRow(ColumnarReadState *readState, Datum *columnValues, bool *col if (!ReadStripeNextRow(readState->stripeReadState, columnValues, columnNulls)) { - readState->chunkGroupsFiltered += - readState->stripeReadState->chunkGroupsFiltered; - readState->currentStripe++; EndStripeRead(readState->stripeReadState); - readState->stripeReadState = NULL; - MemoryContextReset(readState->stripeReadContext); - + AdvanceStripeRead(readState); continue; } @@ -228,6 +223,28 @@ ColumnarReadNextRow(ColumnarReadState *readState, Datum *columnValues, bool *col } +/* + * StripeReadInProgress returns true if we already started reading a stripe. + */ +static bool +StripeReadInProgress(ColumnarReadState *readState) +{ + return readState->stripeReadState != NULL; +} + + +/* + * HasUnreadStripe returns true if we still have stripes to read during current + * read operation. + */ +static bool +HasUnreadStripe(ColumnarReadState *readState) +{ + uint32 stripeCount = list_length(readState->stripeList); + return readState->currentStripe < stripeCount; +} + + /* * ColumnarRescan clears the position where we were scanning so that the next read starts at * the beginning again @@ -300,6 +317,21 @@ EndStripeRead(StripeReadState *stripeReadState) } +/* + * AdvanceStripeRead updates chunkGroupsFiltered and increments currentStripe + * for next stripe read. + */ +static void +AdvanceStripeRead(ColumnarReadState *readState) +{ + readState->chunkGroupsFiltered += + readState->stripeReadState->chunkGroupsFiltered; + readState->currentStripe++; + readState->stripeReadState = NULL; + MemoryContextReset(readState->stripeReadContext); +} + + /* * ReadStripeNextRow: If more rows can be read from the current stripe, fill * in non-NULL columnValues and return true. Otherwise, return false.