Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d0dd137

Browse files
committed
store RumConfig in RumState
1 parent 04dadd7 commit d0dd137

File tree

5 files changed

+30
-23
lines changed

5 files changed

+30
-23
lines changed

rum.h

+15-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "access/generic_xlog.h"
1717
#include "access/gin.h"
1818
#include "access/itup.h"
19+
#include "access/sdir.h"
1920
#include "lib/rbtree.h"
2021
#include "storage/bufmgr.h"
2122

@@ -321,6 +322,17 @@ typedef struct RumOptions
321322
#define RUM_SHARE BUFFER_LOCK_SHARE
322323
#define RUM_EXCLUSIVE BUFFER_LOCK_EXCLUSIVE
323324

325+
#define MAX_STRATEGIES (8)
326+
typedef struct RumConfig
327+
{
328+
Oid addInfoTypeOid;
329+
330+
struct {
331+
StrategyNumber strategy;
332+
ScanDirection direction;
333+
} strategyInfo[MAX_STRATEGIES];
334+
} RumConfig;
335+
324336
/*
325337
* RumState: working data structure describing the index being worked on
326338
*/
@@ -345,7 +357,7 @@ typedef struct RumState
345357
*/
346358
TupleDesc origTupdesc;
347359
TupleDesc tupdesc[INDEX_MAX_KEYS];
348-
Oid addInfoTypeOid[INDEX_MAX_KEYS];
360+
RumConfig rumConfig[INDEX_MAX_KEYS];
349361
Form_pg_attribute addAttrs[INDEX_MAX_KEYS];
350362

351363
/*
@@ -371,11 +383,6 @@ typedef struct RumState
371383
Oid supportCollation[INDEX_MAX_KEYS];
372384
} RumState;
373385

374-
typedef struct RumConfig
375-
{
376-
Oid addInfoTypeOid;
377-
} RumConfig;
378-
379386
/* XLog stuff */
380387

381388
#define RUM_NDELETE_AT_ONCE 16
@@ -599,6 +606,7 @@ typedef struct RumScanKeyData
599606
bool recheckCurItem;
600607
bool isFinished;
601608
bool orderBy;
609+
ScanDirection scanDirection;
602610

603611
RumScanKey *addInfoKeys;
604612
int addInfoNKeys;
@@ -638,6 +646,7 @@ typedef struct RumScanEntryData
638646
uint32 nlist;
639647
OffsetNumber offset;
640648

649+
ScanDirection scanDirection;
641650
bool isFinished;
642651
bool reduceResult;
643652
bool preValue;

rumfast.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ processPendingPage(BuildAccumulator *accum, KeyArray *ka,
656656
/* Check for change of heap TID or attnum */
657657
curattnum = rumtuple_get_attrnum(accum->rumstate, itup);
658658

659-
if (OidIsValid(accum->rumstate->addInfoTypeOid[curattnum - 1]))
659+
if (OidIsValid(accum->rumstate->rumConfig[curattnum - 1].addInfoTypeOid))
660660
{
661661
Form_pg_attribute attr = accum->rumstate->addAttrs[curattnum - 1];
662662

rumget.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2239,7 +2239,7 @@ collectMatchesForHeapRow(IndexScanDesc scan, pendingPosition *pos)
22392239
else
22402240
{
22412241
key->entryRes[j] = true;
2242-
if (OidIsValid(so->rumstate.addInfoTypeOid[i]))
2242+
if (OidIsValid(so->rumstate.rumConfig[i].addInfoTypeOid))
22432243
key->addInfo[j] = index_getattr(itup,
22442244
so->rumstate.oneCol ? 2 : 3,
22452245
so->rumstate.tupdesc[attrnum - 1],

rumscan.c

+2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ rumFillScanEntry(RumScanOpaque so, OffsetNumber attnum,
120120
scanEntry->isFinished = false;
121121
scanEntry->reduceResult = false;
122122
scanEntry->useMarkAddInfo = false;
123+
scanEntry->scanDirection = NoMovementScanDirection;
123124
ItemPointerSetMin(&scanEntry->markAddInfo.iptr);
124125

125126
return scanEntry;
@@ -155,6 +156,7 @@ rumFillScanKey(RumScanOpaque so, OffsetNumber attnum,
155156
key->searchMode = searchMode;
156157
key->attnum = key->attnumOrig = attnum;
157158
key->useAddToColumn = false;
159+
key->scanDirection = NoMovementScanDirection;
158160

159161
RumItemSetMin(&key->curItem);
160162
key->curItemMatches = false;

rumutil.c

+11-15
Original file line numberDiff line numberDiff line change
@@ -176,46 +176,42 @@ initRumState(RumState * state, Relation index)
176176

177177
for (i = 0; i < origTupdesc->natts; i++)
178178
{
179-
RumConfig rumConfig;
179+
RumConfig *rumConfig = state->rumConfig + i;
180180

181-
rumConfig.addInfoTypeOid = InvalidOid;
181+
rumConfig->addInfoTypeOid = InvalidOid;
182182

183183
if (index_getprocid(index, i + 1, RUM_CONFIG_PROC) != InvalidOid)
184184
{
185185
fmgr_info_copy(&(state->configFn[i]),
186186
index_getprocinfo(index, i + 1, RUM_CONFIG_PROC),
187187
CurrentMemoryContext);
188188

189-
FunctionCall1(&state->configFn[i], PointerGetDatum(&rumConfig));
189+
FunctionCall1(&state->configFn[i], PointerGetDatum(rumConfig));
190190
}
191191

192192
if (state->attrnAddToColumn == i + 1)
193193
{
194-
if (OidIsValid(rumConfig.addInfoTypeOid))
194+
if (OidIsValid(rumConfig->addInfoTypeOid))
195195
elog(ERROR, "AddTo could should not have AddInfo");
196196

197-
state->addInfoTypeOid[i] = origTupdesc->attrs[
197+
rumConfig->addInfoTypeOid = origTupdesc->attrs[
198198
state->attrnOrderByColumn - 1]->atttypid;
199199
}
200-
else
201-
{
202-
state->addInfoTypeOid[i] = rumConfig.addInfoTypeOid;
203-
}
204200

205201
if (state->oneCol)
206202
{
207203
state->tupdesc[i] = CreateTemplateTupleDesc(
208-
OidIsValid(state->addInfoTypeOid[i]) ? 2 : 1, false);
204+
OidIsValid(rumConfig->addInfoTypeOid) ? 2 : 1, false);
209205
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 1, NULL,
210206
origTupdesc->attrs[i]->atttypid,
211207
origTupdesc->attrs[i]->atttypmod,
212208
origTupdesc->attrs[i]->attndims);
213209
TupleDescInitEntryCollation(state->tupdesc[i], (AttrNumber) 1,
214210
origTupdesc->attrs[i]->attcollation);
215-
if (OidIsValid(state->addInfoTypeOid[i]))
211+
if (OidIsValid(rumConfig->addInfoTypeOid))
216212
{
217213
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 2, NULL,
218-
state->addInfoTypeOid[i], -1, 0);
214+
rumConfig->addInfoTypeOid, -1, 0);
219215
state->addAttrs[i] = state->tupdesc[i]->attrs[1];
220216
}
221217
else
@@ -226,7 +222,7 @@ initRumState(RumState * state, Relation index)
226222
else
227223
{
228224
state->tupdesc[i] = CreateTemplateTupleDesc(
229-
OidIsValid(state->addInfoTypeOid[i]) ? 3 : 2, false);
225+
OidIsValid(rumConfig->addInfoTypeOid) ? 3 : 2, false);
230226
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 1, NULL,
231227
INT2OID, -1, 0);
232228
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 2, NULL,
@@ -235,10 +231,10 @@ initRumState(RumState * state, Relation index)
235231
origTupdesc->attrs[i]->attndims);
236232
TupleDescInitEntryCollation(state->tupdesc[i], (AttrNumber) 2,
237233
origTupdesc->attrs[i]->attcollation);
238-
if (OidIsValid(state->addInfoTypeOid[i]))
234+
if (OidIsValid(rumConfig->addInfoTypeOid))
239235
{
240236
TupleDescInitEntry(state->tupdesc[i], (AttrNumber) 3, NULL,
241-
state->addInfoTypeOid[i], -1, 0);
237+
rumConfig->addInfoTypeOid, -1, 0);
242238
state->addAttrs[i] = state->tupdesc[i]->attrs[2];
243239
}
244240
else

0 commit comments

Comments
 (0)