#include "access/genam.h"
#include "access/gin.h"
+#if PG_VERSION_NUM >= 90400
+#include "utils/snapmgr.h"
+#endif
#if PG_VERSION_NUM >= 90100
#include "access/gin_private.h"
#endif
if ( GinIsPostingTree(itup) ) {
BlockNumber rootblkno = GinGetPostingTree(itup);
+#if PG_VERSION_NUM >= 90400
+ GinBtreeData btree, *gdi = &btree;
+ GinBtreeStack *stack;
+#else
GinPostingTreeScan *gdi;
Buffer entrybuffer;
+#endif
Page page;
+ uint32 predictNumber;
LockBuffer(st->buffer, GIN_UNLOCK);
-#if PG_VERSION_NUM >= 90100
+#if PG_VERSION_NUM >= 90400
+ ginPrepareDataScan(gdi, st->index, rootblkno);
+ stack = ginScanBeginPostingTree(gdi, st->index, rootblkno);
+ page = BufferGetPage(stack->buffer);
+ predictNumber = stack->predictNumber;
+#elif PG_VERSION_NUM >= 90100
gdi = ginPrepareScanPostingTree(st->index, rootblkno, TRUE);
entrybuffer = ginScanBeginPostingTree(gdi);
+ page = BufferGetPage(entrybuffer);
+ predictNumber = gdi->stack->predictNumber;
#else
gdi = prepareScanPostingTree(st->index, rootblkno, TRUE);
entrybuffer = scanBeginPostingTree(gdi);
+ page = BufferGetPage(entrybuffer);
+ predictNumber = gdi->stack->predictNumber;
#endif
- page = BufferGetPage(entrybuffer);
- st->dvalues[1] = Int32GetDatum( gdi->stack->predictNumber * GinPageGetOpaque(page)->maxoff );
+ st->dvalues[1] = Int32GetDatum( predictNumber * GinPageGetOpaque(page)->maxoff );
+#if PG_VERSION_NUM < 90400
LockBuffer(entrybuffer, GIN_UNLOCK);
freeGinBtreeStack(gdi->stack);
pfree(gdi);
+#else
+ freeGinBtreeStack(stack);
+#endif
} else {
st->dvalues[1] = Int32GetDatum( GinGetNPosting(itup) );
LockBuffer(st->buffer, GIN_UNLOCK);
fmgr_info( F_TS_MATCH_VQ , &key.sk_func );
#if PG_VERSION_NUM >= 90100
+#if PG_VERSION_NUM >= 90400
+ scan = index_beginscan_bitmap(index, GetTransactionSnapshot(), 1);
+#else
scan = index_beginscan_bitmap(index, SnapshotNow, 1);
+#endif
index_rescan(scan, &key, 1, NULL, 0);
count = index_getbitmap(scan, bitmap);
*tid = node->t_tid;
prst->dvalues[3] = PointerGetDatum(tid);
prst->nulls[3] = ' ';
- if (prst->state.attPrefixType.attbyval != VOIDOID && innerTuple->prefixSize > 0) {
+ if (prst->state.attPrefixType.attbyval == false && innerTuple->prefixSize > 0) {
prst->dvalues[4] = datumCopy(SGITDATUM(innerTuple, &prst->state),
prst->state.attPrefixType.attbyval, prst->state.attPrefixType.attlen);
prst->nulls[4] = ' ';
} else
prst->nulls[4] = 'n';
- if (prst->state.attLabelType.attbyval != VOIDOID && !IndexTupleHasNulls(node)) {
+ if (prst->state.attLabelType.attbyval == false && !IndexTupleHasNulls(node)) {
prst->dvalues[5] = datumCopy(SGNTDATUM(node, &prst->state),
prst->state.attLabelType.attbyval, prst->state.attLabelType.attlen);
prst->nulls[5] = ' ';