1. 18 Jun, 2020 6 commits
    • Andres Freund's avatar
      Add basic spinlock tests to regression tests. · 3b37a6de
      Andres Freund authored
      As s_lock_test, the already existing test for spinlocks, isn't run in
      an automated fashion (and doesn't test a normal backend environment),
      adding tests that are run as part of a normal regression run is a good
      idea. Particularly in light of several recent and upcoming spinlock
      related fixes.
      
      Currently the new tests are run as part of the pre-existing
      test_atomic_ops() test. That perhaps can be quibbled about, but for
      now seems ok.
      
      The only operations that s_lock_test tests but the new tests don't are
      the detection of a stuck spinlock and S_LOCK_FREE (which is otherwise
      unused, not implemented on all platforms, and will be removed).
      
      This currently contains a test for more than INT_MAX spinlocks (only
      run with --disable-spinlocks), to ensure the recent commit fixing a
      bug with more than INT_MAX spinlock initializations is correct. That
      test is somewhat slow, so we might want to disable it after a few
      days.
      
      It might be worth retiring s_lock_test after this. The added coverage
      of a stuck spinlock probably isn't worth the added complexity?
      
      Author: Andres Freund
      Discussion: https://postgr.es/m/20200606023103.avzrctgv7476xj7i@alap3.anarazel.de
      3b37a6de
    • Tom Lane's avatar
      Doc: document POSIX-style time zone specifications in full. · a3235a53
      Tom Lane authored
      We'd glossed over most of this complexity for years, but it's hard
      to avoid writing it all down now, so that we can explain what happens
      when there's no "posixrules" file in the IANA time zone database.
      That was at best a tiny minority situation till now, but it's likely
      to become quite common in the future, so we'd better explain it.
      
      Nonetheless, we don't really encourage people to use POSIX zone specs;
      picking a named zone is almost always what you really want, unless
      perhaps you're stuck with an out-of-date zone database.  Therefore,
      let's shove all this detail into an appendix.
      
      Patch by me; thanks to Robert Haas for help with some awkward wording.
      
      Discussion: https://postgr.es/m/1390.1562258309@sss.pgh.pa.us
      a3235a53
    • Michael Paquier's avatar
      Fix oldest xmin and LSN computation across repslots after advancing · b48df818
      Michael Paquier authored
      Advancing a replication slot did not recompute the oldest xmin and LSN
      values across replication slots, preventing resource removal like
      segments not recycled at checkpoint time.  The original commit that
      introduced the slot advancing in 9c7d06d6 never did the update of those
      oldest values, and b0afdcad removed this code.
      
      This commit adds a TAP test to check segment recycling with advancing
      for physical slots, enforcing an extra segment switch before advancing
      to check if the segment gets correctly recycled after a checkpoint.
      
      Reported-by: Andres Freund
      Reviewed-by: Alexey Kondratov, Kyptaro Horiguchi
      Discussion: https://postgr.es/m/20200609171904.kpltxxvjzislidks@alap3.anarazel.de
      Backpatch-through: 11
      b48df818
    • Peter Eisentraut's avatar
      Disallow factorial of negative numbers · 0a40563e
      Peter Eisentraut authored
      The previous implementation returned 1 for all negative numbers, which
      is not sensible under any definition.
      
      Discussion: https://www.postgresql.org/message-id/flat/6ce1df0e-86a3-e544-743a-f357ff663f68%402ndquadrant.com
      0a40563e
    • Peter Eisentraut's avatar
      Expand tests for factorial · 9d402c73
      Peter Eisentraut authored
      Move from int4 to numeric test.  (They were originally int4 functions,
      but were reimplemented for numeric in
      04a4821a.)  Add some tests for edge
      cases.
      
      Discussion: https://www.postgresql.org/message-id/flat/6ce1df0e-86a3-e544-743a-f357ff663f68%402ndquadrant.com
      9d402c73
    • Michael Paquier's avatar
      Remove reset of testtablespace from pg_regress on Windows · 2b2a070d
      Michael Paquier authored
      testtablespace is an extra path used as tablespace location in the main
      regression test suite, computed from --outputdir as defined by the
      caller of pg_regress (current directory if undefined).
      
      This special handling was introduced as of f10589e5 to be specific to
      MSVC, as we let pg_regress' Makefile handle this cleanup in other
      environments.  This moves the cleanup to the MSVC script running
      regression tests instead where needed: check, installcheck and
      upgradecheck.  I have also checked this patch on MSVC with repeated runs
      of each target.
      
      Author: Kyotaro Horiguchi, Michael Paquier
      Discussion: https://postgr.es/m/20200219.142519.437573253063431435.horikyota.ntt@gmail.com
      2b2a070d
  2. 17 Jun, 2020 8 commits
  3. 16 Jun, 2020 9 commits
  4. 15 Jun, 2020 8 commits
  5. 14 Jun, 2020 3 commits
    • Tom Lane's avatar
      Fix behavior of exp() and power() for infinity inputs. · decbe2bf
      Tom Lane authored
      Previously, these functions tended to throw underflow errors for
      negative-infinity exponents.  The correct thing per POSIX is to
      return 0, so let's do that instead.  (Note that the SQL standard
      is silent on such issues, as it lacks the concepts of either Inf
      or NaN; so our practice is to follow POSIX whenever a corresponding
      C-library function exists.)
      
      Also, add a bunch of test cases verifying that exp() and power()
      actually do follow POSIX for Inf and NaN inputs.  While this patch
      should guarantee that exp() passes the tests, power() will not unless
      the platform's pow(3) is fully POSIX-compliant.  I already know that
      gaur fails some of the tests, and I am suspicious that the Windows
      animals will too; the extent of compliance of other old platforms
      remains to be seen.  We might choose to drop failing test cases, or
      to work harder at overriding pow(3) for these cases, but first let's
      see just how good or bad the situation is.
      
      Discussion: https://postgr.es/m/582552.1591917752@sss.pgh.pa.us
      decbe2bf
    • Peter Eisentraut's avatar
      Add test coverage for EXTRACT() · 378badc8
      Peter Eisentraut authored
      The variants for time and timetz had zero test coverage, the variant
      for interval only very little.  This adds practically full coverage
      for those functions.
      Reviewed-by: default avatarVik Fearing <vik@postgresfriends.org>
      Reviewed-by: default avatarTom Lane <tgl@sss.pgh.pa.us>
      Discussion: https://www.postgresql.org/message-id/flat/c3306ac7-fcae-a1b8-1e30-6a379d605bcb%402ndquadrant.com
      378badc8
    • Michael Paquier's avatar
      Replace superuser check by ACLs for replication origin functions · cc072641
      Michael Paquier authored
      This patch removes the hardcoded check for superuser privileges when
      executing replication origin functions.  Instead, execution is revoked
      from public, meaning that those functions can be executed by a superuser
      and that access to them can be granted.
      
      Author: Martín Marqués
      Reviewed-by: Kyotaro Horiguchi, Michael Paquier, Masahiko Sawada
      Discussion: https:/postgr.es/m/CAPdiE1xJMZOKQL3dgHMUrPqysZkgwzSMXETfKkHYnBAB7-0VRQ@mail.gmail.com
      cc072641
  6. 13 Jun, 2020 6 commits
    • Tom Lane's avatar
      Sync behavior of var_samp and stddev_samp for single NaN inputs. · 23cbeda5
      Tom Lane authored
      var_samp(numeric) and stddev_samp(numeric) disagreed with their float
      cousins about what to do for a single non-null input value that is NaN.
      The float versions return NULL on the grounds that the calculation is
      only defined for more than one non-null input, which seems like the
      right answer.  But the numeric versions returned NaN, as a result of
      dealing with edge cases in the wrong order.  Fix that.  The patch
      also gets rid of an insignificant memory leak in such cases.
      
      This inconsistency is of long standing, but on the whole it seems best
      not to back-patch the change into stable branches; nobody's complained
      and it's such an obscure point that nobody's likely to complain.
      (Note that v13 and v12 now contain test cases that will notice if we
      accidentally back-patch this behavior change in future.)
      
      Report and patch by me; thanks to Dean Rasheed for review.
      
      Discussion: https://postgr.es/m/353062.1591898766@sss.pgh.pa.us
      23cbeda5
    • Tom Lane's avatar
      Fix behavior of float aggregates for single Inf or NaN inputs. · 03109a53
      Tom Lane authored
      When there is just one non-null input value, and it is infinity or NaN,
      aggregates such as stddev_pop and covar_pop should produce a NaN
      result, because the calculation is not well-defined.  They used to do
      so, but since we adopted Youngs-Cramer aggregation in commit e954a727,
      they produced zero instead.  That's an oversight, so fix it.  Add tests
      exercising these edge cases.
      
      Affected aggregates are
      
       var_pop(double precision)
       stddev_pop(double precision)
       var_pop(real)
       stddev_pop(real)
       regr_sxx(double precision,double precision)
       regr_syy(double precision,double precision)
       regr_sxy(double precision,double precision)
       regr_r2(double precision,double precision)
       regr_slope(double precision,double precision)
       regr_intercept(double precision,double precision)
       covar_pop(double precision,double precision)
       corr(double precision,double precision)
      
      Back-patch to v12 where the behavior change was accidentally introduced.
      
      Report and patch by me; thanks to Dean Rasheed for review.
      
      Discussion: https://postgr.es/m/353062.1591898766@sss.pgh.pa.us
      03109a53
    • Peter Geoghegan's avatar
      Silence _bt_check_unique compiler warning. · d64f1cdf
      Peter Geoghegan authored
      Reported-By: Tom Lane
      Discussion: https://postgr.es/m/841649.1592065060@sss.pgh.pa.us
      d64f1cdf
    • Peter Eisentraut's avatar
      Refactor AlterExtensionContentsStmt grammar · 8f5b5967
      Peter Eisentraut authored
      Make use of the general object support already used by COMMENT, DROP,
      and SECURITY LABEL.
      
      Discussion: https://www.postgresql.org/message-id/flat/163c00a5-f634-ca52-fc7c-0e53deda8735%402ndquadrant.com
      8f5b5967
    • Peter Eisentraut's avatar
      Grammar object type refactoring · a332b366
      Peter Eisentraut authored
      Unify the grammar of COMMENT, DROP, and SECURITY LABEL further.  They
      all effectively just take an object address for later processing, so
      we can make the grammar more generalized.  Some extra checking about
      which object types are supported can be done later in the statement
      execution.
      
      Discussion: https://www.postgresql.org/message-id/flat/163c00a5-f634-ca52-fc7c-0e53deda8735%402ndquadrant.com
      a332b366
    • Michael Paquier's avatar
      Create by default sql/ and expected/ for output directory in pg_regress · e78900af
      Michael Paquier authored
      Using --outputdir with a custom output repository has never created by
      default the sql/ and expected/ paths generated with contents from
      respectively input/ and output/ if they don't exist, while the base
      output directory gets created if it does not exist.  If sql/ and
      expected/ are not present, pg_regress would fail with the path missing,
      requiring test scripts to create those extra paths by themselves.  This
      commit changes pg_regress so as both get created by default if they do
      not exist, removing the need for external test scripts to do so.
      
      This cleans up two code paths in the tree for pg_upgrade tests in MSVC
      and environments able to use test.sh.  sql/ and expected/ were created
      as part of each test script, but this is not needed anymore as
      pg_regress handles the work now.
      
      Author: Roman Zharkov, Daniel Gustafsson
      Reviewed-by: Michael Paquier, Tom Lane
      Discussion: https://postgr.es/m/16484-4d89e9cc11241996@postgresql.org
      e78900af