1. 10 Mar, 2017 19 commits
  2. 09 Mar, 2017 13 commits
  3. 08 Mar, 2017 8 commits
    • Tom Lane's avatar
      Bring plpgsql into line with header inclusion policy. · 08da5285
      Tom Lane authored
      We have a project policy that every .c file should start by including
      postgres.h, postgres_fe.h, or c.h as appropriate; and then there is no
      need for any .h file to explicitly include any of these.  (The core
      reason for this policy is to make it easy to verify that pg_config_os.h
      is included before any system headers such as <stdio.h>; without that,
      we have portability issues on some platforms due to variation in largefile
      options across different modules in the backend.  Also, if .h files were
      responsible for choosing which of these key headers to include, .h files
      that need to be includable in either frontend or backend compiles would be
      in trouble.)
      
      plpgsql was blithely ignoring this policy, so whack it upside the head
      until it complies.  I also chose to standardize on including plpgsql's
      own .h files after all core-system headers that it pulls in.  That
      could've been done either way, but this way seems saner.
      
      Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
      Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us
      08da5285
    • Tom Lane's avatar
      Document intentional violations of header inclusion policy. · d6b059ec
      Tom Lane authored
      Although there are good reasons for our policy of including postgres.h
      as the first #include in every .c file, never from .h files, there are
      two places where it seems expedient to violate the policy because the
      alternative is to modify externally-supplied .c files.  (In the case
      of the regexp library, the idea that it's externally-supplied is kind
      of at odds with reality, but I haven't entirely given up hope that it
      will become a standalone project some day.)  Add some comments to make
      it explicit that this is a policy violation and provide the reasoning.
      
      In passing, move #include "miscadmin.h" out of regcomp.c and into
      regcustom.h, which is where it should be if we're taking this reasoning
      seriously at all.
      
      Discussion: https://postgr.es/m/CAEepm=2zCoeq3QxVwhS5DFeUh=yU6z81pbWMgfOB8OzyiBwxzw@mail.gmail.com
      Discussion: https://postgr.es/m/11634.1488932128@sss.pgh.pa.us
      d6b059ec
    • Tom Lane's avatar
      Suppress compiler warning in slab.c. · 2f899e7d
      Tom Lane authored
      Compilers that don't realize that elog(ERROR) doesn't return
      complained that SlabRealloc() failed to return a value.
      
      While at it, fix the rather muddled header comment for the function.
      
      Per buildfarm.
      2f899e7d
    • Tom Lane's avatar
      Suppress compiler warning in non-USE_LIBXML builds. · f3791210
      Tom Lane authored
      Compilers that don't realize that ereport(ERROR) doesn't return
      complained that XmlTableGetValue() failed to return a value.
      
      Also, make XmlTableFetchRow's non-USE_LIBXML case look more like
      the other ones.  As coded, it could lead to "unreachable code"
      warnings with USE_LIBXML enabled.
      
      Oversights in commit fcec6caa.  Per buildfarm.
      f3791210
    • Tom Lane's avatar
      Put back <float.h> in a few files that need it for _isnan(). · 86dbbf20
      Tom Lane authored
      Further fallout from commit c29aff95: there are some files that need
      <float.h>, and were getting it from datatype/timestamp.h, but it was not
      apparent in my (tgl's) testing because the requirement for <float.h>
      exists only on certain Windows toolchains.
      
      Report and patch by David Rowley.
      
      Discussion: https://postgr.es/m/CAKJS1f-BHceaFzZScFapDV48gUVM2CAOBfhkgffdqXzFb+kwew@mail.gmail.com
      86dbbf20
    • Stephen Frost's avatar
      Expose explain's SUMMARY option · f9b1a0dd
      Stephen Frost authored
      This exposes the existing explain summary option to users to allow them
      to choose if they wish to have the planning time and totalled run time
      included in the EXPLAIN result.  The existing default behavior is
      retained if SUMMARY is not specified- running explain without analyze
      will not print the summary lines (just the planning time, currently)
      while running explain with analyze will include the summary lines (both
      the planning time and the totalled execution time).
      
      Users who wish to see the summary information for plain explain can now
      use: EXPLAIN (SUMMARY ON) query;  Users who do not want to have the
      summary printed for an analyze run can use:
      EXPLAIN (ANALYZE ON, SUMMARY OFF) query;
      
      With this, we can now also have EXPLAIN ANALYZE queries included in our
      regression tests by using:
      EXPLAIN (ANALYZE ON, TIMING OFF, SUMMARY off) query;
      
      I went ahead and added an example of this, which will hopefully not make
      the buildfarm complain.
      
      Author: Ashutosh Bapat
      Discussion: https://postgr.es/m/CAFjFpReE5z2h98U2Vuia8hcEkpRRwrauRjHmyE44hNv8-xk+XA@mail.gmail.com
      f9b1a0dd
    • Tom Lane's avatar
      Silence compiler warnings in BitmapHeapNext(). · 15d03e59
      Tom Lane authored
      Same disease as 270d7dd8.
      15d03e59
    • Tom Lane's avatar
      Use doubly-linked block lists in aset.c to reduce large-chunk overhead. · ff97741b
      Tom Lane authored
      Large chunks (those too large for any palloc freelist) are managed as
      separate blocks.  Formerly, realloc'ing or pfree'ing such a chunk required
      O(N) time in a context with N blocks, since we had to traipse down the
      singly-linked block list to locate the block's predecessor before we could
      fix the list links.  This can result in O(N^2) runtime in situations where
      large numbers of such chunks are manipulated within one context.  Cases
      like that were not foreseen in the original design of aset.c, and indeed
      didn't arise until fairly recently.  But such problems can now occur in
      reorderbuffer.c and in hash joining, both of which make repeated large
      requests without scaling up their request size as they do so, and which
      will free their requests in not-necessarily-LIFO order.
      
      To fix, change the block list from singly-linked to doubly-linked.
      This adds another 4 or 8 bytes to ALLOC_BLOCKHDRSZ, but that doesn't
      seem like unacceptable overhead, since aset.c's blocks are normally
      8K or more, and never less than 1K in current practice.
      
      In passing, get rid of some redundant AllocChunkGetPointer() calls in
      AllocSetRealloc (the compiler might be smart enough to optimize these
      away anyway, but no need to assume that) and improve AllocSetCheck's
      checking of block header fields.
      
      Back-patch to 9.4 where reorderbuffer.c appeared.  We could take this
      further back, but currently there's no evidence that it would be useful.
      
      Discussion: https://postgr.es/m/CAMkU=1x1hvue1XYrZoWk_omG0Ja5nBvTdvgrOeVkkeqs71CV8g@mail.gmail.com
      ff97741b