1. 19 Mar, 2015 1 commit
    • Robert Haas's avatar
      Fix status reporting for terminated bgworkers that were never started. · bf740ce9
      Robert Haas authored
      Previously, GetBackgroundWorkerPid() would return BGWH_NOT_YET_STARTED
      if the slot used for the worker registration had not been reused by
      unrelated activity, and BGWH_STOPPED if it had.  Either way, a process
      that had requested notification when the state of one of its
      background workers changed did not receive such notifications.  Fix
      things so that GetBackgroundWorkerPid() always returns BGWH_STOPPED in
      this situation, so that we do not erroneously give waiters the
      impression that the worker will eventually be started; and send
      notifications just as we would if the process terminated after having
      been started, so that it's possible to wait for the postmaster to
      process a worker termination request without polling.
      
      Discovered by Amit Kapila during testing of parallel sequential scan.
      Analysis and fix by me.  Back-patch to 9.4; there may not be anyone
      relying on this interface yet, but if anyone is, the new behavior is a
      clear improvement.
      bf740ce9
  2. 18 Mar, 2015 5 commits
    • Bruce Momjian's avatar
      pg_upgrade: document use of rsync for slave upgrades · 417f78a5
      Bruce Momjian authored
      Also document that rsync has one-second granularity for file
      change comparisons.
      
      Report by Stephen Frost
      417f78a5
    • Alvaro Herrera's avatar
      array_offset() and array_offsets() · 13dbc7a8
      Alvaro Herrera authored
      These functions return the offset position or positions of a value in an
      array.
      
      Author: Pavel Stěhule
      Reviewed by: Jim Nasby
      13dbc7a8
    • Alvaro Herrera's avatar
      Install shared libraries to bin/ in Windows under MSVC · f9dead56
      Alvaro Herrera authored
      Since commit cb4a3b04 we were already doing this for the Cygwin/mingw
      toolchains, but MSVC had not been updated to do it.  At Install.pm time,
      the Makefile (or GNUmakefile) is inspected, and if a line matching
      SO_MAJOR_VERSION is found (indicating a shared library is being built),
      then files with the .dll extension are set to be installed in bin/
      rather than lib/, while files with .lib extension are installed in lib/.
      This makes the MSVC toolchain up to date with cygwin/mingw.
      
      This removes ad-hoc hacks that were copying files into bin/ or lib/
      manually (libpq.dll in particular was already being copied into bin).
      So while this is a rather ugly kludge, it's still cleaner than what was
      there before.
      
      Author: Michael Paquier
      Reviewed by: Asif Naeem
      f9dead56
    • Alvaro Herrera's avatar
      Setup cursor position for schema-qualified elements · b8d226b4
      Alvaro Herrera authored
      This makes any errors thrown while looking up such schemas report the
      position of the error.
      
      Author: Ryan Kelly
      Reviewed by: Jeevan Chalke, Tom Lane
      b8d226b4
    • Alvaro Herrera's avatar
      Rationalize vacuuming options and parameters · 0d831389
      Alvaro Herrera authored
      We were involving the parser too much in setting up initial vacuuming
      parameters.  This patch moves that responsibility elsewhere to simplify
      code, and also to make future additions easier.  To do this, create a
      new struct VacuumParams which is filled just prior to vacuum execution,
      instead of at parse time; for user-invoked vacuuming this is set up in a
      new function ExecVacuum, while autovacuum sets it up by itself.
      
      While at it, add a new member VACOPT_SKIPTOAST to enum VacuumOption,
      only set by autovacuum, which is used to disable vacuuming of the toast
      table instead of the old do_toast parameter; this relieves the argument
      list of vacuum() and some callees a bit.  This partially makes up for
      having added more arguments in an effort to avoid having autovacuum from
      constructing a VacuumStmt parse node.
      
      Author: Michael Paquier. Some tweaks by Álvaro
      Reviewed by: Robert Haas, Stephen Frost, Álvaro Herrera
      0d831389
  3. 17 Mar, 2015 2 commits
    • Andres Freund's avatar
      Remove docs missed in 51c11a70. · 4559167c
      Andres Freund authored
      Somehow I misresolved a merge conflict when forward porting Petr's patch
      leading to a section of the docs remaining...
      
      Thankfully Fujii spotted my mistake.
      4559167c
    • Alvaro Herrera's avatar
      Fix out-of-array-bounds compiler warning · a1907384
      Alvaro Herrera authored
      Since the array length check is using a post-increment operator, the
      compiler complains that there's a potential write to one element beyond
      the end of the array.  This is not possible currently: the only path to
      this function is through pg_get_object_address(), which already verifies
      that the input array is no more than two elements in length.  Still, a
      bug is a bug.
      
      No idea why my compiler doesn't complain about this ...
      
      Pointed out by Dead Rasheed and Peter Eisentraut
      a1907384
  4. 16 Mar, 2015 2 commits
    • Alvaro Herrera's avatar
      Support opfamily members in get_object_address · a61fd533
      Alvaro Herrera authored
      In the spirit of 890192e9 and 44643034: have get_object_address
      understand individual pg_amop and pg_amproc objects.  There is no way to
      refer to such objects directly in the grammar -- rather, they are almost
      always considered an integral part of the opfamily that contains them.
      (The only case that deals with them individually is ALTER OPERATOR
      FAMILY ADD/DROP, which carries the opfamily address separately and thus
      does not need it to be part of each added/dropped element's address.)
      In event triggers it becomes possible to become involved with individual
      amop/amproc elements, and this commit enables pg_get_object_address to
      do so as well.
      
      To make the overall coding simpler, this commit also slightly changes
      the get_object_address representation for opclasses and opfamilies:
      instead of having the AM name in the objargs array, I moved it as the
      first element of the objnames array.  This enables the new code to use
      objargs for the type names used by pg_amop and pg_amproc.
      
      Reviewed by: Stephen Frost
      a61fd533
    • Tom Lane's avatar
      Replace insertion sort in contrib/intarray with qsort(). · 8d1f2390
      Tom Lane authored
      It's all very well to claim that a simplistic sort is fast in easy
      cases, but O(N^2) in the worst case is not good ... especially if the
      worst case is as easy to hit as "descending order input".  Replace that
      bit with our standard qsort.
      
      Per bug #12866 from Maksym Boguk.  Back-patch to all active branches.
      8d1f2390
  5. 15 Mar, 2015 9 commits
    • Tom Lane's avatar
      Improve representation of PlanRowMark. · 7b8b8a43
      Tom Lane authored
      This patch fixes two inadequacies of the PlanRowMark representation.
      
      First, that the original LockingClauseStrength isn't stored (and cannot be
      inferred for foreign tables, which always get ROW_MARK_COPY).  Since some
      PlanRowMarks are created out of whole cloth and don't actually have an
      ancestral RowMarkClause, this requires adding a dummy LCS_NONE value to
      enum LockingClauseStrength, which is fairly annoying but the alternatives
      seem worse.  This fix allows getting rid of the use of get_parse_rowmark()
      in FDWs (as per the discussion around commits 462bd957 and
      8ec8760f), and it simplifies some things elsewhere.
      
      Second, that the representation assumed that all child tables in an
      inheritance hierarchy would use the same RowMarkType.  That's true today
      but will soon not be true.  We add an "allMarkTypes" field that identifies
      the union of mark types used in all a parent table's children, and use
      that where appropriate (currently, only in preprocess_targetlist()).
      
      In passing fix a couple of minor infelicities left over from the SKIP
      LOCKED patch, notably that _outPlanRowMark still thought waitPolicy
      is a bool.
      
      Catversion bump is required because the numeric values of enum
      LockingClauseStrength can appear in on-disk rules.
      
      Extracted from a much larger patch to support foreign table inheritance;
      it seemed worth breaking this out, since it's a separable concern.
      
      Shigeru Hanada and Etsuro Fujita, somewhat modified by me
      7b8b8a43
    • Tom Lane's avatar
      Move LockClauseStrength, LockWaitPolicy into new file nodes/lockoptions.h. · 9fac5fd7
      Tom Lane authored
      Commit df630b0d moved enum LockWaitPolicy
      into its very own header file utils/lockwaitpolicy.h, which does not seem
      like a great idea from here.  First, it's still a node-related declaration,
      and second, a file named like that can never sensibly be used for anything
      else.  I do not think we want to encourage a one-typedef-per-header-file
      approach.  The upcoming foreign table inheritance patch was doubling down
      on this bad idea by moving enum LockClauseStrength into its *own*
      can-never-be-used-for-anything-else file.  Instead, let's put them both in
      a file named nodes/lockoptions.h.  (They do seem to need a separate header
      file because we need them in both parsenodes.h and plannodes.h, and we
      don't want either of those including the other.  Past practice might
      suggest adding them to nodes/nodes.h, but they don't seem sufficiently
      globally useful to justify that.)
      
      Committed separately since there's no functional change here, just some
      header-file refactoring.
      9fac5fd7
    • Tom Lane's avatar
      src/port/dirmod.c needs to be built on Cygwin too. · 80089597
      Tom Lane authored
      Oversight in my commit 91f4a5a9.
      Per buildfarm member brolga.
      80089597
    • Tom Lane's avatar
      Add missing documentation for PGC_SU_BACKEND in description of pg_settings. · d1e9214e
      Tom Lane authored
      Commit fe550b2a missed updating this list
      of the PGC_XXX values, which in hindsight is not so surprising because
      catalogs.sgml is not a place you'd think to look for them.  In addition to
      adding the missing doco, insert the PGC_XXX C enum names in SGML comments,
      so that grepping for the enum names will find this file.  That might spare
      the next person similar embarrassment.
      
      Spotted by Magnus Hagander.
      d1e9214e
    • Andres Freund's avatar
      Merge the various forms of transaction commit & abort records. · 4f1b890b
      Andres Freund authored
      Since 465883b0 two versions of commit records have existed. A compact
      version that was used when no cache invalidations, smgr unlinks and
      similar were needed, and a full version that could deal with all
      that. Additionally the full version was embedded into twophase commit
      records.
      
      That resulted in a measurable reduction in the size of the logged WAL in
      some workloads. But more recently additions like logical decoding, which
      e.g. needs information about the database something was executed on,
      made it applicable in fewer situations. The static split generally made
      it hard to expand the commit record, because concerns over the size made
      it hard to add anything to the compact version.
      
      Additionally it's not particularly pretty to have twophase.c insert
      RM_XACT records.
      
      Rejigger things so that the commit and abort records only have one form
      each, including the twophase equivalents. The presence of the various
      optional (in the sense of not being in every record) pieces is indicated
      by a bits in the 'xinfo' flag.  That flag previously was not included in
      compact commit records. To prevent an increase in size due to its
      presence, it's only included if necessary; signalled by a bit in the
      xl_info bits available for xact.c, similar to heapam.c's
      XLOG_HEAP_OPMASK/XLOG_HEAP_INIT_PAGE.
      
      Twophase commit/aborts are now the same as their normal
      counterparts. The original transaction's xid is included in an optional
      data field.
      
      This means that commit records generally are smaller, except in the case
      of a transaction with subtransactions, but no other special cases; the
      increase there is four bytes, which seems acceptable given that the more
      common case of not having subtransactions shrank.  The savings are
      especially measurable for twophase commits, which previously always used
      the full version; but will in practice only infrequently have required
      that.
      
      The motivation for this work are not the space savings and and
      deduplication though; it's that it makes it easier to extend commit
      records with additional information. That's just a few lines of code
      now; without impacting the common case where that information is not
      needed.
      
      Discussion: 20150220152150.GD4149@awork2.anarazel.de,
          235610.92468.qm%40web29004.mail.ird.yahoo.com
      
      Reviewed-By: Heikki Linnakangas, Simon Riggs
      4f1b890b
    • Andres Freund's avatar
      Increase max_wal_size's default from 128MB to 1GB. · a0f5954a
      Andres Freund authored
      The introduction of min_wal_size & max_wal_size in 88e98230 makes it
      feasible to increase the default upper bound in checkpoint
      size. Previously raising the default would lead to a increased disk
      footprint, even if more segments weren't beneficial.  The low default of
      checkpoint size is one of common performance problem users have thus
      increasing the default makes sense.  Setups where the increase in
      maximum disk usage is a problem will very likely have to run with a
      modified configuration anyway.
      
      Discussion: 54F4EFB8.40202@agliodbs.com,
          CA+TgmoZEAgX5oMGJOHVj8L7XOkAe05Gnf45rP40m-K3FhZRVKg@mail.gmail.com
      
      Author: Josh Berkus, after a discussion involving lots of people.
      a0f5954a
    • Andres Freund's avatar
      Adjust valgrind suppressions wrt 025c0242. · 241f088f
      Andres Freund authored
      241f088f
    • Andres Freund's avatar
      Remove pause_at_recovery_target recovery.conf setting. · 51c11a70
      Andres Freund authored
      The new recovery_target_action (introduced in aedccb1f/b8e33a85)
      replaces it's functionality. Having both seems likely to cause more
      confusion than it saves worry due to the incompatibility.
      
      Discussion: 5484FC53.2060903@2ndquadrant.com
      Author: Petr Jelinek
      51c11a70
    • Fujii Masao's avatar
      Suppress maybe-uninitialized compiler warnings. · cd6c45cb
      Fujii Masao authored
      Previously some compilers were thinking that the variables that
      57aa5b2b added maybe-uninitialized.
      
      Spotted by Andres Freund
      cd6c45cb
  6. 14 Mar, 2015 4 commits
    • Tom Lane's avatar
      Remove obsolete comment. · 5ff68396
      Tom Lane authored
      Obsoleted by commit 21dcda27, but I missed
      seeing the cross-reference in the comments for exec_eval_integer().
      
      Also improve the cross-reference in the comments for exec_eval_cleanup().
      5ff68396
    • Peter Eisentraut's avatar
    • Tom Lane's avatar
      Build src/port/dirmod.c only on Windows. · 91f4a5a9
      Tom Lane authored
      Since commit ba7c5975, port/dirmod.c
      has contained only Windows-specific functions.  Most platforms don't
      seem to mind uselessly building an empty file, but OS X for one issues
      warnings.  Hence, treat dirmod.c as a Windows-specific file selected
      by configure rather than one that's always built.  We can revert this
      change if dirmod.c ever gains any non-Windows functionality again.
      
      Back-patch to 9.4 where the mentioned commit appeared.
      91f4a5a9
    • Tom Lane's avatar
      Remove workaround for ancient incompatibility between readline and libedit. · df9ebf1e
      Tom Lane authored
      GNU readline defines the return value of write_history() as "zero if OK,
      else an errno code".  libedit's version of that function used to have a
      different definition (to wit, "-1 if error, else the number of lines
      written to the file").  We tried to work around that by checking whether
      errno had become nonzero, but this method has never been kosher according
      to the published API of either library.  It's reportedly completely broken
      in recent Ubuntu releases: psql bleats about "No such file or directory"
      when saving ~/.psql_history, even though the write worked fine.
      
      However, libedit has been following the readline definition since somewhere
      around 2006, so it seems all right to finally break compatibility with
      ancient libedit releases and trust that the return value is what readline
      specifies.  (I'm not sure when the various Linux distributions incorporated
      this fix, but I did find that OS X has been shipping fixed versions since
      10.5/Leopard.)
      
      If anyone is still using such an ancient libedit, they will find that psql
      complains it can't write ~/.psql_history at exit, even when the file was
      written correctly.  This is no worse than the behavior we're fixing for
      current releases.
      
      Back-patch to all supported branches.
      df9ebf1e
  7. 13 Mar, 2015 2 commits
    • Tatsuo Ishii's avatar
      Fix integer overflow in debug message of walreceiver · 364c006c
      Tatsuo Ishii authored
      The message tries to tell the replication apply delay which fails if
      the first WAL record is not applied yet. Fix is, instead of telling
      overflowed minus numeric, showing "N/A" which indicates that the delay
      data is not yet available. Problem reported by me and patch by
      Fabrízio de Royes Mello.
      
      Back patched to 9.4, 9.3 and 9.2 stable branches (9.1 and 9.0 do not
      have the debug message).
      364c006c
    • Robert Haas's avatar
      Document the new custom scan APIs. · 82fe8b11
      Robert Haas authored
      These APIs changed somewhat subsequent to the initial commit, and may
      change further in the future, but let's document what we have today.
      
      KaiGai Kohei and Robert Haas, reviewed by Tom Lane and Thom Brown
      82fe8b11
  8. 12 Mar, 2015 6 commits
    • Tom Lane's avatar
      Improve documentation of bt_page_items(). · ebc0f5e0
      Tom Lane authored
      Explain some of the funny conventions used in btree page items.
      
      Peter Geoghegan and Jeff Janes
      ebc0f5e0
    • Tom Lane's avatar
      Ensure tableoid reads correctly in EvalPlanQual-manufactured tuples. · 443fd054
      Tom Lane authored
      The ROW_MARK_COPY path in EvalPlanQualFetchRowMarks() was just setting
      tableoid to InvalidOid, I think on the assumption that the referenced
      RTE must be a subquery or other case without a meaningful OID.  However,
      foreign tables also use this code path, and they do have meaningful
      table OIDs; so failure to set the tuple field can lead to user-visible
      misbehavior.  Fix that by fetching the appropriate OID from the range
      table.
      
      There's still an issue about whether CTID can ever have a meaningful
      value in this case; at least with postgres_fdw foreign tables, it does.
      But that is a different problem that seems to require a significantly
      different patch --- it's debatable whether postgres_fdw really wants to
      use this code path at all.
      
      Simplified version of a patch by Etsuro Fujita, who also noted the
      problem to begin with.  The issue can be demonstrated in all versions
      having FDWs, so back-patch to 9.1.
      443fd054
    • Heikki Linnakangas's avatar
      Fix memory leaks in GIN index vacuum. · 26d2c5dc
      Heikki Linnakangas authored
      Per bug #12850 by Walter Nordmann. Backpatch to 9.4 where the leak was
      introduced.
      26d2c5dc
    • Tom Lane's avatar
      Support flattening of empty-FROM subqueries and one-row VALUES tables. · f4abd024
      Tom Lane authored
      We can't handle this in the general case due to limitations of the
      planner's data representations; but we can allow it in many useful cases,
      by being careful to flatten only when we are pulling a single-row subquery
      up into a FROM (or, equivalently, inner JOIN) node that will still have at
      least one remaining relation child.  Per discussion of an example from
      Kyotaro Horiguchi.
      f4abd024
    • Tom Lane's avatar
      Fix old bug in get_loop_count(). · b746d0c3
      Tom Lane authored
      While poking at David Kubečka's issue I noticed an ancient logic error
      in get_loop_count(): it used 1.0 as a "no data yet" indicator, but since
      that is actually a valid rowcount estimate, this doesn't work.  If we
      have one input relation with 1.0 as rowcount and then another one with
      a larger rowcount, we should use 1.0 as the result, but we picked the
      larger rowcount instead.  (I think when I coded this, I recognized the
      conflict, but mistakenly thought that the logic would pick the desired
      count anyway.)
      
      Fixing this changed the plan for one existing regression test case.
      Since the point of that test is to exercise creation of a particular
      shape of nestloop plan, I tweaked the query a little bit so it still
      results in the same plan choice.
      
      This is definitely a bug, but I'm hesitant to back-patch since it might
      change plan choices unexpectedly, and anyway failure to implement a
      heuristic precisely as intended is a pretty low-grade bug.
      b746d0c3
    • Tom Lane's avatar
      Improve planner's cost estimation in the presence of semijoins. · b5572269
      Tom Lane authored
      If we have a semijoin, say
      	SELECT * FROM x WHERE x1 IN (SELECT y1 FROM y)
      and we're estimating the cost of a parameterized indexscan on x, the number
      of repetitions of the indexscan should not be taken as the size of y; it'll
      really only be the number of distinct values of y1, because the only valid
      plan with y on the outside of a nestloop would require y to be unique-ified
      before joining it to x.  Most of the time this doesn't make that much
      difference, but sometimes it can lead to drastically underestimating the
      cost of the indexscan and hence choosing a bad plan, as pointed out by
      David Kubečka.
      
      Fixing this is a bit difficult because parameterized indexscans are costed
      out quite early in the planning process, before we have the information
      that would be needed to call estimate_num_groups() and thereby estimate the
      number of distinct values of the join column(s).  However we can move the
      code that extracts a semijoin RHS's unique-ification columns, so that it's
      done in initsplan.c rather than on-the-fly in create_unique_path().  That
      shouldn't make any difference speed-wise and it's really a bit cleaner too.
      
      The other bit of information we need is the size of the semijoin RHS,
      which is easy if it's a single relation (we make those estimates before
      considering indexscan costs) but problematic if it's a join relation.
      The solution adopted here is just to use the product of the sizes of the
      join component rels.  That will generally be an overestimate, but since
      estimate_num_groups() only uses this input as a clamp, an overestimate
      shouldn't hurt us too badly.  In any case we don't allow this new logic
      to produce a value larger than we would have chosen before, so that at
      worst an overestimate leaves us no wiser than we were before.
      b5572269
  9. 11 Mar, 2015 9 commits
    • Peter Eisentraut's avatar
      ff2faeec
    • Alvaro Herrera's avatar
      Support default ACLs in get_object_address · 44643034
      Alvaro Herrera authored
      In the spirit of 890192e9, this time add support for the things
      living in the pg_default_acl catalog.  These are not really "objects",
      but they show up as such in event triggers.
      
      There is no "DROP DEFAULT PRIVILEGES" or similar command, so it doesn't
      look like the new representation given would be useful anywhere else, so
      I didn't try to use it outside objectaddress.c.  (That might be a bug in
      itself, but that would be material for another commit.)
      
      Reviewed by Stephen Frost.
      44643034
    • Alvaro Herrera's avatar
      Fix libpq test expected output file · d4d77775
      Alvaro Herrera authored
      Evidently, this test is not run very frequently ...
      d4d77775
    • Alvaro Herrera's avatar
      Support user mappings in get_object_address · 890192e9
      Alvaro Herrera authored
      Since commit 72dd233d we were trying to obtain object addressing
      information in sql_drop event triggers, but that caused failures when
      the drops involved user mappings.  This addition enables that to work
      again.  Naturally, pg_get_object_address can work with these objects
      now, too.
      
      I toyed with the idea of removing DropUserMappingStmt as a node and
      using DropStmt instead in the DropUserMappingStmt grammar production,
      but that didn't go very well: for one thing the messages thrown by the
      specific code are specialized (you get "server not found" if you specify
      the wrong server, instead of a generic "user mapping for ... not found"
      which you'd get it we were to merge this with RemoveObjects --- unless
      we added even more special cases).  For another thing, it would require
      to pass RoleSpec nodes through the objname/objargs representation used
      by RemoveObjects, which works in isolation, but gets messy when
      pg_get_object_address is involved.  So I dropped this part for now.
      
      Reviewed by Stephen Frost.
      890192e9
    • Peter Eisentraut's avatar
      PL/Python: Avoid lossiness in float conversion · 1ce7a57c
      Peter Eisentraut authored
      PL/Python uses str() to convert Python values back to PostgreSQL, but
      str() is lossy for float values, so use repr() instead in that case.
      
      Author: Marko Kreen <markokr@gmail.com>
      1ce7a57c
    • Robert Haas's avatar
      Require non-NULL pstate for all addRangeTableEntryFor* functions. · bc93ac12
      Robert Haas authored
      Per discussion, it's better to have a consistent coding rule here.
      
      Michael Paquier, per a node from Greg Stark referencing an old post
      from Tom Lane.
      bc93ac12
    • Tom Lane's avatar
      Make operator precedence follow the SQL standard more closely. · c6b3c939
      Tom Lane authored
      While the SQL standard is pretty vague on the overall topic of operator
      precedence (because it never presents a unified BNF for all expressions),
      it does seem reasonable to conclude from the spec for <boolean value
      expression> that OR has the lowest precedence, then AND, then NOT, then IS
      tests, then the six standard comparison operators, then everything else
      (since any non-boolean operator in a WHERE clause would need to be an
      argument of one of these).
      
      We were only sort of on board with that: most notably, while "<" ">" and
      "=" had properly low precedence, "<=" ">=" and "<>" were treated as generic
      operators and so had significantly higher precedence.  And "IS" tests were
      even higher precedence than those, which is very clearly wrong per spec.
      
      Another problem was that "foo NOT SOMETHING bar" constructs, such as
      "x NOT LIKE y", were treated inconsistently because of a bison
      implementation artifact: they had the documented precedence with respect
      to operators to their right, but behaved like NOT (i.e., very low priority)
      with respect to operators to their left.
      
      Fixing the precedence issues is just a small matter of rearranging the
      precedence declarations in gram.y, except for the NOT problem, which
      requires adding an additional lookahead case in base_yylex() so that we
      can attach a different token precedence to NOT LIKE and allied two-word
      operators.
      
      The bulk of this patch is not the bug fix per se, but adding logic to
      parse_expr.c to allow giving warnings if an expression has changed meaning
      because of these precedence changes.  These warnings are off by default
      and are enabled by the new GUC operator_precedence_warning.  It's believed
      that very few applications will be affected by these changes, but it was
      agreed that a warning mechanism is essential to help debug any that are.
      c6b3c939
    • Tom Lane's avatar
      Allocate ParamListInfo once per plpgsql function, not once per expression. · 21dcda27
      Tom Lane authored
      setup_param_list() was allocating a fresh ParamListInfo for each query or
      expression evaluation requested by a plpgsql function.  There was probably
      once good reason to do it like that, but for a long time we've had a
      convention that there's a one-to-one mapping between the function's
      PLpgSQL_datum array and the ParamListInfo slots, which means that a single
      ParamListInfo can serve all the function's evaluation requests: the data
      that would need to be passed is the same anyway.
      
      In this patch, we retain the pattern of zeroing out the ParamListInfo
      contents during each setup_param_list() call, because some of the slots may
      be stale and we don't know exactly which ones.  So this patch only saves a
      palloc/pfree per evaluation cycle and nothing more; still, that seems to be
      good for a couple percent overall speedup on simple-arithmetic type
      statements.  In future, though, we might be able to improve matters still
      more by managing the param array contents more carefully.
      
      Also, unify the former use of estate->cur_expr with that of
      paramLI->parserSetupArg; they both were used to point to the active
      expression, so we can combine the variables into just one.
      21dcda27
    • Robert Haas's avatar
      sepgsql: Improve error message when unsupported object type is labeled. · e96b7c6b
      Robert Haas authored
      KaiGai Kohei, reviewed by Álvaro Herrera and myself
      e96b7c6b