1. 21 2月, 2012 1 次提交
    • A
      Fix a couple of cases of JSON output. · 83fcaffe
      Andrew Dunstan 提交于
      First, as noted by Itagaki Takahiro, a datum of type JSON doesn't
      need to be escaped. Second, ensure that numeric output not in
      the form of a legal JSON number is quoted and escaped.
      83fcaffe
  2. 20 2月, 2012 4 次提交
    • T
      Fix regex back-references that are directly quantified with *. · 5223f96d
      Tom Lane 提交于
      The syntax "\n*", that is a backref with a * quantifier directly applied
      to it, has never worked correctly in Spencer's library.  This has been an
      open bug in the Tcl bug tracker since 2005:
      https://sourceforge.net/tracker/index.php?func=detail&aid=1115587&group_id=10894&atid=110894
      
      The core of the problem is in parseqatom(), which first changes "\n*" to
      "\n+|" and then applies repeat() to the NFA representing the backref atom.
      repeat() thinks that any arc leading into its "rp" argument is part of the
      sub-NFA to be repeated.  Unfortunately, since parseqatom() already created
      the arc that was intended to represent the empty bypass around "\n+", this
      arc gets moved too, so that it now leads into the state loop created by
      repeat().  Thus, what was supposed to be an "empty" bypass gets turned into
      something that represents zero or more repetitions of the NFA representing
      the backref atom.  In the original example, in place of
      	^([bc])\1*$
      we now have something that acts like
      	^([bc])(\1+|[bc]*)$
      At runtime, the branch involving the actual backref fails, as it's supposed
      to, but then the other branch succeeds anyway.
      
      We could no doubt fix this by some rearrangement of the operations in
      parseqatom(), but that code is plenty ugly already, and what's more the
      whole business of converting "x*" to "x+|" probably needs to go away to fix
      another problem I'll mention in a moment.  Instead, this patch suppresses
      the *-conversion when the target is a simple backref atom, leaving the case
      of m == 0 to be handled at runtime.  This makes the patch in regcomp.c a
      one-liner, at the cost of having to tweak cbrdissect() a little.  In the
      event I went a bit further than that and rewrote cbrdissect() to check all
      the string-length-related conditions before it starts comparing characters.
      It seems a bit stupid to possibly iterate through many copies of an
      n-character backreference, only to fail at the end because the target
      string's length isn't a multiple of n --- we could have found that out
      before starting.  The existing coding could only be a win if integer
      division is hugely expensive compared to character comparison, but I don't
      know of any modern machine where that might be true.
      
      This does not fix all the problems with quantified back-references.  In
      particular, the code is still broken for back-references that appear within
      a larger expression that is quantified (so that direct insertion of the
      quantification limits into the BACKREF node doesn't apply).  I think fixing
      that will take some major surgery on the NFA code, specifically introducing
      an explicit iteration node type instead of trying to transform iteration
      into concatenation of modified regexps.
      
      Back-patch to all supported branches.  In HEAD, also add a regression test
      case for this.  (It may seem a bit silly to create a regression test file
      for just one test case; but I'm expecting that we will soon import a whole
      bunch of regex regression tests from Tcl, so might as well create the
      infrastructure now.)
      5223f96d
    • T
      Add caching of ctype.h/wctype.h results in regc_locale.c. · e00f68e4
      Tom Lane 提交于
      While this doesn't save a huge amount of runtime, it still seems worth
      doing, especially since I realized that the data copying I did in my first
      draft was quite unnecessary.  In this version, once we have the results
      cached, getting them back for re-use is really very cheap.
      
      Also, remove the hard-wired limitation to not consider wctype.h results for
      character codes above 255.  It turns out that we can't push the limit as
      far up as I'd originally hoped, because the regex colormap code is not
      efficient enough to cope very well with character classes containing many
      thousand letters, which a Unicode locale is entirely capable of producing.
      Still, we can push it up to U+7FF (which I chose as the limit of 2-byte
      UTF8 characters), which will at least make Eastern Europeans happy pending
      a better solution.  Thus, this commit resolves the specific complaint in
      bug #6457, but not the more general issue that letters of non-western
      alphabets are mostly not recognized as matching [[:alpha:]].
      e00f68e4
    • T
      Create the beginnings of internals documentation for the regex code. · 27af9143
      Tom Lane 提交于
      Create src/backend/regex/README to hold an implementation overview of
      the regex package, and fill it in with some preliminary notes about
      the code's DFA/NFA processing and colormap management.  Much more to
      do there of course.
      
      Also, improve some code comments around the colormap and cvec code.
      No functional changes except to add one missing assert.
      27af9143
    • A
      Improve pretty printing of viewdefs. · 2f582f76
      Andrew Dunstan 提交于
      Some line feeds are added to target lists and from lists to make
      them more readable. By default they wrap at 80 columns if possible,
      but the wrap column is also selectable - if 0 it wraps after every
      item.
      
      Andrew Dunstan, reviewed by Hitoshi Harada.
      2f582f76
  3. 19 2月, 2012 3 次提交
  4. 18 2月, 2012 3 次提交
  5. 17 2月, 2012 6 次提交
    • T
      Fix longstanding error in contrib/intarray's int[] & int[] operator. · 06d9afa6
      Tom Lane 提交于
      The array intersection code would give wrong results if the first entry of
      the correct output array would be "1".  (I think only this value could be
      at risk, since the previous word would always be a lower-bound entry with
      that fixed value.)
      
      Problem spotted by Julien Rouhaud, initial patch by Guillaume Lelarge,
      cosmetic improvements by me.
      06d9afa6
    • T
      Improve statistics estimation to make some use of DISTINCT in sub-queries. · 4767bc8f
      Tom Lane 提交于
      Formerly, we just punted when trying to estimate stats for variables coming
      out of sub-queries using DISTINCT, on the grounds that whatever stats we
      might have for underlying table columns would be inapplicable.  But if the
      sub-query has only one DISTINCT column, we can consider its output variable
      as being unique, which is useful information all by itself.  The scope of
      this improvement is pretty narrow, but it costs nearly nothing, so we might
      as well do it.  Per discussion with Andres Freund.
      
      This patch differs from the draft I submitted yesterday in updating various
      comments about vardata.isunique (to reflect its extended meaning) and in
      tweaking the interaction with security_barrier views.  There does not seem
      to be a reason why we can't use this sort of knowledge even when the
      sub-query is such a view.
      4767bc8f
    • R
      pg_dump: Miscellaneous tightening based on recent refactorings. · 1cc1b91d
      Robert Haas 提交于
      Use exit_horribly() and ExecuteSqlQueryForSingleRow() in various
      places where it's equivalent, or nearly equivalent, to the prior
      coding. Apart from being more compact, this also makes the error
      messages for the wrong-number-of-tuples case more consistent.
      1cc1b91d
    • R
      pg_dump: Remove global connection pointer. · 689d0eb7
      Robert Haas 提交于
      Parallel pg_dump wants to have multiple ArchiveHandle objects, and
      therefore multiple PGconns, in play at the same time.  This should
      be just about the end of the refactoring that we need in order to
      make that workable.
      689d0eb7
    • R
      Refactor pg_dump.c to avoid duplicating returns-one-row check. · 549e93c9
      Robert Haas 提交于
      Any patches apt to get broken have probably already been broken by the
      error-handling cleanups I just did, so we might as well clean this up
      at the same time.
      549e93c9
    • R
      Invent on_exit_nicely for pg_dump. · e9a22259
      Robert Haas 提交于
      Per recent discussions on pgsql-hackers regarding parallel pg_dump.
      e9a22259
  6. 16 2月, 2012 5 次提交
    • T
      Run a portal's cleanup hook immediately when pushing it to FAILED state. · 4bfe68df
      Tom Lane 提交于
      This extends the changes of commit 6252c4f9
      so that we run the cleanup hook earlier for failure cases as well as
      success cases.  As before, the point is to avoid an assertion failure from
      an Assert I added in commit a874fe7b, which
      was meant to check that no user-written code can be called during portal
      cleanup.  This fixes a case reported by Pavan Deolasee in which the Assert
      could be triggered during backend exit (see the new regression test case),
      and also prevents the possibility that the cleanup hook is run after
      portions of the portal's state have already been recycled.  That doesn't
      really matter in current usage, but it foreseeably could matter in the
      future.
      
      Back-patch to 9.1 where the Assert in question was added.
      4bfe68df
    • R
      Fix VPATH builds, broken by my recent commit to speed up tuplesorting. · edec8c8e
      Robert Haas 提交于
      The relevant commit is 337b6f5e.
      edec8c8e
    • B
      Have pg_upgrade output 'link' or 'copy' when reporting its status. · 7f951474
      Bruce Momjian 提交于
      Idea from Peter.
      7f951474
    • R
      sepgsql: Move some code from hooks.c to label.c · d44a3fb5
      Robert Haas 提交于
      This is some preliminary refactoring related to a pending patch
      to allow sepgsql-enable sessions to make dynamic label transitions.
      But this commit doesn't involve any functional change: it just puts
      some bits of code in more logical places.
      
      KaiGai Kohei
      d44a3fb5
    • R
      Speed up in-memory tuplesorting. · 337b6f5e
      Robert Haas 提交于
      Per recent work by Peter Geoghegan, it's significantly faster to
      tuplesort on a single sortkey if ApplySortComparator is inlined into
      quicksort rather reached via a function pointer.  It's also faster
      in general to have a version of quicksort which is specialized for
      sorting SortTuple objects rather than objects of arbitrary size and
      type.  This requires a couple of additional copies of the quicksort
      logic, which in this patch are generate using a Perl script.  There
      might be some benefit in adding further specializations here too,
      but thus far it's not clear that those gains are worth their weight
      in code footprint.
      337b6f5e
  7. 15 2月, 2012 10 次提交
  8. 14 2月, 2012 4 次提交
  9. 13 2月, 2012 4 次提交