Skip to content
Snippets Groups Projects
  1. Nov 29, 2016
    • Tom Lane's avatar
      Test all contrib-created operator classes with amvalidate. · ade49c60
      Tom Lane authored
      I'd supposed that people would do this manually when creating new operator
      classes, but the folly of that was exposed today.  The tests seem fast
      enough that we can just apply them during the normal regression tests.
      
      contrib/isn fails the checks for lack of complete sets of cross-type
      operators.  That's a nice-to-have policy rather than a functional
      requirement, so leave it as-is, but insert ORDER BY in the query to
      ensure consistent cross-platform output.
      
      Discussion: https://postgr.es/m/7076.1480446837@sss.pgh.pa.us
      ade49c60
  2. Nov 07, 2016
  3. Nov 05, 2016
    • Tom Lane's avatar
      Provide DLLEXPORT markers for C functions via PG_FUNCTION_INFO_V1 macro. · c8ead2a3
      Tom Lane authored
      Second try at the change originally made in commit 8518583c;
      this time with contrib updates so that manual extern declarations
      are also marked with PGDLLEXPORT.  The release notes should point
      this out as a significant source-code change for extension authors,
      since they'll have to make similar additions to avoid trouble on Windows.
      
      Laurenz Albe, doc change by me
      
      Patch: <A737B7A37273E048B164557ADEF4A58B53962ED8@ntex2010a.host.magwien.gv.at>
      c8ead2a3
  4. Jun 14, 2016
    • Robert Haas's avatar
      Update extensions with GIN/GIST support for parallel query. · 2910fc82
      Robert Haas authored
      Commit 749a787c bumped the extension
      version on all of these extensions already, and we haven't had a
      release since then, so we can make further changes without bumping the
      extension version again.  Take this opportunity to mark all of the
      functions exported by these modules PARALLEL SAFE -- except for
      pg_trgm's set_limit().  Mark that one PARALLEL RESTRICTED, because it
      makes a persistent change to a GUC value.
      
      Note that some of the markings added by this commit don't have any
      effect; for example, gseg_picksplit() isn't likely to be mentioned
      explicitly in a query and therefore it's parallel-safety marking will
      never be consulted.  But this commit just marks everything for
      consistency: if it were somehow used in a query, that would be fine as
      far as parallel query is concerned, since it does not consult any
      backend-private state, attempt to write data, etc.
      
      Andreas Karlsson, with a few revisions by me.
      2910fc82
  5. Jun 09, 2016
    • Tom Lane's avatar
      Handle contrib's GIN/GIST support function signature changes honestly. · 749a787c
      Tom Lane authored
      In commits 9ff60273 and dbe23289 I (tgl) fixed the
      signatures of a bunch of contrib's GIN and GIST support functions so that
      they would pass validation by the recently-added amvalidate functions.
      The backend does not actually consult or check those signatures otherwise,
      so I figured this was basically cosmetic and did not require an extension
      version bump.  However, Alexander Korotkov pointed out that that would
      leave us in a pretty messy situation if we ever wanted to redefine those
      functions later, because there wouldn't be a unique way to name them.
      Since we're going to be bumping these extensions' versions anyway for
      parallel-query cleanups, let's take care of this now.
      
      Andreas Karlsson, adjusted for more search-path-safety by me
      749a787c
  6. Feb 03, 2016
    • Tom Lane's avatar
      Make hstore_to_jsonb_loose match hstore_to_json_loose on what's a number. · 41d2c081
      Tom Lane authored
      Commit e09996ff removed some ad-hoc code in hstore_to_json_loose
      that determined whether an hstore value string looked like a number,
      in favor of calling the JSON parser's is-it-a-number code.  However,
      it neglected the fact that the exact same code appeared in
      hstore_to_jsonb_loose.
      
      This is not a bug, exactly, because the requirements on the two functions
      are not the same: hstore_to_json_loose must accept only syntactically legal
      JSON numbers as numbers, or it will produce invalid JSON output, as per bug
      #12070 which spawned the prior commit.  But hstore_to_jsonb_loose could
      accept anything that numeric_in will eat, other than Inf and NaN.
      
      Nonetheless it seems surprising and arbitrary that the two functions don't
      use the same rules for what is a number versus what is a string; especially
      since they did use the same rules before the aforesaid commit.  For one
      thing, that means that doing hstore_to_json_loose and then casting to jsonb
      can produce results different from doing just hstore_to_jsonb_loose.
      
      Hence, change hstore_to_jsonb_loose's logic to match hstore_to_json_loose,
      ie, hstore values are treated as numbers when they match the JSON syntax
      for numbers.
      
      No back-patch, since this is more in the nature of a definitional change
      than a bug fix.
      41d2c081
    • Tom Lane's avatar
      Fix IsValidJsonNumber() to notice trailing non-alphanumeric garbage. · e6ecc93a
      Tom Lane authored
      Commit e09996ff was one brick shy of a load: it didn't insist
      that the detected JSON number be the whole of the supplied string.
      This allowed inputs such as "2016-01-01" to be misdetected as valid JSON
      numbers.  Per bug #13906 from Dmitry Ryabov.
      
      In passing, be more wary of zero-length input (I'm not sure this can
      happen given current callers, but better safe than sorry), and do some
      minor cosmetic cleanup.
      e6ecc93a
  7. Jan 20, 2016
    • Tom Lane's avatar
      Fix assorted inconsistencies in GIN opclass support function declarations. · dbe23289
      Tom Lane authored
      GIN had some minor issues too, mostly using "internal" where something
      else would be more appropriate.  I went with the same approach as in
      9ff60273, namely preferring the opclass' indexed datatype for
      arguments that receive an operator RHS value, even if that's not
      necessarily what they really are.
      
      Again, this is with an eye to having a uniform rule for ginvalidate()
      to check support function signatures.
      dbe23289
  8. Jan 19, 2016
    • Tom Lane's avatar
      Fix assorted inconsistencies in GiST opclass support function declarations. · 9ff60273
      Tom Lane authored
      The conventions specified by the GiST SGML documentation were widely
      ignored.  For example, the strategy-number argument for "consistent" and
      "distance" functions is specified to be a smallint, but most of the
      built-in support functions declared it as an integer, and for that matter
      the core code passed it using Int32GetDatum not Int16GetDatum.  None of
      that makes any real difference at runtime, but it's quite confusing for
      newcomers to the code, and it makes it very hard to write an amvalidate()
      function that checks support function signatures.  So let's try to instill
      some consistency here.
      
      Another similar issue is that the "query" argument is not of a single
      well-defined type, but could have different types depending on the strategy
      (corresponding to search operators with different righthand-side argument
      types).  Some of the functions threw up their hands and declared the query
      argument as being of "internal" type, which surely isn't right ("any" would
      have been more appropriate); but the majority position seemed to be to
      declare it as being of the indexed data type, corresponding to a search
      operator with both input types the same.  So I've specified a convention
      that that's what to do always.
      
      Also, the result of the "union" support function actually must be of the
      index's storage type, but the documentation suggested declaring it to
      return "internal", and some of the functions followed that.  Standardize
      on telling the truth, instead.
      
      Similarly, standardize on declaring the "same" function's inputs as
      being of the storage type, not "internal".
      
      Also, somebody had forgotten to add the "recheck" argument to both
      the documentation of the "distance" support function and all of their
      SQL declarations, even though the C code was happily using that argument.
      Clean that up too.
      
      Fix up some other omissions in the docs too, such as documenting that
      union's second input argument is vestigial.
      
      So far as the errors in core function declarations go, we can just fix
      pg_proc.h and bump catversion.  Adjusting the erroneous declarations in
      contrib modules is more debatable: in principle any change in those
      scripts should involve an extension version bump, which is a pain.
      However, since these changes are purely cosmetic and make no functional
      difference, I think we can get away without doing that.
      9ff60273
  9. Nov 19, 2015
    • Tom Lane's avatar
      Dodge a macro-name conflict with Perl. · 68c1d7d4
      Tom Lane authored
      Some versions of Perl export a macro named HS_KEY.  This creates a
      conflict in contrib/hstore_plperl against hstore's macro of the same
      name.  The most future-proof solution seems to be to rename our macro;
      I chose HSTORE_KEY.  For consistency, rename HS_VAL and related macros
      similarly.
      
      Back-patch to 9.5.  contrib/hstore_plperl doesn't exist before that
      so there is no need to worry about the conflict in older releases.
      
      Per reports from Marco Atzeri and Mike Blackwell.
      68c1d7d4
  10. May 24, 2015
  11. May 15, 2015
    • Alvaro Herrera's avatar
      Move strategy numbers to include/access/stratnum.h · 26df7066
      Alvaro Herrera authored
      For upcoming BRIN opclasses, it's convenient to have strategy numbers
      defined in a single place.  Since there's nothing appropriate, create
      it.  The StrategyNumber typedef now lives there, as well as existing
      strategy numbers for B-trees (from skey.h) and R-tree-and-friends (from
      gist.h).  skey.h is forced to include stratnum.h because of the
      StrategyNumber typedef, but gist.h is not; extensions that currently
      rely on gist.h for rtree strategy numbers might need to add a new
      
      A few .c files can stop including skey.h and/or gist.h, which is a nice
      side benefit.
      
      Per discussion:
      https://www.postgresql.org/message-id/20150514232132.GZ2523@alvh.no-ip.org
      
      Authored by Emre Hasegeli and Álvaro.
      
      (It's not clear to me why bootscanner.l has any #include lines at all.)
      26df7066
  12. Apr 14, 2015
    • Heikki Linnakangas's avatar
      Reorganize our CRC source files again. · 4f700bcd
      Heikki Linnakangas authored
      Now that we use CRC-32C in WAL and the control file, the "traditional" and
      "legacy" CRC-32 variants are not used in any frontend programs anymore.
      Move the code for those back from src/common to src/backend/utils/hash.
      
      Also move the slicing-by-8 implementation (back) to src/port. This is in
      preparation for next patch that will add another implementation that uses
      Intel SSE 4.2 instructions to calculate CRC-32C, where available.
      4f700bcd
  13. Feb 21, 2015
  14. Feb 20, 2015
  15. Feb 09, 2015
    • Heikki Linnakangas's avatar
      Move pg_crc.c to src/common, and remove pg_crc_tables.h · c619c235
      Heikki Linnakangas authored
      To get CRC functionality in a client program, you now need to link with
      libpgcommon instead of libpgport. The CRC code has nothing to do with
      portability, so libpgcommon is a better home. (libpgcommon didn't exist
      when pg_crc.c was originally moved to src/port.)
      
      Remove the possibility to get CRC functionality by just #including
      pg_crc_tables.h. I'm not aware of any extensions that actually did that and
      couldn't simply link with libpgcommon.
      
      This also moves the pg_crc.h header file from src/include/utils to
      src/include/common, which will require changes to any external programs
      that currently does #include "utils/pg_crc.h". That seems acceptable, as
      include/common is clearly the right home for it now, and the change needed
      to any such programs is trivial.
      c619c235
  16. Jan 13, 2015
  17. Dec 01, 2014
    • Andrew Dunstan's avatar
      Fix hstore_to_json_loose's detection of valid JSON number values. · e09996ff
      Andrew Dunstan authored
      We expose a function IsValidJsonNumber that internally calls the lexer
      for json numbers. That allows us to use the same test everywhere,
      instead of inventing a broken test for hstore conversions. The new
      function is also used in datum_to_json, replacing the code that is now
      moved to the new function.
      
      Backpatch to 9.3 where hstore_to_json_loose was introduced.
      e09996ff
  18. Nov 04, 2014
    • Heikki Linnakangas's avatar
      Switch to CRC-32C in WAL and other places. · 5028f22f
      Heikki Linnakangas authored
      The old algorithm was found to not be the usual CRC-32 algorithm, used by
      Ethernet et al. We were using a non-reflected lookup table with code meant
      for a reflected lookup table. That's a strange combination that AFAICS does
      not correspond to any bit-wise CRC calculation, which makes it difficult to
      reason about its properties. Although it has worked well in practice, seems
      safer to use a well-known algorithm.
      
      Since we're changing the algorithm anyway, we might as well choose a
      different polynomial. The Castagnoli polynomial has better error-correcting
      properties than the traditional CRC-32 polynomial, even if we had
      implemented it correctly. Another reason for picking that is that some new
      CPUs have hardware support for calculating CRC-32C, but not CRC-32, let
      alone our strange variant of it. This patch doesn't add any support for such
      hardware, but a future patch could now do that.
      
      The old algorithm is kept around for tsquery and pg_trgm, which use the
      values in indexes that need to remain compatible so that pg_upgrade works.
      While we're at it, share the old lookup table for CRC-32 calculation
      between hstore, ltree and core. They all use the same table, so might as
      well.
      5028f22f
  19. Aug 25, 2014
  20. Jul 14, 2014
  21. May 09, 2014
  22. May 07, 2014
  23. May 06, 2014
    • Bruce Momjian's avatar
      pgindent run for 9.4 · 0a783200
      Bruce Momjian authored
      This includes removing tabs after periods in C comments, which was
      applied to back branches, so this change should not effect backpatching.
      0a783200
  24. Apr 18, 2014
    • Peter Eisentraut's avatar
      Create function prototype as part of PG_FUNCTION_INFO_V1 macro · e7128e8d
      Peter Eisentraut authored
      Because of gcc -Wmissing-prototypes, all functions in dynamically
      loadable modules must have a separate prototype declaration.  This is
      meant to detect global functions that are not declared in header files,
      but in cases where the function is called via dfmgr, this is redundant.
      Besides filling up space with boilerplate, this is a frequent source of
      compiler warnings in extension modules.
      
      We can fix that by creating the function prototype as part of the
      PG_FUNCTION_INFO_V1 macro, which such modules have to use anyway.  That
      makes the code of modules cleaner, because there is one less place where
      the entry points have to be listed, and creates an additional check that
      functions have the right prototype.
      
      Remove now redundant prototypes from contrib and other modules.
      e7128e8d
  25. Apr 02, 2014
  26. Mar 23, 2014
    • Andrew Dunstan's avatar
      Introduce jsonb, a structured format for storing json. · d9134d0a
      Andrew Dunstan authored
      The new format accepts exactly the same data as the json type. However, it is
      stored in a format that does not require reparsing the orgiginal text in order
      to process it, making it much more suitable for indexing and other operations.
      Insignificant whitespace is discarded, and the order of object keys is not
      preserved. Neither are duplicate object keys kept - the later value for a given
      key is the only one stored.
      
      The new type has all the functions and operators that the json type has,
      with the exception of the json generation functions (to_json, json_agg etc.)
      and with identical semantics. In addition, there are operator classes for
      hash and btree indexing, and two classes for GIN indexing, that have no
      equivalent in the json type.
      
      This feature grew out of previous work by Oleg Bartunov and Teodor Sigaev, which
      was intended to provide similar facilities to a nested hstore type, but which
      in the end proved to have some significant compatibility issues.
      
      Authors: Oleg Bartunov,  Teodor Sigaev, Peter Geoghegan and Andrew Dunstan.
      Review: Andres Freund
      d9134d0a
  27. Feb 21, 2014
    • Heikki Linnakangas's avatar
      Avoid integer overflow in hstore_to_json(). · 0c5783ff
      Heikki Linnakangas authored
      The length of the output buffer was calculated based on the size of the
      argument hstore. On a sizeof(int) == 4 platform and a huge argument, it
      could overflow, causing a too small buffer to be allocated.
      
      Refactor the function to use a StringInfo instead of pre-allocating the
      buffer. Makes it shorter and more readable, too.
      0c5783ff
  28. Feb 17, 2014
    • Noah Misch's avatar
      Predict integer overflow to avoid buffer overruns. · 31400a67
      Noah Misch authored
      Several functions, mostly type input functions, calculated an allocation
      size such that the calculation wrapped to a small positive value when
      arguments implied a sufficiently-large requirement.  Writes past the end
      of the inadvertent small allocation followed shortly thereafter.
      Coverity identified the path_in() vulnerability; code inspection led to
      the rest.  In passing, add check_stack_depth() to prevent stack overflow
      in related functions.
      
      Back-patch to 8.4 (all supported versions).  The non-comment hstore
      changes touch code that did not exist in 8.4, so that part stops at 9.0.
      
      Noah Misch and Heikki Linnakangas, reviewed by Tom Lane.
      
      Security: CVE-2014-0064
      31400a67
  29. Jan 07, 2014
  30. Nov 10, 2013
  31. Oct 17, 2013
  32. Sep 30, 2013
  33. Sep 29, 2013
    • Andrew Dunstan's avatar
      Use a new hstore extension version for added json functions. · a1816751
      Andrew Dunstan authored
      This should have been done when the json functionality was added to
      hstore in 9.3.0. To handle this correctly, the upgrade script therefore
      uses conditional logic by using plpgsql in a DO statement to add the two
      new functions and the new cast. If hstore_to_json_loose is detected as
      already present and dependent on the hstore extension nothing is done.
      This will require that the database be loaded with plpgsql.
      
      People who have installed the earlier and spurious 1.1 version of hstore
      will need to do:
      
      	ALTER EXTENSION hstore UPDATE;
      
      to pick up the new functions properly.
      a1816751
  34. Jul 18, 2013
  35. Jun 01, 2013
    • Stephen Frost's avatar
      Post-pgindent cleanup · 551938ae
      Stephen Frost authored
      Make slightly better decisions about indentation than what pgindent
      is capable of.  Mostly breaking out long function calls into one
      line per argument, with a few other minor adjustments.
      
      No functional changes- all whitespace.
      pgindent ran cleanly (didn't change anything) after.
      Passes all regressions.
      551938ae
  36. May 29, 2013
  37. Apr 19, 2013
  38. Mar 22, 2013
Loading