1. 24 Apr, 2017 1 commit
  2. 23 Apr, 2017 3 commits
    • Monty's avatar
      Changing field::field_name and Item::name to LEX_CSTRING · 5a759d31
      Monty authored
      Benefits of this patch:
      - Removed a lot of calls to strlen(), especially for field_string
      - Strings generated by parser are now const strings, less chance of
        accidently changing a string
      - Removed a lot of calls with LEX_STRING as parameter (changed to pointer)
      - More uniform code
      - Item::name_length was not kept up to date. Now fixed
      - Several bugs found and fixed (Access to null pointers,
        access of freed memory, wrong arguments to printf like functions)
      - Removed a lot of casts from (const char*) to (char*)
      
      Changes:
      - This caused some ABI changes
        - lex_string_set now uses LEX_CSTRING
        - Some fucntions are now taking const char* instead of char*
      - Create_field::change and after changed to LEX_CSTRING
      - handler::connect_string, comment and engine_name() changed to LEX_CSTRING
      - Checked printf() related calls to find bugs. Found and fixed several
        errors in old code.
      - A lot of changes from LEX_STRING to LEX_CSTRING, especially related to
        parsing and events.
      - Some changes from LEX_STRING and LEX_STRING & to LEX_CSTRING*
      - Some changes for char* to const char*
      - Added printf argument checking for my_snprintf()
      - Introduced null_clex_str, star_clex_string, temp_lex_str to simplify
        code
      - Added item_empty_name and item_used_name to be able to distingush between
        items that was given an empty name and items that was not given a name
        This is used in sql_yacc.yy to know when to give an item a name.
      - select table_name."*' is not anymore same as table_name.*
      - removed not used function Item::rename()
      - Added comparision of item->name_length before some calls to
        my_strcasecmp() to speed up comparison
      - Moved Item_sp_variable::make_field() from item.h to item.cc
      - Some minimal code changes to avoid copying to const char *
      - Fixed wrong error message in wsrep_mysql_parse()
      - Fixed wrong code in find_field_in_natural_join() where real_item() was
        set when it shouldn't
      - ER_ERROR_ON_RENAME was used with extra arguments.
      - Removed some (wrong) ER_OUTOFMEMORY, as alloc_root will already
        give the error.
      
      TODO:
      - Check possible unsafe casts in plugin/auth_examples/qa_auth_interface.c
      - Change code to not modify LEX_CSTRING for database name
        (as part of lower_case_table_names)
      5a759d31
    • Monty's avatar
      Fixed compiler warnings and wrong test results · cba84469
      Monty authored
      cba84469
    • Alexander Barkov's avatar
      Fixing a bug in the recent commit that added trigger names into error messages · f8221294
      Alexander Barkov authored
      Trigger names were erroneously cut to 8 or 4 bytes (on 64 and 32 bit machines).
      Recording correct tests results.
      f8221294
  3. 22 Apr, 2017 3 commits
    • Alexander Barkov's avatar
      MDEV-12506 Split Item_func_min_max::fix_length_and_dec() into methods in... · 65808255
      Alexander Barkov authored
      MDEV-12506 Split Item_func_min_max::fix_length_and_dec() into methods in Type_handler + MDEV-12497 + MDEV-12504
      
      This patch does the following:
      
      1. Adds a new method Type_handler_hybrid_field_type::aggregate_for_min_max()
      
         - For non-traditional data types it uses
           type_handler_data->m_type_aggregator_for_result.find_handler()
           This allows pluggable data types to define in the future their
           own behavior of the result data type detection for LEAST/GREATEST.
           Also, this disallows expressions of the GEOMETRY data type
           (and its variants such as POINT) to be mixed in with
           numeric and temporal data types in LEAST/GREATEST.
      
         - For traditional data types it reproduces the old behavior of
           the result data type detection (but not attributes, see below).
      
      2. Adds a new virtual method Type_handler::Item_func_min_max_fix_attributes()
         and reuses as much as possible the code that calculates data type attributes
         for CASE-alike functions (e.g. CASE..THEN, COALESCE, IF).
      
         As the old code responsible for attributes calculation in the old
         implementation of Item_func_min_max::fix_length_and_dec()
         was not fully correct, this automatically fixes the following bugs:
      
         - MDEV-12497 Wrong data type for LEAST(latin1_expr, utf8_expr)
           The old fix_length_and_dec() calculated max_length before
           character set aggregation. Now max_length is calculated after, in
           Item_func::count_string_length() called from
           Item_func::aggregate_attributes_string() called from
           Type_handler_string_result::Item_hybrid_func_fix_attributes() called from
           Type_handler::Item_func_min_max_fix_attributes() called from
           Item_func_min_max::fix_length_and_dec().
      
         - MDEV-12504 Wrong data type for LEAST(date_expr,time_expr)
           The old fix_length_and_dec() simply used the maximum of max_length
           among all arguments to set its own max_length and did not take
           into account that a mixture of DATE and TIME becomes DATETIME.
           Now this is correctly handled by:
           Type_handler_datetime_common::Item_hybrid_func_fix_attributes() called from
           Type_handler::Item_func_min_max_fix_attributes() called from
           Item_func_min_max::fix_length_and_dec().
      
      3. Removes the old implementation of Item_func_min_max::fix_length_and_dec()
         and replaces it to calls of the new methods.
      
      4. Cleanup: moves the code related to unsigned_flag processing
         from Type_handler_hybrid_field_type::aggregate_for_result()
         to   Type_handler_int_result::Item_hybrid_func_fix_attributes().
         This is done:
         - to avoid code duplication in
           Type_handler_hybrid_field_type::aggregate_for_min_max()
         - to get rid of one more call for field_type(), which is unfriendly
           to the conceipt of pluggable data types.
      65808255
    • Alexander Barkov's avatar
      MDEV-12559 Split Item::temporal_precision() into virtual methods in Type_handler · ba670edf
      Alexander Barkov authored
      - Adding a new virtual method Type_handler::Item_time_precision()
      - Adding a new virtual method Type_handler::Item_datetime_precision()
      - Removing Item::temporal_precision() and adding Item::time_precision()
        and Item::datetime_precision() instead.
      - Moving Item_func_convert_tz::fix_length_and_dec() from item_timefunc.cc
        to item_timefunc.h. It's only two lines, and we're changing it anyway.
      - Removing Item_temporal_typecast::fix_length_and_dec_generic(),
        moving this code to
        Type_handler::Item_{date|time|datetime}_typecast_fix_length_and_dec().
        This allows to get rid of one more field_type() call.
        Also, in the old reduction, Item_date_typecast::fix_length_and_dec()
        unnecessarily called args[0]->temporal_precision(). The new reduction
        does not call args[0]->datetime_precision(), as DATE does not
        have fractional digits.
      ba670edf
    • Alexander Barkov's avatar
      b7814086
  4. 20 Apr, 2017 2 commits
  5. 19 Apr, 2017 4 commits
    • Monty's avatar
      e6c11717
    • Monty's avatar
      Fixed some wrong/inconsistent error message · 847eb24b
      Monty authored
      - Added trigger name to "Trigger already exists" error message
      - Added also missing query name to ER_DUP_QUERY_NAME
      - Fixed wrong use of MASTER_DELAY_VALUE_OUT_OF_RANGE
      847eb24b
    • Monty's avatar
      Removed complex and wrong set_name_for_rollback() · b478276b
      Monty authored
      This was wrong because:
      - There was no reason to rollback name for item that will be deleted
        after query.
      - name_length was not rolled back
      - Changing real_item() doesn't work as it may be used many times in the
        same query
      
      After removing all the old code and extending the test case, all the
      related test cases passes.
      
      Sanja and I concluded that the old code isn't needed anymore.  If it
      still needed for some scenario not covered by our test system, it needs
      to be coded in some other way, so better to remove the wrong code.
      b478276b
    • Alexander Barkov's avatar
      MDEV-12514 Split Item_temporal_func::fix_length_and_dec() + MDEV-12515 · e2b03cd3
      Alexander Barkov authored
      This patch implements MDEV-12514 according to the task descriptions.
      It automatically fixes:
      MDEV-12515 Wrong value when storing DATE_ADD() and ADDTIME() to a numeric field
      
      Additionally:
      
      a. Moves Item_func::set_attributes_temporal() to
         Type_str_attributes::fix_attributes_temporal(),
        which is a more proper place and name for it.
      
      b. Continues replacing calls for:
           set_handler_by_field_type(MYSQL_TYPE_XXX)
         to corresponding:
           set_handler(&type_handler_xxx)
         which is faster.
         Note, we should eventually get rid of almost all set_handler_by_field_type().
      
      c. Makes type_handler_string, type_handler_time2, type_handler_newdate,
         type_handler_datetime2 public.
         (all built-in handlers will become public eventually)
      
      d. Removing Item_temporal_func::sql_mode, as it was not used.
      e2b03cd3
  6. 18 Apr, 2017 5 commits
  7. 15 Apr, 2017 1 commit
  8. 14 Apr, 2017 1 commit
  9. 13 Apr, 2017 2 commits
  10. 11 Apr, 2017 3 commits
    • Alexander Barkov's avatar
    • Alexander Barkov's avatar
    • Daniel Black's avatar
      Travis: Test more suites, latest OSX · eecce3d7
      Daniel Black authored
      Remove clang-3.8 which doesn't have a repository on apt.llvm.org any
      more.
      
      For OSX, xcode8.3 is explicitly specified.
      
      /usr/local/Cellar is used as a cache repository to save brew install
      time on OSX (and /usr/local was too big).
      
      Debian autobake.sh is moved to a matrix include.
      
      Other branches of the matrix build test other test suites.
      An Ubuntu galera is downloaded and used in the test suite.
      
      TYPE=RelWithDebInfo used with the test to provide backtraces with line
      numbers when crashes occur.
      
      Build of PLUGIN_AWS_KEY_MANAGEMENT enabled in build.
      
      Code supporting TYPE=Debug and -DWITH_ASAN=ON included by not enabled
      due to large numbers of errors.
      
      Running more tests in parallel (6) as container based builds seem to
      support them. The test case timeout has been set to 2 minutes as large
      stalls will put test cases over 50 minute interval.
      
      ccache enabled where possible. Linux clang builds don't use them as the
      minimum CMake version isn't there.
      eecce3d7
  11. 09 Apr, 2017 2 commits
  12. 08 Apr, 2017 3 commits
  13. 07 Apr, 2017 10 commits
    • Alexander Barkov's avatar
      fa5be1d3
    • Vladislav Vaintroub's avatar
    • Oleksandr Byelkin's avatar
      MDEV-12395: DROP PARTITION does not work as expected when table has DEFAULT LIST partition · d9484a2f
      Oleksandr Byelkin authored
      Data loss in case of partituon removing is documented => do not try to prevent it
      d9484a2f
    • Oleksandr Byelkin's avatar
      MDEV-12379: Server crashes in TABLE_LIST::is_with_table on SHOW CREATE VIEW · 27f6b11a
      Oleksandr Byelkin authored
      In case of error on opening VIEW (absent table for example) it is still possible to print its definition but some variable is not set (table_list->derived->derived) so it is better do not try to test it when there is safer alternative (table_list itself).
      27f6b11a
    • Monty's avatar
      Simple binary cache optimizations · 0177a9c7
      Monty authored
      - Don't call my_chsize() for small (less than 64K) binary log tmp files
      - Don't flush cache to disk on reset.
      0177a9c7
    • Monty's avatar
      Simple cleanups · 1bcfa14e
      Monty authored
      - Added file name to error in mysql-test-run
      - When creating tags, first do it for sql to make it easier to find things in server
      1bcfa14e
    • Marko Mäkelä's avatar
      MDEV-10139 Support for InnoDB SEQUENCE objects · 7c767a30
      Marko Mäkelä authored
      We introduce a NO_ROLLBACK flag for InnoDB tables. This flag only works
      for tables that have a single index. Apart from undo logging, this flag
      will also prevent locking and the assignment of DB_ROW_ID or DB_TRX_ID,
      and imply READ UNCOMMITTED isolation. It is assumed that the SQL layer
      is guaranteeing mutual exclusion.
      
      After the initial insert of the single record during CREATE SEQUENCE,
      InnoDB will be updating the single record in-place. This is crash-safe
      thanks to the redo log. (That is, after a crash after CREATE SEQUENCE
      was committed, the effect of sequence operations will be observable
      fully or not at all.)
      
      When it comes to the durability of the updates of SEQUENCE in
      InnoDB, there is a clear analogy to MDEV-6076 Persistent AUTO_INCREMENT.
      The updates would be made persistent by the InnoDB redo log flush
      at transaction commit or rollback (or XA PREPARE), provided that
      innodb_log_flush_at_trx_commit=1.
      
      Similar to AUTO_INCREMENT, it is possible that the update of a SEQUENCE
      in a middle of transaction becomes durable before the COMMIT/ROLLBACK of
      the transaction, in case the InnoDB redo log is being flushed as a result
      of the a commit or rollback of some other transaction, or as a result of
      a redo log checkpoint that can be initiated at any time by operations that
      are writing redo log.
      
      dict_table_t::no_rollback(): Check if the table does not support rollback.
      
      BTR_NO_ROLLBACK: Logging and locking flags for no_rollback() tables.
      
      DICT_TF_BITS: Add the NO_ROLLBACK flag.
      
      row_ins_step(): Assign 0 to DB_ROW_ID and DB_TRX_ID, and skip
      any locking for no-rollback tables. There will be only a single row
      in no-rollback tables (or there must be a proper PRIMARY KEY).
      
      row_search_mvcc(): Execute the READ UNCOMMITTED code path for
      no-rollback tables.
      
      ha_innobase::external_lock(), ha_innobase::store_lock():
      Block CREATE/DROP SEQUENCE in innodb_read_only mode.
      This probably has no effect for CREATE SEQUENCE, because already
      ha_innobase::create() should have been called (and refused)
      before external_lock() or store_lock() is called.
      
      ha_innobase::store_lock(): For CREATE SEQUENCE, do not acquire any
      InnoDB locks, even though TL_WRITE is being requested. (This is just
      a performance optimization.)
      
      innobase_copy_frm_flags_from_create_info(), row_drop_table_for_mysql():
      Disable persistent statistics for no_rollback tables.
      7c767a30
    • Vladislav Vaintroub's avatar
      MDEV-12473 - fix rocksdb linking error · a33653ee
      Vladislav Vaintroub authored
      link rocksdb with librt, for clock_gettime()
      a33653ee
    • Monty's avatar
      Change error message when using DROP VIEW on a non existing view from · 470c3fd9
      Monty authored
      "Unknown table" to "Unknown view"
      470c3fd9
    • Monty's avatar
      MDEV-10139 Support for SEQUENCE objects · 17a87d60
      Monty authored
      Working features:
      CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
          [ INCREMENT [ BY | = ] increment ]
          [ MINVALUE [=] minvalue | NO MINVALUE ]
          [ MAXVALUE [=] maxvalue | NO MAXVALUE ]
          [ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
          ENGINE=xxx COMMENT=".."
      SELECT NEXT VALUE FOR sequence_name;
      SELECT NEXTVAL(sequence_name);
      SELECT PREVIOUS VALUE FOR sequence_name;
      SELECT LASTVAL(sequence_name);
      
      SHOW CREATE SEQUENCE sequence_name;
      SHOW CREATE TABLE sequence_name;
      CREATE TABLE sequence-structure ... SEQUENCE=1
      ALTER TABLE sequence RENAME TO sequence2;
      RENAME TABLE sequence TO sequence2;
      DROP [TEMPORARY] SEQUENCE  [IF EXISTS] sequence_names
      
      Missing features
      - SETVAL(value,sequence_name), to be used with replication.
      - Check replication, including checking that sequence tables are marked
        not transactional.
      - Check that a commit happens for NEXT VALUE that changes table data (may
        already work)
      - ALTER SEQUENCE. ANSI SQL version of setval.
      - Share identical sequence entries to not add things twice to table list.
      - testing insert/delete/update/truncate/load data
      - Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
      - Write documentation for NEXT VALUE / PREVIOUS_VALUE
      - NEXTVAL in DEFAULT
        - Ensure that NEXTVAL in DEFAULT uses database from base table
      - Two NEXTVAL for same row should give same answer.
      - Oracle syntax sequence_table.nextval, without any FOR or FROM.
      - Sequence tables are treated as 'not read constant tables' by SELECT; Would
        be better if we would have a separate list for sequence tables so that
        select doesn't know about them, except if refereed to with FROM.
      
      Other things done:
      - Improved output for safemalloc backtrack
      - frm_type_enum changed to Table_type
      - Removed lex->is_view and replaced with lex->table_type. This allows
        use to more easy check if item is view, sequence or table.
      - Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
        that want's to support sequences
      - Added handler calls:
       - engine_name(), to simplify getting engine name for partition and sequences
       - update_first_row(), to be able to do efficient sequence implementations.
       - Made binlog_log_row() global to be able to call it from ha_sequence.cc
      - Added handler variable: row_already_logged, to be able to flag that the
        changed row is already logging to replication log.
      - Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
        deny_updates_if_read_only_option()
      - Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
      - Moved code for add_table_options() out from sql_show.cc::show_create_table()
      - Added String::append_longlong() and used it in sql_show.cc to simplify code.
      - Added extra option to dd_frm_type() and ha_table_exists to indicate if
        the table is a sequence. Needed by DROP SQUENCE to not drop a table.
      17a87d60