1. 23 Jul, 2013 9 commits
    • Tom Lane's avatar
      Move strip_implicit_coercions() from optimizer to nodeFuncs.c. · 10a509d8
      Tom Lane authored
      Use of this function has spread into the parser and rewriter, so it seems
      like time to pull it out of the optimizer and put it into the more central
      nodeFuncs module.  This eliminates the need to #include optimizer/clauses.h
      in most of the calling files, demonstrating that this function was indeed a
      bit outside the normal code reference patterns.
      10a509d8
    • Tom Lane's avatar
      Further hacking on ruleutils' new column-alias-assignment code. · ef655663
      Tom Lane authored
      After further thought about implicit coercions appearing in a joinaliasvars
      list, I realized that they represent an additional reason why we might need
      to reference the join output column directly instead of referencing an
      underlying column.  Consider SELECT x FROM t1 LEFT JOIN t2 USING (x) where
      t1.x is of type date while t2.x is of type timestamptz.  The merged output
      variable is of type timestamptz, but it won't go to null when t2 does,
      therefore neither t1.x nor t2.x is a valid substitute reference.
      
      The code in get_variable() actually gets this case right, since it knows
      it shouldn't look through a coercion, but we failed to ensure that the
      unqualified output column name would be globally unique.  To fix, modify
      the code that trawls for a dangerous situation so that it actually scans
      through an unnamed join's joinaliasvars list to see if there are any
      non-simple-Var entries.
      ef655663
    • Alvaro Herrera's avatar
      Check for NULL result from strdup · bb686c9a
      Alvaro Herrera authored
      Per Coverity Scan
      bb686c9a
    • Tom Lane's avatar
      Change post-rewriter representation of dropped columns in joinaliasvars. · a7cd853b
      Tom Lane authored
      It's possible to drop a column from an input table of a JOIN clause in a
      view, if that column is nowhere actually referenced in the view.  But it
      will still be there in the JOIN clause's joinaliasvars list.  We used to
      replace such entries with NULL Const nodes, which is handy for generation
      of RowExpr expansion of a whole-row reference to the view.  The trouble
      with that is that it can't be distinguished from the situation after
      subquery pull-up of a constant subquery output expression below the JOIN.
      Instead, replace such joinaliasvars with null pointers (empty expression
      trees), which can't be confused with pulled-up expressions.  expandRTE()
      still emits the old convention, though, for convenience of RowExpr
      generation and to reduce the risk of breaking extension code.
      
      In HEAD and 9.3, this patch also fixes a problem with some new code in
      ruleutils.c that was failing to cope with implicitly-casted joinaliasvars
      entries, as per recent report from Feike Steenbergen.  That oversight was
      because of an inadequate description of the data structure in parsenodes.h,
      which I've now corrected.  There were some pre-existing oversights of the
      same ilk elsewhere, which I believe are now all fixed.
      a7cd853b
    • Alvaro Herrera's avatar
      Tweak FOR UPDATE/SHARE error message wording (again) · c359a1b0
      Alvaro Herrera authored
      In commit 0ac5ad51 I changed some error messages from "FOR
      UPDATE/SHARE" to a rather long gobbledygook which nobody liked.  Then,
      in commit cb9b66d3 I changed them again, but the alternative chosen
      there was deemed suboptimal by Peter Eisentraut, who in message
      1373937980.20441.8.camel@vanquo.pezone.net proposed an alternative
      involving a dynamically-constructed string based on the actual locking
      strength specified in the SQL command.  This patch implements that
      suggestion.
      c359a1b0
    • Robert Haas's avatar
      Use InvalidSnapshot, now SnapshotNow, as the default snapshot. · 765ad89b
      Robert Haas authored
      As far as I can determine, there's no code in the core distribution
      that fails to explicitly set the snapshot of a scan or executor
      state.  If there is any such code, this will probably cause it to
      seg fault; friendlier suggestions were discussed on pgsql-hackers,
      but there was no consensus that anything more than this was
      needed.
      
      This is another step towards the hoped-for complete removal of
      SnapshotNow.
      765ad89b
    • Robert Haas's avatar
      Additional regression tests for ALTER OPERATOR FAMILY. · e6055061
      Robert Haas authored
      Robins Tharakan, reviewed by Szymon Guz
      e6055061
    • Peter Eisentraut's avatar
      ecpg: Move function prototype into header file · 9feeef92
      Peter Eisentraut authored
      PGTYPEStimestamp_defmt_scan() was declared twice inside different .c
      files, with slightly different prototypes.  Move it into a header file
      and correct the prototype.
      9feeef92
    • Peter Eisentraut's avatar
      doc: Remove tab from SGML file · 2f1fa75a
      Peter Eisentraut authored
      2f1fa75a
  2. 22 Jul, 2013 7 commits
    • Tatsuo Ishii's avatar
      Add --rate option. · fc9f4e9f
      Tatsuo Ishii authored
      This controls the target transaction rate to certain tps, rather than
      maximum. Patch contributed by Fabien COELHO, reviewed by Greg Smith,
      and slight editing by me.
      fc9f4e9f
    • Robert Haas's avatar
      Fix cache flush hazard in ExecRefreshMatView. · 21e28e45
      Robert Haas authored
      Andres Freund
      21e28e45
    • Robert Haas's avatar
      pgrowlocks: Use GetActiveSnapshot() rather than SnapshotNow. · 2e44770f
      Robert Haas authored
      Per discussion, it's desirable to eliminate all remaining uses of
      SnapshotNow, because it has unpleasant semantics: race conditions
      can result in seeing multiple versions of a concurrently updated
      row, or none at all.  By using GetActiveSnapshot() here, callers
      will see exactly those rows that would have been visible if the
      invoking query had scanned the table using, for example, a SELECT
      statement.
      
      This is slightly different from the old behavior, because commits
      that happen concurrently with the scan will not affect the results.
      In REPEATABLE READ or SERIALIZABLE modes, where transaction
      snapshots are used, commits that have happened since the start of
      the transaction will also not affect the results.  It is hoped
      that this minor incompatibility will be thought an improvement,
      or at least no worse than what we did before.
      2e44770f
    • Robert Haas's avatar
      Remove bgw_sighup and bgw_sigterm. · f40a318e
      Robert Haas authored
      Per discussion on pgsql-hackers, these aren't really needed.  Interim
      versions of the background worker patch had the worker starting with
      signals already unblocked, which would have made this necessary.
      But the final version does not, so we don't really need it; and it
      doesn't work well with the new facility for starting dynamic background
      workers, so just rip it out.
      
      Also per discussion on pgsql-hackers, back-patch this change to 9.3.
      It's best to get the API break out of the way before we do an
      official release of this facility, to avoid more pain for extension
      authors later.
      f40a318e
    • Robert Haas's avatar
      Adjust HeapTupleSatisfies* routines to take a HeapTuple. · 0518ecee
      Robert Haas authored
      Previously, these functions took a HeapTupleHeader, but upcoming
      patches for logical replication will introduce new a new snapshot
      type under which the tuple's TID will be used to lookup (CMIN, CMAX)
      for visibility determination purposes.  This makes that information
      available.  Code churn is minimal since HeapTupleSatisfiesVisibility
      took the HeapTuple anyway, and deferenced it before calling the
      satisfies function.
      
      Independently of logical replication, this allows t_tableOid and
      t_self to be cross-checked via assertions in tqual.c.  This seems
      like a useful way to make sure that all callers are setting these
      values properly, which has been previously put forward as
      desirable.
      
      Andres Freund, reviewed by Álvaro Herrera
      0518ecee
    • Alvaro Herrera's avatar
      Silence compiler warning on an unused variable · 0aeb5ae2
      Alvaro Herrera authored
      Also, tweak wording in comments (per Andres) and documentation (myself)
      to point out that it's the database's default tablespace that can be
      passed as 0, not DEFAULTTABLESPACE_OID.  Robert Haas noticed the bug in
      the code, but didn't update the accompanying prose.
      0aeb5ae2
    • Robert Haas's avatar
      Add infrastructure for mapping relfilenodes to relation OIDs. · f01d1ae3
      Robert Haas authored
      Future patches are expected to introduce logical replication that
      works by decoding WAL.  WAL contains relfilenodes rather than relation
      OIDs, so this infrastructure will be needed to find the relation OID
      based on WAL contents.
      
      If logical replication does not make it into this release, we probably
      should consider reverting this, since it will add some overhead to DDL
      operations that create new relations.  One additional index insert per
      pg_class row is not a large overhead, but it's more than zero.
      Another way of meeting the needs of logical replication would be to
      the relation OID to WAL, but that would burden DML operations, not
      only DDL.
      
      Andres Freund, with some changes by me.  Design review, in earlier
      versions, by Álvaro Herrera.
      f01d1ae3
  3. 20 Jul, 2013 2 commits
    • Tom Lane's avatar
      Fix error handling in PLy_spi_execute_fetch_result(). · b3b10c39
      Tom Lane authored
      If an error is thrown out of the datatype I/O functions called by this
      function, we need to do subtransaction cleanup, which the previous coding
      entirely failed to do.  Fortunately, both existing callers of this function
      already have proper cleanup logic, so re-throwing the exception is enough.
      
      Also, postpone creation of the resultset tupdesc until after the I/O
      conversions are complete, so that we won't leak memory in TopMemoryContext
      when such an error happens.
      b3b10c39
    • Peter Eisentraut's avatar
      Clean up new JSON API typedefs · ff41a5de
      Peter Eisentraut authored
      The new JSON API uses a bit of an unusual typedef scheme, where for
      example OkeysState is a pointer to okeysState.  And that's not applied
      consistently either.  Change that to the more usual PostgreSQL style
      where struct typedefs are upper case, and use pointers explicitly.
      ff41a5de
  4. 19 Jul, 2013 5 commits
    • Alvaro Herrera's avatar
      Fix HeapTupleSatisfiesVacuum on aborted updater xacts · 6737aa72
      Alvaro Herrera authored
      By using only the macro that checks infomask bits
      HEAP_XMAX_IS_LOCKED_ONLY to verify whether a multixact is not an
      updater, and not the full HeapTupleHeaderIsOnlyLocked, it would come to
      the wrong result in case of a multixact containing an aborted update;
      therefore returning the wrong result code.  This would cause predicate.c
      to break completely (as in bug report #8273 from David Leverton), and
      certain index builds would misbehave.  As far as I can tell, other
      callers of the bogus routine would make harmless mistakes or not be
      affected by the difference at all; so this was a pretty narrow case.
      
      Also, no other user of the HEAP_XMAX_IS_LOCKED_ONLY macro is as
      careless; they all check specifically for the HEAP_XMAX_IS_MULTI case,
      and they all verify whether the updater is InvalidXid before concluding
      that it's a valid updater.  So there doesn't seem to be any similar bug.
      6737aa72
    • Robert Haas's avatar
      doc: Fix typos in conversion names. · c8fb821a
      Robert Haas authored
      David Christensen
      c8fb821a
    • Michael Meskes's avatar
      Initialize day of year value. · a2c1c330
      Michael Meskes authored
      There are cases where the day of year value in struct tm is used, but it never
      got calculated. Problem found by Coverity scan.
      a2c1c330
    • Tom Lane's avatar
      Add checks for valid multibyte character length in UtfToLocal, LocalToUtf. · d9f37e66
      Tom Lane authored
      This is mainly to suppress "uninitialized variable" warnings from very
      recent versions of gcc.  But it seems like a good robustness thing anyway,
      not to mention that we might someday decide to support 6-byte UTF8.
      
      Per report from Karol Trzcionka.  No back-patch since there's no reason
      at the moment to think this is more than cosmetic.
      d9f37e66
    • Tom Lane's avatar
      Fix regex match failures for backrefs combined with non-greedy quantifiers. · e2bd9049
      Tom Lane authored
      An ancient logic error in cfindloop() could cause the regex engine to fail
      to find matches that begin later than the start of the string.  This
      function is only used when the regex pattern contains a back reference,
      and so far as we can tell the error is only reachable if the pattern is
      non-greedy (i.e. its first quantifier uses the ? modifier).  Furthermore,
      the actual match must begin after some potential match that satisfies the
      DFA but then fails the back-reference's match test.
      
      Reported and fixed by Jeevan Chalke, with cosmetic adjustments by me.
      e2bd9049
  5. 18 Jul, 2013 5 commits
    • Stephen Frost's avatar
      WITH CHECK OPTION support for auto-updatable VIEWs · 4cbe3ac3
      Stephen Frost authored
      For simple views which are automatically updatable, this patch allows
      the user to specify what level of checking should be done on records
      being inserted or updated.  For 'LOCAL CHECK', new tuples are validated
      against the conditionals of the view they are being inserted into, while
      for 'CASCADED CHECK' the new tuples are validated against the
      conditionals for all views involved (from the top down).
      
      This option is part of the SQL specification.
      
      Dean Rasheed, reviewed by Pavel Stehule
      4cbe3ac3
    • Fujii Masao's avatar
      6f9e39bc
    • Fujii Masao's avatar
      Fix pgstattuple functions to use regclass-type as the argument. · 1dc11866
      Fujii Masao authored
      This allows us to specify the target relation with several expressions,
      'relname', 'schemaname.relname' and OID in all pgstattuple functions.
      pgstatindex() and pg_relpages() could not accept OID as the argument
      so far.
      
      Per discussion on -hackers, we decided to keep two types of interfaces,
      with regclass-type and TEXT-type argument, for each pgstattuple
      function because of the backward-compatibility issue. The functions
      which have TEXT-type argument will be deprecated in the future release.
      
      Patch by Satoshi Nagayasu, reviewed by Rushabh Lathia and Fujii Masao.
      1dc11866
    • Andrew Dunstan's avatar
      Move checking an explicit VARIADIC "any" argument into the parser. · d26888bc
      Andrew Dunstan authored
      This is more efficient and simpler . It does mean that an untyped NULL
      can no longer be used in such cases, which should be mentioned in
      Release Notes, but doesn't seem a terrible loss. The workaround is to
      cast the NULL to some array type.
      
      Pavel Stehule, reviewed by Jeevan Chalke.
      d26888bc
    • Tom Lane's avatar
      Fix direct access to Relation->rd_indpred. · 405a468b
      Tom Lane authored
      Should use RelationGetIndexPredicate(), since rd_indpred is just a cache
      that is not computed until/unless demanded.  Per buildfarm failure on
      CLOBBER_CACHE_ALWAYS animals; diagnosis and fix by Hitoshi Harada.
      405a468b
  6. 17 Jul, 2013 10 commits
    • Peter Eisentraut's avatar
      doc: Remove tab from SGML file · e8b1d1be
      Peter Eisentraut authored
      e8b1d1be
    • Tom Lane's avatar
      Fix a few problems in barrier.h. · 89779bf2
      Tom Lane authored
      On HPPA, implement pg_memory_barrier() as pg_compiler_barrier(), which
      should be correct since this arch doesn't do memory access reordering,
      and is anyway better than the completely-nonfunctional-on-this-arch
      dummy_spinlock code.  (But note this patch only fixes things for gcc,
      not for builds with HP's compiler.)
      
      Also, fix incorrect default definition of pg_memory_barrier as a macro
      requiring an argument.
      
      Also, fix incorrect spelling of "#elif" as "#else if" in icc code path
      (spotted by pgindent).
      
      This doesn't come close to fixing all of the functional and stylistic
      deficiencies in barrier.h, but at least it un-breaks my personal build.
      Now that we're actually using barriers in the code, this file is going
      to need some serious attention.
      89779bf2
    • Heikki Linnakangas's avatar
      Fix variable names mentioned in comment to match the code. · 107cbc90
      Heikki Linnakangas authored
      Also, in another comment, explain why holding an insertion slot is a
      critical section.
      
      Per review by Amit Kapila.
      107cbc90
    • Heikki Linnakangas's avatar
      Fix assert failure at end of recovery, broken by XLogInsert scaling patch. · 59c02a36
      Heikki Linnakangas authored
      Initialization of the first XLOG buffer at end-of-recovery was broken for
      the case that the last read WAL record ended at a page boundary. Instead of
      trying to copy the last full xlog page to the buffer cache in that case,
      just set shared state so that the next page is initialized when the first
      WAL record after startup is inserted. (that's what we did in earlier
      version, too)
      
      To make the shared state required for that case less surprising, replace the
      XLogCtl->curridx variable, which was the index of the latest initialized
      buffer, with an XLogRecPtr of how far the buffers have been initialized.
      That also allows us to get rid of the XLogRecEndPtrToBufIdx macro.
      
      While we're at it, make a similar change for XLogCtl->Write.curridx, getting
      rid of that variable and calculating the next buffer to write from
      XLogCtl->LogwrtResult instead.
      59c02a36
    • Heikki Linnakangas's avatar
      Fix end-of-loop optimization in pglz_find_match() function. · 3f2adace
      Heikki Linnakangas authored
      After the recent pglz optimization patch, the next/prev pointers in the
      hash table are never NULL, INVALID_ENTRY_PTR is used to represent invalid
      entries instead. The end-of-loop check in pglz_find_match() function didn't
      get the memo. The result was the same from a correctness point of view, but
      because the NULL-check would never fail, the tiny optimization turned into
      a pessimization.
      
      Reported by Stephen Frost, using Coverity scanner.
      3f2adace
    • Fujii Masao's avatar
      750f4368
    • Stephen Frost's avatar
      Use correct parameter name for view_option_value · f2719f69
      Stephen Frost authored
      The documentation for ALTER VIEW had a minor copy-and-paste error in
      defining the parameters.  Noticed when reviewing the WITH CHECK OPTION
      patch.
      
      Backpatch to 9.2 where this was first introduced.
      f2719f69
    • Noah Misch's avatar
      Fix systable_recheck_tuple() for MVCC scan snapshots. · ffcf6545
      Noah Misch authored
      Since this function assumed non-MVCC snapshots, it broke when commit
      568d4138 switched its one caller from
      SnapshotNow scans to MVCC-snapshot scans.
      
      Reviewed by Robert Haas, Tom Lane and Andres Freund.
      ffcf6545
    • Noah Misch's avatar
      Implement the FILTER clause for aggregate function calls. · b560ec1b
      Noah Misch authored
      This is SQL-standard with a few extensions, namely support for
      subqueries and outer references in clause expressions.
      
      catversion bump due to change in Aggref and WindowFunc.
      
      David Fetter, reviewed by Dean Rasheed.
      b560ec1b
    • Noah Misch's avatar
      7a8e9f29
  7. 16 Jul, 2013 2 commits