1. 08 Jan, 2011 1 commit
    • Tom Lane's avatar
      Fix GIN to support null keys, empty and null items, and full index scans. · 73912e7f
      Tom Lane authored
      Per my recent proposal(s).  Null key datums can now be returned by
      extractValue and extractQuery functions, and will be stored in the index.
      Also, placeholder entries are made for indexable items that are NULL or
      contain no keys according to extractValue.  This means that the index is
      now always complete, having at least one entry for every indexed heap TID,
      and so we can get rid of the prohibition on full-index scans.  A full-index
      scan is implemented much the same way as partial-match scans were already:
      we build a bitmap representing all the TIDs found in the index, and then
      drive the results off that.
      
      Also, introduce a concept of a "search mode" that can be requested by
      extractQuery when the operator requires matching to empty items (this is
      just as cheap as matching to a single key) or requires a full index scan
      (which is not so cheap, but it sure beats failing or giving wrong answers).
      The behavior remains backward compatible for opclasses that don't return
      any null keys or request a non-default search mode.
      
      Using these features, we can now make the GIN index opclass for anyarray
      behave in a way that matches the actual anyarray operators for &&, <@, @>,
      and = ... which it failed to do before in assorted corner cases.
      
      This commit fixes the core GIN code and ginarrayprocs.c, updates the
      documentation, and adds some simple regression test cases for the new
      behaviors using the array operators.  The tsearch and contrib GIN opclass
      support functions still need to be looked over and probably fixed.
      
      Another thing I intend to fix separately is that this is pretty inefficient
      for cases where more than one scan condition needs a full-index search:
      we'll run duplicate GinScanEntrys, each one of which builds a large bitmap.
      There is some existing logic to merge duplicate GinScanEntrys but it needs
      refactoring to make it work for entries belonging to different scan keys.
      
      Note that most of gin.h has been split out into a new file gin_private.h,
      so that gin.h doesn't export anything that's not supposed to be used by GIN
      opclasses or the rest of the backend.  I did quite a bit of other code
      beautification work as well, mostly fixing comments and choosing more
      appropriate names for things.
      73912e7f
  2. 07 Jan, 2011 4 commits
  3. 06 Jan, 2011 5 commits
  4. 05 Jan, 2011 8 commits
  5. 04 Jan, 2011 2 commits
  6. 03 Jan, 2011 5 commits
  7. 02 Jan, 2011 3 commits
    • Peter Eisentraut's avatar
      Implement remaining fields of information_schema.sequences view · 39b88432
      Peter Eisentraut authored
      Add new function pg_sequence_parameters that returns a sequence's start,
      minimum, maximum, increment, and cycle values, and use that in the view.
      (bug #5662; design suggestion by Tom Lane)
      
      Also slightly adjust the view's column order and permissions after review of
      SQL standard.
      39b88432
    • Robert Haas's avatar
      Fix typo. · e657b55e
      Robert Haas authored
      Noted by Magnus Hagander.
      e657b55e
    • Robert Haas's avatar
      Basic foreign table support. · 0d692a0d
      Robert Haas authored
      Foreign tables are a core component of SQL/MED.  This commit does
      not provide a working SQL/MED infrastructure, because foreign tables
      cannot yet be queried.  Support for foreign table scans will need to
      be added in a future patch.  However, this patch creates the necessary
      system catalog structure, syntax support, and support for ancillary
      operations such as COMMENT and SECURITY LABEL.
      
      Shigeru Hanada, heavily revised by Robert Haas
      0d692a0d
  8. 01 Jan, 2011 8 commits
  9. 31 Dec, 2010 4 commits
    • Bruce Momjian's avatar
      Include the first valid listen address in pg_ctl to improve server start · 30aeda43
      Bruce Momjian authored
      "wait" detection and add postmaster start time to help determine if the
      postmaster is actually using the specified data directory.
      30aeda43
    • Tom Lane's avatar
      Invert and rename flag variable to improve code readability. · 39c8dd66
      Tom Lane authored
      No change in functionality.  Per discussion with Robert.
      39c8dd66
    • Tom Lane's avatar
      Move symbols for ExecMergeJoin's state machine into nodeMergejoin.c. · 7b464015
      Tom Lane authored
      There's no reason for these values to be known anywhere else.  After
      doing this, executor/execdefs.h is vestigial and can be removed.
      7b464015
    • Tom Lane's avatar
      Support RIGHT and FULL OUTER JOIN in hash joins. · f4e4b327
      Tom Lane authored
      This is advantageous first because it allows us to hash the smaller table
      regardless of the outer-join type, and second because hash join can be more
      flexible than merge join in dealing with arbitrary join quals in a FULL
      join.  For merge join all the join quals have to be mergejoinable, but hash
      join will work so long as there's at least one hashjoinable qual --- the
      others can be any condition.  (This is true essentially because we don't
      keep per-inner-tuple match flags in merge join, while hash join can do so.)
      
      To do this, we need a has-it-been-matched flag for each tuple in the
      hashtable, not just one for the current outer tuple.  The key idea that
      makes this practical is that we can store the match flag in the tuple's
      infomask, since there are lots of bits there that are of no interest for a
      MinimalTuple.  So we aren't increasing the size of the hashtable at all for
      the feature.
      
      To write this without turning the hash code into even more of a pile of
      spaghetti than it already was, I rewrote ExecHashJoin in a state-machine
      style, similar to ExecMergeJoin.  Other than that decision, it was pretty
      straightforward.
      f4e4b327