mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge branch 'mysql/5.5' into 5.5
80% reverted
This commit is contained in:
commit
7ae555c114
8 changed files with 25 additions and 288 deletions
|
@ -5,5 +5,14 @@ Table Create Table
|
|||
table_54044 CREATE TEMPORARY TABLE `table_54044` (
|
||||
`IF(NULL IS NOT NULL, NULL, NULL)` binary(0) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
CREATE TEMPORARY TABLE tmp1 ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL);
|
||||
CREATE TEMPORARY TABLE tmp2 ENGINE = INNODB AS SELECT GREATEST(NULL, NULL);
|
||||
DROP TABLE table_54044;
|
||||
CREATE TABLE tmp ENGINE = INNODB
|
||||
AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL;
|
||||
SHOW CREATE TABLE tmp;
|
||||
Table Create Table
|
||||
tmp CREATE TABLE `tmp` (
|
||||
`COALESCE(NULL, NULL, NULL)` binary(0) DEFAULT NULL,
|
||||
`GREATEST(NULL, NULL)` binary(0) DEFAULT NULL,
|
||||
`NULL` binary(0) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE tmp;
|
||||
|
|
|
@ -8,5 +8,11 @@
|
|||
CREATE TEMPORARY TABLE table_54044 ENGINE = INNODB
|
||||
AS SELECT IF(NULL IS NOT NULL, NULL, NULL);
|
||||
SHOW CREATE TABLE table_54044;
|
||||
CREATE TEMPORARY TABLE tmp1 ENGINE = INNODB AS SELECT COALESCE(NULL, NULL, NULL);
|
||||
CREATE TEMPORARY TABLE tmp2 ENGINE = INNODB AS SELECT GREATEST(NULL, NULL);
|
||||
DROP TABLE table_54044;
|
||||
|
||||
# This 'create table' should pass since it uses a Field_string of size 0.
|
||||
|
||||
CREATE TABLE tmp ENGINE = INNODB
|
||||
AS SELECT COALESCE(NULL, NULL, NULL), GREATEST(NULL, NULL), NULL;
|
||||
SHOW CREATE TABLE tmp;
|
||||
DROP TABLE tmp;
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
"General cleanup"
|
||||
drop table if exists t1;
|
||||
update performance_schema.setup_instruments set enabled = 'NO';
|
||||
update performance_schema.setup_consumers set enabled = 'NO';
|
||||
truncate table performance_schema.file_summary_by_event_name;
|
||||
truncate table performance_schema.file_summary_by_instance;
|
||||
truncate table performance_schema.events_waits_summary_global_by_event_name;
|
||||
truncate table performance_schema.events_waits_summary_by_instance;
|
||||
truncate table performance_schema.events_waits_summary_by_thread_by_event_name;
|
||||
update performance_schema.setup_consumers set enabled = 'YES';
|
||||
update performance_schema.setup_instruments
|
||||
set enabled = 'YES', timed = 'YES';
|
||||
create table t1 (
|
||||
id INT PRIMARY KEY,
|
||||
b CHAR(100) DEFAULT 'initial value')
|
||||
ENGINE=MyISAM;
|
||||
insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8);
|
||||
update performance_schema.setup_instruments SET enabled = 'NO';
|
||||
update performance_schema.setup_consumers set enabled = 'NO';
|
||||
set @dump_all=FALSE;
|
||||
"Verifying file aggregate consistency"
|
||||
SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.COUNT_READ <> SUM(i.COUNT_READ))
|
||||
OR @dump_all;
|
||||
EVENT_NAME COUNT_READ SUM(i.COUNT_READ)
|
||||
SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE))
|
||||
OR @dump_all;
|
||||
EVENT_NAME COUNT_WRITE SUM(i.COUNT_WRITE)
|
||||
SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ))
|
||||
OR @dump_all;
|
||||
EVENT_NAME SUM_NUMBER_OF_BYTES_READ SUM(i.SUM_NUMBER_OF_BYTES_READ)
|
||||
SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE))
|
||||
OR @dump_all;
|
||||
EVENT_NAME SUM_NUMBER_OF_BYTES_WRITE SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
|
||||
"Verifying waits aggregate consistency (instance)"
|
||||
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
EVENT_NAME SUM_TIMER_WAIT SUM(i.SUM_TIMER_WAIT)
|
||||
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT))
|
||||
AND (MIN(i.MIN_TIMER_WAIT) != 0)
|
||||
OR @dump_all;
|
||||
EVENT_NAME MIN_TIMER_WAIT MIN(i.MIN_TIMER_WAIT)
|
||||
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
EVENT_NAME MAX_TIMER_WAIT MAX(i.MAX_TIMER_WAIT)
|
||||
"Verifying waits aggregate consistency (thread)"
|
||||
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
EVENT_NAME SUM_TIMER_WAIT SUM(t.SUM_TIMER_WAIT)
|
||||
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT))
|
||||
AND (MIN(t.MIN_TIMER_WAIT) != 0)
|
||||
OR @dump_all;
|
||||
EVENT_NAME MIN_TIMER_WAIT MIN(t.MIN_TIMER_WAIT)
|
||||
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
EVENT_NAME MAX_TIMER_WAIT MAX(t.MAX_TIMER_WAIT)
|
||||
update performance_schema.setup_consumers set enabled = 'YES';
|
||||
update performance_schema.setup_instruments
|
||||
set enabled = 'YES', timed = 'YES';
|
||||
drop table test.t1;
|
|
@ -1,174 +0,0 @@
|
|||
# Tests for PERFORMANCE_SCHEMA
|
||||
# Verify that statistics aggregated by different criteria are consistent.
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_perfschema.inc
|
||||
|
||||
--echo "General cleanup"
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
update performance_schema.setup_instruments set enabled = 'NO';
|
||||
update performance_schema.setup_consumers set enabled = 'NO';
|
||||
|
||||
# Cleanup statistics
|
||||
truncate table performance_schema.file_summary_by_event_name;
|
||||
truncate table performance_schema.file_summary_by_instance;
|
||||
truncate table performance_schema.events_waits_summary_global_by_event_name;
|
||||
truncate table performance_schema.events_waits_summary_by_instance;
|
||||
truncate table performance_schema.events_waits_summary_by_thread_by_event_name;
|
||||
|
||||
# Start recording data
|
||||
update performance_schema.setup_consumers set enabled = 'YES';
|
||||
update performance_schema.setup_instruments
|
||||
set enabled = 'YES', timed = 'YES';
|
||||
|
||||
|
||||
create table t1 (
|
||||
id INT PRIMARY KEY,
|
||||
b CHAR(100) DEFAULT 'initial value')
|
||||
ENGINE=MyISAM;
|
||||
|
||||
insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8);
|
||||
|
||||
# Stop recording data, so the select below don't add noise.
|
||||
update performance_schema.setup_instruments SET enabled = 'NO';
|
||||
# Disable all consumers, for long standing waits
|
||||
update performance_schema.setup_consumers set enabled = 'NO';
|
||||
|
||||
# Helper to debug
|
||||
set @dump_all=FALSE;
|
||||
|
||||
# Note that in general:
|
||||
# - COUNT/SUM/MAX(file_summary_by_event_name) >=
|
||||
# COUNT/SUM/MAX(file_summary_by_instance).
|
||||
# - MIN(file_summary_by_event_name) <=
|
||||
# MIN(file_summary_by_instance).
|
||||
# There will be equality only when file instances are not removed,
|
||||
# aka when a file is not deleted from the file system,
|
||||
# because doing so removes a row in file_summary_by_instance.
|
||||
|
||||
# Likewise:
|
||||
# - COUNT/SUM/MAX(events_waits_summary_global_by_event_name) >=
|
||||
# COUNT/SUM/MAX(events_waits_summary_by_instance)
|
||||
# - MIN(events_waits_summary_global_by_event_name) <=
|
||||
# MIN(events_waits_summary_by_instance)
|
||||
# There will be equality only when an instrument instance
|
||||
# is not removed, which is next to impossible to predictably guarantee
|
||||
# in the server.
|
||||
# For example, a MyISAM table removed from the table cache
|
||||
# will cause a mysql_mutex_destroy on myisam/MYISAM_SHARE::intern_lock.
|
||||
# Another example, a thread terminating will cause a mysql_mutex_destroy
|
||||
# on sql/LOCK_delete
|
||||
# Both cause a row to be deleted from events_waits_summary_by_instance.
|
||||
|
||||
# Likewise:
|
||||
# - COUNT/SUM/MAX(events_waits_summary_global_by_event_name) >=
|
||||
# COUNT/SUM/MAX(events_waits_summary_by_thread_by_event_name)
|
||||
# - MIN(events_waits_summary_global_by_event_name) <=
|
||||
# MIN(events_waits_summary_by_thread_by_event_name)
|
||||
# There will be equality only when no thread is removed,
|
||||
# that is if no thread disconnects, or no sub thread (for example insert
|
||||
# delayed) ever completes.
|
||||
# A thread completing will cause rows in
|
||||
# events_waits_summary_by_thread_by_event_name to be removed.
|
||||
|
||||
--echo "Verifying file aggregate consistency"
|
||||
|
||||
# Since the code generating the load in this test does:
|
||||
# - create table
|
||||
# - insert
|
||||
# - does not cause temporary tables to be used
|
||||
# we can test for equality here for file aggregates.
|
||||
|
||||
# If any of these queries returns data, the test failed.
|
||||
|
||||
SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.COUNT_READ <> SUM(i.COUNT_READ))
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE))
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ))
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
|
||||
FROM performance_schema.file_summary_by_event_name AS e
|
||||
JOIN performance_schema.file_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE))
|
||||
OR @dump_all;
|
||||
|
||||
--echo "Verifying waits aggregate consistency (instance)"
|
||||
|
||||
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_TIMER_WAIT < SUM(i.SUM_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MIN_TIMER_WAIT > MIN(i.MIN_TIMER_WAIT))
|
||||
AND (MIN(i.MIN_TIMER_WAIT) != 0)
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_instance AS i USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MAX_TIMER_WAIT < MAX(i.MAX_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
|
||||
--echo "Verifying waits aggregate consistency (thread)"
|
||||
|
||||
SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.SUM_TIMER_WAIT < SUM(t.SUM_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MIN_TIMER_WAIT > MIN(t.MIN_TIMER_WAIT))
|
||||
AND (MIN(t.MIN_TIMER_WAIT) != 0)
|
||||
OR @dump_all;
|
||||
|
||||
SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
|
||||
FROM performance_schema.events_waits_summary_global_by_event_name AS e
|
||||
JOIN performance_schema.events_waits_summary_by_thread_by_event_name AS t
|
||||
USING (EVENT_NAME)
|
||||
GROUP BY EVENT_NAME
|
||||
HAVING (e.MAX_TIMER_WAIT < MAX(t.MAX_TIMER_WAIT))
|
||||
OR @dump_all;
|
||||
|
||||
|
||||
# Cleanup
|
||||
|
||||
update performance_schema.setup_consumers set enabled = 'YES';
|
||||
update performance_schema.setup_instruments
|
||||
set enabled = 'YES', timed = 'YES';
|
||||
|
||||
drop table test.t1;
|
|
@ -5902,10 +5902,6 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
|||
field= new Field_double((uchar*) 0, max_length, null_ptr, 0, Field::NONE,
|
||||
name, decimals, 0, unsigned_flag);
|
||||
break;
|
||||
case MYSQL_TYPE_NULL:
|
||||
field= new Field_null((uchar*) 0, max_length, Field::NONE,
|
||||
name, &my_charset_bin);
|
||||
break;
|
||||
case MYSQL_TYPE_INT24:
|
||||
field= new Field_medium((uchar*) 0, max_length, null_ptr, 0, Field::NONE,
|
||||
name, 0, unsigned_flag);
|
||||
|
@ -5939,6 +5935,7 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
|||
DBUG_ASSERT(0);
|
||||
/* If something goes awfully wrong, it's better to get a string than die */
|
||||
case MYSQL_TYPE_STRING:
|
||||
case MYSQL_TYPE_NULL:
|
||||
if (fixed_length && !too_big_for_varchar())
|
||||
{
|
||||
field= new Field_string(max_length, maybe_null, name,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2012, Monty Program Ab
|
||||
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||
Copyright (c) 2012, 2016, MariaDB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -885,7 +885,7 @@ my_real_read(NET *net, size_t *complen)
|
|||
my_progname,vio_errno(net->vio));
|
||||
}
|
||||
#ifndef MYSQL_SERVER
|
||||
if (vio_errno(net->vio) == SOCKET_EINTR)
|
||||
if ((long)length < 0 && vio_errno(net->vio) == SOCKET_EINTR)
|
||||
{
|
||||
DBUG_PRINT("warning",("Interrupted read. Retrying..."));
|
||||
continue;
|
||||
|
|
|
@ -14833,6 +14833,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
|||
case Item::VARBIN_ITEM:
|
||||
case Item::CACHE_ITEM:
|
||||
case Item::EXPR_CACHE_ITEM:
|
||||
case Item::PARAM_ITEM:
|
||||
if (make_copy_field)
|
||||
{
|
||||
DBUG_ASSERT(((Item_result_field*)item)->result_field);
|
||||
|
|
|
@ -308,7 +308,7 @@ case "$mode" in
|
|||
then
|
||||
# Give extra arguments to mysqld with the my.cnf file. This script
|
||||
# may be overwritten at next upgrade.
|
||||
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
|
||||
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
|
||||
wait_for_ready; return_value=$?
|
||||
|
||||
# Make lock for RedHat / SuSE
|
||||
|
|
Loading…
Reference in a new issue