1. 16 Oct, 2017 3 commits
  2. 15 Oct, 2017 2 commits
    • Tom Lane's avatar
      Restore nodeAgg.c's ability to check for improperly-nested aggregates. · 5fc438fb
      Tom Lane authored
      While poking around in the aggregate logic, I noticed that commit
      8ed3f11b broke the logic in nodeAgg.c that purports to detect nested
      aggregates, by moving initialization of regular aggregate argument
      expressions out of the code segment that checks for that.
      
      You could argue that this check is unnecessary, but it's not much code
      so I'm inclined to keep it as a backstop against parser and planner
      bugs.  However, there's certainly zero value in checking only some of
      the subexpressions.
      
      We can make the check complete again, and as a bonus make it a good
      deal more bulletproof against future mistakes of the same ilk, by
      moving it out to the outermost level of ExecInitAgg.  This means we
      need to check only once per Agg node not once per aggregate, which
      also seems like a good thing --- if the check does find something
      wrong, it's not urgent that we report it before the plan node
      initialization finishes.
      
      Since this requires remembering the original length of the aggs list,
      I deleted a long-obsolete stanza that changed numaggs from 0 to 1.
      That's so old it predates our decision that palloc(0) is a valid
      operation, in (digs...) 2004, see commit 24a1e20f.
      
      In passing improve a few comments.
      
      Back-patch to v10, just in case.
      5fc438fb
    • Peter Eisentraut's avatar
      doc: Postgres -> PostgreSQL · d8794fd7
      Peter Eisentraut authored
      d8794fd7
  3. 14 Oct, 2017 3 commits
    • Tom Lane's avatar
      gcc's support for __attribute__((noinline)) hasn't been around forever. · 82aff8d3
      Tom Lane authored
      Buildfarm member gaur says it wasn't there in 2.95.3.  Guess that 3.0
      and later have it.
      82aff8d3
    • Tom Lane's avatar
      Explicitly track whether aggregate final functions modify transition state. · 4de2d4fb
      Tom Lane authored
      Up to now, there's been hard-wired assumptions that normal aggregates'
      final functions never modify their transition states, while ordered-set
      aggregates' final functions always do.  This has always been a bit
      limiting, and in particular it's getting in the way of improving the
      built-in ordered-set aggregates to allow merging of transition states.
      Therefore, let's introduce catalog and CREATE AGGREGATE infrastructure
      that lets the finalfn's behavior be declared explicitly.
      
      There are now three possibilities for the finalfn behavior: it's purely
      read-only, it trashes the transition state irrecoverably, or it changes
      the state in such a way that no more transfn calls are possible but the
      state can still be passed to other, compatible finalfns.  There are no
      examples of this third case today, but we'll shortly make the built-in
      OSAs act like that.
      
      This change allows user-defined aggregates to explicitly disclaim support
      for use as window functions, and/or to prevent transition state merging,
      if their implementations cannot handle that.  While it was previously
      possible to handle the window case with a run-time error check, there was
      not any way to prevent transition state merging, which in retrospect is
      something commit 804163bc should have provided for.  But better late
      than never.
      
      In passing, split out pg_aggregate.c's extern function declarations into
      a new header file pg_aggregate_fn.h, similarly to what we've done for
      some other catalog headers, so that pg_aggregate.h itself can be safe
      for frontend files to include.  This lets pg_dump use the symbolic
      names for relevant constants.
      
      Discussion: https://postgr.es/m/4834.1507849699@sss.pgh.pa.us
      4de2d4fb
    • Peter Eisentraut's avatar
      Reinstate genhtml --prefix option for non-vpath builds · 5f340cb3
      Peter Eisentraut authored
      In c3d9a660, the genhtml --prefix option
      was removed to get slightly better behavior for vpath builds.  genhtml
      would then automatically pick a suitable prefix.  However, for non-vpath
      builds, this makes the coverage output dependent on the length of the
      path where the source code happens to be, leading to confusingly
      arbitrary results.  So put the --prefix option back for non-vpath
      builds.
      5f340cb3
  4. 13 Oct, 2017 10 commits
    • Joe Conway's avatar
      Add missing options to pg_regress help() output · b81eba6a
      Joe Conway authored
      A few command line options accepted by pg_regress were not being output
      by help(), including --help itself. Add that one, as well as --version
      and --bindir, and the corresponding short options for the first two.
      
      We could consider this for backpatching, but it did not seem worthwhile
      and no one else advocated for it, so apply only to master for now.
      
      Author: Joe Conway
      Reviewed-By: Tom Lane
      Discussion: https://postgr.es/m/dd519469-06d7-2662-83ef-c926f6c4f0f1%40joeconway.com
      b81eba6a
    • Andres Freund's avatar
      Improve sys/catcache performance. · 141fd1b6
      Andres Freund authored
      The following are the individual improvements:
      1) Avoidance of FunctionCallInfo based function calls, replaced by
         more efficient functions with a native C argument interface.
      2) Don't extract columns from a cache entry's tuple whenever matching
         entries - instead store them as a Datum array. This also allows to
         get rid of having to build dummy tuples for negative & list
         entries, and of a hack for dealing with cstring vs. text weirdness.
      3) Reorder members of catcache.h struct, so imortant entries are more
         likely to be on one cacheline.
      4) Allowing the compiler to specialize critical SearchCatCache for a
         specific number of attributes allows to unroll loops and avoid
         other nkeys dependant initialization.
      5) Only initializing the ScanKey when necessary, i.e. catcache misses,
         greatly reduces cache unnecessary cpu cache misses.
      6) Split of the cache-miss case from the hash lookup, reducing stack
         allocations etc in the common case.
      7) CatCTup and their corresponding heaptuple are allocated in one
         piece.
      
      This results in making cache lookups themselves roughly three times as
      fast - full-system benchmarks obviously improve less than that.
      
      I've also evaluated further techniques:
      - replace open coded hash with simplehash - the list walk right now
        shows up in profiles. Unfortunately it's not easy to do so safely as
        an entry's memory location can change at various times, which
        doesn't work well with the refcounting and cache invalidation.
      - Cacheline-aligning CatCTup entries - helps some with performance,
        but the win isn't big and the code for it is ugly, because the
        tuples have to be freed as well.
      - add more proper functions, rather than macros for
        SearchSysCacheCopyN etc., but right now they don't show up in
        profiles.
      
      The reason the macro wrapper for syscache.c/h have to be changed,
      rather than just catcache, is that doing otherwise would require
      exposing the SysCache array to the outside.  That might be a good idea
      anyway, but it's for another day.
      
      Author: Andres Freund
      Reviewed-By: Robert Haas
      Discussion: https://postgr.es/m/20170914061207.zxotvyopetm7lrrp@alap3.anarazel.de
      141fd1b6
    • Andres Freund's avatar
      Add pg_noinline macro to c.h. · a0247e7a
      Andres Freund authored
      Forcing a function not to be inlined can be useful if it's the
      slow-path of a performance critical function, or should be visible in
      profiles to allow for proper cost attribution.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20170914061207.zxotvyopetm7lrrp@alap3.anarazel.de
      a0247e7a
    • Andres Freund's avatar
      Force "restrict" not to be used when compiling with xlc. · d133982d
      Andres Freund authored
      Per buildfarm animal Hornet and followup manual testing by Noah Misch,
      it appears xlc miscompiles code using "restrict" in at least some
      cases. Allow disabling restrict usage with FORCE_DISABLE_RESTRICT=yes
      in template files, and do so for aix/xlc.
      
      Author: Andres Freund and Tom Lane
      Discussion: https://postgr.es/m/1820.1507918762@sss.pgh.pa.us
      d133982d
    • Robert Haas's avatar
      Fix possible crash with Parallel Bitmap Heap Scan. · 6393613b
      Robert Haas authored
      If a Parallel Bitmap Heap scan's chain of leftmost descendents
      includes a BitmapOr whose first child is a BitmapAnd, the prior coding
      would mistakenly create a non-shared TIDBitmap and then try to perform
      shared iteration.
      
      Report by Tomas Vondra.  Patch by Dilip Kumar.
      
      Discussion: http://postgr.es/m/50e89684-8ad9-dead-8767-c9545bafd3b6@2ndquadrant.com
      6393613b
    • Tom Lane's avatar
      Improve implementation of CRE-stack-flattening in map_variable_attnos(). · 73937119
      Tom Lane authored
      I (tgl) objected to the obscure implementation introduced in commit
      1c497fa7.  This one seems a bit less action-at-a-distance-y, at the
      price of repeating a few lines of code.
      
      Improve the comments about what the function is doing, too.
      
      Amit Khandekar, whacked around a bit more by me
      
      Discussion: https://postgr.es/m/CAJ3gD9egYTyHUH0nTMxm8-1m3RvdqEbaTyGC-CUNtYf7tKNDaQ@mail.gmail.com
      73937119
    • Tom Lane's avatar
      Rely on sizeof(typename) rather than sizeof(variable) in pqformat.h. · 5229db6c
      Tom Lane authored
      In each of the pq_writeintN functions, the three uses of sizeof() should
      surely all be consistent.  I started out to make them all sizeof(ni),
      but on reflection let's make them sizeof(typename) instead.  That's more
      like our usual style elsewhere, and it's just barely possible that the
      failures buildfarm member hornet has shown since 4c119fbc went in are
      caused by the compiler getting confused about sizeof() a parameter that
      it's optimizing away.
      
      In passing, improve a couple of comments.
      
      Discussion: https://postgr.es/m/E1e2RML-0002do-Lc@gemulon.postgresql.org
      5229db6c
    • Peter Eisentraut's avatar
      Attempt to fix LDAP build · 7d1b8e75
      Peter Eisentraut authored
      Apparently, an older spelling of LDAP_OPT_DIAGNOSTIC_MESSAGE is
      LDAP_OPT_ERROR_STRING, so fall back to that one.
      7d1b8e75
    • Peter Eisentraut's avatar
      Log diagnostic messages if errors occur during LDAP auth. · cf1238cd
      Peter Eisentraut authored
      Diagnostic messages seem likely to help users diagnose root
      causes more easily, so let's report them as errdetail.
      
      Author: Thomas Munro
      Reviewed-By: Ashutosh Bapat, Christoph Berg, Alvaro Herrera, Peter Eisentraut
      Discussion: https://postgr.es/m/CAEepm=2_dA-SYpFdmNVwvKsEBXOUj=K4ooKovHmvj6jnMdt8dw@mail.gmail.com
      cf1238cd
    • Peter Eisentraut's avatar
      Improve LDAP cleanup code in error paths. · 1feff99f
      Peter Eisentraut authored
      After calling ldap_unbind_s() we probably shouldn't try to use the LDAP
      connection again to call ldap_get_option(), even if it failed.  The OpenLDAP
      man page for ldap_unbind[_s] says "Once it is called, the connection to the
      LDAP server is closed, and the ld structure is invalid."  Otherwise, as a
      general rule we should probably call ldap_unbind() before returning in all
      paths to avoid leaking resources.  It is unlikely there is any practical
      leak problem since failure to authenticate currently results in the backend
      exiting soon afterwards.
      
      Author: Thomas Munro
      Reviewed-By: Alvaro Herrera, Peter Eisentraut
      Discussion: https://postgr.es/m/20170914141205.eup4kxzlkagtmfac%40alvherre.pgsql
      1feff99f
  5. 12 Oct, 2017 13 commits
  6. 11 Oct, 2017 9 commits