1. 31 Aug, 2007 1 commit
    • Tom Lane's avatar
      Rewrite make_outerjoininfo's construction of min_lefthand and min_righthand · b4c806fa
      Tom Lane authored
      sets for outer joins, in the light of bug #3588 and additional thought and
      experimentation.  The original methodology was fatally flawed for nests of
      more than two outer joins: it got the relationships between adjacent joins
      right, but didn't always come to the right conclusions about whether a join
      could be interchanged with one two or more levels below it.  This was largely
      caused by a mistaken idea that we should use the min_lefthand + min_righthand
      sets of a sub-join as the minimum left or right input set of an upper join
      when we conclude that the sub-join can't commute with the upper one.  If
      there's a still-lower join that the sub-join *can* commute with, this method
      led us to think that that one could commute with the topmost join; which it
      can't.  Another problem (not directly connected to bug #3588) was that
      make_outerjoininfo's processing-order-dependent method for enforcing outer
      join identity #3 didn't work right: if we decided that join A could safely
      commute with lower join B, we dropped all information about sub-joins under B
      that join A could perhaps not safely commute with, because we removed B's
      entire min_righthand from A's.
      
      To fix, make an explicit computation of all inner join combinations that occur
      below an outer join, and add to that the full syntactic relsets of any lower
      outer joins that we determine it can't commute with.  This method gives much
      more direct enforcement of the outer join rearrangement identities, and it
      turns out not to cost a lot of additional bookkeeping.
      
      Thanks to Richard Harris for the bug report and test case.
      b4c806fa
  2. 30 Aug, 2007 3 commits
  3. 29 Aug, 2007 7 commits
  4. 28 Aug, 2007 12 commits
  5. 27 Aug, 2007 9 commits
    • Magnus Hagander's avatar
      Exclude tsearch2 contrib tests in regression tests, · 69e86a5d
      Magnus Hagander authored
      pending decision on exactly what will happen with
      contrib/tsearch2 now that it's in core.
      69e86a5d
    • Magnus Hagander's avatar
      Install stopword files · 90d9fc0a
      Magnus Hagander authored
      90d9fc0a
    • Magnus Hagander's avatar
      3b1e04c3
    • Tom Lane's avatar
      Fix a couple of misbehaviors rooted in the fact that the default creation · 862861ee
      Tom Lane authored
      namespace isn't necessarily first in the search path (there could be implicit
      schemas ahead of it).  Examples are
      
      test=# set search_path TO s1;
      
      test=# create view pg_timezone_names as select * from pg_timezone_names();
      ERROR:  "pg_timezone_names" is already a view
      
      test=# create table pg_class (f1 int primary key);
      ERROR:  permission denied: "pg_class" is a system catalog
      
      You'd expect these commands to create the requested objects in s1, since
      names beginning with pg_ aren't supposed to be reserved anymore.  What is
      happening is that we create the requested base table and then execute
      additional commands (here, CREATE RULE or CREATE INDEX), and that code is
      passed the same RangeVar that was in the original command.  Since that
      RangeVar has schemaname = NULL, the secondary commands think they should do a
      path search, and that means they find system catalogs that are implicitly in
      front of s1 in the search path.
      
      This is perilously close to being a security hole: if the secondary command
      failed to apply a permission check then it'd be possible for unprivileged
      users to make schema modifications to system catalogs.  But as far as I can
      find, there is no code path in which a check doesn't occur.  Which makes it
      just a weird corner-case bug for people who are silly enough to want to
      name their tables the same as a system catalog.
      
      The relevant code has changed quite a bit since 8.2, which means this patch
      wouldn't work as-is in the back branches.  Since it's a corner case no one
      has reported from the field, I'm not going to bother trying to back-patch.
      862861ee
    • Tom Lane's avatar
      Remove the 'not in' operator (!!=). This was a hangover from Berkeley · 6c96188c
      Tom Lane authored
      days that was obsolete the moment we had IN (SELECT ...) capability.
      It's arguably a security hole since it applied no permissions check to
      the table it searched, and since it was never documented anywhere,
      removing it seems more appropriate than fixing it.
      6c96188c
    • Tom Lane's avatar
      Require SELECT privilege on a table to do dblink_get_pkey(). This is · a41e46b2
      Tom Lane authored
      not all that exciting when the system catalogs are readable by all,
      but some people try to lock them down, and would not like this sort of
      end run ...
      a41e46b2
    • Tom Lane's avatar
      Restrict pg_relation_size to relation owner, pg_database_size to DB owner, · cc26599b
      Tom Lane authored
      and pg_tablespace_size to superusers.  Perhaps we could weaken the first
      case to just require SELECT privilege, but that doesn't work for the
      other cases, so use ownership as the common concept.
      cc26599b
    • Tom Lane's avatar
      Make currtid() functions require SELECT privileges on the target table. · 741e952b
      Tom Lane authored
      While it's not clear that TID linkage info is of any great use to a
      nefarious user, it's certainly unexpected that these functions wouldn't
      insist on read privileges.
      741e952b
    • Tom Lane's avatar
      Restrict pgrowlocks function to superusers. (This might be too strict, · 56f3fb3b
      Tom Lane authored
      but no permissions check at all is certainly no good.)  Clean up usage
      of some deprecated APIs.
      56f3fb3b
  6. 26 Aug, 2007 4 commits
  7. 25 Aug, 2007 4 commits
    • Tom Lane's avatar
      Adjust with-system-tzdata patch to not attempt to install a symlink, · 75d5f6fe
      Tom Lane authored
      but just hardwire the specified timezone database path into the executable.
      Per discussion, this avoids some packaging disadvantages of using a
      symlink.
      75d5f6fe
    • Tom Lane's avatar
      Fix brain fade in DefineIndex(): it was continuing to access the table's · 75d091a0
      Tom Lane authored
      relcache entry after having heap_close'd it.  This could lead to misbehavior
      if a relcache flush wiped out the cache entry meanwhile.  In 8.2 there is a
      very real risk of CREATE INDEX CONCURRENTLY using the wrong relid for locking
      and waiting purposes.  I think the bug is only cosmetic in 8.0 and 8.1,
      because their transgression is limited to using RelationGetRelationName(rel)
      in an ereport message immediately after heap_close, and there's no way (except
      with special debugging options) for a cache flush to occur in that interval.
      Not quite sure that it's cosmetic in 7.4, but seems best to patch anyway.
      
      Found by trying to run the regression tests with CLOBBER_CACHE_ALWAYS enabled.
      Maybe we should try to do that on a regular basis --- it's awfully slow,
      but perhaps some fast buildfarm machine could do it once in awhile.
      75d091a0
    • Tom Lane's avatar
      Simplify implementation of ts_debug() function --- use a join instead · 21168267
      Tom Lane authored
      of redundant sub-selects.  initdb not forced, since this is just a
      cosmetic change, but the new code won't show up till you do one.
      21168267
    • Tatsuo Ishii's avatar
      The upper limit for -c option of pgbench is now obtained from · e4a52eca
      Tatsuo Ishii authored
      (FD_SETSIZE - 10) rather than a hardwired number.
      e4a52eca