Merge branch 'master' of ssh://hook/spool/git/gevel
authorTeodor Sigaev <teodor@sigaev.ru>
Mon, 19 May 2014 18:45:58 +0000 (22:45 +0400)
committerTeodor Sigaev <teodor@sigaev.ru>
Mon, 19 May 2014 18:45:58 +0000 (22:45 +0400)
1  2 
gevel.c

diff --combined gevel.c
+++ b/gevel.c
@@@ -2,9 -2,6 +2,9 @@@
  
  #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
@@@ -694,43 -691,25 +694,43 @@@ processTuple( FuncCallContext  *funcctx
                
        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);
@@@ -829,11 -808,7 +829,11 @@@ gin_count_estimate(PG_FUNCTION_ARGS) 
        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);
@@@ -1194,13 -1169,13 +1194,13 @@@ next
                        *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] = ' ';