1. 20 10月, 2010 1 次提交
    • T
      Fix incorrect generation of whole-row variables in planner. · 6e74a91b
      Tom Lane 提交于
      A couple of places in the planner need to generate whole-row Vars, and were
      cutting corners by setting vartype = RECORDOID in the Vars, even in cases
      where there's an identifiable named composite type for the RTE being
      referenced.  While we mostly got away with this, it failed when there was
      also a parser-generated whole-row reference to the same RTE, because the
      two Vars weren't equal() due to the difference in vartype.  Fix by
      providing a subroutine the planner can call to generate whole-row Vars
      the same way the parser does.
      
      Per bug #5716 from Andrew Tipton.  Back-patch to 9.0 where one of the bogus
      calls was introduced (the other one is new in HEAD).
      6e74a91b
  2. 19 10月, 2010 2 次提交
  3. 18 10月, 2010 2 次提交
    • T
      Fix a passel of inappropriately-named global functions in GIN. · 419d2374
      Tom Lane 提交于
      The GIN code has absolutely no business exporting GIN-specific functions
      with names as generic as compareItemPointers() or newScanKey(); that's
      just trouble waiting to happen.  I got annoyed about this again just now
      and decided to fix it.  This commit ensures that all global symbols
      defined in access/gin/ have names including "gin" or "Gin".  There were a
      couple of cases, like names involving "PostingItem", where arguably the
      names were already sufficiently nongeneric; but I figured as long as I was
      risking creating merge problems for unapplied GIN patches I might as well
      impose a uniform policy.
      
      I didn't touch any static symbol names.  There might be some places
      where it'd be appropriate to rename some static functions to match
      siblings that are exported, but I'll leave that for another time.
      419d2374
    • T
      Improve GIN indexscan cost estimation. · 48c7d9f6
      Tom Lane 提交于
      The better estimate requires more statistics than we previously stored:
      in particular, counts of "entry" versus "data" pages within the index,
      as well as knowledge of the number of distinct key values.  We collect
      this information during initial index build and update it during VACUUM,
      storing the info in new fields on the index metapage.  No initdb is
      required because these fields will read as zeroes in a pre-existing
      index, and the new gincostestimate code is coded to behave (reasonably)
      sanely if they are zeroes.
      
      Teodor Sigaev, reviewed by Jan Urbanski, Tom Lane, and Itagaki Takahiro.
      48c7d9f6
  4. 17 10月, 2010 1 次提交
    • M
      Fix msvc build for localized versions of Visual C++ · cd0e8253
      Magnus Hagander 提交于
      Look only at the non-localized part of the output from "vcbuild /?",
      which is used to determine the version of Visual Studio in use. Different
      languages seem to localize different amounts of the string, but we assume
      the part "Microsoft Visual C++" won't be modified.
      cd0e8253
  5. 16 10月, 2010 5 次提交
  6. 15 10月, 2010 6 次提交
  7. 14 10月, 2010 2 次提交
  8. 13 10月, 2010 2 次提交
    • I
      Accept 'public' as a pseudo-role name in has_table_privilege() and friends · d0f876ca
      Itagaki Takahiro 提交于
      to see if a particular privilege has been granted to PUBLIC.
      
      The issue was reported by Jim Nasby.
      Patch by Alvaro Herrera, and reviewed by KaiGai Kohei.
      d0f876ca
    • T
      Remove some unnecessary tests of pgstat_track_counts. · f4d242ef
      Tom Lane 提交于
      We may as well make pgstat_count_heap_scan() and related macros just count
      whenever rel->pgstat_info isn't null.  Testing pgstat_track_counts buys
      nothing at all in the normal case where that flag is ON; and when it's OFF,
      the pgstat_info link will be null, so it's still a useless test.
      
      This change is unlikely to buy any noticeable performance improvement,
      but a cycle shaved is a cycle earned; and my investigations earlier today
      convinced me that we're down to the point where individual instructions in
      the inner execution loops are starting to matter.
      f4d242ef
  9. 12 10月, 2010 2 次提交
    • T
      Fix plpython so that it again honors typmod while assigning to tuple fields. · 09130e58
      Tom Lane 提交于
      This was broken in 9.0 while improving plpython's conversion behavior for
      bytea and boolean.  Per bug report from maizi.
      09130e58
    • T
      Fix assorted bugs in GIN's WAL replay logic. · 4016bdef
      Tom Lane 提交于
      The original coding was quite sloppy about handling the case where
      XLogReadBuffer fails (because the page has since been deleted).  This
      would result in either "bad buffer id: 0" or an Assert failure during
      replay, if indeed the page were no longer there.  In a couple of places
      it also neglected to check whether the change had already been applied,
      which would probably result in corrupted index contents.  I believe that
      bug #5703 is an instance of the first problem.  These issues could show up
      without replication, but only if you were unfortunate enough to crash
      between modification of a GIN index and the next checkpoint.
      
      Back-patch to 8.2, which is as far back as GIN has WAL support.
      4016bdef
  10. 11 10月, 2010 3 次提交
    • T
      Improve the planner's simplification of NOT constructs. · 220e45bf
      Tom Lane 提交于
      This patch merges the responsibility for NOT-flattening into
      eval_const_expressions' processing.  It wasn't done that way originally
      because prepqual.c is far older than eval_const_expressions.  But putting
      this work into eval_const_expressions saves one pass over the qual trees,
      and in fact saves even more than that because we can exploit the knowledge
      that the subexpressions have already been recursively simplified.  Doing it
      this way also lets us do it uniformly over all expressions, whereas
      prepqual.c formerly just did it at top level to save cycles.  That should
      improve the planner's ability to recognize logically-equivalent constructs.
      
      While at it, also add the ability to fold a NOT into BooleanTest and
      NullTest constructs (the latter only for the scalar-datatype case).
      
      Per discussion of bug #5702.
      220e45bf
    • T
      Teach psql to do tab completion for names of psql variables. · b48b9cb3
      Tom Lane 提交于
      Completion is supported in the context of \set and when interpolating
      a variable value using :foo etc.
      
      In passing, fix some places in tab-complete.c that weren't following
      project style for comment formatting.
      
      Pavel Stehule, reviewed by Itagaki Takahiro
      b48b9cb3
    • T
      Support triggers on views. · 2ec993a7
      Tom Lane 提交于
      This patch adds the SQL-standard concept of an INSTEAD OF trigger, which
      is fired instead of performing a physical insert/update/delete.  The
      trigger function is passed the entire old and/or new rows of the view,
      and must figure out what to do to the underlying tables to implement
      the update.  So this feature can be used to implement updatable views
      using trigger programming style rather than rule hacking.
      
      In passing, this patch corrects the names of some columns in the
      information_schema.triggers view.  It seems the SQL committee renamed
      them somewhere between SQL:99 and SQL:2003.
      
      Dean Rasheed, reviewed by Bernd Helmle; some additional hacking by me.
      2ec993a7
  11. 09 10月, 2010 2 次提交
    • B
      f7dbddac
    • T
      Fix sloppy usage of TRIGGER_FIRED_BEFORE/TRIGGER_FIRED_AFTER. · caaf2e84
      Tom Lane 提交于
      Various places were testing TRIGGER_FIRED_BEFORE() where what they really
      meant was !TRIGGER_FIRED_AFTER(), or vice versa.  This needs to be cleaned
      up because there are about to be more than two possible states.
      
      We might want to note this in the 9.1 release notes as something for
      trigger authors to double-check.
      
      For consistency's sake I also changed some places that assumed that
      TRIGGER_FIRED_FOR_ROW and TRIGGER_FIRED_FOR_STATEMENT are necessarily
      mutually exclusive; that's not in immediate danger of breaking, but
      it's still sloppier than it should be.
      
      Extracted from Dean Rasheed's patch for triggers on views.  I'm committing
      this separately since it's an identifiable separate issue, and is the
      only reason for the patch to touch most of these particular files.
      caaf2e84
  12. 08 10月, 2010 3 次提交
  13. 07 10月, 2010 2 次提交
    • T
      Reduce the memory requirement for large ispell dictionaries. · 3e5f9412
      Tom Lane 提交于
      This patch eliminates per-chunk palloc overhead for most small allocations
      needed in the representation of an ispell dictionary.  This saves close to
      a factor of 2 on the current Czech ispell data.  While it doesn't cover
      every last small allocation in the ispell code, we are at the point of
      diminishing returns, because about 95% of the allocations are covered
      already.
      
      Pavel Stehule, rather heavily revised by Tom
      3e5f9412
    • T
      Clean up temporary-memory management during ispell dictionary loading. · 9b910def
      Tom Lane 提交于
      Add explicit initialization and cleanup functions to spell.c, and keep
      all working state in the already-existing ISpellDict struct.  This lets us
      get rid of a static variable along with some extremely shaky assumptions
      about usage of child memory contexts.
      
      This commit is just code beautification and has no impact on functionality
      or performance, but it opens the way to a less-grotty implementation of
      Pavel's memory-saving hack, which will follow shortly.
      9b910def
  14. 03 10月, 2010 3 次提交
    • T
      Behave correctly if INSERT ... VALUES is decorated with additional clauses. · 3a13f12b
      Tom Lane 提交于
      In versions 8.2 and up, the grammar allows attaching ORDER BY, LIMIT,
      FOR UPDATE, or WITH to VALUES, and hence to INSERT ... VALUES.  But the
      special-case code for VALUES in transformInsertStmt() wasn't expecting any
      of those, and just ignored them, leading to unexpected results.  Rather
      than complicate the special-case path, just ensure that the presence of any
      of those clauses makes us treat the query as if it had a general SELECT.
      Per report from Hitoshi Harada.
      3a13f12b
    • T
      Remove excess argument to open(2). · e77f605d
      Tom Lane 提交于
      Many compilers don't complain about this, but some do, and it's certainly
      wrong.  Back-patch to 8.4 where the error was introduced.
      
      Mark Kirkwood
      e77f605d
    • T
      Throw an appropriate error if ALTER COLUMN TYPE finds a dependent trigger. · 1f0b62e8
      Tom Lane 提交于
      Actually making this case work, if the column is used in the trigger's
      WHEN condition, will take some new code that probably isn't appropriate
      to back-patch.  For now, just throw a FEATURE_NOT_SUPPORTED error rather
      than allowing control to reach the "unexpected object" case.  Per bug #5688
      from Daniel Grace.  Back-patch to 9.0 where the possibility of such a
      dependency was introduced.
      1f0b62e8
  15. 01 10月, 2010 1 次提交
    • T
      Use a separate interpreter for each calling SQL userid in plperl and pltcl. · 50595b5f
      Tom Lane 提交于
      There are numerous methods by which a Perl or Tcl function can subvert
      the behavior of another such function executed later; for example, by
      redefining standard functions or operators called by the target function.
      If the target function is SECURITY DEFINER, or is called by such a
      function, this means that any ordinary SQL user with Perl or Tcl language
      usage rights can do essentially anything with the privileges of the target
      function's owner.
      
      To close this security hole, create a separate Perl or Tcl interpreter for
      each SQL userid under which plperl or pltcl functions are executed within
      a session.  However, all plperlu or pltclu functions run within a session
      still share a single interpreter, since they all execute at the trust
      level of a database superuser anyway.
      
      Note: this change results in a functionality loss when libperl has been
      built without the "multiplicity" option: it's no longer possible to call
      plperl functions under different userids in one session, since such a
      libperl can't support multiple interpreters in one process.  However, such
      a libperl already failed to support concurrent use of plperl and plperlu,
      so it's likely that few people use such versions with Postgres.
      
      Security: CVE-2010-3433
      50595b5f
  16. 29 9月, 2010 3 次提交
    • T
      5ac144d5
    • T
      Fix another small oversight in command_no_begin patch. · 112c3fc6
      Tom Lane 提交于
      Need a "return false" to prevent tests from continuing after we've moved
      the "query" pointer.  As it stood, it'd accept "DROP DISCARD ALL" as a
      match.
      112c3fc6
    • T
      Fix PlaceHolderVar mechanism's interaction with outer joins. · eb229505
      Tom Lane 提交于
      The point of a PlaceHolderVar is to allow a non-strict expression to be
      evaluated below an outer join, after which its value bubbles up like a Var
      and can be forced to NULL when the outer join's semantics require that.
      However, there was a serious design oversight in that, namely that we
      didn't ensure that there was actually a correct place in the plan tree
      to evaluate the placeholder :-(.  It may be necessary to delay evaluation
      of an outer join to ensure that a placeholder that should be evaluated
      below the join can be evaluated there.  Per recent bug report from Kirill
      Simonov.
      
      Back-patch to 8.4 where the PlaceHolderVar mechanism was introduced.
      eb229505