Skip to content
Snippets Groups Projects
  1. Dec 22, 2014
  2. May 06, 2014
    • Bruce Momjian's avatar
      pgindent run for 9.4 · 0a783200
      Bruce Momjian authored
      This includes removing tabs after periods in C comments, which was
      applied to back branches, so this change should not effect backpatching.
      0a783200
  3. Jan 07, 2014
  4. May 10, 2013
    • Tom Lane's avatar
      Fix management of fn_extra caching during repeated GiST index scans. · 91715e82
      Tom Lane authored
      Commit d22a09dc introduced official support
      for GiST consistentFns that want to cache data using the FmgrInfo fn_extra
      pointer: the idea was to preserve the cached values across gistrescan(),
      whereas formerly they'd been leaked.  However, there was an oversight in
      that, namely that multiple scan keys might reference the same column's
      consistentFn; the code would result in propagating the same cache value
      into multiple scan keys, resulting in crashes or wrong answers.  Use a
      separate array instead to ensure that each scan key keeps its own state.
      
      Per bug #8143 from Joel Roller.  Back-patch to 9.2 where the bug was
      introduced.
      91715e82
  5. Jan 01, 2013
  6. Jun 10, 2012
  7. Jan 02, 2012
  8. Oct 01, 2011
    • Tom Lane's avatar
      Support GiST index support functions that want to cache data across calls. · d22a09dc
      Tom Lane authored
      pg_trgm was already doing this unofficially, but the implementation hadn't
      been thought through very well and leaked memory.  Restructure the core
      GiST code so that it actually works, and document it.  Ordinarily this
      would have required an extra memory context creation/destruction for each
      GiST index search, but I was able to avoid that in the normal case of a
      non-rescanned search by finessing the handling of the RBTree.  It used to
      have its own context always, but now shares a context with the
      scan-lifespan data structures, unless there is more than one rescan call.
      This should make the added overhead unnoticeable in typical cases.
      d22a09dc
  9. Sep 16, 2011
    • Tom Lane's avatar
      gistendscan() forgot to free so->giststate. · 0a6cc285
      Tom Lane authored
      This oversight led to a massive memory leak --- upwards of 10KB per tuple
      --- during creation-time verification of an exclusion constraint based on a
      GIST index.  In most other scenarios it'd just be a leak of 10KB that would
      be recovered at end of query, so not too significant; though perhaps the
      leak would be noticeable in a situation where a GIST index was being used
      in a nestloop inner indexscan.  In any case, it's a real leak of long
      standing, so patch all supported branches.  Per report from Harald Fuchs.
      0a6cc285
  10. Sep 01, 2011
  11. Apr 13, 2011
    • Tom Lane's avatar
      Pass collations to functions in FunctionCallInfoData, not FmgrInfo. · d64713df
      Tom Lane authored
      Since collation is effectively an argument, not a property of the function,
      FmgrInfo is really the wrong place for it; and this becomes critical in
      cases where a cached FmgrInfo is used for varying purposes that might need
      different collation settings.  Fix by passing it in FunctionCallInfoData
      instead.  In particular this allows a clean fix for bug #5970 (record_cmp
      not working).  This requires touching a bit more code than the original
      method, but nobody ever thought that collations would not be an invasive
      patch...
      d64713df
  12. Apr 10, 2011
  13. Mar 26, 2011
  14. Jan 01, 2011
  15. Dec 04, 2010
    • Tom Lane's avatar
      KNNGIST, otherwise known as order-by-operator support for GIST. · 55450687
      Tom Lane authored
      This commit represents a rather heavily editorialized version of
      Teodor's builtin_knngist_itself-0.8.2 and builtin_knngist_proc-0.8.1
      patches.  I redid the opclass API to add a separate Distance method
      instead of turning the Consistent method into an illogical mess,
      fixed some bit-rot in the rbtree interfaces, and generally worked over
      the code style and comments.
      
      There's still no non-code documentation to speak of, but I'll work on
      that separately.  Some contrib-module changes are also yet to come
      (right now, point <-> point is the only KNN-ified operator).
      
      Teodor Sigaev and Tom Lane
      55450687
  16. Dec 03, 2010
    • Tom Lane's avatar
      Create core infrastructure for KNNGIST. · d583f10b
      Tom Lane authored
      This is a heavily revised version of builtin_knngist_core-0.9.  The
      ordering operators are no longer mixed in with actual quals, which would
      have confused not only humans but significant parts of the planner.
      Instead, ordering operators are carried separately throughout planning and
      execution.
      
      Since the API for ambeginscan and amrescan functions had to be changed
      anyway, this commit takes the opportunity to rationalize that a bit.
      RelationGetIndexScan no longer forces a premature index_rescan call;
      instead, callers of index_beginscan must call index_rescan too.  Aside from
      making the AM-side initialization logic a bit less peculiar, this has the
      advantage that we do not make a useless extra am_rescan call when there are
      runtime key values.  AMs formerly could not assume that the key values
      passed to amrescan were actually valid; now they can.
      
      Teodor Sigaev and Tom Lane
      d583f10b
  17. Sep 20, 2010
  18. Feb 26, 2010
  19. Jan 02, 2010
  20. Jan 01, 2010
    • Tom Lane's avatar
      Support "x IS NOT NULL" clauses as indexscan conditions. This turns out · 29c4ad98
      Tom Lane authored
      to be just a minor extension of the previous patch that made "x IS NULL"
      indexable, because we can treat the IS NOT NULL condition as if it were
      "x < NULL" or "x > NULL" (depending on the index's NULLS FIRST/LAST option),
      just like IS NULL is treated like "x = NULL".  Aside from any possible
      usefulness in its own right, this is an important improvement for
      index-optimized MAX/MIN aggregates: it is now reliably possible to get
      a column's min or max value cheaply, even when there are a lot of nulls
      cluttering the interesting end of the index.
      29c4ad98
  21. Jun 11, 2009
  22. Jan 01, 2009
  23. Dec 04, 2008
  24. Oct 20, 2008
  25. Oct 17, 2008
    • Teodor Sigaev's avatar
      During repeated rescan of GiST index it's possible that scan key · beeb3562
      Teodor Sigaev authored
      is NULL but SK_SEARCHNULL is not set. Add checking IS NULL of keys
      to set during key initialization. If key is NULL and SK_SEARCHNULL is not
      set then nothnig can be satisfied.
      With assert-enabled compilation that causes coredump.
      
      Bug was introduced in 8.3 by support of IS NULL index scan.
      beeb3562
  26. Aug 23, 2008
  27. Jun 19, 2008
  28. May 12, 2008
    • Alvaro Herrera's avatar
      Restructure some header files a bit, in particular heapam.h, by removing some · f8c4d7db
      Alvaro Herrera authored
      unnecessary #include lines in it.  Also, move some tuple routine prototypes and
      macros to htup.h, which allows removal of heapam.h inclusion from some .c
      files.
      
      For this to work, a new header file access/sysattr.h needed to be created,
      initially containing attribute numbers of system columns, for pg_dump usage.
      
      While at it, make contrib ltree, intarray and hstore header files more
      consistent with our header style.
      f8c4d7db
  29. Jan 01, 2008
  30. Jan 20, 2007
  31. Jan 05, 2007
  32. Oct 04, 2006
  33. Jul 14, 2006
  34. Apr 03, 2006
  35. Mar 05, 2006
  36. Sep 22, 2005
  37. Jun 27, 2005
    • Teodor Sigaev's avatar
      Concurrency for GiST · e8cab5fe
      Teodor Sigaev authored
      - full concurrency for insert/update/select/vacuum:
              - select and vacuum never locks more than one page simultaneously
              - select (gettuple) hasn't any lock across it's calls
              - insert never locks more than two page simultaneously:
                      - during search of leaf to insert it locks only one page
                        simultaneously
                      - while walk upward to the root it locked only parent (may be
                        non-direct parent) and child. One of them X-lock, another may
                        be S- or X-lock
      - 'vacuum full' locks index
      - improve gistgetmulti
      - simplify XLOG records
      
      Fix bug in index_beginscan_internal: LockRelation may clean
        rd_aminfo structure, so move GET_REL_PROCEDURE after LockRelation
      e8cab5fe
  38. May 17, 2005
    • Neil Conway's avatar
      Cleanup GiST header files. Since GiST extensions are often written as · c891e05f
      Neil Conway authored
      external projects, we should be careful about what parts of the GiST
      API are considered implementation details, and which are part of the
      public API. Therefore, I've moved internal-only declarations into
      gist_private.h -- future backward-incompatible changes to gist.h should
      be made with care, to avoid needlessly breaking external GiST extensions.
      
      Also did some related header cleanup: remove some unnecessary #includes
      from gist.h, and remove some unused definitions: isAttByVal(), _gistdump(),
      and GISTNStrategies.
      c891e05f
    • Neil Conway's avatar
      GiST improvements: · eda6dd32
      Neil Conway authored
      - make sure we always invoke user-supplied GiST methods in a short-lived
        memory context. This means the backend isn't exposed to any memory leaks
        that be in those methods (in fact, it is probably a net loss for most
        GiST methods to bother manually freeing memory now). This also means
        we can do away with a lot of ugly manual memory management in the
        GiST code itself.
      
      - keep the current page of a GiST index scan pinned, rather than doing a
        ReadBuffer() for each tuple produced by the scan. Since ReadBuffer() is
        expensive, this is a perf. win
      
      - implement dead tuple killing for GiST indexes (which is easy to do, now
        that we keep a pin on the current scan page). Now all the builtin indexes
        implement dead tuple killing.
      
      - cleanup a lot of ugly code in GiST
      eda6dd32
Loading