1. 02 Nov, 2010 5 commits
    • Tom Lane's avatar
      Fix adjust_semi_join to be more cautious about clauseless joins. · 61d6dd0c
      Tom Lane authored
      It was reporting that these were fully indexed (hence cheap), when of
      course they're the exact opposite of that.  I'm not certain if the case
      would arise in practice, since a clauseless semijoin is hard to produce
      in SQL, but if it did happen we'd make some dumb decisions.
      61d6dd0c
    • Tom Lane's avatar
      Fix buffer overrun in pg_upgrade. · 71baff17
      Tom Lane authored
      Problem reported, and cause identified, by Hernan Gonzalez.
      71baff17
    • Tom Lane's avatar
      Ensure an index that uses a whole-row Var still depends on its table. · 9f376e14
      Tom Lane authored
      We failed to record any dependency on the underlying table for an index
      declared like "create index i on t (foo(t.*))".  This would create trouble
      if the table were dropped without previously dropping the index.  To fix,
      simplify some overly-cute code in index_create(), accepting the possibility
      that sometimes the whole-table dependency will be redundant.  Also document
      this hazard in dependency.c.  Per report from Kevin Grittner.
      
      In passing, prevent a core dump in pg_get_indexdef() if the index's table
      can't be found.  I came across this while experimenting with Kevin's
      example.  Not sure it's a real issue when the catalogs aren't corrupt, but
      might as well be cautious.
      
      Back-patch to all supported versions.
      9f376e14
    • Michael Meskes's avatar
      Some cleanup in ecpg code: · 35d5d962
      Michael Meskes authored
      Use bool as type for booleans instead of int.
      Do not implicitely cast size_t to int.
      Make the compiler stop complaining about unused variables by adding an empty statement.
      35d5d962
    • Heikki Linnakangas's avatar
      Bootstrap WAL to begin at segment logid=0 logseg=1 (000000010000000000000001) · 8c843fff
      Heikki Linnakangas authored
      rather than 0/0, so that we can safely use 0/0 as an invalid value. This is a
      more future-proof fix for the corner-case bug in streaming replication that
      was fixed yesterday. We had a similar corner-case bug with log/seg 0/0 back in
      February as well. Avoiding 0/0 as a valid value should prevent bugs like that
      in the future. Per Tom Lane's idea.
      
      Back-patch to 9.0. Since this only affects bootstrapping, it makes no
      difference to existing installations. We don't need to worry about the
      bug in existing installations, because if you've managed to get past the
      initial base backup already, you won't hit the bug in the future either.
      8c843fff
  2. 01 Nov, 2010 2 commits
    • Tom Lane's avatar
      Avoid using a local FunctionCallInfoData struct in ExecMakeFunctionResult · 0811ff20
      Tom Lane authored
      and related routines.
      
      We already had a redundant FunctionCallInfoData struct in FuncExprState,
      but were using that copy only in set-returning-function cases, to avoid
      keeping function evaluation state in the expression tree for the benefit
      of plpgsql's "simple expression" logic.  But of course that didn't work
      anyway.  Given the recent fixes in plpgsql there is no need to have two
      separate behaviors here.  Getting rid of the local FunctionCallInfoData
      structs should make things a little faster (because we don't need to do
      InitFunctionCallInfoData each time), and it also makes for a noticeable
      reduction in stack space consumption during recursive calls.
      0811ff20
    • Heikki Linnakangas's avatar
      Fix corner-case bug in tracking of latest removed WAL segment during · 931b6db3
      Heikki Linnakangas authored
      streaming replication. We used log/seg 0/0 to indicate that no WAL segments
      have been removed since startup, but 0/0 is a valid value for the very first
      WAL segment after initdb. To make that disambiguous, store
      (latest removed WAL segment + 1) in the global variable.
      
      Per report from Matt Chesler, also reproduced by Greg Smith.
      931b6db3
  3. 31 Oct, 2010 2 commits
    • Tom Lane's avatar
      Revert removal of trigger flag from plperl function hash key. · 76b12e0a
      Tom Lane authored
      As noted by Jan Urbanski, this flag is in fact needed to ensure that the
      function's input/result conversion functions are set up as expected.
      
      Add a regression test to discourage anyone from making same mistake
      in future.
      76b12e0a
    • Tom Lane's avatar
      Provide hashing support for arrays. · 186cbbda
      Tom Lane authored
      The core of this patch is hash_array() and associated typcache
      infrastructure, which works just about exactly like the existing support
      for array comparison.
      
      In addition I did some work to ensure that the planner won't think that an
      array type is hashable unless its element type is hashable, and similarly
      for sorting.  This includes adding a datatype parameter to op_hashjoinable
      and op_mergejoinable, and adding an explicit "hashable" flag to
      SortGroupClause.  The lack of a cross-check on the element type was a
      pre-existing bug in mergejoin support --- but it didn't matter so much
      before, because if you couldn't sort the element type there wasn't any good
      alternative to failing anyhow.  Now that we have the alternative of hashing
      the array type, there are cases where we can avoid a failure by being picky
      at the planner stage, so it's time to be picky.
      
      The issue of exactly how to combine the per-element hash values to produce
      an array hash is still open for discussion, but the rest of this is pretty
      solid, so I'll commit it as-is.
      186cbbda
  4. 30 Oct, 2010 2 commits
  5. 29 Oct, 2010 5 commits
    • Tom Lane's avatar
      Fix comparisons of pointers with zero to compare with NULL instead. · bfd3f37b
      Tom Lane authored
      Per C standard, these are semantically the same thing; but saying NULL
      when you mean NULL is good for readability.
      
      Marti Raudsepp, per results of INRIA's Coccinelle.
      bfd3f37b
    • Tom Lane's avatar
      Oops, missed one fix for EquivalenceClass rearrangement. · 48a1fb23
      Tom Lane authored
      Now that we're expecting a mergeclause's left_ec/right_ec to persist from
      the initial assignments, we can't just blithely zero these out when
      transforming such a clause in adjust_appendrel_attrs.  But really it should
      be okay to keep the parent's values, since a child table's derived Var
      ought to be equivalent to the parent Var for all EquivalenceClass purposes.
      (Indeed, I'm wondering whether we couldn't find a way to dispense with
      add_child_rel_equivalences altogether.  But this is wrong in any case.)
      48a1fb23
    • Tom Lane's avatar
      Avoid creation of useless EquivalenceClasses during planning. · 14231a41
      Tom Lane authored
      Zoltan Boszormenyi exhibited a test case in which planning time was
      dominated by construction of EquivalenceClasses and PathKeys that had no
      actual relevance to the query (and in fact got discarded immediately).
      This happened because we generated PathKeys describing the sort ordering of
      every index on every table in the query, and only after that checked to see
      if the sort ordering was relevant.  The EC/PK construction code is O(N^2)
      in the number of ECs, which is all right for the intended number of such
      objects, but it gets out of hand if there are ECs for lots of irrelevant
      indexes.
      
      To fix, twiddle the handling of mergeclauses a little bit to ensure that
      every interesting EC is created before we begin path generation.  (This
      doesn't cost anything --- in fact I think it's a bit cheaper than before
      --- since we always eventually created those ECs anyway.)  Then, if an
      index column can't be found in any pre-existing EC, we know that that sort
      ordering is irrelevant for the query.  Instead of creating a useless EC,
      we can just not build a pathkey for the index column in the first place.
      The index will still be considered if it's useful for non-order-related
      reasons, but we will think of its output as unsorted.
      14231a41
    • Heikki Linnakangas's avatar
      Give a more specific error message if you try to COMMIT, ROLLBACK or COPY · f184de35
      Heikki Linnakangas authored
      FROM STDIN in PL/pgSQL. We alread did this for dynamic EXECUTE statements,
      ie. "EXECUTE 'COMMIT'", but not otherwise.
      f184de35
    • Andrew Dunstan's avatar
      6c3c7b53
  6. 28 Oct, 2010 9 commits
  7. 27 Oct, 2010 5 commits
  8. 26 Oct, 2010 7 commits
  9. 25 Oct, 2010 3 commits
    • Peter Eisentraut's avatar
      Refactor typenameTypeId() · 35670340
      Peter Eisentraut authored
      Split the old typenameTypeId() into two functions: A new typenameTypeId() that
      returns only a type OID, and typenameTypeIdAndMod() that returns type OID and
      typmod.  This isolates call sites better that actually care about the typmod.
      35670340
    • Tom Lane's avatar
      Fix overly-enthusiastic Assert in printing of Param reference expressions. · c6873eac
      Tom Lane authored
      A NestLoopParam's value can only be a Var or Aggref, but this isn't the
      case in general for SubPlan parameters, so print_parameter_expr had better
      be prepared to cope.  Brain fade in my recent patch to print the referenced
      expression instead of just printing $N for PARAM_EXEC Params.  Per report
      from Pavel Stehule.
      c6873eac
    • Tom Lane's avatar
      Fix inline_set_returning_function() to preserve the invalItems list properly. · ef55e294
      Tom Lane authored
      This avoids a possible crash when inlining a SRF whose argument list
      contains a reference to an inline-able user function.  The crash is quite
      reproducible with CLOBBER_FREED_MEMORY enabled, but would be less certain
      in a production build.  Problem introduced in 9.0 by the named-arguments
      patch, which requires invoking eval_const_expressions() before we can try
      to inline a SRF.  Per report from Brendan Jurd.
      ef55e294