1. 25 Mar, 2011 4 commits
  2. 24 Mar, 2011 1 commit
    • unknown's avatar
      Fix LP BUG#715738 · dc9ba672
      unknown authored
      Analysis:
      A query with implicit grouping is one with aggregate functions and
      no GROUP BY clause. MariaDB inherits from MySQL an SQL extenstion
      that allows mixing aggregate functions with non-aggregate fields.
      If a query with such mixed select clause produces an empty result
      set, the meaning of aggregate functions is well defined - either
      NULL (MIN, MAX, etc.), or 0 (count(*)). However the non-aggregated
      fields must also have some value, and the only reasonable value in
      the case of empty result is NULL.
      
      The cause of the many wrong results was that if a field is declared
      as non-nullable (e.g. because it is a PK or NOT NULL), the semantic
      analysis and the optimization phases treat this field as non-nullable,
      and generate all related query plan elements based on this assumption.
      
      Later during execution, these incorrectly configured/generated query
      plan elements result in a wrong result because the selected fields
      are not null due to the not-null assumption during optimization.
      
      Solution:
      Detect before the context analysys phase that a query uses implicit
      grouping with mixed aggregates/non-aggregates, and set all fields
      as nullable. The parser already walks the SELECT clause, and
      already sets Item::with_sum_func for Items that reference aggreagate
      functions. The patch adds a symmetric Item::with_field so that all
      Items that reference an Item_field are marked during their
      construction at parse time in the same way as with aggregate function
      use.
      dc9ba672
  3. 23 Mar, 2011 2 commits
    • Michael Widenius's avatar
      Merge with base 5.2 · e81fbf92
      Michael Widenius authored
      e81fbf92
    • Michael Widenius's avatar
      Added --log-basename to mysqld to allow one to set the prefix for all logs with one command · 2c9854a9
      Michael Widenius authored
      Changed test suite to use --log-basename (to get the code tested)
      Added --sync-sys=1 to test suite to speed it up.
      Better error messages if something goes wrong with mysql_install_db
      
      
      mysql-test/Makefile.am:
        Removed not existing directory
      mysql-test/lib/My/ConfigFactory.pm:
        Use log-basename
        We had to also set 'log_error' as some test was explicitely using the old name
        Added 'sync-sys=1' to speed up test suite
      mysql-test/r/variables-notembedded.result:
        Updated test results (variable relay_log is now set)
      mysql-test/suite/binlog/t/binlog_delete_and_flush_index-master.opt:
        Force specific names for some log files.
      mysql-test/suite/binlog/t/binlog_index-master.opt:
        Force specific names for some log files.
      mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt:
        Force specific names for some log files.
      mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test:
        Better error message if something goes wrong
      mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
        Updated results
      mysql-test/suite/rpl/rpl_1slave_base.cnf:
        Use --log-basename
      scripts/mysql_install_db.sh:
        More information to --help
        Write url to knowledge base if something goes wrong
        Fail at once if we can't create a database directory (no reason to continue and write a screenful of not related text)
      scripts/mysqld_safe.sh:
        Also allow one to use --data for --datadir (common shortening)
        Added support for --log-basename
        Fail at once if we can't create a log directory
        Fixed bug where we used a pid file name without '.pid' extension
      sql/log.cc:
        Create a log file name trough my_once_alloc()  (To get it automaticly freed at exit)
      sql/mysql_priv.h:
        Added new prototype
      sql/mysqld.cc:
        Added support for --log-basename
        Better help for a lot of log-filename related variables.
      sql/rpl_rli.cc:
        Write information that one can use --log-basename
      sql/set_var.cc:
        Add log_basename as a readonly variable
      2c9854a9
  4. 18 Mar, 2011 1 commit
    • Michael Widenius's avatar
      Ensure that all clients reads the appropriate 'client', client-mariadb and... · 39c004f7
      Michael Widenius authored
      Ensure that all clients reads the appropriate 'client', client-mariadb and 'mariadb' sections from my.cnf
      The mysqld server and all clients now reads the new client-server section
      Fixed that mysqldumpslow supports new slow log formats and new mysqld --slow- options
      
      
      client/mysql.cc:
        Read also client-server and client-mariadb sections.
      client/mysql_upgrade.c:
        Read also client-server and client-mariadb sections.
      client/mysqladmin.cc:
        Read also client-server and client-mariadb sections.
      client/mysqlbinlog.cc:
        Read also client-server and client-mariadb sections.
      client/mysqlcheck.c:
        Read also client-server and client-mariadb sections.
      client/mysqldump.c:
        Read also client-server and client-mariadb sections.
      client/mysqlimport.c:
        Read also client-server and client-mariadb sections.
      client/mysqlshow.c:
        Read also client-server and client-mariadb sections.
      client/mysqltest.cc:
        Read also client-server and client-mariadb sections.
      extra/my_print_defaults.c:
        Updated help text
      scripts/mysql_fix_privilege_tables.sh:
        Read also sections client client-server client-mariadb
      scripts/mysql_install_db.pl.in:
        Also allow --data=* option
        Read also groups mariadb, server and client-server.
      scripts/mysql_install_db.sh:
        Also allow --data=* option
        Read also groups mariadb, server and client-server.
        Added --lose-skip-pbxt to bootstrap
      scripts/mysql_secure_installation.sh:
        Read also groups client-server and client-mariadb
      scripts/mysqld_multi.sh:
        Read also group mariadb
      scripts/mysqld_safe.sh:
        Read also groups mariadb server and client-server
      scripts/mysqldumpslow.sh:
        Fixed to support new slow log formats
        Added sorting on -ae (aggregated number of retreived rows) and e (retrieved rows)
        Read also group 'mariadb'
        If there is many instances of same option, use last one.
        Get slow log file from options log-slow-queries=filename or query-log-file=filename
        Added support for future --log-basename option
      sql-common/client.c:
        Read also groups 'client-server' and 'client-mariadb'
      tests/mysql_client_test.c:
        Read also groups 'client-server' and 'client-mariadb'
      tests/thread_test.c:
        Read also groups 'client-server' and 'client-mariadb'
      39c004f7
  5. 15 Mar, 2011 1 commit
  6. 13 Mar, 2011 3 commits
    • unknown's avatar
      Merge in the fix for LPBUG#730604, and a corrected fix for LP BUG#719198, · 76379be1
      unknown authored
      after Monty's review.
      76379be1
    • unknown's avatar
      Fix LP BUG#719198, LP BUG#730604 · 329f6431
      unknown authored
      Analysis (BUG#719198):
      The assert failed because the execution code for
      partial matching is designed with the assumption that
      NULLs on the left side are detected as early as possible,
      and a NULL result is returned before any lookups are
      performed at all.
      
      However, in the case of an Item_cache object on the left
      side, null was not detected properly, because detection
      was done via Item::is_null(), which is not implemented at
      all for Item_cache, and resolved to the default Item::is_null()
      which always returns FALSE.
      
      Solution:
      Imlpement Item::is_null().
      
      ******
      
      Analysis (BUG#730604):
      The method Item_field::is_null() determines if an item is NULL from its
      Item_field::field object. However, for Item_fields that represent internal
      temporary tables, Item_field::field represents the field of the original
      table that was the source for the temporary table (in this case t1.f3).
      Both in the committed test case, and in the original bug report the current
      value of t1.f3 is not NULL. This results in an incorrect count of NULLs
      for this column. As a consequence, all related Ordered_key buffers are
      allocated with incorrect sizes. Depending on the exact query and data,
      these incorrect sizes result in various crashes or failed asserts.
      
      Solution:
      The correct value of the current field of the internal temp table is
      in Item_field::result_field. This value is determined by
      Item::is_null_result().
      329f6431
    • Igor Babaev's avatar
      Merge · ba9df907
      Igor Babaev authored
      ba9df907
  7. 12 Mar, 2011 3 commits
  8. 11 Mar, 2011 8 commits
  9. 10 Mar, 2011 1 commit
  10. 09 Mar, 2011 3 commits
  11. 08 Mar, 2011 5 commits
    • Michael Widenius's avatar
    • unknown's avatar
      Fix LP BUG#719198 · b15bf935
      unknown authored
      Analysis:
      The assert failed because the execution code for
      partial matching is designed with the assumption that
      NULLs on the left side are detected as early as possible,
      and a NULL result is returned before any lookups are
      performed at all.
      
      However, in the case of an Item_cache object on the left
      side, null was not detected properly, because detection
      was done via Item::is_null(), which is not implemented at
      all for Item_cache, and resolved to the default Item::is_null()
      which always returns FALSE.
      
      Solution:
      Use the property Item::null_value instead of is_null(), which
      is properly updated for Item_cache objects as well.
      b15bf935
    • Michael Widenius's avatar
      Automatic merge with 5.1 · 1e418245
      Michael Widenius authored
      1e418245
    • Michael Widenius's avatar
      Don't check if LAST_IO_Error has changed as this is not a user variable and it... · 1a6b4e51
      Michael Widenius authored
      Don't check if LAST_IO_Error has changed as this is not a user variable and it may change depending on timing issues between master and slave
      1a6b4e51
    • Igor Babaev's avatar
      Fixed LP bug #729039. · 1fdd365c
      Igor Babaev authored
      If join condition is of the form <t2.key>=<t1.no_key> then the server
      performs no index look-ups when looking for matching rows of t2 for
      the rows from t1 with t1.no_key=NULL. It happens because the function
      add_not_null_conds() injects an additional condition of the form 
      IS NOT NULL(<t1.no_key>) into the WHERE condition.
      However if the join condition was of the form <t.key>=<outer_ref> no
      additional null rejecting predicate was generated. This could lead
      to extra records in the result set if the value of <outer_ref> happened
      to be NULL.
      The new code injects null rejecting predicates of the form 
      IS NOT NULL(<outer_ref>) and evaluates them before the first row
      the subquery is constructed.
      1fdd365c
  12. 07 Mar, 2011 1 commit
  13. 05 Mar, 2011 1 commit
    • Sergey Petrunya's avatar
      BUG#727667 Wrong result with OR + NOT NULL in maria-5.3 · 6aae42a3
      Sergey Petrunya authored
      - put the code that sets HA_NULL_PART bit back
      - Fix test_if_ref/part_of_refkey() so that 
        = NULL-ability of lookup columns does not prevent the equality 
          from being removed (we now have early/late NULLs filtering which 
          will filter out NULL values)
        = equality is not removed if it is ref_or_null access, and the value 
          of the lookup column can alternate between the lookup value and NULL.
      6aae42a3
  14. 04 Mar, 2011 6 commits