1. 17 Oct, 2012 1 commit
    • unknown's avatar
      MDEV-452 Add full support for auto-initialized/updated timestamp and datetime · bc4a4567
      unknown authored
      Generalized support for auto-updated and/or auto-initialized timestamp
      and datetime columns. This patch is a reimplementation of MySQL's
      "WL#5874: CURRENT_TIMESTAMP as DEFAULT for DATETIME columns". In order to
      ease future merges, this implementation reused few function and variable
      names from MySQL's patch, however the implementation is quite different.
      
      TODO:
      The only unresolved problem in this patch is the semantics of LOAD DATA for
      TIMESTAMP and DATETIME columns in the cases when there are missing or NULL
      columns. I couldn't fully comprehend the logic behind MySQL's behavior and
      its relationship with their own documentation, so I left the results to be
      more consistent with all other LOAD cases.
      
      The problematic test cases can be seen by running the test file function_defaults,
      and observing the test case differences. Those were left on purpose for discussion.
      bc4a4567
  2. 22 Sep, 2012 3 commits
  3. 21 Sep, 2012 1 commit
  4. 18 Sep, 2012 5 commits
    • Michael Widenius's avatar
      This fix+comments was originally made by Alexey Kopytov · af4eeaf5
      Michael Widenius authored
      LP bug #1035225 / MySQL bug #66301: INSERT ... ON DUPLICATE KEY UPDATE +
      innodb_autoinc_lock_mode=1 is broken
      
      The problem was that when certain INSERT ... ON DUPLICATE KEY UPDATE
      were executed concurrently on a table containing an AUTO_INCREMENT
      column as a primary key, InnoDB would correctly reserve non-overlapping
      AUTO_INCREMENT intervals for each statement, but when the server
      encountered the first duplicate key error on the secondary key in one of
      the statements and performed an UPDATE, it also updated the internal
      AUTO_INCREMENT value to the one from the existing row that caused a
      duplicate key error, even though the AUTO_INCREMENT value was not
      specified explicitly in the UPDATE clause. It would then proceed with
      using AUTO_INCREMENT values the range reserved previously by another
      statement, causing duplicate key errors on the AUTO_INCREMENT column.
      
      Fixed by changing write_record() to ensure that in case of a duplicate
      key error the internal AUTO_INCREMENT counter is only updated when the
      AUTO_INCREMENT value was explicitly updated by the UPDATE
      clause. Otherwise it is restored to what it was before the duplicate key
      error, as that value is unused and can be reused for subsequent
      successfully inserted rows.
      
      sql/sql_insert.cc:
        Don't update next_insert_id to the value of a row found during ON DUPLICATE KEY UPDATE.
      sql/sql_parse.cc:
        Added DBUG_SYNC
      sql/table.h:
        Added next_number_field_updated flag to detect changing of auto increment fields.
        Moved fields a bit to get bool fields after each other (better alignment)
      af4eeaf5
    • Michael Widenius's avatar
      Automatic merge · 6f57fc50
      Michael Widenius authored
      6f57fc50
    • Michael Widenius's avatar
      Fixed test for ps-protocol · f3034236
      Michael Widenius authored
      f3034236
    • Michael Widenius's avatar
      Fix for MDEV-533: Confusing error code when doing auto-increment insert for out-of-range values · ae5bc059
      Michael Widenius authored
      create table t1 (a smallint primary key auto_increment);
      insert into t1 values(32767);
      insert into t1 values(NULL);
      ERROR 1062 (23000): Duplicate entry '32767' for key 'PRIMARY
      
      Now on always gets error HA_ERR_AUTOINC_RANGE=167 "Out of range value for column", independent of
      store engine, SQL Mode or number of inserted rows. This is an unique error that is easier to test for in replication.
      
      Another bug fix is that we now get an error when trying to insert a too big auto-generated value, even in non-strict mode.
      Before one get insted the max column value inserted.
      This patch also fixes some issues with inserting negative numbers in an auto-increment column.
      Fixed the ER_DUP_ENTRY and HA_ERR_AUTOINC_ERANGE are compared the same between master and slave.
      This ensures that replication works between an old server to a new slave for auto-increment overflow errors.
      Added SQLSTATE errors for handler errors
      
      Smaller bug fixes:
      * Added warnings for duplicate key errors when using INSERT IGNORE
      * Fixed bug when using --skip-log-bin followed by --log-bin, which did set log-bin to "0"
      * Allow one to see how cmake is called by using --just-print --just-configure
      
      
      BUILD/FINISH.sh:
        --just-print --just-configure now shows how cmake would be invoked. Good for understanding parameters to cmake.
      cmake/configure.pl:
        --just-print --just-configure now shows how cmake would be invoked. Good for understanding parameters to cmake.
      include/CMakeLists.txt:
        Added handler_state.h
      include/handler_state.h:
        SQLSTATE for handler error messages.
        Required for HA_ERR_AUTOINC_ERANGE, but solves also some other cases.
      mysql-test/extra/binlog_tests/binlog.test:
        Fixed old wrong behaviour
        Added more tests
      mysql-test/extra/binlog_tests/binlog_insert_delayed.test:
        Reset binary log to only print what's necessary in show_binlog_events
      mysql-test/extra/rpl_tests/rpl_auto_increment.test:
        Update to new error codes
      mysql-test/extra/rpl_tests/rpl_insert_delayed.test:
        Ignore warnings as this depends on how the test is run
      mysql-test/include/strict_autoinc.inc:
        On now gets an error on overflow
      mysql-test/r/auto_increment.result:
        Update results after fixing error message
      mysql-test/r/auto_increment_ranges_innodb.result:
        Test new behaviour
      mysql-test/r/auto_increment_ranges_myisam.result:
        Test new behaviour
      mysql-test/r/commit_1innodb.result:
        Added warnings for duplicate key error
      mysql-test/r/create.result:
        Added warnings for duplicate key error
      mysql-test/r/insert.result:
        Added warnings for duplicate key error
      mysql-test/r/insert_select.result:
        Added warnings for duplicate key error
      mysql-test/r/insert_update.result:
        Added warnings for duplicate key error
      mysql-test/r/mix2_myisam.result:
        Added warnings for duplicate key error
      mysql-test/r/myisam_mrr.result:
        Added warnings for duplicate key error
      mysql-test/r/null_key.result:
        Added warnings for duplicate key error
      mysql-test/r/replace.result:
        Update to new error codes
      mysql-test/r/strict_autoinc_1myisam.result:
        Update to new error codes
      mysql-test/r/strict_autoinc_2innodb.result:
        Update to new error codes
      mysql-test/r/strict_autoinc_3heap.result:
        Update to new error codes
      mysql-test/r/trigger.result:
        Added warnings for duplicate key error
      mysql-test/r/xtradb_mrr.result:
        Added warnings for duplicate key error
      mysql-test/suite/binlog/r/binlog_innodb_row.result:
        Updated result
      mysql-test/suite/binlog/r/binlog_row_binlog.result:
        Out of range data for auto-increment is not inserted anymore
      mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result:
        Updated result
      mysql-test/suite/binlog/r/binlog_stm_binlog.result:
        Out of range data for auto-increment is not inserted anymore
      mysql-test/suite/binlog/r/binlog_unsafe.result:
        Updated result
      mysql-test/suite/innodb/r/innodb-autoinc.result:
        Update to new error codes
      mysql-test/suite/innodb/r/innodb-lock.result:
        Updated results
      mysql-test/suite/innodb/r/innodb.result:
        Updated results
      mysql-test/suite/innodb/r/innodb_bug56947.result:
        Updated results
      mysql-test/suite/innodb/r/innodb_mysql.result:
        Updated results
      mysql-test/suite/innodb/t/innodb-autoinc.test:
        Update to new error codes
      mysql-test/suite/maria/maria3.result:
        Updated result
      mysql-test/suite/maria/mrr.result:
        Updated result
      mysql-test/suite/optimizer_unfixed_bugs/r/bug43617.result:
        Updated result
      mysql-test/suite/rpl/r/rpl_auto_increment.result:
        Update to new error codes
      mysql-test/suite/rpl/r/rpl_insert_delayed,stmt.rdiff:
        Updated results
      mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
        Updated results
      mysql-test/t/auto_increment.test:
        Update to new error codes
      mysql-test/t/auto_increment_ranges.inc:
        Test new behaviour
      mysql-test/t/auto_increment_ranges_innodb.test:
        Test new behaviour
      mysql-test/t/auto_increment_ranges_myisam.test:
        Test new behaviour
      mysql-test/t/replace.test:
        Update to new error codes
      mysys/my_getopt.c:
        Fixed bug when using --skip-log-bin followed by --log-bin, which did set log-bin to "0"
      sql/handler.cc:
        Ignore negative values for signed auto-increment columns
        Always give an error if we get an overflow for an auto-increment-column (instead of inserting the max value)
        Ensure that the row number is correct for the out-of-range-value error message.
        
        
        ******
        Fixed wrong printing of column namn for "Out of range value" errors
        Fixed that INSERT_ID is correctly replicated also for out-of-range autoincrement values
        Fixed that print_keydup_error() can also be used to generate warnings
        ******
        Return HA_ERR_AUTOINC_ERANGE (167) instead of ER_WARN_DATA_OUT_OF_RANGE for auto-increment overflow
      sql/handler.h:
        Allow INSERT IGNORE to continue also after out-of-range inserts.
        Fixed that print_keydup_error() can also be used to generate warnings
      sql/log_event.cc:
        Added DBUG_PRINT
        Fixed the ER_AUTOINC_READ_FAILED, ER_DUP_ENTRY and HA_ERR_AUTOINC_ERANGE are compared the same between master and slave.
        This ensures that replication works between an old server to a new slave for auto-increment overflow errors.
      sql/sql_insert.cc:
        Add warnings for duplicate key errors when using INSERT IGNORE
      sql/sql_state.c:
        Added handler errors
      sql/sql_table.cc:
        Update call to print_keydup_error()
      storage/innobase/handler/ha_innodb.cc:
        Fixed increment handling of auto-increment columns to be consistent with rest of MariaDB.
      storage/xtradb/handler/ha_innodb.cc:
        Fixed increment handling of auto-increment columns to be consistent with rest of MariaDB.
      ae5bc059
    • unknown's avatar
      Merged the fix for bug lp:1009187, mdev-373 · caf31114
      unknown authored
      caf31114
  5. 17 Sep, 2012 2 commits
  6. 14 Sep, 2012 1 commit
    • unknown's avatar
      Fix bug lp:1009187, mdev-373, mysql bug#58628 · b917fb63
      unknown authored
      Analysis:
      The queries in question use the [unique | index]_subquery execution methods.
      These methods reuse the ref keys constructed by create_ref_for_key(). The
      way create_ref_for_key() works is that it doesn't store in ref.key_copy[]
      store_key elements that represent constants. In particular it doesn't store
      the store_key for NULL constants.
      
      The execution of [unique | index]_subquery calls
      subselect_uniquesubquery_engine::copy_ref_key, which in addition to copy
      the left IN argument into a index lookup key, is supposed to detect if
      the left IN argument contains NULLs. Since the store_key for the NULL
      constant is not copied into the key array, the null is not detected, and
      execution erroneously proceeds as if it should look for a complete match.
      
      Solution:
      The solution (unlike MySQL) is to reuse already computed information about
      NULL presence. Item_in_optimizer::val_int already finds out if the left IN
      operand contains NULLs. The fix propagates this to the execution methods
      subselect_[unique | index]subquery_engine::exec so it knows if there were
      NULL values independent of the presence of keys.
      
      In addition the patch siplifies copy_ref_key() and the logic that hanldes
      the case of NULLs in the left IN operand.
      b917fb63
  7. 13 Sep, 2012 2 commits
    • Michael Widenius's avatar
      Added THD::utime_after_query to avoid calling current_utime() twice for every end-of-query · 32e4c7e1
      Michael Widenius authored
      Increment long_query_count also if thd->variables.log_slow_rate_limit is used
      Added new state "Writing to binlog"
      
      
      sql/sql_class.h:
        Added THD::utime_after_query to avoid calling current_utime() twice for every end-of-query
      sql/sql_parse.cc:
        Increment long_query_count also if thd->variables.log_slow_rate_limit is used
        Removed extra calls to thd_proc_info(thd, "logging slow query") and thd->current_utime();
      sql/sql_table.cc:
        Added new state "Writing to binlog"
      32e4c7e1
    • unknown's avatar
      MDEV-232: Remove one fsync() from commit phase. · 288eeb3a
      unknown authored
      Introduce a new storage engine API method commit_checkpoint_request().
      This is used to replace the fsync() at the end of every storage engine
      commit with a single fsync() when a binlog is rotated.
      
      Binlog rotation is now done during group commit instead of being
      delayed until unlog(), removing some server stall and avoiding an
      expensive lock/unlock of LOCK_log inside unlog().
      288eeb3a
  8. 10 Sep, 2012 3 commits
  9. 08 Sep, 2012 2 commits
    • Michael Widenius's avatar
      Added new status variables: · 3a793b9d
      Michael Widenius authored
      feature_dynamic_columns,feature_fulltext,feature_gis,feature_locale,feature_subquery,feature_timezone,feature_trigger,feature_xml
      Opened_views, Executed_triggers, Executed_events
      Added new process status 'updating status' as part of 'freeing items'
      
      mysql-test/r/features.result:
        Test of feature_xxx status variables
      mysql-test/r/mysqld--help.result:
        Removed duplicated 'language' variable.
      mysql-test/r/view.result:
        Test of opened_views
      mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
        Write more information on failure
      mysql-test/t/features.test:
        Test of feature_xxx status variables
      mysql-test/t/view.test:
        Test of opened_views
      sql/event_scheduler.cc:
        Increment executed_events status variable
      sql/field.cc:
        Increment status variable
      sql/item_func.cc:
        Increment status variable
      sql/item_strfunc.cc:
        Increment status variable
      sql/item_subselect.cc:
        Increment status variable
      sql/item_xmlfunc.cc:
        Increment status variable
      sql/mysqld.cc:
        Add new status variables to 'show status'
      sql/mysqld.h:
        Added executed_events
      sql/sql_base.cc:
        Increment status variable
      sql/sql_class.h:
        Add new status variables
      sql/sql_parse.cc:
        Added new process status 'updating status' as part of 'freeing items'
      sql/sql_trigger.cc:
        Increment status variable
      sql/sys_vars.cc:
        Increment status variable
      sql/tztime.cc:
        Increment status variable
      3a793b9d
    • Michael Widenius's avatar
      Automatic merge · 5161b3dd
      Michael Widenius authored
      5161b3dd
  10. 07 Sep, 2012 3 commits
    • Michael Widenius's avatar
      Better error message when using --language or --log-bin · 2fc4c751
      Michael Widenius authored
      Simplify code
      
      sql/derror.cc:
        Better error message
      sql/mysqld.cc:
        Simplify usage of lc_messages_dir_ptr.
        Don't give warnings that --log-bin should be used if --log-bin or --skip-log-bin is used.
      2fc4c751
    • unknown's avatar
      Fix of MDEV-511. · 83bdf56e
      unknown authored
      As far as we reopen tables so TABLE become invalid we should remove the pointer on cleanup().
      83bdf56e
    • unknown's avatar
      Fix of MDEV-511. · 22de18dd
      unknown authored
      As far as we reopen tables so TABLE become invalid we should remove the pointer on cleanup().
      22de18dd
  11. 06 Sep, 2012 1 commit
  12. 05 Sep, 2012 6 commits
  13. 04 Sep, 2012 3 commits
    • Sergei Golubchik's avatar
      MDEV-481 Assertion `pins->pin[i] == 0' failed in _lf_pinbox_put_pins on... · 1f927079
      Sergei Golubchik authored
      MDEV-481 Assertion `pins->pin[i] == 0' failed in _lf_pinbox_put_pins on concurrent OPTIMIZE TABLE and DML with Aria tables
      
      A bug in the lock-free hash implementation!
      when lsearch() has not found the key, the caller needs to unpin all the three pins,
      because lsearch() was using all the three.
      
      1f927079
    • Michael Widenius's avatar
      Switch automaticly to statement based replication for statements that can't... · 51392386
      Michael Widenius authored
      Switch automaticly to statement based replication for statements that can't generate row based events. This is needed to avoid getting
      updates to system, statistics and admin tables logged to binary log.
      - Removed special code used to temporarily change to statement based replication.
      - Changed to a faster and smaller interface for temporarily switching to statement based replication.
      
      sql/event_db_repository.cc:
        Change to new interface to not use row based replication for system table changes.
      sql/events.cc:
        Change to new interface to not use row based replication for system table changes.
      sql/sp.cc:
        Removed temporarily switching to statement based replication (this is now done automaticly in mysql_execute_command())
      sql/sql_acl.cc:
        Change to new interface to not use row based replication for system table changes.
        Removed temporarily switching to statement based replication (this is now done automaticly in mysql_execute_command())
      sql/sql_class.h:
        Added new interface for temporarily switching to statement based replication.
      sql/sql_parse.cc:
        Mark commands that needs original replication mode with CF_FORCE_ORIGINAL_BINLOG_FORMAT.
        Switch automaticly to statement based replication for statements that can't generate row based events (and can't change replication mode)
      sql/sql_udf.cc:
        Removed temporarily switching to statement based replication (this is now done automaticly in mysql_execute_command())
      51392386
    • Sergei Golubchik's avatar
      1. fix an old typo. A purgatory must be cleaned on every LF_PURGATORY_SIZE freeing, · 0b5564b8
      Sergei Golubchik authored
         not every time.
      2. Increase purgatory size.
      
      include/lf.h:
        allocate larger purgatory
      mysys/lf_alloc-pin.c:
        typo.
      0b5564b8
  14. 02 Sep, 2012 2 commits
  15. 01 Sep, 2012 1 commit
  16. 31 Aug, 2012 4 commits