1. 19 Oct, 2009 1 commit
  2. 18 Oct, 2009 1 commit
    • Ramil Kalimullin's avatar
      Fix for bug#47963: Wrong results when index is used · 910f43bb
      Ramil Kalimullin authored
      Problem: using null microsecond part in a WHERE condition 
      (e.g. WHERE date_time_field <= "YYYY-MM-DD HH:MM:SS.0000") 
      may lead to wrong results due to improper DATETIMEs 
      comparison in some cases.
      
      Fix: comparing DATETIMEs as strings we must trim trailing 0's
      in such cases.
      
      
      mysql-test/r/innodb_mysql.result:
        Fix for bug#47963: Wrong results when index is used
          - test result.
      mysql-test/t/innodb_mysql.test:
        Fix for bug#47963: Wrong results when index is used
          - test case.
      sql/item.cc:
        Fix for bug#47963: Wrong results when index is used
          - comparing DATETIMEs as strings we must trim trailing 0's in the 
        microsecond part to ensure
        'YYYY-MM-DD HH:MM:SS.000' == 'YYYY-MM-DD HH:MM:SS'
      910f43bb
  3. 16 Oct, 2009 16 commits
    • Alexey Kopytov's avatar
      Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN · 62007189
      Alexey Kopytov authored
       
      The problem was in incorrect handling of predicates involving 
      NULL as a constant value by the range optimizer. 
       
      For example, when creating a SEL_ARG node from a condition of 
      the form "field < const" (which would normally result in the 
      "NULL < field < const" SEL_ARG),  the special case when "const" 
      is NULL was not taken into account, so "NULL < field < NULL" 
      was produced for the "field < NULL" condition. 
       
      As a result, SEL_ARG structures of this form could not be 
      further optimized which in turn could lead to incorrectly 
      constructed SEL_ARG trees. In particular, code assuming SEL_ARG 
      structures to always form a sequence of ordered disjoint 
      intervals could enter an infinite loop under some 
      circumstances. 
       
      Fixed by changing get_mm_leaf() so that for any sargable 
      predicate except "<=>" involving NULL as a constant, "empty" 
      SEL_ARG is returned, since such a predicate is always false. 
      
      mysql-test/r/partition_pruning.result:
        Fixed a broken test case.
      mysql-test/r/range.result:
        Added a test case for bug #47123.
      mysql-test/r/subselect.result:
        Fixed a broken test cases.
      mysql-test/t/range.test:
        Added a test case for bug #47123.
      sql/opt_range.cc:
        Fixed get_mm_leaf() so that for any sargable
        predicate except "<=>" involving NULL as a constant, "empty"
        SEL_ARG is returned, since such a predicate is always false.
      62007189
    • Joerg Bruehe's avatar
      f7831d7c
    • Joerg Bruehe's avatar
      Upmerge a merge changeset. · bad7108e
      Joerg Bruehe authored
      bad7108e
    • Joerg Bruehe's avatar
      Upmerge merge changesets. · ed7a74be
      Joerg Bruehe authored
      ed7a74be
    • Joerg Bruehe's avatar
      Merge a compile fix. · 8bb87c0d
      Joerg Bruehe authored
      8bb87c0d
    • Georgi Kodinov's avatar
      merge · d02ac8cc
      Georgi Kodinov authored
      d02ac8cc
    • Joerg Bruehe's avatar
      90871e02
    • Joerg Bruehe's avatar
      15612306
    • Joerg Bruehe's avatar
      4c51ee51
    • Joerg Bruehe's avatar
      d4cb54c7
    • Joerg Bruehe's avatar
      Compile fix for Windows: · 789bc510
      Joerg Bruehe authored
      Use "#ifdef", not plain "#if".
      789bc510
    • Martin Hansson's avatar
      Bug#46019: ERROR 1356 When selecting from within another · 8ac7c311
      Martin Hansson authored
                  view that has Group By
            
      When SELECT'ing from a view that mentions another,
      materialized, view, access was being denied. The issue was
      resolved by lifting a special case which avoided such access
      checking in check_single_table_access. In the past, this was
      necessary since if such a check were performed, the error
      message would be downgraded to a warning in the case of SHOW
      CREATE VIEW. The downgrading of errors was meant to handle
      only that scenario, but could not distinguish the two as it
      read only the error messages.
            
      The special case was needed in the fix of bug no 36086.
      Before that, views were confused with derived tables.
            
      After bug no 35996 was fixed, the manipulation of errors
      during SHOW CREATE VIEW execution is not dependent on the
      actual error messages in the queue, it rather looks at the
      actual cause of the error and takes appropriate
      action. Hence the aforementioned special case is now
      superfluous and the bug is fixed.
      
      
      mysql-test/r/view_grant.result:
        Bug#46019: Test result.
      mysql-test/t/view_grant.test:
        Bug#46019: Test case.
      sql/sql_parse.cc:
        Bug#46019: fix.
      8ac7c311
    • Georgi Kodinov's avatar
      Bug #40877: multi statement execution fails in 5.1.30 · 9c6668d6
      Georgi Kodinov authored
            
      Implemented the server infrastructure for the fix:
      
      1. Added a function LEX_STRING *thd_query_string(THD) to return
      a LEX_STRING structure instead of char *.
      This is the function that must be called in innodb instead of 
      thd_query()
      
      2. Did some encapsulation in THD : aggregated thd_query and 
      thd_query_length into a LEX_STRING and made accessor and mutator 
      methods for easy code updating. 
      
      3. Updated the server code to use the new methods where applicable.
      9c6668d6
    • Joerg Bruehe's avatar
      494623ab
    • Georgi Kodinov's avatar
      merge · 2605f94a
      Georgi Kodinov authored
      2605f94a
    • Georgi Kodinov's avatar
  4. 15 Oct, 2009 8 commits
  5. 14 Oct, 2009 12 commits
    • Jorgen Loland's avatar
      merge · d9ea1943
      Jorgen Loland authored
      d9ea1943
    • Jorgen Loland's avatar
      Followup patch for BUG#47280 · 08965b75
      Jorgen Loland authored
      Temporary tables may set join->group to 0 even though there is 
      grouping. Also need to test if sum_func_count>0 when JOIN::exec() 
      decides whether to present results in a grouped manner.
      
      sql/sql_select.cc:
        Temporary tables may set join->group to 0 even though there is 
        grouping. Also need to test if sum_func_count>0 when JOIN::exec() 
        decides whether to present results in a grouped manner.
      08965b75
    • Georgi Kodinov's avatar
      merge · d7f8581c
      Georgi Kodinov authored
      d7f8581c
    • Georgi Kodinov's avatar
      merge · fd914752
      Georgi Kodinov authored
      fd914752
    • Georgi Kodinov's avatar
      version change · 5649f3ce
      Georgi Kodinov authored
      5649f3ce
    • Georgi Kodinov's avatar
      merge · d3350778
      Georgi Kodinov authored
      d3350778
    • Georgi Kodinov's avatar
      merged main to mysql-5.0-bugteam · a92e6d3b
      Georgi Kodinov authored
      a92e6d3b
    • Georgi Kodinov's avatar
      merged 5.1-main · 752287f6
      Georgi Kodinov authored
      752287f6
    • He Zhenxing's avatar
      Attempt to fix Windows testcase output issue · ec03ebdf
      He Zhenxing authored
      ec03ebdf
    • Jorgen Loland's avatar
      Bug#47280 - strange results from count(*) with order by multiple · 3ab5751a
      Jorgen Loland authored
                  columns without where/group
                           
      Simple SELECT with implicit grouping used to return many rows if
      the query was ordered by the aggregated column in the SELECT
      list. This was incorrect because queries with implicit grouping
      should only return a single record.
                                    
      The problem was that when JOIN:exec() decided if execution needed
      to handle grouping, it was assumed that sum_func_count==0 meant
      that there were no aggregate functions in the query. This
      assumption was not correct in JOIN::exec() because the aggregate
      functions might have been optimized away during JOIN::optimize().
                        
      The reason why queries without ordering behaved correctly was
      that sum_func_count is only recalculated if the optimizer chooses
      to use temporary tables (which it does in the ordered case).
      Hence, non-ordered queries were correctly treated as grouped.
                        
      The fix for this bug was to remove the assumption that
      sum_func_count==0 means that there is no need for grouping. This
      was done by introducing variable "bool implicit_grouping" in the
      JOIN object.
      
      mysql-test/r/func_group.result:
        Add test for BUG#47280
      mysql-test/t/func_group.test:
        Add test for BUG#47280
      sql/opt_sum.cc:
        Improve comment for opt_sum_query()
      sql/sql_class.h:
        Add comment for variables in TMP_TABLE_PARAM
      sql/sql_select.cc:
        Introduce and use variable implicit_grouping instead of (!group_list && sum_func_count) in places that need to test if grouping is required. Also added comments for: optimization of aggregate fields for implicitly grouped queries  (JOIN::optimize) and choice of end_select method (JOIN::execute)
      sql/sql_select.h:
        Add variable implicit_grouping, which will be TRUE for queries that contain aggregate functions but no GROUP BY clause. Also added comment to sort_and_group variable.
      3ab5751a
    • unknown's avatar
      Null-merge from mysql-5.0.84sp1-release · b9acf240
      unknown authored
      b9acf240
    • unknown's avatar
      Bug#46640: output from mysqlbinlog command in 5.1 breaks replication · dafe440f
      unknown authored
            
      The BINLOG statement was sharing too much code with the slave SQL thread, introduced with
      the patch for Bug#32407. This caused statements to be logged with the wrong server_id, the
      id stored inside the events of the BINLOG statement rather than the id of the running 
      server.
            
      Fix by rearranging code a bit so that only relevant parts of the code are executed by
      the BINLOG statement, and the server_id of the server executing the statements will 
      not be overrided by the server_id stored in the 'format description BINLOG statement'.
      
      mysql-test/extra/binlog_tests/binlog.test:
        Added test to verify if the server_id stored in the 'format 
        description BINLOG statement' will override the server_id
        of the server executing the statements.
      mysql-test/suite/binlog/r/binlog_row_binlog.result:
        Test result for bug#46640
      mysql-test/suite/binlog/r/binlog_stm_binlog.result:
        Test result for bug#46640
      sql/log_event.cc:
        Moved rows_event_stmt_clean() call from update_pos() to apply_event(). This in any case
        makes more sense, and is needed as update_pos() is no longer called when executing
        BINLOG statements.
        
        Moved setting of rli->relay_log.description_event_for_exec from 
        Format_description_log_event::do_update_pos() to 
        Format_description_log_event::do_apply_event()
      sql/log_event_old.cc:
        Moved rows_event_stmt_clean() call from update_pos() to apply_event(). This in any case
        makes more sense, and is needed as update_pos() is no longer called when executing
        BINLOG statements.
      sql/slave.cc:
        The skip flag is no longer needed, as the code path for BINLOG statement has been 
        cleaned up.
      sql/sql_binlog.cc:
        Don't invoke the update_pos() code path for the BINLOG statement, as it contains code 
        that is redundant and/or harmful (especially setting thd->server_id).
      dafe440f
  6. 13 Oct, 2009 2 commits