1. 29 Nov, 2017 2 commits
    • Alexander Barkov's avatar
    • Alexander Barkov's avatar
      MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler · e01d33d7
      Alexander Barkov authored
      1. Removing data type specific constants from enum_item_param_state,
         adding SHORT_DATA_VALUE instead.
      2. Replacing tests for Item_param::state for the removed constants to
         tests for Type_handler::cmp_type() against {INT|REAL|TIME|DECIAML}_RESULT.
         Deriving Item_param::PValue from Type_handler_hybrid_field_type,
         to store the data type handler of the current value of the parameter.
      
      3. Moving Item_param::decimal_value and Item_param::str_value_ptr
         to Item_param::PValue. Adding Item_param::PValue::m_string
         and changing Item_param to use it to store string values,
         instead of Item::str_value. The intent is to replace Item_param::value
         to a st_value based implementation in the future, to avoid duplicate code.
         Adding a sub-class Item::PValue_simple, to implement
         Item_param::PValue::swap() easier.
         Remaming Item_basic_value::fix_charset_and_length_from_str_value()
         to fix_charset_and_length() and adding the "CHARSET_INFO" pointer
         parameter, instead of getting it directly from item->str_value.charset().
         Changing Item_param to pass value.m_string.charset() instead
         of str_value.charset().
         Adding a String argument to the overloaded
         fix_charset_and_length_from_str_value() and changing Item_param
         to pass value.m_string instead of str_value.
      
      4. Replacing the case in Item_param::save_in_field() to a call
         for Type_handler::Item_save_in_field().
      
      5. Adding new methods into Item_param::PValue:
         val_real(), val_int(), val_decimal(), val_str().
         Changing the corresponding Item_param methods
         to use these new Item_param::PValue methods
         internally. Adding a helper method
         Item_param::can_return_value() and removing
         duplicate code in Item_param::val_xxx().
      
      6. Removing value.set_handler() from Item_param::set_conversion()
         and Type_handler_xxx::Item_param_set_from_value().
         It's now done inside Item_param::set_param_func(),
         Item_param::set_value() and Item_param::set_limit_clause_param().
      
      7. Changing Type_handler_int_result::Item_param_set_from_value()
         to set max_length using attr->max_length instead of
         MY_INT64_NUM_DECIMAL_DIGITS, to preserve the data type
         of the assigned expression more precisely.
      
      8. Adding Type_handler_hybrid_field_type::swap(),
         using it in Item_param::PValue::swap().
      
      9. Moving the data-type specific code from
         Item_param::query_val_str(), Item_param::eq(),
         Item_param::clone_item() to
         Item_param::value_query_type_str(),
         Item_param::value_eq(), Item_param::value_clone_item(),
         to split the "state" dependent code and
         the data type dependent code.
         Later we'll split the data type related code further
         and add new methods in Type_handler. This will be done
         after we replace Item_param::PValue to st_value.
      
      10. Adding asserts into set_int(), set_double(), set_decimal(),
         set_time(), set_str(), set_longdata() to make sure that
         the value set to Item_param corresponds to the previously
         set data type handler.
      
      11. Adding tests into t/ps.test and suite/binlog/t/binlog_stm_ps.test,
         to cover Item_param::print() and Item_param::append_for_log()
         for LIMIT clause parameters.
         Note, the patch does not change the behavior covered by the new
         tests. Adding for better code coverage.
      
      12. Adding tests for more precise integer data type in queries like this:
          EXECUTE IMMEDIATE
           'CREATE OR REPLACE TABLE t1 AS SELECT 999999999 AS a,? AS b'
            USING 999999999;
          The explicit integer literal and the same integer literal
          passed as a PS parameter now produce columns of the same data type.
          Re-recording old results in ps.result, gis.result, func_hybrid_type.result
          accordingly.
      e01d33d7
  2. 28 Nov, 2017 4 commits
  3. 27 Nov, 2017 1 commit
  4. 24 Nov, 2017 10 commits
    • Vladislav Vaintroub's avatar
      Fix warning. · 414d3a3e
      Vladislav Vaintroub authored
      414d3a3e
    • Sergey Vojtovich's avatar
      Fixed build failure with PFS disabled · 4cc20c88
      Sergey Vojtovich authored
      mariabackup fails to builds with PFS disabled. The reason was missing include,
      which was included by PFS otherwise.
      4cc20c88
    • Vladislav Vaintroub's avatar
      Merge remote-tracking branch 'origin/10.1' into 10.2 · 9cefffda
      Vladislav Vaintroub authored
      # Conflicts:
      #	storage/innobase/include/os0file.h
      9cefffda
    • Vladislav Vaintroub's avatar
      40756c91
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · f1cc6e38
      Marko Mäkelä authored
      f1cc6e38
    • Marko Mäkelä's avatar
      MDEV-14499 Mariabackup 10.2 fails to back up a multi-file InnoDB system tablespace · 6979d204
      Marko Mäkelä authored
      When Mariabackup is invoked on an instance that uses a multi-file
      InnoDB system tablespace, it may fail to other files of the system
      tablespace than the first one.
      This was revealed by the MDEV-14447 test case.
      The offending code is assuming that the first page of each data file
      is page 0. But, in multi-file system tablespaces that is not the case.
      
      xb_fil_cur_open(): Instead of re-reading the first page of the file,
      rely on the fil_space_t metadata that already exists in memory.
      
      xb_get_space_flags(): Remove.
      6979d204
    • Vladislav Vaintroub's avatar
      59150361
    • Alexander Barkov's avatar
      MDEV-14494 Move set_param_xxx() in sql_prepare.cc to methods in Item_param and Type_handler · 6aedbf40
      Alexander Barkov authored
      - sql_prepare.cc: Moving functions set_param_xxx() as
        methods to Item_param
      
      - Replacing a pointer to a function Item_param::set_param_func
        to Type_handler based implementation:
        Item_param::value now derives from Type_handler_hybrid_field_type.
        Adding new virtual methods Type_handler::Item_param_setup_conversion()
        and Type_handler::Item_param_set_param_func()
      
      - Moving declaration of some Item_param members  from "public:" to "private:"
        (CONVERSION_INFO, value, decimal_value)
      
      - Adding a new method Item_param::set_limit_clause_param(),
        to share duplicate code, as well as to encapsulate
        Item_param::value.
      
      - Adding Item_param::setup_conversion_string() and
        Item_param::setup_conversion_blob() to share
        the code for binding from a client value
        (mysql_stmt_bind_param), and for binding from
        an expression (Item).
      
      - Removing two different functions set_param_str_or_null()
        and set_param_str(). Adding a common method Item_param::set_param_str().
        Item_param::m_empty_string_is_null, used by Item_param::set_param_str().
      
      - Removing the call for setup_one_conversion_function() from
        insert_params_from_actual_params_with_log(). It's not needed,
        because the call for ps_param->save_in_param() makes sure
        to initialized all data type dependent members properly,
        by calling setup_conversion_string() from
        Type_handler_string_result::Item_param_set_from_value()
        and by calling setup_conversion_blob() from
        Type_handler_blob_common::Item_param_set_from_value()
      
      - Cleanup: removing multiplication to MY_CHARSET_BIN_MB_MAXLEN
        in a few places. It's 1 anyway, and will never change.
      6aedbf40
    • Vladislav Vaintroub's avatar
      MDEV-14483 Export _mysl_client_plugin_declaration from auth_gssapi_client.so · c5fffb33
      Vladislav Vaintroub authored
      Update C/C to include fix for this bug.
      c5fffb33
    • Vladislav Vaintroub's avatar
      MDEV-14447 mariabackup incremental incorrectly extends system tablespace · 316f0d8f
      Vladislav Vaintroub authored
      for multi-file innodb_data_file_path.
      
      Use fil_extend_space_to_desired_size() to correctly extend system
      tablespace. Make sure to get tablespace size from the first tablespace
      part.
      316f0d8f
  5. 23 Nov, 2017 5 commits
  6. 22 Nov, 2017 5 commits
  7. 21 Nov, 2017 13 commits
    • Vladislav Vaintroub's avatar
    • wlad's avatar
      Fix compile error. · 83eb14ff
      wlad authored
      83eb14ff
    • wlad's avatar
      MDEV-14283 : Fix Solaris 10 build. · b6d72ed4
      wlad authored
      - introduce system check for posix_memalign (not available on Solaris 10)
      - Disable dtrace probes, to fix weird link errors in mariabackup
      b6d72ed4
    • Sergei Golubchik's avatar
      don't `git submodule update` from rocksdb/CMakeLists.txt (#492) · 14c2a9a5
      Sergei Golubchik authored
      we now have cmake/submodules.cmake that updates all submodules
      14c2a9a5
    • Sergei Golubchik's avatar
      MDEV-14256 MariaDB 10.2.10 can't SST with xtrabackup-v2 · 8c422bf4
      Sergei Golubchik authored
      another followup for 4c2c057d.
      
      there are six possible cases:
      --port can be set or not.
      --address can be set, not set, or set but without a port number
      
      The correct behavior is:
      1 both --port and --address have a port number
        - use it if it's the same, otherwise an error
      2 only --port has the number (--address isn't set)
        - use the value from --port
      3 only --port has the number (--address is set, but has no port)
        - use the value from --port
      4 --port is unset, --address has the port number
        - use the value from --address
      5 --port is unset, --address has no port number
        - use the value from --address, that is, port is empty string
      6 --port is unset, --address is unset
        - port is unset (an error somewhere later)
      
      case 5 wasn't handled correctly
      8c422bf4
    • Sergei Golubchik's avatar
      a963cb95
    • Sergei Golubchik's avatar
      MDEV-14428 main.cte_nonrecursive failed in --embedded · 5dd505b7
      Sergei Golubchik authored
      move the privilege related test to main.cte_grant
      5dd505b7
    • Sergei Golubchik's avatar
      Merge branch '10.1' into 10.2 · 7f190070
      Sergei Golubchik authored
      7f190070
    • Vladislav Vaintroub's avatar
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · 366bb162
      Marko Mäkelä authored
      366bb162
    • Marko Mäkelä's avatar
      Adjust an imported test · 375caf99
      Marko Mäkelä authored
      375caf99
    • Marko Mäkelä's avatar
      MDEV-13201 Assertion `srv_undo_sources || ...` failed on shutdown during DDL operation · 9405fdeb
      Marko Mäkelä authored
      dict_stats_exec_sql(): Refuse the operation if shutdown has been
      initiated.
      
      The real fix would be to update the persistent statistics as part
      of the data dictionary transactions. To do this, we should move the
      storage of InnoDB persistent statistics to the InnoDB data files,
      and maybe also remove the InnoDB data dictionary.
      9405fdeb
    • Alexander Barkov's avatar
      MDEV-14454 Binary protocol returns wrong collation ID for SP OUT parameters · 563f1d89
      Alexander Barkov authored
      Item_param::set_value() did not set Item::collation and
      Item_param::str_value_ptr.str_charset properly. So both
      metadata and data for OUT parameters were sent in a wrong
      way to the client.
      
      This patch removes the old implementation of Item_param::set_value()
      and rewrites it using Type_handler::Item_param_set_from_value(),
      so now setting IN and OUT parameters share the a lot of code.
      
      1. Item_param::set_str() now:
        - accepts two additional parameters fromcs, tocs
        - sets str_value_ptr, to make sure it's always in sync with str_value,
          even without Item_param::convert_str_value()
        - does collation.set(tocs, DERIVATION_COERCIBLE),
          to make sure that DTCollation is valid even without
          Item_param::convert_str_value()
      
      2. Item_param::set_value(), which is used to set OUT parameters,
         now reuses Type_handler::Item_param_set_from_value().
      
      3. Cleanup: moving Item_param::str_value_ptr to private,
         as it's not needed outside.
      
      4. Cleanup: adding a new virtual method
         Settable_routine_parameter::get_item_param()
         and using it a few new DBUG_ASSERTs, where
         Item_param cannot appear.
      
      After this change:
      1. Assigning of IN parameters works as before:
      a. Item_param::set_str() is called and sets the value as a binary string
      b. The original value is sent to the query used for binary/general logging
      c. Item_param::convert_str_value() converts the value from the client
         character set to the connection character set
      
      2. Assigning of OUT parameters works in the new way:
      a. Item_param::set_str() and sets the value
         using the source Item's collation, so both Item::collation
         and Item_param::str_value_ptr.str_charset are properly set.
      b. Protocol_binary::send_out_parameters() sends the
         value to the client correctly:
         - Protocol::send_result_set_metadata() uses Item::collation.collation
           (which is now properly set), to detect if conversion is needed,
           and sends a correct collation ID.
         - Protocol::send_result_set_row() calls Type_handler::Item_send_str(),
           which uses Item_param::str_value_ptr.str_charset
           (which is now properly set) to actually perform the conversion.
      563f1d89