1. 27 Mar, 2017 20 commits
  2. 26 Mar, 2017 13 commits
    • Tom Lane's avatar
      Improve performance of ExecEvalWholeRowVar. · 2f0903ea
      Tom Lane authored
      In commit b8d7f053, we needed to fix ExecEvalWholeRowVar to not change
      the state of the slot it's copying.  The initial quick hack at that
      required two rounds of tuple construction, which is not very nice.
      To fix, add another primitive to tuptoaster.c that does precisely what
      we need.  (I initially tried to do this by refactoring one of the
      existing functions into two pieces; but it looked like that might hurt
      performance for the existing case, and the amount of code that could
      be shared is not very large, so I gave up on that.)
      
      Discussion: https://postgr.es/m/26088.1490315792@sss.pgh.pa.us
      2f0903ea
    • Peter Eisentraut's avatar
      Fix cpluspluscheck warning · 895f9370
      Peter Eisentraut authored
      Structure tag cannot be the same as a typedef that is a pointer to that
      struct.
      895f9370
    • Tom Lane's avatar
      Use ExecPrepareExpr in place of ExecPrepareCheck where appropriate. · 9b95f2fa
      Tom Lane authored
      Change one more place where ExecInitCheck/ExecPrepareCheck's insistence
      on getting implicit-AND-format quals wasn't really helpful, because the
      caller had to do make_ands_implicit() for no reason that it cared about.
      Using ExecPrepareExpr directly simplifies the code and saves cycles.
      
      The only remaining use of these functions is to process
      resultRelInfo->ri_PartitionCheck quals.  However, implicit-AND format
      does seem to be what we want for that, so leave it alone.
      9b95f2fa
    • Tom Lane's avatar
      Fix typos in logical replication support for initial data copy. · 5459cfd3
      Tom Lane authored
      Fix an incorrect assert condition (noted by Coverity), and spell the new
      name of the function correctly.  Typos introduced in commit 7c4f5240.
      
      Michael Paquier
      5459cfd3
    • Tom Lane's avatar
      Fix unportable disregard of alignment requirements in RADIUS code. · 4c051c41
      Tom Lane authored
      The compiler is entitled to store a char[] local variable with no
      particular alignment requirement.  Our RADIUS code cavalierly took such
      a local variable and cast its address to a struct type that does have
      alignment requirements.  On an alignment-picky machine this would lead
      to bus errors.  To fix, declare the local variable honestly, and then
      cast its address to char * for use in the I/O calls.
      
      Given the lack of field complaints, there must be very few if any
      people affected; but nonetheless this is a clear portability issue,
      so back-patch to all supported branches.
      
      Noted while looking at a Coverity complaint in the same code.
      4c051c41
    • Tom Lane's avatar
      Fix some minor resource leaks in PerformRadiusTransaction(). · 7cbd9446
      Tom Lane authored
      Failure to free serveraddrs pointed out by Coverity, failure to close
      socket noted by code-reading.  These bugs seem to be quite old, but
      given the low probability of taking these error-exit paths and the
      minimal consequences of the leaks (since the process would presumably
      exit shortly anyway), it doesn't seem worth back-patching.
      
      Michael Paquier and Tom Lane
      7cbd9446
    • Tom Lane's avatar
      Improve implementation of EEOP_BOOLTEST_* opcodes. · d77f014e
      Tom Lane authored
      Both Andres and I were happy with "*op->resvalue = *op->resvalue;",
      but Coverity isn't; and it has a point, because some compilers might
      not be smart enough to elide that.  So remove it.  In passing, also
      avoid doing unnecessary assignments to *op->resnull when it's already
      known to have the right value.
      d77f014e
    • Peter Eisentraut's avatar
      doc: Fix oldhtml/old PDF build · e259e1f7
      Peter Eisentraut authored
      "xref to REFSECT1 unsupported" with the DSSSL stylesheets.
      Reported-by: default avatarDevrim Gündüz <devrim@gunduz.org>
      e259e1f7
    • Peter Eisentraut's avatar
      doc: Clean up bibliography rendering for XSLT · d6376245
      Peter Eisentraut authored
      In the DSSSL stylesheets, we had an extensive customization of the
      bibliography rendering.  Since the bibliography isn't that used much, it
      doesn't seem worth doing an elaborate porting of that to XSLT.  So this
      just moves some things around, removes some unused things, and does some
      minimal XSLT stylesheet customizations to make things look clean.
      d6376245
    • Tom Lane's avatar
      Update some obsolete comments. · 244dd95c
      Tom Lane authored
      Fix a few stray references to expression eval functions that don't
      exist anymore or don't take the same input representation they used to.
      244dd95c
    • Alvaro Herrera's avatar
      Add missing break · 6a101b0a
      Alvaro Herrera authored
      Noticed by Coverity
      6a101b0a
    • Andres Freund's avatar
      Blindly attempt to fix sepgsql tests #2. · d253b0f6
      Andres Freund authored
      d253b0f6
    • Andres Freund's avatar
      Blindly attempt to fix sepgsql tests. · 83bbcb04
      Andres Freund authored
      Due to b8d7f053 some permission checks are now happening even on
      empty tables, and some of the checks move around.
      
      Discussion: https://postgr.es/m/95bdb608-093c-160f-c6be-983a36ccd7f9@joeconway.com
      83bbcb04
  3. 25 Mar, 2017 7 commits
    • Andres Freund's avatar
      Remove unreachable code in expression evaluation. · ad46a2aa
      Andres Freund authored
      The previous code still contained expression evaluation time support
      for CaseExprs without a defresult.  But transformCaseExpr() creates a
      default expression if necessary.
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/4834.1490480275@sss.pgh.pa.us
      ad46a2aa
    • Tom Lane's avatar
      git rm execQual.c · 8acf08c6
      Tom Lane authored
      Should have been in commit b8d7f053,
      but passing the patch back and forth as a patch seems to have dropped
      that metadata.
      8acf08c6
    • Andres Freund's avatar
      Faster expression evaluation and targetlist projection. · b8d7f053
      Andres Freund authored
      This replaces the old, recursive tree-walk based evaluation, with
      non-recursive, opcode dispatch based, expression evaluation.
      Projection is now implemented as part of expression evaluation.
      
      This both leads to significant performance improvements, and makes
      future just-in-time compilation of expressions easier.
      
      The speed gains primarily come from:
      - non-recursive implementation reduces stack usage / overhead
      - simple sub-expressions are implemented with a single jump, without
        function calls
      - sharing some state between different sub-expressions
      - reduced amount of indirect/hard to predict memory accesses by laying
        out operation metadata sequentially; including the avoidance of
        nearly all of the previously used linked lists
      - more code has been moved to expression initialization, avoiding
        constant re-checks at evaluation time
      
      Future just-in-time compilation (JIT) has become easier, as
      demonstrated by released patches intended to be merged in a later
      release, for primarily two reasons: Firstly, due to a stricter split
      between expression initialization and evaluation, less code has to be
      handled by the JIT. Secondly, due to the non-recursive nature of the
      generated "instructions", less performance-critical code-paths can
      easily be shared between interpreted and compiled evaluation.
      
      The new framework allows for significant future optimizations. E.g.:
      - basic infrastructure for to later reduce the per executor-startup
        overhead of expression evaluation, by caching state in prepared
        statements.  That'd be helpful in OLTPish scenarios where
        initialization overhead is measurable.
      - optimizing the generated "code". A number of proposals for potential
        work has already been made.
      - optimizing the interpreter. Similarly a number of proposals have
        been made here too.
      
      The move of logic into the expression initialization step leads to some
      backward-incompatible changes:
      - Function permission checks are now done during expression
        initialization, whereas previously they were done during
        execution. In edge cases this can lead to errors being raised that
        previously wouldn't have been, e.g. a NULL array being coerced to a
        different array type previously didn't perform checks.
      - The set of domain constraints to be checked, is now evaluated once
        during expression initialization, previously it was re-built
        every time a domain check was evaluated. For normal queries this
        doesn't change much, but e.g. for plpgsql functions, which caches
        ExprStates, the old set could stick around longer.  The behavior
        around might still change.
      
      Author: Andres Freund, with significant changes by Tom Lane,
      	changes by Heikki Linnakangas
      Reviewed-By: Tom Lane, Heikki Linnakangas
      Discussion: https://postgr.es/m/20161206034955.bh33paeralxbtluv@alap3.anarazel.de
      b8d7f053
    • Tom Lane's avatar
      Re-adhere to policy of no more than 20 tests per parallel group. · 7d3957e5
      Tom Lane authored
      As explained at the head of parallel_schedule, we place an arbitrary limit
      of 20 test cases per parallel group.  Commit c7a9fa39 overlooked this.
      
      Least messy solution seems to be to move the "comments" test to the next
      group, since it doesn't really belong in a group of datatype tests anyway.
      7d3957e5
    • Tom Lane's avatar
      Remember to drop roles created by regression tests. · 2cdc1389
      Tom Lane authored
      Commit e3920ac8 created "regress_subscription_user2" in subscription.sql,
      but forgot to drop it, causing the regression tests to fail if run twice
      without re-initdb'ing.
      2cdc1389
    • Peter Eisentraut's avatar
      Add cleanup to new test cases · cf366e97
      Peter Eisentraut authored
      cf366e97
    • Simon Riggs's avatar
      Report catalog_xmin separately in hot_standby_feedback · 5737c12d
      Simon Riggs authored
      If the upstream walsender is using a physical replication slot, store the
      catalog_xmin in the slot's catalog_xmin field. If the upstream doesn't use a
      slot and has only a PGPROC entry behaviour doesn't change, as we store the
      combined xmin and catalog_xmin in the PGPROC entry.
      
      Author: Craig Ringer
      5737c12d