An error occurred fetching the project authors.
  1. 20 Mar, 2007 1 commit
    • gkodinov/kgeorge@macbook.local's avatar
      Bug #24484: · 28962a76
      gkodinov/kgeorge@macbook.local authored
      To correctly decide which predicates can be evaluated with a given table
      the optimizer must know the exact set of tables that a predicate depends 
      on. If that mask is too wide (refer to non-existing tables) the optimizer
      can erroneously skip a predicate.
      One such case of wrong table usage mask were the aggregate functions.
      The have a all-1 mask (meaning depend on all tables, including non-existent
      ones).
      Fixed by making a real used_tables mask for the aggregates. The mask is
      constructed in the following way :
      1. OR the table dependency masks of all the arguments of the aggregate.
      2. If all the arguments of the function are from the local name resolution 
        context and it is evaluated in the same name resolution
        context where it is referenced all the tables from that name resolution 
        context are OR-ed to the dependency mask. This is to denote that an
        aggregate function depends on the number of rows it processes.
      3. Handle correctly the case of an aggregate function optimization (such that
        the aggregate function can be pre-calculated and made a constant).
      
      Made sure that an aggregate function is never a constant (unless subject of a 
      specific optimization and pre-calculation).  
      
      One other flaw was revealed and fixed in the process : references were 
      not calling the recalculation method for used_tables of their targets.
      28962a76
  2. 27 Jan, 2007 1 commit
    • igor@olga.mysql.com's avatar
      Fixed bug #24420. · e8977809
      igor@olga.mysql.com authored
      Objects of the classes Item_func_is_not_null_test and Item_func_trig_cond
      must be transparent for the method Item::split_sum_func2 as these classes
      are pure helpers. It means that the method Item::split_sum_func2 should
      look at those objects as at pure wrappers.
      e8977809
  3. 24 Jan, 2007 1 commit
  4. 12 Jan, 2007 2 commits
    • sergefp@mysql.com's avatar
      BUG#24127: (a,b) IN (SELECT c,d ...) can produce wrong results if a and/or b are NULLs: · c3f46e1f
      sergefp@mysql.com authored
      - Make the code produce correct result: use an array of triggers to turn on/off equalities for each
        compared column. Also turn on/off optimizations based on those equalities.
      - Make EXPLAIN output show "Full scan on NULL key" for tables for which we switch between
        ref/unique_subquery/index_subquery and ALL access.
      - index_subquery engine now has HAVING clause when it is needed, and it is
        displayed in EXPLAIN EXTENDED
      - Fix incorrect presense of "Using index" for index/unique-based subqueries (BUG#22930)
      // bk trigger note: this commit refers to BUG#24127
      c3f46e1f
    • sergefp@mysql.com's avatar
      BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...) · 52367948
      sergefp@mysql.com authored
      When transforming "oe IN (SELECT ie ...)" wrap the pushed-down predicates
      iff "oe can be null", not "ie can be null".
      The fix doesn't cover row-based subqueries, those will be fixed in #24127.
      52367948
  5. 31 Oct, 2006 1 commit
    • sergefp@mysql.com's avatar
      BUG#8804: wrong results for NULL IN (SELECT ...) · 54a713aa
      sergefp@mysql.com authored
      Evaluate "NULL IN (SELECT ...)" in a special way: Disable pushed-down 
      conditions and their "consequences": 
       = Do full table scans instead of unique_[index_subquery] lookups.
       = Change appropriate "ref_or_null" accesses to full table scans in
         subquery's joins.
      Also cache value of NULL IN (SELECT ...) if the SELECT is not correlated 
      wrt any upper select.
      54a713aa