Commit graph

179419 commits

Author SHA1 Message Date
Alexander Barkov
5b697c5a23 Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext 2017-11-29 12:06:48 +04:00
Alexander Barkov
e01d33d773 MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler
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.
2017-11-29 10:03:51 +04:00
Daniel Bartholomew
b65fd73bb1 bump the VERSION 2017-11-28 15:59:36 -05:00
Marko Mäkelä
23d2dae5f0 Fix some integer type mismatch warnings 2017-11-28 18:29:20 +02:00
Vladislav Vaintroub
e02b860861 Windows, generic threadpool cleanups
- get rid of casts between int and HANDLE.
- store file descriptor in TP_connection_generic to get
rid of multiple mysql_socket_getfd(c->thd->net.vio->mysql_socket))

Also support named pipes (no reason not to support, since it is easy)
2017-11-28 13:23:51 +00:00
Alexander Barkov
590400f743 MDEV-14517 Cleanup for Item::with_subselect and Item::has_subquery() 2017-11-28 06:25:14 +04:00
Elena Stepanova
77872e4519 Additions to the list of unstable tests for 10.2.11 2017-11-27 12:04:51 +02:00
Vladislav Vaintroub
414d3a3e17 Fix warning. 2017-11-24 17:33:53 +00:00
Sergey Vojtovich
4cc20c88df Fixed build failure with PFS disabled
mariabackup fails to builds with PFS disabled. The reason was missing include,
which was included by PFS otherwise.
2017-11-24 17:30:40 +00:00
Vladislav Vaintroub
9cefffdab1 Merge remote-tracking branch 'origin/10.1' into 10.2
# Conflicts:
#	storage/innobase/include/os0file.h
2017-11-24 17:30:26 +00:00
Vladislav Vaintroub
40756c9151 Fix Windows build with -DPLUGIN_PERFSCHEMA=NO 2017-11-24 16:55:20 +00:00
Marko Mäkelä
f1cc6e3874 Merge 10.1 into 10.2 2017-11-24 17:17:16 +02:00
Marko Mäkelä
6979d20426 MDEV-14499 Mariabackup 10.2 fails to back up a multi-file InnoDB system tablespace
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.
2017-11-24 17:12:38 +02:00
Vladislav Vaintroub
59150361c3 Update C/C to fix unit tests with clang 2017-11-24 14:39:38 +01:00
Alexander Barkov
6aedbf40e0 MDEV-14494 Move set_param_xxx() in sql_prepare.cc to methods in Item_param and Type_handler
- 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.
2017-11-24 12:40:00 +04:00
Vladislav Vaintroub
c5fffb33a4 MDEV-14483 Export _mysl_client_plugin_declaration from auth_gssapi_client.so
Update C/C to include fix for this bug.
2017-11-24 00:30:51 +00:00
Vladislav Vaintroub
316f0d8fe3 MDEV-14447 mariabackup incremental incorrectly extends system tablespace
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.
2017-11-24 00:01:29 +00:00
Elena Stepanova
e6d6b0c08c Updated list of unstable tests for 10.2.11 2017-11-24 01:38:38 +02:00
Andrei Elkin
c666ca7b1b MDEV-12012. Post-push attempt to catch failure in rpl_gtid_delete_domain failing on P8. The test is made more verbose. 2017-11-23 22:10:31 +02:00
Marko Mäkelä
e2dd4e3206 MDEV-4697 UPDATE_TIME field for InnoDB
Import and adjust the MySQL 5.7 tests
innodb.update_time innodb.update_time_wl6658 into MariaDB.

The functionality is present since MariaDB 10.2.2 merged
InnoDB from MySQL 5.7.9. It was implemented in MySQL 5.7.2.
2017-11-23 08:56:06 +02:00
Marko Mäkelä
187a5bbf28 Adjust the tests for MariaDB, and optimize them 2017-11-23 08:55:51 +02:00
Marko Mäkelä
f8bc799a89 Import WL#6658 update_time tests from MySQL 5.7 2017-11-23 08:55:51 +02:00
Sergei Golubchik
0055e1a57f Merge branch 'connect/10.2' into 10.2 2017-11-22 17:38:30 +01:00
Aleksey Midenkov
37dd3cf424 MDEV-13550 Copy ctor instread of memcpy() in partition_info::get_clone() (#436)
List<>::last is wrong after memcpy(). Doing it on constructed objects is bad practice.
2017-11-22 12:52:16 +01:00
Sergei Golubchik
3422ceb10c remove dead code 2017-11-22 12:52:16 +01:00
David Carlier
f86413ecc1 Fix the build on OpenBSD (#488)
* rocksdb fails without timer_delete() - only use it when it exists
2017-11-22 12:52:12 +01:00
Alexander Barkov
a18f6009e3 A cleanup for MDEV-12846 sql_mode=ORACLE: using Oracle-style placeholders in direct query execution makes the server crash
Fixing a test failure in "mtr --ps compat/oracle.ps" caused by "SELECT ?"
returning different errors:
- CR_PARAMS_NOT_BOUND in prepared execution
- ER_PARSE_ERROR in direct execution
Disabling PS protocol for this test chunk.
2017-11-22 11:42:31 +04:00
Vladislav Vaintroub
12840f97cd Fix typo, and disable own dtrace proibes on Solaris, really. 2017-11-21 16:20:08 -05:00
wlad
83eb14ff65 Fix compile error. 2017-11-21 21:30:45 +01:00
wlad
b6d72ed44d MDEV-14283 : Fix Solaris 10 build.
- introduce system check for posix_memalign (not available on Solaris 10)
- Disable dtrace probes, to fix weird link errors in mariabackup
2017-11-21 21:14:06 +01:00
Sergei Golubchik
14c2a9a52e don't git submodule update from rocksdb/CMakeLists.txt (#492)
we now have cmake/submodules.cmake that updates all submodules
2017-11-21 20:03:57 +01:00
Sergei Golubchik
8c422bf48d MDEV-14256 MariaDB 10.2.10 can't SST with xtrabackup-v2
another followup for 4c2c057d40.

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
2017-11-21 20:03:57 +01:00
Sergei Golubchik
a963cb95db MDEV-14268 Executable C source code files? 2017-11-21 20:03:57 +01:00
Sergei Golubchik
5dd505b709 MDEV-14428 main.cte_nonrecursive failed in --embedded
move the privilege related test to main.cte_grant
2017-11-21 20:03:57 +01:00
Sergei Golubchik
7f1900705b Merge branch '10.1' into 10.2 2017-11-21 19:47:46 +01:00
Vladislav Vaintroub
7c4f859384 MDEV-14283 : Fix compilation of mariabackup for gcc3.x 2017-11-21 17:19:32 +00:00
Marko Mäkelä
366bb162fe Merge 10.2 into bb-10.2-ext 2017-11-21 18:59:30 +02:00
Marko Mäkelä
375caf99c4 Adjust an imported test 2017-11-21 18:53:00 +02:00
Marko Mäkelä
9405fdeb9e MDEV-13201 Assertion srv_undo_sources || ... failed on shutdown during DDL operation
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.
2017-11-21 17:56:31 +02:00
Alexander Barkov
563f1d894b MDEV-14454 Binary protocol returns wrong collation ID for SP OUT parameters
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.
2017-11-21 16:02:26 +04:00
Marko Mäkelä
18cdc254b7 MDEV-13626 Merge InnoDB test cases from MySQL 5.7 (part 3) 2017-11-20 16:06:17 +02:00
Marko Mäkelä
f233c9778e Adjust the MySQL 5.7 tests for MariaDB 10.2 2017-11-20 16:05:41 +02:00
Marko Mäkelä
55a94ef1cf Import WL#7277 bulk insert creation tests from MySQL 5.7 2017-11-20 13:28:34 +02:00
Marko Mäkelä
ce64a65f27 MDEV-14310 Possible corruption by table-rebuilding or index-creating ALTER TABLE…ALGORITHM=INPLACE
Also, MDEV-14317 When ALTER TABLE is aborted, do not write garbage pages to data files

As pointed out by Shaohua Wang, the merge of MDEV-13328 from
MariaDB 10.1 (based on MySQL 5.6) to 10.2 (based on 5.7)
was performed incorrectly.

Let us always pass a non-NULL FlushObserver* when writing
to data files is desired.

FlushObserver::is_partial_flush(): Check if this is a bulk-load
(partial flush of the tablespace).

FlushObserver::is_interrupted(): Check for interrupt status.

buf_LRU_flush_or_remove_pages(): Instead of trx_t*, take
FlushObserver* as a parameter.

buf_flush_or_remove_pages(): Remove the parameters flush, trx.
If observer!=NULL, write out the data pages. Use the new predicate
observer->is_partial() to distinguish a partial tablespace flush
(after bulk-loading) from a full tablespace flush (export).
Return a bool (whether all pages were removed from the flush_list).

buf_flush_dirty_pages(): Remove the parameter trx.
2017-11-20 13:26:56 +02:00
Alexander Barkov
4a8039b04e Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext 2017-11-20 11:12:08 +04:00
Sergei Golubchik
b54aeeb080 never add new error messages to old GA releases!
this fixes aae4932775
2017-11-19 14:43:17 +01:00
Alexander Barkov
a20c1217a5 MDEV-14435 Different UNSIGNED flag of out user variable for YEAR parameter for direct vs prepared CALL 2017-11-18 18:29:50 +04:00
Alexander Barkov
4c2c5ec94e MDEV-14434 Wrong result for CHARSET(CONCAT(?,const)) 2017-11-18 00:19:46 +04:00
David Carlier
685db2c112 Fix the build on OpenBSD (#488)
* cast pthread_t for printf
* don't use RTLD_NOLOAD
* tokudb fails without F_NOCACHE and O_DIRECT - ditto
2017-11-17 13:55:14 +08:00
Sergei Golubchik
4666f01534 mroonga after-merge test fixes
"sed -r" fails on labrador. Don't use sed, use perl.
2017-11-17 13:55:14 +08:00