Merge branch '5.5' into 10.0

This commit is contained in:
Sergei Golubchik 2017-10-18 15:14:39 +02:00
commit da4503e956
100 changed files with 1276 additions and 368 deletions

View file

@ -1067,8 +1067,7 @@ static void fix_history(String *final_command);
static COMMANDS *find_command(char *name);
static COMMANDS *find_command(char cmd_name);
static bool add_line(String &buffer, char *line, ulong line_length,
char *in_string, bool *ml_comment, bool truncated);
static bool add_line(String &, char *, ulong, char *, bool *, bool);
static void remove_cntrl(String &buffer);
static void print_table_data(MYSQL_RES *result);
static void print_table_data_html(MYSQL_RES *result);
@ -1080,7 +1079,7 @@ static ulong start_timer(void);
static void end_timer(ulong start_time,char *buff);
static void mysql_end_timer(ulong start_time,char *buff);
static void nice_time(double sec,char *buff,bool part_second);
extern "C" sig_handler mysql_end(int sig);
extern "C" sig_handler mysql_end(int sig) __attribute__ ((noreturn));
extern "C" sig_handler handle_sigint(int sig);
#if defined(HAVE_TERMIOS_H) && defined(GWINSZ_IN_SYS_IOCTL)
static sig_handler window_resize(int sig);

View file

@ -99,12 +99,16 @@ static struct my_option my_long_options[] =
};
static void usage(my_bool version)
static void version()
{
printf("%s Ver 1.6 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE);
if (version)
return;
printf("%s Ver 1.6 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE);
}
static void usage() __attribute__ ((noreturn));
static void usage()
{
version();
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n");
puts("Prints all arguments that is give to some program using the default files");
printf("Usage: %s [OPTIONS] [groups]\n", my_progname);
@ -128,12 +132,13 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
exit(0);
case 'I':
case '?':
usage(0);
usage();
case 'v':
verbose++;
break;
case 'V':
usage(1);
version();
/* fall through */
case '#':
DBUG_PUSH(argument ? argument : default_dbug_option);
break;
@ -181,7 +186,7 @@ int main(int argc, char **argv)
nargs+= array_elements(mysqld_groups);
if (nargs < 2)
usage(0);
usage();
load_default_groups=(char**) my_malloc(nargs*sizeof(char*), MYF(MY_WME));
if (!load_default_groups)

View file

@ -174,7 +174,7 @@ register char **argv[];
break;
case 'V':
version=1;
/* fall through */
/* fall through */
case 'I':
case '?':
help=1; /* Help text written */

View file

@ -12,6 +12,14 @@ before calling SSL_new();
*** end Note ***
yaSSL Release notes, version 2.4.4 (8/8/2017)
This release of yaSSL fixes an interop issue. A fix for detecting cipher
suites with non leading zeros is included as yaSSL only supports cipher
suites with leading zeros. Thanks for the report from Security Innovation
and Oracle.
Users interoping with other SSL stacks should update.
yaSSL Release notes, version 2.4.2 (9/22/2016)
This release of yaSSL fixes a medium security vulnerability. A fix for
potential AES side channel leaks is included that a local user monitoring

View file

@ -1,5 +1,6 @@
/*
Copyright (c) 2005, 2014, Oracle and/or its affiliates.
Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
Use is subject to license terms.
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
@ -34,7 +35,7 @@
#include "rsa.h"
#define YASSL_VERSION "2.4.2"
#define YASSL_VERSION "2.4.4"
#if defined(__cplusplus)

View file

@ -1,5 +1,5 @@
/*
Copyright (c) 2005, 2014, Oracle and/or its affiliates
Copyright (c) 2005, 2017, Oracle and/or its affiliates.
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
@ -1578,6 +1578,10 @@ void ServerHello::Process(input_buffer& input, SSL& ssl)
ssl.SetError(badVersion_error);
return;
}
if (cipher_suite_[0] != 0x00) {
ssl.SetError(unknown_cipher);
return;
}
ssl.set_pending(cipher_suite_[1]);
ssl.set_random(random_, server_end);
if (id_len_)

View file

@ -1,5 +1,5 @@
/*
Copyright (c) 2005, 2014, Oracle and/or its affiliates
Copyright (c) 2005, 2017, Oracle and/or its affiliates.
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
@ -1399,12 +1399,17 @@ void SSL::matchSuite(const opaque* peer, uint length)
// start with best, if a match we are good, Ciphers are at odd index
// since all SSL and TLS ciphers have 0x00 first byte
for (uint i = 1; i < secure_.get_parms().suites_size_; i += 2)
for (uint j = 1; j < length; j+= 2)
if (secure_.use_parms().suites_[i] == peer[j]) {
for (uint j = 0; (j + 1) < length; j+= 2) {
if (peer[j] != 0x00) {
continue; // only 0x00 first byte supported
}
if (secure_.use_parms().suites_[i] == peer[j + 1]) {
secure_.use_parms().suite_[0] = 0x00;
secure_.use_parms().suite_[1] = peer[j];
secure_.use_parms().suite_[1] = peer[j + 1];
return;
}
}
SetError(match_error);
}
@ -2697,4 +2702,3 @@ extern "C" void yaSSL_CleanUp()
yaSSL::sessionsInstance = 0;
yaSSL::errorsInstance = 0;
}

View file

@ -1350,6 +1350,58 @@ rename table t2 to t1;
execute stmt1;
deallocate prepare stmt1;
drop table t2;
#
# MDEV-8960 Can't refer the same column twice in one ALTER TABLE
#
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` SET DEFAULT 2;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL DEFAULT '2'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT,
MODIFY COLUMN `consultant_id` BIGINT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` bigint(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
id INT(11) NOT NULL,
x_param INT(11) DEFAULT NULL,
@ -2112,55 +2164,3 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
DROP TABLE t1;
#
# MDEV-8960 Can't refer the same column twice in one ALTER TABLE
#
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` SET DEFAULT 2;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL DEFAULT '2'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT,
MODIFY COLUMN `consultant_id` BIGINT;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`consultant_id` bigint(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
DROP TABLE t1;

View file

@ -220,6 +220,22 @@ a d
3 11120436154190595086
drop table t1, t2;
End of 5.0 tests
#
# Bug#19875294 ASSERTION `SRC' FAILED IN MY_STRNXFRM_UNICODE
# (SIG 6 -STRINGS/CTYPE-UTF8.C:5151)
#
set @@sql_mode='';
CREATE TABLE t1(c1 SET('','')CHARACTER SET ucs2);
Warnings:
Note 1291 Column 'c1' has duplicated value '' in SET
INSERT INTO t1 VALUES(990101.102);
Warnings:
Warning 1265 Data truncated for column 'c1' at row 1
SELECT COALESCE(c1)FROM t1 ORDER BY 1;
COALESCE(c1)
DROP TABLE t1;
set @@sql_mode=default;
CREATE TABLE t1(a YEAR);
SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END;
1

View file

@ -4560,6 +4560,36 @@ NO_ENGINE_SUBSTITUTION
SET sql_mode=DEFAULT;
SET NAMES utf8;
#
# MDEV-13972 crash in Item_func_sec_to_time::get_date
#
SELECT SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2));
SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2))
838:59:59.999999
Warnings:
Warning 1292 Truncated incorrect time value: '77760000'
#
# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
#
CREATE TABLE t1 (c1 VARCHAR(32766) CHARACTER SET ucs2);
DESCRIBE t1;
Field Type Null Key Default Extra
c1 varchar(32766) YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(32767) CHARACTER SET ucs2);
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 text YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(32768) CHARACTER SET ucs2);
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 mediumtext YES NULL
DROP TABLE t1;
#
# End of 5.5 tests
#
#

View file

@ -1672,6 +1672,21 @@ NO_ENGINE_SUBSTITUTION
SET sql_mode=DEFAULT;
SET NAMES utf8;
#
# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
#
CREATE TABLE t1 (c1 VARCHAR(16383) CHARACTER SET utf32);
DESCRIBE t1;
Field Type Null Key Default Extra
c1 varchar(16383) YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(16384) CHARACTER SET utf32);
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 mediumtext YES NULL
DROP TABLE t1;
#
# End of 5.5 tests
#
#

View file

@ -6173,6 +6173,28 @@ Warnings:
SET sql_mode=DEFAULT;
DROP TABLE t1;
#
# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
#
CREATE TABLE t1 (c1 VARCHAR(21844) CHARACTER SET utf8);
DESCRIBE t1;
Field Type Null Key Default Extra
c1 varchar(21844) YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(21845) CHARACTER SET utf8);
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 text YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(21846) CHARACTER SET utf8);
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 mediumtext YES NULL
DROP TABLE t1;
#
# End of 5.5 tests
#
#

View file

@ -27,7 +27,7 @@ create table t1 (a int(256));
ERROR 42000: Display width out of range for 'a' (max = 255)
set sql_mode='traditional';
create table t1 (a varchar(66000));
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead
set sql_mode=default;
CREATE TABLE t1 (a INT);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));

View file

@ -812,6 +812,12 @@ EXECUTE s;
1
DROP TABLE t1;
# End of 5.3 tests
create table t1 (a int);
insert t1 values (1),(2),(3);
select * from t1 where 1 in (a, name_const('a', null));
a
1
drop table t1;
#
# Start of 10.0 tests
#

View file

@ -2745,7 +2745,33 @@ SELECT 1 MOD ADDTIME( '13:58:57', '00:00:01' ) + 2;
1 MOD ADDTIME( '13:58:57', '00:00:01' ) + 2
3
#
# Start of 10.0 tests
# MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value
#
SET sql_mode='NO_ZERO_IN_DATE';
CREATE TABLE t1 (a TIME(6));
INSERT INTO t1 SELECT timediff(timestamp'2008-12-31 23:59:59.000001',timestamp'2008-12-30 01:01:01.000002');
SELECT * FROM t1;
a
46:58:57.999999
DROP TABLE t1;
SET sql_mode=DEFAULT;
#
# MDEV-13972 crash in Item_func_sec_to_time::get_date
#
DO TO_DAYS(SEC_TO_TIME(TIME(CEILING(UUID()))));
DO TO_DAYS(SEC_TO_TIME(MAKEDATE('',RAND(~('')))));
Warnings:
Warning 1292 Truncated incorrect INTEGER value: ''
Warning 1292 Truncated incorrect INTEGER value: ''
Warning 1292 Truncated incorrect INTEGER value: ''
Warning 1292 Truncated incorrect time value: '20000101'
SELECT SEC_TO_TIME(MAKEDATE(0,RAND(~0)));
SEC_TO_TIME(MAKEDATE(0,RAND(~0)))
838:59:59
Warnings:
Warning 1292 Truncated incorrect time value: '20000101'
#
# End of 5.5 tests
#
#
# MDEV-8205 timediff returns null when comparing decimal time to time string value

View file

@ -1699,7 +1699,14 @@ t1 CREATE TABLE `t1` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 (v varchar(65535));
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Warnings:
Note 1246 Converting column 'v' from VARCHAR to TEXT
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`v` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set storage_engine=MyISAM;
set @save_concurrent_insert=@@concurrent_insert;
set global concurrent_insert=1;

View file

@ -314,12 +314,14 @@ bbbb
drop table t1;
create table t1 (a varchar(3070)) partition by key (a);
ERROR HY000: The total length of the partitioning fields is too large
create table t1 (a varchar(65532) not null) partition by key (a);
ERROR HY000: The total length of the partitioning fields is too large
create table t1 (a varchar(65533)) partition by key (a);
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
ERROR HY000: A BLOB field is not allowed in partition function
create table t1 (a varchar(65534) not null) partition by key (a);
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
ERROR HY000: A BLOB field is not allowed in partition function
create table t1 (a varchar(65535)) partition by key (a);
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
ERROR HY000: A BLOB field is not allowed in partition function
create table t1 (a bit(27), primary key (a)) engine=myisam
partition by hash (a)
(partition p0, partition p1, partition p2);

View file

@ -4179,4 +4179,147 @@ Warnings:
Note 1003 select `test`.`t1`.`id` AS `id`,`test`.`t1`.`c` AS `c` from `test`.`t1` where 0
deallocate prepare stmt2;
drop table t1;
#
# MDEV-9208: Function->Function->View = Mysqld segfault
# (Server crashes in Dependency_marker::visit_field on 2nd
# execution with merged subquery)
#
CREATE TABLE t1 (i1 INT);
insert into t1 values(1),(2);
CREATE TABLE t2 (i2 INT);
insert into t2 values(1),(2);
prepare stmt from "
select 1 from (
select
if (i1<0, 0, 0) as f1,
(select f1) as f2
from t1, t2
) sq
";
execute stmt;
1
1
1
1
1
execute stmt;
1
1
1
1
1
drop table t1,t2;
#
# MDEV-9619: Assertion `null_ref_table' failed in virtual
# table_map Item_direct_view_ref::used_tables() const on 2nd
# execution of PS
#
CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM;
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES ('a'),('b');
CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('c'),('d');
PREPARE stmt FROM "SELECT * FROM v1 WHERE f1 = SOME ( SELECT f2 FROM t2 )";
EXECUTE stmt;
f1
EXECUTE stmt;
f1
insert into t1 values ('c');
EXECUTE stmt;
f1
c
EXECUTE stmt;
f1
c
deallocate prepare stmt;
drop view v1;
drop table t1,t2;
CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM;
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES ('a'),('b');
CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('c'),('d');
PREPARE stmt FROM "SELECT * FROM v1 WHERE (f1,f1) = SOME ( SELECT f2,f2 FROM t2 )";
EXECUTE stmt;
f1
EXECUTE stmt;
f1
insert into t1 values ('c');
EXECUTE stmt;
f1
c
EXECUTE stmt;
f1
c
deallocate prepare stmt;
drop view v1;
drop table t1,t2;
CREATE TABLE t1 (column1 INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (3),(9);
CREATE TABLE t2 (column2 INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (1),(4);
CREATE TABLE t3 (column3 INT) ENGINE=MyISAM;
INSERT INTO t3 VALUES (6),(8);
CREATE TABLE t4 (column4 INT) ENGINE=MyISAM;
INSERT INTO t4 VALUES (2),(5);
PREPARE stmt FROM "
SELECT (
SELECT MAX( table1.column1 ) AS field1
FROM t1 AS table1
WHERE (111,table3.column3) IN ( SELECT 111,table2.column2 AS field2 FROM t2 AS table2 )
) AS sq
FROM t3 AS table3, t4 AS table4 GROUP BY sq
";
EXECUTE stmt;
sq
NULL
EXECUTE stmt;
sq
NULL
deallocate prepare stmt;
drop table t1,t2,t3,t4;
create table t1 (a int, b int, c int);
create table t2 (x int, y int, z int);
create table t3 as select * from t1;
insert into t1 values (1,2,3),(4,5,6),(100,200,300),(400,500,600);
insert into t2 values (1,2,3),(7,8,9),(100,200,300),(400,500,600);
insert into t3 values (1,2,3),(11,12,13),(100,0,0),(400,500,600);
set @optimizer_switch_save=@@optimizer_switch;
set @join_cache_level_save=@@join_cache_level;
set optimizer_switch='materialization=off';
set join_cache_level=0;
select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z);
a b c
1 2 3
400 500 600
prepare stmt from "select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z)";
EXECUTE stmt;
a b c
1 2 3
400 500 600
EXECUTE stmt;
a b c
1 2 3
400 500 600
create view v1 as select * from t1;
create view v2 as select * from t2;
create view v3 as select * from t3;
select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z);
a b c
1 2 3
400 500 600
prepare stmt from "select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z)";
EXECUTE stmt;
a b c
1 2 3
400 500 600
EXECUTE stmt;
a b c
1 2 3
400 500 600
set optimizer_switch=@optimizer_switch_save;
set join_cache_level=@join_cache_level_save;
deallocate prepare stmt;
drop view v1,v2,v3;
drop table t1,t2,t3;
# End of 5.5 tests

View file

@ -47,6 +47,9 @@ delete t1 from t1,t3 where t1.a=t3.a;
drop table t1;
insert into t1 values(1);
ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
drop temporary table if exists t1;
Warnings:
Note 1051 Unknown table 'test.t1'
connection default;
set global read_only=0;
lock table t1 write;

View file

@ -959,7 +959,7 @@ def information_schema COLUMNS COLUMNS TABLE_CATALOG TABLE_CATALOG 253 1536 3 N
def information_schema COLUMNS COLUMNS TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33
def information_schema COLUMNS COLUMNS TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33
def information_schema COLUMNS COLUMNS COLUMN_NAME COLUMN_NAME 253 192 1 N 1 0 33
def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589815 0 Y 16 0 33
def information_schema COLUMNS COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589788 0 Y 16 0 33
def information_schema COLUMNS COLUMNS IS_NULLABLE IS_NULLABLE 253 9 2 N 1 0 33
def information_schema COLUMNS COLUMNS DATA_TYPE DATA_TYPE 253 192 3 N 1 0 33
def information_schema COLUMNS COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 96 0 Y 0 0 33
@ -984,7 +984,7 @@ def information_schema COLUMNS COLUMNS COLUMN_NAME Field 253 192 1 N 1 0 33
def information_schema COLUMNS COLUMNS COLUMN_TYPE Type 252 589815 7 N 17 0 33
def information_schema COLUMNS COLUMNS IS_NULLABLE Null 253 9 2 N 1 0 33
def information_schema COLUMNS COLUMNS COLUMN_KEY Key 253 9 3 N 1 0 33
def information_schema COLUMNS COLUMNS COLUMN_DEFAULT Default 252 589815 0 Y 16 0 33
def information_schema COLUMNS COLUMNS COLUMN_DEFAULT Default 252 589788 0 Y 16 0 33
def information_schema COLUMNS COLUMNS EXTRA Extra 253 81 0 N 1 0 33
Field Type Null Key Default Extra
c int(11) NO PRI NULL

View file

@ -0,0 +1,24 @@
create function f() returns int return 1;
show function status;
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
T f T T T T T T T T T
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
show function status;
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
T f T T T T T T T T T
drop function f;
select @@sql_mode;
@@sql_mode
PAD_CHAR_TO_FULL_LENGTH
create function f() returns int return 1;
select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f';
ROUTINE_NAME
f
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f';
ROUTINE_NAME
f
drop function f;
select @@sql_mode;
@@sql_mode
PAD_CHAR_TO_FULL_LENGTH

View file

@ -1238,9 +1238,9 @@ Warning 1364 Field 'i' doesn't have a default value
DROP TABLE t1;
set @@sql_mode='traditional';
create table t1(a varchar(65537));
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead
create table t1(a varbinary(65537));
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead
set @@sql_mode='traditional';
create table t1(a int, b date not null);
alter table t1 modify a bigint unsigned not null;

View file

@ -502,3 +502,20 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index idx idx 5 NULL 5 Using where; Using index
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
drop table t1;
#
# MDEV-13135: subquery with ON expression subject to
# semi-join optimizations
#
CREATE TABLE t1 (a INT);
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a AS v_a FROM t1;
INSERT INTO t1 VALUES (1),(3);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (3),(4);
SELECT * FROM t1 WHERE a NOT IN (
SELECT b FROM t2 INNER JOIN v1 ON (b IN ( SELECT a FROM t1 ))
WHERE v_a = b
);
a
1
DROP VIEW v1;
DROP TABLE t1,t2;

View file

@ -37,7 +37,7 @@ ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT
CREATE TABLE t2 (a char(256));
ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
CREATE TABLE t1 (a varchar(70000) default "hello");
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead
CREATE TABLE t2 (a blob default "hello");
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
drop table if exists t1,t2;

View file

@ -511,7 +511,76 @@ Warnings:
Warning 1292 Truncated incorrect DOUBLE value: 's '
DROP TABLE t1;
#
# Start of 10.0 tests
# MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
#
CREATE TABLE t1 (c1 VARBINARY(65532));
DESCRIBE t1;
Field Type Null Key Default Extra
c1 varbinary(65532) YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65533));
Warnings:
Note 1246 Converting column 'c1' from VARBINARY to BLOB
DESCRIBE t1;
Field Type Null Key Default Extra
c1 blob YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65534));
Warnings:
Note 1246 Converting column 'c1' from VARBINARY to BLOB
DESCRIBE t1;
Field Type Null Key Default Extra
c1 blob YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65535));
Warnings:
Note 1246 Converting column 'c1' from VARBINARY to BLOB
DESCRIBE t1;
Field Type Null Key Default Extra
c1 blob YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65536));
Warnings:
Note 1246 Converting column 'c1' from VARBINARY to BLOB
DESCRIBE t1;
Field Type Null Key Default Extra
c1 mediumblob YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65532));
DESCRIBE t1;
Field Type Null Key Default Extra
c1 varchar(65532) YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65533));
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 text YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65534));
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 text YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65535));
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 text YES NULL
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65536));
Warnings:
Note 1246 Converting column 'c1' from VARCHAR to TEXT
DESCRIBE t1;
Field Type Null Key Default Extra
c1 mediumtext YES NULL
DROP TABLE t1;
#
# End of 5.5 tests
#
#
# MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns

View file

@ -1595,7 +1595,14 @@ t1 CREATE TABLE `t1` (
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
drop table t1;
create table t1 (v varchar(65535));
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
Warnings:
Note 1246 Converting column 'v' from VARCHAR to TEXT
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`v` text
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
drop table t1;
set @save_concurrent_insert=@@concurrent_insert;
set global concurrent_insert=1;
create table t1 (a int) ROW_FORMAT=FIXED;

View file

@ -927,8 +927,9 @@ show create table t1;
drop table t1;
# ARIA specific varchar tests
--error 1118
create table t1 (v varchar(65535));
show create table t1;
drop table t1;
#
# Test concurrent insert

View file

@ -0,0 +1,18 @@
create table t1 (
pk bigint not null auto_increment,
dt datetime default null,
unique (pk, dt)
) engine=aria row_format=dynamic
partition by range columns(dt) (
partition `p20171231` values less than ('2017-12-31'),
partition `p20181231` values less than ('2018-12-31')
);
insert into t1 values (1,'2017-09-28 15:12:00');
select * from t1;
pk dt
1 2017-09-28 15:12:00
alter table t1 drop partition p20181231;
select * from t1;
pk dt
1 2017-09-28 15:12:00
drop table t1;

View file

@ -0,0 +1,18 @@
#
# MDEV-13937 Aria engine: Internal Error 160 after partition handling
#
source include/have_partition.inc;
create table t1 (
pk bigint not null auto_increment,
dt datetime default null,
unique (pk, dt)
) engine=aria row_format=dynamic
partition by range columns(dt) (
partition `p20171231` values less than ('2017-12-31'),
partition `p20181231` values less than ('2018-12-31')
);
insert into t1 values (1,'2017-09-28 15:12:00');
select * from t1;
alter table t1 drop partition p20181231;
select * from t1;
drop table t1;

View file

@ -337,3 +337,22 @@ tsv timestamp as (adddate(ts, interval 1 day)) virtual
);
drop table t1;
set sql_mode=default;
#
# MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value
#
SET sql_mode='NO_ZERO_IN_DATE';
CREATE TABLE t1
(
a datetime DEFAULT NULL,
b datetime DEFAULT NULL,
c time GENERATED ALWAYS AS (timediff(`a`,`b`)) VIRTUAL
);
INSERT INTO t1 VALUES ('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002',DEFAULT);
SELECT * FROM t1;
a b c
2008-12-31 23:59:59 2008-12-30 01:01:01 46:58:58
DROP TABLE t1;
SET sql_mode=DEFAULT;
#
# End of 5.5 tests
#

View file

@ -301,3 +301,23 @@ create table t1 (
);
drop table t1;
set sql_mode=default;
--echo #
--echo # MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value
--echo #
SET sql_mode='NO_ZERO_IN_DATE';
CREATE TABLE t1
(
a datetime DEFAULT NULL,
b datetime DEFAULT NULL,
c time GENERATED ALWAYS AS (timediff(`a`,`b`)) VIRTUAL
);
INSERT INTO t1 VALUES ('2008-12-31 23:59:59.000001','2008-12-30 01:01:01.000002',DEFAULT);
SELECT * FROM t1;
DROP TABLE t1;
SET sql_mode=DEFAULT;
--echo #
--echo # End of 5.5 tests
--echo #

View file

@ -1254,6 +1254,48 @@ execute stmt1;
deallocate prepare stmt1;
drop table t2;
--echo #
--echo # MDEV-8960 Can't refer the same column twice in one ALTER TABLE
--echo #
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` SET DEFAULT 2;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT,
MODIFY COLUMN `consultant_id` BIGINT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
#
# Test of ALTER TABLE IF [NOT] EXISTS
#
@ -1767,45 +1809,3 @@ SHOW CREATE TABLE t1;
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8;
SHOW CREATE TABLE t1;
DROP TABLE t1;
--echo #
--echo # MDEV-8960 Can't refer the same column twice in one ALTER TABLE
--echo #
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL,
ALTER COLUMN `consultant_id` SET DEFAULT 2;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (
`a` int(11) DEFAULT NULL
) DEFAULT CHARSET=utf8;
ALTER TABLE t1 ADD COLUMN `consultant_id` integer NOT NULL DEFAULT 2,
ALTER COLUMN `consultant_id` DROP DEFAULT,
MODIFY COLUMN `consultant_id` BIGINT;
SHOW CREATE TABLE t1;
DROP TABLE t1;

View file

@ -174,6 +174,18 @@ drop table t1, t2;
--echo End of 5.0 tests
--echo #
--echo # Bug#19875294 ASSERTION `SRC' FAILED IN MY_STRNXFRM_UNICODE
--echo # (SIG 6 -STRINGS/CTYPE-UTF8.C:5151)
--echo #
set @@sql_mode='';
CREATE TABLE t1(c1 SET('','')CHARACTER SET ucs2);
INSERT INTO t1 VALUES(990101.102);
SELECT COALESCE(c1)FROM t1 ORDER BY 1;
DROP TABLE t1;
set @@sql_mode=default;
#
# lp:1001510
# Bug #11764313 57135: CRASH IN ITEM_FUNC_CASE::FIND_ITEM WITH CASE WHEN

View file

@ -820,6 +820,29 @@ SELECT @@sql_mode;
SET sql_mode=DEFAULT;
SET NAMES utf8;
--echo #
--echo # MDEV-13972 crash in Item_func_sec_to_time::get_date
--echo #
SELECT SEC_TO_TIME(CONVERT(900*24*60*60 USING ucs2));
--echo #
--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
--echo #
CREATE TABLE t1 (c1 VARCHAR(32766) CHARACTER SET ucs2);
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(32767) CHARACTER SET ucs2);
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(32768) CHARACTER SET ucs2);
DESCRIBE t1;
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #

View file

@ -903,6 +903,19 @@ SELECT @@sql_mode;
SET sql_mode=DEFAULT;
SET NAMES utf8;
--echo #
--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
--echo #
CREATE TABLE t1 (c1 VARCHAR(16383) CHARACTER SET utf32);
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(16384) CHARACTER SET utf32);
DESCRIBE t1;
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #

View file

@ -1714,6 +1714,22 @@ SELECT CHAR(i USING utf8) FROM t1;
SET sql_mode=DEFAULT;
DROP TABLE t1;
--echo #
--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
--echo #
CREATE TABLE t1 (c1 VARCHAR(21844) CHARACTER SET utf8);
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(21845) CHARACTER SET utf8);
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(21846) CHARACTER SET utf8);
DESCRIBE t1;
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #

View file

@ -607,6 +607,14 @@ DROP TABLE t1;
--echo # End of 5.3 tests
#
# Bug#26361149 MYSQL SERVER CRASHES AT: COL IN(IFNULL(CONST, COL), NAME_CONST('NAME', NULL))
#
create table t1 (a int);
insert t1 values (1),(2),(3);
select * from t1 where 1 in (a, name_const('a', null));
drop table t1;
--echo #
--echo # Start of 10.0 tests
--echo #

View file

@ -1673,9 +1673,33 @@ DROP TABLE t1;
--echo #
SELECT 1 MOD ADDTIME( '13:58:57', '00:00:01' ) + 2;
--echo #
--echo # MDEV-11819 NO_ZERO_IN_DATE: Incorrect generated column value
--echo #
SET sql_mode='NO_ZERO_IN_DATE';
CREATE TABLE t1 (a TIME(6));
INSERT INTO t1 SELECT timediff(timestamp'2008-12-31 23:59:59.000001',timestamp'2008-12-30 01:01:01.000002');
SELECT * FROM t1;
DROP TABLE t1;
SET sql_mode=DEFAULT;
--echo #
--echo # Start of 10.0 tests
--echo # MDEV-13972 crash in Item_func_sec_to_time::get_date
--echo #
# The below query can return warning sporadically
--disable_warnings
DO TO_DAYS(SEC_TO_TIME(TIME(CEILING(UUID()))));
--enable_warnings
DO TO_DAYS(SEC_TO_TIME(MAKEDATE('',RAND(~('')))));
SELECT SEC_TO_TIME(MAKEDATE(0,RAND(~0)));
--echo #
--echo # End of 5.5 tests
--echo #
--echo #

View file

@ -1030,8 +1030,9 @@ show create table t1;
drop table t1;
# MyISAM specific varchar tests
--error 1118
create table t1 (v varchar(65535));
show create table t1;
drop table t1;
eval set storage_engine=$default;

View file

@ -217,11 +217,13 @@ select * from t1 where a = 'bbbb';
drop table t1;
-- error ER_PARTITION_FIELDS_TOO_LONG
create table t1 (a varchar(3070)) partition by key (a);
-- error ER_TOO_BIG_ROWSIZE
-- error ER_PARTITION_FIELDS_TOO_LONG
create table t1 (a varchar(65532) not null) partition by key (a);
-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
create table t1 (a varchar(65533)) partition by key (a);
-- error ER_TOO_BIG_ROWSIZE
-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
create table t1 (a varchar(65534) not null) partition by key (a);
-- error ER_TOO_BIG_ROWSIZE
-- error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
create table t1 (a varchar(65535)) partition by key (a);
#

View file

@ -3714,4 +3714,133 @@ deallocate prepare stmt2;
drop table t1;
--echo #
--echo # MDEV-9208: Function->Function->View = Mysqld segfault
--echo # (Server crashes in Dependency_marker::visit_field on 2nd
--echo # execution with merged subquery)
--echo #
CREATE TABLE t1 (i1 INT);
insert into t1 values(1),(2);
CREATE TABLE t2 (i2 INT);
insert into t2 values(1),(2);
prepare stmt from "
select 1 from (
select
if (i1<0, 0, 0) as f1,
(select f1) as f2
from t1, t2
) sq
";
execute stmt;
execute stmt;
drop table t1,t2;
--echo #
--echo # MDEV-9619: Assertion `null_ref_table' failed in virtual
--echo # table_map Item_direct_view_ref::used_tables() const on 2nd
--echo # execution of PS
--echo #
CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM;
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES ('a'),('b');
CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('c'),('d');
PREPARE stmt FROM "SELECT * FROM v1 WHERE f1 = SOME ( SELECT f2 FROM t2 )";
EXECUTE stmt;
EXECUTE stmt;
insert into t1 values ('c');
EXECUTE stmt;
EXECUTE stmt;
deallocate prepare stmt;
drop view v1;
drop table t1,t2;
CREATE TABLE t1 (f1 VARCHAR(10)) ENGINE=MyISAM;
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
INSERT INTO t1 VALUES ('a'),('b');
CREATE TABLE t2 (f2 VARCHAR(10)) ENGINE=MyISAM;
INSERT INTO t2 VALUES ('c'),('d');
PREPARE stmt FROM "SELECT * FROM v1 WHERE (f1,f1) = SOME ( SELECT f2,f2 FROM t2 )";
EXECUTE stmt;
EXECUTE stmt;
insert into t1 values ('c');
EXECUTE stmt;
EXECUTE stmt;
deallocate prepare stmt;
drop view v1;
drop table t1,t2;
CREATE TABLE t1 (column1 INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (3),(9);
CREATE TABLE t2 (column2 INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (1),(4);
CREATE TABLE t3 (column3 INT) ENGINE=MyISAM;
INSERT INTO t3 VALUES (6),(8);
CREATE TABLE t4 (column4 INT) ENGINE=MyISAM;
INSERT INTO t4 VALUES (2),(5);
PREPARE stmt FROM "
SELECT (
SELECT MAX( table1.column1 ) AS field1
FROM t1 AS table1
WHERE (111,table3.column3) IN ( SELECT 111,table2.column2 AS field2 FROM t2 AS table2 )
) AS sq
FROM t3 AS table3, t4 AS table4 GROUP BY sq
";
EXECUTE stmt;
EXECUTE stmt;
deallocate prepare stmt;
drop table t1,t2,t3,t4;
create table t1 (a int, b int, c int);
create table t2 (x int, y int, z int);
create table t3 as select * from t1;
insert into t1 values (1,2,3),(4,5,6),(100,200,300),(400,500,600);
insert into t2 values (1,2,3),(7,8,9),(100,200,300),(400,500,600);
insert into t3 values (1,2,3),(11,12,13),(100,0,0),(400,500,600);
set @optimizer_switch_save=@@optimizer_switch;
set @join_cache_level_save=@@join_cache_level;
set optimizer_switch='materialization=off';
set join_cache_level=0;
select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z);
prepare stmt from "select * from t1 where (select a,b from t3 where t3.c=t1.c) in (select x,y from t2 where t1.c= t2.z)";
EXECUTE stmt;
EXECUTE stmt;
create view v1 as select * from t1;
create view v2 as select * from t2;
create view v3 as select * from t3;
select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z);
prepare stmt from "select * from v1 where (select a,b from v3 where v3.c=v1.c) in (select x,y from v2 where v1.c= v2.z)";
EXECUTE stmt;
EXECUTE stmt;
set optimizer_switch=@optimizer_switch_save;
set join_cache_level=@join_cache_level_save;
deallocate prepare stmt;
drop view v1,v2,v3;
drop table t1,t2,t3;
--echo # End of 5.5 tests

View file

@ -114,6 +114,11 @@ drop table t1;
--error ER_OPTION_PREVENTS_STATEMENT
insert into t1 values(1);
#
# MDEV-14056 DROP TEMPORARY TABLE IF EXISTS causes error 1290 with read_only option
#
drop temporary table if exists t1;
#
# Bug#11733 COMMITs should not happen if read-only is set
#

View file

@ -0,0 +1,23 @@
#
# Test that show function status succeeds with
# sql_mode = 'PAD_CHAR_TO_FULL_LENGTH (MDEV-13149)
# show function status
create function f() returns int return 1;
--replace_column 1 T 3 T 4 T 5 T 6 T 7 T 8 T 9 T 10 T 11 T
show function status;
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
--replace_column 1 T 3 T 4 T 5 T 6 T 7 T 8 T 9 T 10 T 11 T
show function status;
drop function f;
select @@sql_mode;
# select ROUTINE_NAME from information_schema.ROUTINES
create function f() returns int return 1;
select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f';
set sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
select ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME='f';
drop function f;
select @@sql_mode;

View file

@ -522,4 +522,23 @@ select * from t1 where a in (select max(a) from t1 where a < 4) or a > 5;
drop table t1;
--echo #
--echo # MDEV-13135: subquery with ON expression subject to
--echo # semi-join optimizations
--echo #
CREATE TABLE t1 (a INT);
CREATE ALGORITHM=MERGE VIEW v1 AS SELECT a AS v_a FROM t1;
INSERT INTO t1 VALUES (1),(3);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (3),(4);
SELECT * FROM t1 WHERE a NOT IN (
SELECT b FROM t2 INNER JOIN v1 ON (b IN ( SELECT a FROM t1 ))
WHERE v_a = b
);
DROP VIEW v1;
DROP TABLE t1,t2;

View file

@ -219,7 +219,51 @@ SELECT 5 = a FROM t1;
DROP TABLE t1;
--echo #
--echo # Start of 10.0 tests
--echo # MDEV-13530 VARBINARY doesn't convert to to BLOB for sizes 65533, 65534 and 65535
--echo #
CREATE TABLE t1 (c1 VARBINARY(65532));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65533));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65534));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65535));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARBINARY(65536));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65532));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65533));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65534));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65535));
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 (c1 VARCHAR(65536));
DESCRIBE t1;
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #
--echo #

View file

@ -47,6 +47,11 @@ void* operator new[](std::size_t sz, const std::nothrow_t&) throw()
return (void *) my_malloc (sz ? sz : 1, MYF(0));
}
void operator delete (void *ptr, std::size_t)
{
my_free(ptr);
}
void operator delete (void *ptr)
{
my_free(ptr);
@ -57,6 +62,11 @@ void operator delete[] (void *ptr) throw ()
my_free(ptr);
}
void operator delete[] (void *ptr, std::size_t) throw ()
{
my_free(ptr);
}
void operator delete(void* ptr, const std::nothrow_t&) throw()
{
my_free(ptr);

View file

@ -8,6 +8,12 @@ ENDIF()
#Remove -fno-implicit-templates from compiler flags(handlersocket would not work with it)
STRING(REPLACE "-fno-implicit-templates" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(" -Wdeprecated-declarations" HAVE_CXX_WDEPRECATED_DECLARATIONS)
IF (HAVE_CXX_WDEPRECATED_DECLARATIONS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
ENDIF()
INCLUDE_DIRECTORIES(libhsclient)
# Handlersocket client library. We do not distribute it,

View file

@ -200,6 +200,11 @@ ELSE()
SET(localstatedir ${MYSQL_DATADIR})
ENDIF()
SET(resolveip_locations "$basedir/${INSTALL_BINDIR} $basedir/bin")
SET(mysqld_locations "$basedir/${INSTALL_SBINDIR} $basedir/libexec $basedir/sbin $basedir/bin")
SET(errmsg_locations "$basedir/${INSTALL_MYSQLSHAREDIR}/english $basedir/share/english $basedir/share/mysql/english")
SET(pkgdata_locations "$basedir/${INSTALL_MYSQLSHAREDIR} $basedir/share $basedir/share/mysql")
IF(UNIX)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mysql_install_db.sh
${CMAKE_CURRENT_BINARY_DIR}/mysql_install_db ESCAPE_QUOTES @ONLY)

View file

@ -159,7 +159,7 @@ parse_arguments()
# Try to find a specific file within --basedir which can either be a binary
# release or installed source directory and return the path.
find_in_basedir()
find_in_dirs()
{
case "$1" in
--dir)
@ -171,13 +171,13 @@ find_in_basedir()
for dir in "$@"
do
if test -f "$basedir/$dir/$file"
if test -f "$dir/$file"
then
if test -n "$return_dir"
then
echo "$basedir/$dir"
echo "$dir"
else
echo "$basedir/$dir/$file"
echo "$dir/$file"
fi
break
fi
@ -241,7 +241,7 @@ then
print_defaults="$builddir/extra/my_print_defaults"
elif test -n "$basedir"
then
print_defaults=`find_in_basedir my_print_defaults bin extra`
print_defaults=`find_in_dirs my_print_defaults $basedir/bin $basedir/extra`
if test -z "$print_defaults"
then
cannot_find_file my_print_defaults $basedir/bin $basedir/extra
@ -267,41 +267,43 @@ if test -n "$srcdir"
then
basedir="$builddir"
bindir="$basedir/client"
extra_bindir="$basedir/extra"
resolveip="$basedir/extra/resolveip"
mysqld="$basedir/sql/mysqld"
langdir="$basedir/sql/share/english"
pkgdatadir="$srcdir/scripts"
scriptdir="$srcdir/scripts"
elif test -n "$basedir"
then
bindir="$basedir/bin"
extra_bindir="$bindir"
mysqld=`find_in_basedir mysqld libexec sbin bin`
bindir="$basedir/bin" # only used in the help text
resolveip=`find_in_dirs resolveip @resolveip_locations@`
if test -z "$resolveip"
then
cannot_find_file resolveip @resolveip_locations@
exit 1
fi
mysqld=`find_in_dirs mysqld @mysqld_locations@`
if test -z "$mysqld"
then
cannot_find_file mysqld $basedir/libexec $basedir/sbin $basedir/bin
cannot_find_file mysqld @mysqld_locations@
exit 1
fi
langdir=`find_in_basedir --dir errmsg.sys share/english share/mysql/english`
langdir=`find_in_dirs --dir errmsg.sys @errmsg_locations@`
if test -z "$langdir"
then
cannot_find_file errmsg.sys $basedir/share/english $basedir/share/mysql/english
cannot_find_file errmsg.sys @errmsg_locations@
exit 1
fi
pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql`
pkgdatadir=`find_in_dirs --dir fill_help_tables.sql @pkgdata_locations@`
if test -z "$pkgdatadir"
then
cannot_find_file fill_help_tables.sql $basedir/share $basedir/share/mysql
cannot_find_file fill_help_tables.sql @pkgdata_locations@
exit 1
fi
scriptdir="$basedir/scripts"
else
basedir="@prefix@"
bindir="@bindir@"
extra_bindir="$bindir"
resolveip="$bindir/resolveip"
mysqld="@libexecdir@/mysqld"
pkgdatadir="@pkgdatadir@"
scriptdir="@scriptdir@"
fi
# Set up paths to SQL scripts required for bootstrap
@ -344,14 +346,14 @@ hostname=`@HOSTNAME@`
# Check if hostname is valid
if test "$cross_bootstrap" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
then
resolved=`"$extra_bindir/resolveip" $hostname 2>&1`
resolved=`"$resolveip" $hostname 2>&1`
if test $? -ne 0
then
resolved=`"$extra_bindir/resolveip" localhost 2>&1`
resolved=`"$resolveip" localhost 2>&1`
if test $? -ne 0
then
echo "Neither host '$hostname' nor 'localhost' could be looked up with"
echo "'$extra_bindir/resolveip'"
echo "'$resolveip'"
echo "Please configure the 'hostname' command to return a correct"
echo "hostname."
echo "If you want to solve this at a later stage, restart this script"
@ -359,7 +361,7 @@ then
link_to_help
exit 1
fi
echo "WARNING: The host '$hostname' could not be looked up with resolveip."
echo "WARNING: The host '$hostname' could not be looked up with $resolveip."
echo "This probably means that your libc libraries are not 100 % compatible"
echo "with this binary MariaDB version. The MariaDB daemon, mysqld, should work"
echo "normally with the exception that host name resolving will not work."
@ -437,7 +439,7 @@ else
echo "The problem could be conflicting information in an external"
echo "my.cnf files. You can ignore these by doing:"
echo
echo " shell> $scriptdir/scripts/mysql_install_db --defaults-file=~/.my.cnf"
echo " shell> $0 --defaults-file=~/.my.cnf"
echo
echo "You can also try to start the mysqld daemon with:"
echo

View file

@ -1148,7 +1148,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
break;
case OPT_pipe:
options->protocol = MYSQL_PROTOCOL_PIPE;
break;
break;
case OPT_connect_timeout:
case OPT_timeout:
if (opt_arg)

View file

@ -188,8 +188,8 @@ common_1_lev_code:
expr= tmp_expr - (tmp_expr/60)*60;
/* the code after the switch will finish */
}
break;
}
case INTERVAL_HOUR_SECOND:
{
ulonglong tmp_expr= expr;
@ -205,8 +205,8 @@ common_1_lev_code:
expr= tmp_expr - (tmp_expr/60)*60;
/* the code after the switch will finish */
}
break;
}
case INTERVAL_DAY_SECOND:
{
ulonglong tmp_expr= expr;
@ -228,8 +228,8 @@ common_1_lev_code:
expr= tmp_expr - (tmp_expr/60)*60;
/* the code after the switch will finish */
}
break;
}
case INTERVAL_DAY_MICROSECOND:
case INTERVAL_HOUR_MICROSECOND:
case INTERVAL_MINUTE_MICROSECOND:
@ -243,7 +243,8 @@ common_1_lev_code:
break;
case INTERVAL_WEEK:
expr/= 7;
/* fall through */
close_quote= FALSE;
break;
default:
close_quote= FALSE;
break;

View file

@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
Copyright (c) 2008, 2013, Monty Program Ab.
Copyright (c) 2000, 2017, Oracle and/or its affiliates.
Copyright (c) 2008, 2017, 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
@ -8215,13 +8215,13 @@ String *Field_set::val_str(String *val_buffer,
ulonglong tmp=(ulonglong) Field_enum::val_int();
uint bitnr=0;
/*
Some callers expect *val_buffer to contain the result,
so we assign to it, rather than doing 'return &empty_set_string.
*/
*val_buffer= empty_set_string;
if (tmp == 0)
{
/*
Some callers expect *val_buffer to contain the result,
so we assign to it, rather than doing 'return &empty_set_string.
*/
*val_buffer= empty_set_string;
return val_buffer;
}

View file

@ -1,6 +1,6 @@
/*
Copyright (c) 2005, 2013, Oracle and/or its affiliates.
Copyright (c) 2009, 2013, Monty Program Ab & SkySQL Ab
Copyright (c) 2005, 2017, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, 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
@ -1928,7 +1928,7 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
cleanup_new_partition(part_count);
DBUG_RETURN(error);
}
DBUG_PRINT("info", ("Add partition %s", part_name_buff));
if ((error= prepare_new_partition(table, create_info,
new_file_array[i],

View file

@ -5939,7 +5939,7 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
collation.collation);
break;
}
/* Fall through */
/* fall through */
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_SET:
case MYSQL_TYPE_VAR_STRING:
@ -6704,6 +6704,7 @@ bool Item::cache_const_expr_analyzer(uchar **arg)
*/
if (const_item() &&
!(basic_const_item() || item->basic_const_item() ||
item->type() == Item::NULL_ITEM || /* Item_name_const hack */
item->type() == Item::FIELD_ITEM ||
item->type() == SUBSELECT_ITEM ||
/*
@ -6861,7 +6862,11 @@ public:
// Find which select the field is in. This is achieved by walking up
// the select tree and looking for the table of interest.
st_select_lex *sel;
for (sel= current_select; sel; sel= sel->outer_select())
for (sel= current_select;
sel ;
sel= (sel->context.outer_context ?
sel->context.outer_context->select_lex:
NULL))
{
List_iterator<TABLE_LIST> li(sel->leaf_tables);
TABLE_LIST *tbl;
@ -8043,7 +8048,6 @@ bool Item_direct_view_ref::send(Protocol *protocol, String *buffer)
bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
{
DBUG_ASSERT(1);
/* view fild reference must be defined */
DBUG_ASSERT(*ref);
/* (*ref)->check_cols() will be made in Item_direct_ref::fix_fields */
@ -9933,7 +9937,7 @@ void Item_direct_view_ref::update_used_tables()
table_map Item_direct_view_ref::used_tables() const
{
DBUG_ASSERT(null_ref_table);
DBUG_ASSERT(fixed);
if (get_depended_from())
return OUTER_REF_TABLE_BIT;

View file

@ -1,8 +1,8 @@
#ifndef SQL_ITEM_INCLUDED
#define SQL_ITEM_INCLUDED
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2009, 2016, MariaDB
/* Copyright (c) 2000, 2017, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, 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

View file

@ -45,7 +45,14 @@ Item_row::Item_row(List<Item> &arg):
//TODO: think placing 2-3 component items in item (as it done for function)
if ((arg_count= arg.elements))
{
items= (Item**) sql_alloc(sizeof(Item*)*arg_count);
if (!items)
{
arg_count= 0;
return;
}
}
else
items= 0;
List_iterator_fast<Item> li(arg);
@ -58,6 +65,27 @@ Item_row::Item_row(List<Item> &arg):
}
}
Item_row::Item_row(Item *item):
Item(),
used_tables_cache(0),
not_null_tables_cache(0),
arg_count(item->cols()),
const_item_cache(1),
with_null(0)
{
items= (Item**) sql_alloc(sizeof(Item*) * arg_count);
if (!items)
{
arg_count= 0;
return;
}
for (uint i= 0; i < arg_count; i++)
{
items[i]= item->element_index(i);
}
}
void Item_row::illegal_method_call(const char *method)
{
DBUG_ENTER("Item_row::illegal_method_call");

View file

@ -35,6 +35,7 @@ public:
const_item_cache(item->const_item_cache),
with_null(0)
{}
Item_row(Item *item);
enum Type type() const { return ROW_ITEM; };
void illegal_method_call(const char *);

View file

@ -1390,6 +1390,9 @@ Item_in_subselect::Item_in_subselect(Item * left_exp,
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
DBUG_PRINT("info", ("in_strategy: %u", (uint)in_strategy));
left_expr_orig= left_expr= left_exp;
/* prepare to possible disassembling the item in convert_subq_to_sj() */
if (left_exp->type() == Item::ROW_ITEM)
left_expr_orig= new Item_row(left_exp);
func= &eq_creator;
init(select_lex, new select_exists_subselect(this));
max_columns= UINT_MAX;
@ -1413,6 +1416,9 @@ Item_allany_subselect::Item_allany_subselect(Item * left_exp,
{
DBUG_ENTER("Item_allany_subselect::Item_allany_subselect");
left_expr_orig= left_expr= left_exp;
/* prepare to possible disassembling the item in convert_subq_to_sj() */
if (left_exp->type() == Item::ROW_ITEM)
left_expr_orig= new Item_row(left_exp);
func= func_creator(all_arg);
init(select_lex, new select_exists_subselect(this));
max_columns= 1;

View file

@ -1789,9 +1789,18 @@ overflow:
ltime->hour= TIME_MAX_HOUR+1;
check_time_range(ltime, decimals, &unused);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
err->ptr(), err->length(),
MYSQL_TIMESTAMP_TIME, NullS);
if (!err)
{
ErrConvInteger err2(sec, unsigned_flag);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
&err2, MYSQL_TIMESTAMP_TIME, NullS);
}
else
{
ErrConvString err2(err);
make_truncated_value_warning(current_thd, Sql_condition::WARN_LEVEL_WARN,
&err2, MYSQL_TIMESTAMP_TIME, NullS);
}
return 0;
}

View file

@ -499,8 +499,16 @@ public:
{ return val_decimal_from_date(decimal_value); }
Field *tmp_table_field(TABLE *table)
{ return tmp_table_field_from_field_type(table, 0); }
#if MARIADB_VERSION_ID > 100300
#error This code should be removed in 10.3, to use the derived save_in_field()
#else
int save_in_field(Field *field, bool no_conversions)
{ return save_date_in_field(field); }
{
return field_type() == MYSQL_TYPE_TIME ?
save_time_in_field(field) :
save_date_in_field(field);
}
#endif
void fix_length_and_dec();
};

View file

@ -7652,21 +7652,6 @@ User_var_log_event(const char* buf, uint event_len,
we keep the flags set to UNDEF_F.
*/
uint bytes_read= ((val + val_len) - buf_start);
#ifndef DBUG_OFF
bool old_pre_checksum_fd= description_event->is_version_before_checksum(
&description_event->server_version_split);
#endif
DBUG_ASSERT((bytes_read == data_written -
(old_pre_checksum_fd ||
(description_event->checksum_alg ==
BINLOG_CHECKSUM_ALG_OFF)) ?
0 : BINLOG_CHECKSUM_LEN)
||
(bytes_read == data_written -1 -
(old_pre_checksum_fd ||
(description_event->checksum_alg ==
BINLOG_CHECKSUM_ALG_OFF)) ?
0 : BINLOG_CHECKSUM_LEN));
if ((data_written - bytes_read) > 0)
{
flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +

View file

@ -1609,6 +1609,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
sj-nest.
*/
st_select_lex *subq_lex= subq_pred->unit->first_select();
DBUG_ASSERT(subq_lex->next_select() == NULL);
nested_join->join_list.empty();
List_iterator_fast<TABLE_LIST> li(subq_lex->top_join_list);
TABLE_LIST *tl;
@ -1706,7 +1707,8 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
if (subq_pred->left_expr->cols() == 1)
{
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr);
/* add left = select_list_element */
nested_join->sj_outer_expr_list.push_back(&subq_pred->left_expr);
/*
Create Item_func_eq. Note that
1. this is done on the statement, not execution, arena
@ -1718,24 +1720,61 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
*/
Item_func_eq *item_eq=
new Item_func_eq(subq_pred->left_expr_orig, subq_lex->ref_pointer_array[0]);
if (!item_eq)
DBUG_RETURN(TRUE);
if (subq_pred->left_expr_orig != subq_pred->left_expr)
thd->change_item_tree(item_eq->arguments(), subq_pred->left_expr);
item_eq->in_equality_no= 0;
sj_nest->sj_on_expr= and_items(sj_nest->sj_on_expr, item_eq);
}
else
else if (subq_pred->left_expr->type() == Item::ROW_ITEM)
{
/*
disassemple left expression and add
left1 = select_list_element1 and left2 = select_list_element2 ...
*/
for (uint i= 0; i < subq_pred->left_expr->cols(); i++)
{
nested_join->sj_outer_expr_list.push_back(subq_pred->left_expr->
element_index(i));
Item_func_eq *item_eq=
new Item_func_eq(subq_pred->left_expr->element_index(i),
addr(i));
Item_func_eq *item_eq=
new Item_func_eq(subq_pred->left_expr_orig->element_index(i),
subq_lex->ref_pointer_array[i]);
if (!item_eq)
DBUG_RETURN(TRUE);
DBUG_ASSERT(subq_pred->left_expr->element_index(i)->fixed);
if (subq_pred->left_expr_orig->element_index(i) !=
subq_pred->left_expr->element_index(i))
thd->change_item_tree(item_eq->arguments(),
subq_pred->left_expr->element_index(i));
item_eq->in_equality_no= i;
sj_nest->sj_on_expr= and_items(sj_nest->sj_on_expr, item_eq);
}
}
else
{
/*
add row operation
left = (select_list_element1, select_list_element2, ...)
*/
Item_row *row= new Item_row(subq_lex->pre_fix);
/* fix fields on subquery was call so they should be the same */
DBUG_ASSERT(subq_pred->left_expr->cols() == row->cols());
if (!row)
DBUG_RETURN(TRUE);
nested_join->sj_outer_expr_list.push_back(&subq_pred->left_expr);
Item_func_eq *item_eq=
new Item_func_eq(subq_pred->left_expr_orig, row);
if (!item_eq)
DBUG_RETURN(TRUE);
for (uint i= 0; i < row->cols(); i++)
{
if (row->element_index(i) != subq_lex->ref_pointer_array[i])
thd->change_item_tree(row->addr(i), subq_lex->ref_pointer_array[i]);
}
item_eq->in_equality_no= 0;
sj_nest->sj_on_expr= and_items(sj_nest->sj_on_expr, item_eq);
}
/*
Fix the created equality and AND
@ -3289,8 +3328,8 @@ void restore_prev_sj_state(const table_map remaining_tables,
ulonglong get_bound_sj_equalities(TABLE_LIST *sj_nest,
table_map remaining_tables)
{
List_iterator<Item> li(sj_nest->nested_join->sj_outer_expr_list);
Item *item;
List_iterator<Item_ptr> li(sj_nest->nested_join->sj_outer_expr_list);
Item **item;
uint i= 0;
ulonglong res= 0;
while ((item= li++))
@ -3301,7 +3340,7 @@ ulonglong get_bound_sj_equalities(TABLE_LIST *sj_nest,
class and see if there is an element that is bound?
(this is an optional feature)
*/
if (!(item->used_tables() & remaining_tables))
if (!(item[0]->used_tables() & remaining_tables))
{
res |= 1ULL << i;
}

View file

@ -38,8 +38,6 @@
partition_info *partition_info::get_clone()
{
DBUG_ENTER("partition_info::get_clone");
if (!this)
DBUG_RETURN(NULL);
List_iterator<partition_element> part_it(partitions);
partition_element *part;
partition_info *clone= new partition_info();

View file

@ -2986,7 +2986,6 @@ static int init_slave_thread(THD* thd, Master_info *mi,
thd->enable_slow_log= opt_log_slow_slave_statements;
thd->variables.log_slow_filter= global_system_variables.log_slow_filter;
set_slave_thread_options(thd);
thd->client_capabilities = CLIENT_LOCAL_FILES;
mysql_mutex_lock(&LOCK_thread_count);
thd->thread_id= thd->variables.pseudo_thread_id= thread_id++;
mysql_mutex_unlock(&LOCK_thread_count);

View file

@ -141,7 +141,6 @@ sp_get_item_value(THD *thd, Item *item, String *str)
case DECIMAL_RESULT:
if (item->field_type() != MYSQL_TYPE_BIT)
return item->val_str(str);
else {/* Bit type is handled as binary string */}
/* fall through */
case STRING_RESULT:
{
@ -4297,4 +4296,3 @@ sp_add_to_query_tables(THD *thd, LEX *lex,
lex->add_to_query_tables(table);
return table;
}

View file

@ -66,7 +66,6 @@ static bool admin_recreate_table(THD *thd, TABLE_LIST *table_list)
if (thd->get_stmt_da()->is_ok())
thd->get_stmt_da()->reset_diagnostics_area();
table_list->table= NULL;
result_code= result_code ? HA_ADMIN_FAILED : HA_ADMIN_OK;
DBUG_RETURN(result_code);
}

View file

@ -7806,13 +7806,15 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields,
bool setup_fields(THD *thd, Item **ref_pointer_array,
List<Item> &fields, enum_mark_columns mark_used_columns,
List<Item> *sum_func_list, bool allow_sum_func)
List<Item> *sum_func_list, List<Item> *pre_fix,
bool allow_sum_func)
{
reg2 Item *item;
enum_mark_columns save_mark_used_columns= thd->mark_used_columns;
nesting_map save_allow_sum_func= thd->lex->allow_sum_func;
List_iterator<Item> it(fields);
bool save_is_item_list_lookup;
bool make_pre_fix= (pre_fix && (pre_fix->elements == 0));
DBUG_ENTER("setup_fields");
DBUG_PRINT("enter", ("ref_pointer_array: %p", ref_pointer_array));
@ -7859,6 +7861,9 @@ bool setup_fields(THD *thd, Item **ref_pointer_array,
thd->lex->current_select->cur_pos_in_select_list= 0;
while ((item= it++))
{
if (make_pre_fix)
pre_fix->push_back(item, thd->stmt_arena->mem_root);
if ((!item->fixed && item->fix_fields(thd, it.ref())) ||
(item= *(it.ref()))->check_cols(1))
{

View file

@ -174,7 +174,8 @@ int setup_wild(THD *thd, TABLE_LIST *tables, List<Item> &fields,
List<Item> *sum_func_list, uint wild_num);
bool setup_fields(THD *thd, Item** ref_pointer_array,
List<Item> &item, enum_mark_columns mark_used_columns,
List<Item> *sum_func_list, bool allow_sum_func);
List<Item> *sum_func_list, List<Item> *pre_fix,
bool allow_sum_func);
void unfix_fields(List<Item> &items);
bool fill_record(THD * thd, TABLE *table_arg, List<Item> &fields,
List<Item> &values, bool ignore_errors);
@ -381,7 +382,7 @@ inline bool setup_fields_with_no_wrap(THD *thd, Item **ref_pointer_array,
bool res;
thd->lex->select_lex.no_wrap_view_item= TRUE;
res= setup_fields(thd, ref_pointer_array, item, mark_used_columns,
sum_func_list, allow_sum_func);
sum_func_list, NULL, allow_sum_func);
thd->lex->select_lex.no_wrap_view_item= FALSE;
return res;
}

View file

@ -45,7 +45,18 @@
#define MAX_MBWIDTH 3 /* Max multibyte sequence */
#define MAX_FILENAME_MBWIDTH 5
#define MAX_FIELD_CHARLENGTH 255
#define MAX_FIELD_VARCHARLENGTH 65535
/*
In MAX_FIELD_VARCHARLENGTH we reserve extra bytes for the overhead:
- 2 bytes for the length
- 1 byte for NULL bits
to avoid the "Row size too large" error for these three corner definitions:
CREATE TABLE t1 (c VARBINARY(65533));
CREATE TABLE t1 (c VARBINARY(65534));
CREATE TABLE t1 (c VARBINARY(65535));
Like VARCHAR(65536), they will be converted to BLOB automatically
in non-sctict mode.
*/
#define MAX_FIELD_VARCHARLENGTH (65535-2-1)
#define MAX_FIELD_BLOBLENGTH UINT_MAX32 /* cf field_blob::get_length() */
#define CONVERT_IF_BIGGER_TO_BLOB 512 /* Threshold *in characters* */

View file

@ -724,7 +724,7 @@ exit_without_my_ok:
DELETE_ACL, SELECT_ACL, TRUE))
DBUG_RETURN(TRUE);
if ((wild_num && setup_wild(thd, table_list, field_list, NULL, wild_num)) ||
setup_fields(thd, NULL, field_list, MARK_COLUMNS_READ, NULL, 0) ||
setup_fields(thd, NULL, field_list, MARK_COLUMNS_READ, NULL, NULL, 0) ||
setup_conds(thd, table_list, select_lex->leaf_tables, conds) ||
setup_ftfuncs(select_lex))
DBUG_RETURN(TRUE);

View file

@ -29,7 +29,7 @@ bool mysql_do(THD *thd, List<Item> &values)
List_iterator<Item> li(values);
Item *value;
DBUG_ENTER("mysql_do");
if (setup_fields(thd, 0, values, MARK_COLUMNS_NONE, 0, 0))
if (setup_fields(thd, 0, values, MARK_COLUMNS_NONE, 0, NULL, 0))
DBUG_RETURN(TRUE);
while ((value = li++))
value->val_int();

View file

@ -258,7 +258,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
if (table_list->is_view())
unfix_fields(fields);
res= setup_fields(thd, 0, fields, MARK_COLUMNS_WRITE, 0, 0);
res= setup_fields(thd, 0, fields, MARK_COLUMNS_WRITE, 0, NULL, 0);
/* Restore the current context. */
ctx_state.restore_state(context, table_list);
@ -347,7 +347,7 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
}
/* Check the fields we are going to modify */
if (setup_fields(thd, 0, update_fields, MARK_COLUMNS_WRITE, 0, 0))
if (setup_fields(thd, 0, update_fields, MARK_COLUMNS_WRITE, 0, NULL, 0))
return -1;
if (insert_table_list->is_view() &&
@ -771,7 +771,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), counter);
goto abort;
}
if (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0))
if (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0))
goto abort;
}
its.rewind ();
@ -1431,7 +1431,7 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
table_list->next_local= 0;
context->resolve_in_table_list_only(table_list);
res= (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0) ||
res= (setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0) ||
check_insert_fields(thd, context->table_list, fields, *values,
!insert_into_view, 0, &map));
@ -1447,7 +1447,7 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list,
}
if (!res)
res= setup_fields(thd, 0, update_values, MARK_COLUMNS_READ, 0, 0);
res= setup_fields(thd, 0, update_values, MARK_COLUMNS_READ, 0, NULL, 0);
if (!res && duplic == DUP_UPDATE)
{
@ -3412,7 +3412,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
*/
lex->current_select= &lex->select_lex;
res= (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, 0) ||
res= (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, NULL, 0) ||
check_insert_fields(thd, table_list, *fields, values,
!insert_into_view, 1, &map));
@ -3466,7 +3466,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
ctx_state.get_first_name_resolution_table();
res= res || setup_fields(thd, 0, *info.update_values,
MARK_COLUMNS_READ, 0, 0);
MARK_COLUMNS_READ, 0, NULL, 0);
if (!res)
{
/*

View file

@ -4536,4 +4536,3 @@ void binlog_unsafe_map_init()
BINLOG_DIRECT_OFF & TRX_CACHE_NOT_EMPTY);
}
#endif

View file

@ -696,6 +696,7 @@ public:
Group_list_ptrs *group_list_ptrs;
List<Item> item_list; /* list of fields & expressions */
List<Item> pre_fix; /* above list before fix_fields */
List<String> interval_list;
bool is_item_list_lookup;
/*

View file

@ -368,22 +368,22 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
Let us also prepare SET clause, altough it is probably empty
in this case.
*/
if (setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, 0) ||
setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, 0))
if (setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, NULL, 0) ||
setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, NULL, 0))
DBUG_RETURN(TRUE);
}
else
{ // Part field list
/* TODO: use this conds for 'WITH CHECK OPTIONS' */
if (setup_fields(thd, 0, fields_vars, MARK_COLUMNS_WRITE, 0, 0) ||
setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, 0) ||
if (setup_fields(thd, 0, fields_vars, MARK_COLUMNS_WRITE, 0, NULL, 0) ||
setup_fields(thd, 0, set_fields, MARK_COLUMNS_WRITE, 0, NULL, 0) ||
check_that_all_fields_are_given_values(thd, table, table_list))
DBUG_RETURN(TRUE);
/* Add all fields with default functions to table->write_set. */
if (table->default_field)
table->mark_default_fields_for_write();
/* Fix the expressions in SET clause */
if (setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, 0))
if (setup_fields(thd, 0, set_values, MARK_COLUMNS_READ, 0, NULL, 0))
DBUG_RETURN(TRUE);
}

View file

@ -1021,8 +1021,7 @@ out:
@retval FALSE The statement isn't updating any relevant tables.
*/
static my_bool deny_updates_if_read_only_option(THD *thd,
TABLE_LIST *all_tables)
static bool deny_updates_if_read_only_option(THD *thd, TABLE_LIST *all_tables)
{
DBUG_ENTER("deny_updates_if_read_only_option");
@ -1031,11 +1030,7 @@ static my_bool deny_updates_if_read_only_option(THD *thd,
LEX *lex= thd->lex;
const my_bool user_is_super=
((ulong)(thd->security_ctx->master_access & SUPER_ACL) ==
(ulong)SUPER_ACL);
if (user_is_super)
if (thd->security_ctx->master_access & SUPER_ACL)
DBUG_RETURN(FALSE);
if (!(sql_command_flags[lex->sql_command] & CF_CHANGES_DATA))
@ -1045,30 +1040,26 @@ static my_bool deny_updates_if_read_only_option(THD *thd,
if (lex->sql_command == SQLCOM_UPDATE_MULTI)
DBUG_RETURN(FALSE);
if (lex->sql_command == SQLCOM_CREATE_DB ||
lex->sql_command == SQLCOM_DROP_DB)
DBUG_RETURN(TRUE);
/*
a table-to-be-created is not in the temp table list yet,
so CREATE TABLE needs a special treatment
*/
const bool update_real_tables=
lex->sql_command == SQLCOM_CREATE_TABLE
? !(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE)
: some_non_temp_table_to_be_updated(thd, all_tables);
if (lex->sql_command == SQLCOM_CREATE_TABLE)
DBUG_RETURN(!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE));
const bool create_or_drop_databases=
(lex->sql_command == SQLCOM_CREATE_DB) ||
(lex->sql_command == SQLCOM_DROP_DB);
/*
a table-to-be-dropped might not exist (DROP TEMPORARY TABLE IF EXISTS),
cannot use the temp table list either.
*/
if (lex->sql_command == SQLCOM_DROP_TABLE && lex->drop_temporary)
DBUG_RETURN(FALSE);
if (update_real_tables || create_or_drop_databases)
{
/*
An attempt was made to modify one or more non-temporary tables.
*/
DBUG_RETURN(TRUE);
}
/* Assuming that only temporary tables are modified. */
DBUG_RETURN(FALSE);
/* Now, check thd->temporary_tables list */
DBUG_RETURN(some_non_temp_table_to_be_updated(thd, all_tables));
}
/**
@ -2880,7 +2871,7 @@ case SQLCOM_PREPARE:
#ifdef WITH_PARTITION_STORAGE_ENGINE
{
partition_info *part_info= thd->lex->part_info;
if (part_info && !(part_info= thd->lex->part_info->get_clone()))
if (part_info && !(part_info= part_info->get_clone()))
{
res= -1;
goto end_with_restore_list;
@ -3323,7 +3314,7 @@ end_with_restore_list:
if (up_result != 2)
break;
}
/* Fall through */
/* fall through */
case SQLCOM_UPDATE_MULTI:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
@ -3433,7 +3424,7 @@ end_with_restore_list:
DBUG_PRINT("debug", ("Just after generate_incident()"));
}
#endif
/* fall through */
/* fall through */
case SQLCOM_INSERT:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2005, 2014, Oracle and/or its affiliates.
Copyright (c) 2009, 2014, SkySQL Ab.
/* Copyright (c) 2005, 2017, Oracle and/or its affiliates.
Copyright (c) 2009, 2017, SkySQL Ab.
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
@ -4716,7 +4716,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
thd->work_part_info= thd->lex->part_info;
if (thd->work_part_info &&
!(thd->work_part_info= thd->lex->part_info->get_clone()))
!(thd->work_part_info= thd->work_part_info->get_clone()))
DBUG_RETURN(TRUE);
/* ALTER_ADMIN_PARTITION is handled in mysql_admin_table */
@ -6835,7 +6835,8 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
lpt->alter_info= alter_info;
lpt->create_info= create_info;
lpt->db_options= create_info->table_options;
if (create_info->row_type == ROW_TYPE_DYNAMIC)
if (create_info->row_type != ROW_TYPE_FIXED &&
create_info->row_type != ROW_TYPE_DEFAULT)
lpt->db_options|= HA_OPTION_PACK_RECORD;
lpt->table= table;
lpt->key_info_buffer= 0;
@ -8303,6 +8304,7 @@ int create_partition_name(char *out, size_t outlen, const char *in1,
}
else
transl_part= in2;
if (name_variant == NORMAL_PART_NAME)
end= strxnmov(out, outlen-1, in1, "#P#", transl_part, NullS);
else if (name_variant == TEMP_PART_NAME)
@ -8317,25 +8319,19 @@ int create_partition_name(char *out, size_t outlen, const char *in1,
return 0;
}
/**
Create subpartition name. This method is used to calculate the
subpartition name, service routine to the del_ren_cre_table method.
The output buffer size should be FN_REFLEN + 1(terminating '\0').
/*
Create subpartition name
@param [out] out Created partition name string
@param in1 First part
@param in2 Second part
@param in3 Third part
@param name_variant Normal, temporary or renamed partition name
SYNOPSIS
create_subpartition_name()
out:out The buffer for the created partition name string
must be *at least* of FN_REFLEN+1 bytes
in1 First part
in2 Second part
in3 Third part
name_variant Normal, temporary or renamed partition name
RETURN VALUE
0 if ok, error if name too long
DESCRIPTION
This method is used to calculate the subpartition name, service routine to
the del_ren_cre_table method.
@retval true Error.
@retval false Success.
*/
int create_subpartition_name(char *out, size_t outlen,
@ -8347,6 +8343,7 @@ int create_subpartition_name(char *out, size_t outlen,
tablename_to_filename(in2, transl_part_name, FN_REFLEN);
tablename_to_filename(in3, transl_subpart_name, FN_REFLEN);
if (name_variant == NORMAL_PART_NAME)
end= strxnmov(out, outlen-1, in1, "#P#", transl_part_name,
"#SP#", transl_subpart_name, NullS);

View file

@ -1,7 +1,8 @@
#ifndef SQL_PARTITION_INCLUDED
#define SQL_PARTITION_INCLUDED
/* Copyright (c) 2006, 2013, Oracle and/or its affiliates.
/* Copyright (c) 2006, 2017, Oracle and/or its affiliates.
Copyright (c) 2011, 2017, 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

View file

@ -194,7 +194,6 @@ static DYNAMIC_ARRAY plugin_array;
static HASH plugin_hash[MYSQL_MAX_PLUGIN_TYPE_NUM];
static MEM_ROOT plugin_mem_root;
static bool reap_needed= false;
static int plugin_array_version=0;
static bool initialized= 0;
ulong dlopen_count;
@ -302,7 +301,6 @@ static void unlock_variables(THD *thd, struct system_variables *vars);
static void cleanup_variables(THD *thd, struct system_variables *vars);
static void plugin_vars_free_values(sys_var *vars);
static void restore_ptr_backup(uint n, st_ptr_backup *backup);
static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref plugin);
static void intern_plugin_unlock(LEX *lex, plugin_ref plugin);
static void reap_plugins(void);
@ -923,15 +921,17 @@ SHOW_COMP_OPTION plugin_status(const char *name, size_t len, int type)
}
static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref rc)
static plugin_ref intern_plugin_lock(LEX *lex, plugin_ref rc,
uint state_mask= PLUGIN_IS_READY |
PLUGIN_IS_UNINITIALIZED |
PLUGIN_IS_DELETED)
{
st_plugin_int *pi= plugin_ref_to_int(rc);
DBUG_ENTER("intern_plugin_lock");
mysql_mutex_assert_owner(&LOCK_plugin);
if (pi->state & (PLUGIN_IS_READY | PLUGIN_IS_UNINITIALIZED |
PLUGIN_IS_DELETED))
if (pi->state & state_mask)
{
plugin_ref plugin;
#ifdef DBUG_OFF
@ -1121,7 +1121,6 @@ static bool plugin_add(MEM_ROOT *tmp_root,
if (!(tmp_plugin_ptr= plugin_insert_or_reuse(&tmp)))
goto err;
plugin_array_version++;
if (my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr))
tmp_plugin_ptr->state= PLUGIN_IS_FREED;
init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096, MYF(0));
@ -1217,7 +1216,6 @@ static void plugin_del(struct st_plugin_int *plugin)
my_hash_delete(&plugin_hash[plugin->plugin->type], (uchar*)plugin);
plugin_dl_del(plugin->plugin_dl);
plugin->state= PLUGIN_IS_FREED;
plugin_array_version++;
free_root(&plugin->mem_root, MYF(0));
DBUG_VOID_RETURN;
}
@ -1821,11 +1819,11 @@ static bool plugin_load_list(MEM_ROOT *tmp_root, const char *list)
switch ((*(p++)= *(list++))) {
case '\0':
list= NULL; /* terminate the loop */
#ifndef __WIN__
/* fall through */
case ';':
#ifndef __WIN__
case ':': /* can't use this as delimiter as it may be drive letter */
#endif
case ';':
str->str[str->length]= '\0';
if (str == &name) // load all plugins in named module
{
@ -2284,64 +2282,55 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name,
bool plugin_foreach_with_mask(THD *thd, plugin_foreach_func *func,
int type, uint state_mask, void *arg)
{
uint idx, total;
struct st_plugin_int *plugin, **plugins;
int version=plugin_array_version;
uint idx, total= 0;
struct st_plugin_int *plugin;
plugin_ref *plugins;
my_bool res= FALSE;
DBUG_ENTER("plugin_foreach_with_mask");
if (!initialized)
DBUG_RETURN(FALSE);
state_mask= ~state_mask; // do it only once
mysql_mutex_lock(&LOCK_plugin);
total= type == MYSQL_ANY_PLUGIN ? plugin_array.elements
: plugin_hash[type].records;
/*
Do the alloca out here in case we do have a working alloca:
leaving the nested stack frame invalidates alloca allocation.
leaving the nested stack frame invalidates alloca allocation.
*/
plugins=(struct st_plugin_int **)my_alloca(total*sizeof(plugin));
if (type == MYSQL_ANY_PLUGIN)
{
for (idx= 0; idx < total; idx++)
plugins= (plugin_ref*) my_alloca(plugin_array.elements * sizeof(plugin_ref));
for (idx= 0; idx < plugin_array.elements; idx++)
{
plugin= *dynamic_element(&plugin_array, idx, struct st_plugin_int **);
plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL;
if ((plugins[total]= intern_plugin_lock(0, plugin_int_to_ref(plugin),
state_mask)))
total++;
}
}
else
{
HASH *hash= plugin_hash + type;
for (idx= 0; idx < total; idx++)
plugins= (plugin_ref*) my_alloca(hash->records * sizeof(plugin_ref));
for (idx= 0; idx < hash->records; idx++)
{
plugin= (struct st_plugin_int *) my_hash_element(hash, idx);
plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL;
if ((plugins[total]= intern_plugin_lock(0, plugin_int_to_ref(plugin),
state_mask)))
total++;
}
}
mysql_mutex_unlock(&LOCK_plugin);
for (idx= 0; idx < total; idx++)
{
if (unlikely(version != plugin_array_version))
{
mysql_mutex_lock(&LOCK_plugin);
for (uint i=idx; i < total; i++)
if (plugins[i] && plugins[i]->state & state_mask)
plugins[i]=0;
mysql_mutex_unlock(&LOCK_plugin);
}
plugin= plugins[idx];
/* It will stop iterating on first engine error when "func" returns TRUE */
if (plugin && func(thd, plugin_int_to_ref(plugin), arg))
goto err;
if ((res= func(thd, plugins[idx], arg)))
break;
}
plugin_unlock_list(0, plugins, total);
my_afree(plugins);
DBUG_RETURN(FALSE);
err:
my_afree(plugins);
DBUG_RETURN(TRUE);
DBUG_RETURN(res);
}
@ -3385,7 +3374,6 @@ bool sys_var_pluginvar::global_update(THD *thd, set_var *var)
options->max_value= getopt_double2ulonglong((opt)->max_val); \
options->block_size= (long) (opt)->blk_sz;
void plugin_opt_set_limits(struct my_option *options,
const struct st_mysql_sys_var *opt)
{
@ -4067,4 +4055,3 @@ static void restore_ptr_backup(uint n, st_ptr_backup *backup)
while (n--)
(backup++)->restore();
}

View file

@ -1319,7 +1319,7 @@ static bool mysql_test_insert(Prepared_statement *stmt,
my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), counter);
goto error;
}
if (setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, 0))
if (setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, NULL, 0))
goto error;
}
}
@ -1409,7 +1409,7 @@ static int mysql_test_update(Prepared_statement *stmt,
table_list->register_want_access(want_privilege);
#endif
thd->lex->select_lex.no_wrap_view_item= TRUE;
res= setup_fields(thd, 0, select->item_list, MARK_COLUMNS_READ, 0, 0);
res= setup_fields(thd, 0, select->item_list, MARK_COLUMNS_READ, 0, NULL, 0);
thd->lex->select_lex.no_wrap_view_item= FALSE;
if (res)
goto error;
@ -1420,7 +1420,8 @@ static int mysql_test_update(Prepared_statement *stmt,
(SELECT_ACL & ~table_list->table->grant.privilege);
table_list->register_want_access(SELECT_ACL);
#endif
if (setup_fields(thd, 0, stmt->lex->value_list, MARK_COLUMNS_NONE, 0, 0) ||
if (setup_fields(thd, 0, stmt->lex->value_list, MARK_COLUMNS_NONE, 0, NULL,
0) ||
check_unique_table(thd, table_list))
goto error;
/* TODO: here we should send types of placeholders to the client. */
@ -1590,7 +1591,7 @@ static bool mysql_test_do_fields(Prepared_statement *stmt,
if (open_normal_and_derived_tables(thd, tables, MYSQL_OPEN_FORCE_SHARED_MDL,
DT_PREPARE | DT_CREATE))
DBUG_RETURN(TRUE);
DBUG_RETURN(setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, 0));
DBUG_RETURN(setup_fields(thd, 0, *values, MARK_COLUMNS_NONE, 0, NULL, 0));
}

View file

@ -787,7 +787,7 @@ JOIN::prepare(Item ***rref_pointer_array,
wild_num)) ||
select_lex->setup_ref_array(thd, real_og_num) ||
setup_fields(thd, (*rref_pointer_array), fields_list, MARK_COLUMNS_READ,
&all_fields, 1) ||
&all_fields, &select_lex->pre_fix, 1) ||
setup_without_group(thd, (*rref_pointer_array), tables_list,
select_lex->leaf_tables, fields_list,
all_fields, &conds, order, group_list,
@ -14237,10 +14237,23 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
nested_join= table->nested_join;
if (table->sj_on_expr && !in_sj)
{
/*
If this is a semi-join that is not contained within another semi-join,
leave it intact (otherwise it is flattened)
*/
/*
If this is a semi-join that is not contained within another semi-join
leave it intact (otherwise it is flattened)
*/
/*
Make sure that any semi-join appear in
the join->select_lex->sj_nests list only once
*/
List_iterator_fast<TABLE_LIST> sj_it(join->select_lex->sj_nests);
TABLE_LIST *sj_nest;
while ((sj_nest= sj_it++))
{
if (table == sj_nest)
break;
}
if (sj_nest)
continue;
join->select_lex->sj_nests.push_back(table);
/*

View file

@ -302,7 +302,7 @@ int fill_plugins(THD *thd, TABLE_LIST *tables, COND *cond)
TABLE *table= tables->table;
if (plugin_foreach_with_mask(thd, show_plugins, MYSQL_ANY_PLUGIN,
~PLUGIN_IS_FREED, table))
~(PLUGIN_IS_FREED | PLUGIN_IS_DYING), table))
DBUG_RETURN(1);
DBUG_RETURN(0);
@ -5768,7 +5768,8 @@ int fill_schema_engines(THD *thd, TABLE_LIST *tables, COND *cond)
DBUG_ENTER("fill_schema_engines");
if (plugin_foreach_with_mask(thd, iter_schema_engines,
MYSQL_STORAGE_ENGINE_PLUGIN,
~PLUGIN_IS_FREED, tables->table))
~(PLUGIN_IS_FREED | PLUGIN_IS_DYING),
tables->table))
DBUG_RETURN(1);
DBUG_RETURN(0);
}
@ -6190,6 +6191,10 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, COND *cond)
DBUG_RETURN(1);
}
/* Disable padding temporarily so it doesn't break the query */
ulonglong sql_mode_was = thd->variables.sql_mode;
thd->variables.sql_mode &= ~MODE_PAD_CHAR_TO_FULL_LENGTH;
if (proc_table->file->ha_index_init(0, 1))
{
res= 1;
@ -6225,6 +6230,7 @@ err:
(void) proc_table->file->ha_index_end();
close_system_tables(thd, &open_tables_state_backup);
thd->variables.sql_mode = sql_mode_was;
DBUG_RETURN(res);
}

View file

@ -6851,7 +6851,6 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled,
case Alter_info::LEAVE_AS_IS:
if (!indexes_were_disabled)
break;
/* disabled indexes */
/* fall through */
case Alter_info::DISABLE:
error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);

View file

@ -358,7 +358,7 @@ int mysql_update(THD *thd,
table_list->grant.want_privilege= table->grant.want_privilege=
(SELECT_ACL & ~table->grant.privilege);
#endif
if (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, 0))
if (setup_fields(thd, 0, values, MARK_COLUMNS_READ, 0, NULL, 0))
{
free_underlaid_joins(thd, select_lex);
DBUG_RETURN(1); /* purecov: inspected */
@ -1682,7 +1682,7 @@ int multi_update::prepare(List<Item> &not_used_values,
reference tables
*/
int error= setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, 0);
int error= setup_fields(thd, 0, *values, MARK_COLUMNS_READ, 0, NULL, 0);
ti.rewind();
while ((table_ref= ti++))

View file

@ -4679,17 +4679,11 @@ size_number:
switch (end_ptr[0])
{
case 'g':
case 'G':
text_shift_number+=10;
/* fall through */
case 'G': text_shift_number+=30; break;
case 'm':
case 'M':
text_shift_number+=10;
/* fall through */
case 'M': text_shift_number+=20; break;
case 'k':
case 'K':
text_shift_number+=10;
break;
case 'K': text_shift_number+=10; break;
default:
{
my_error(ER_WRONG_SIZE_NUMBER, MYF(0));

View file

@ -34,6 +34,7 @@
/* Structs that defines the TABLE */
class Item; /* Needed by ORDER */
typedef Item (*Item_ptr);
class Item_subselect;
class Item_field;
class GRANT_TABLE;
@ -2447,7 +2448,7 @@ typedef struct st_nested_join
table_map sj_depends_on;
/* Outer non-trivially correlated tables */
table_map sj_corr_tables;
List<Item> sj_outer_expr_list;
List<Item_ptr> sj_outer_expr_list;
/**
True if this join nest node is completely covered by the query execution
plan. This means two things.

View file

@ -263,9 +263,8 @@ ulong federatedx_io_mysql::savepoint_release(ulong sp)
savept= dynamic_element(&savepoints, savepoints.elements - 1, SAVEPT *);
if (savept->level < sp)
break;
if ((savept->flags & (SAVEPOINT_REALIZED |
SAVEPOINT_RESTRICT)) == SAVEPOINT_REALIZED)
last= savept;
if ((savept->flags & (SAVEPOINT_REALIZED | SAVEPOINT_RESTRICT)) == SAVEPOINT_REALIZED)
last= savept;
savepoints.elements--;
}
@ -291,8 +290,8 @@ ulong federatedx_io_mysql::savepoint_rollback(ulong sp)
while (savepoints.elements)
{
savept= dynamic_element(&savepoints, savepoints.elements - 1, SAVEPT *);
if (savept->level <= sp)
break;
if (savept->level <= sp)
break;
savepoints.elements--;
}

View file

@ -576,7 +576,7 @@ dtype_get_fixed_size_low(
return(len);
#endif /* !UNIV_HOTBACKUP */
/* Treat as variable-length. */
/* Fall through */
/* fall through */
case DATA_VARCHAR:
case DATA_BINARY:
case DATA_DECIMAL:

View file

@ -2722,6 +2722,7 @@ row_sel_field_store_in_mysql_format_func(
case DATA_SYS:
/* These column types should never be shipped to MySQL. */
ut_ad(0);
/* fall through */
case DATA_CHAR:
case DATA_FIXBINARY:

View file

@ -314,7 +314,7 @@ int maria_extra(MARIA_HA *info, enum ha_extra_function function,
share->state.open_count= 1;
share->changed= 1;
_ma_mark_file_changed_now(share);
/* Fall through */
/* fall through */
case HA_EXTRA_PREPARE_FOR_RENAME:
{
my_bool do_flush= MY_TEST(function != HA_EXTRA_PREPARE_FOR_DROP);
@ -660,4 +660,3 @@ my_bool ma_killed_standalone(MARIA_HA *info __attribute__((unused)))
{
return 0;
}

View file

@ -2744,7 +2744,7 @@ static my_bool translog_recover_page_up_to_sector(uchar *page, uint16 offset)
DBUG_PRINT("enter", ("offset: %u first chunk: %u",
(uint) offset, (uint) chunk_offset));
while (page[chunk_offset] != TRANSLOG_FILLER && chunk_offset < offset)
while (chunk_offset < offset && page[chunk_offset] != TRANSLOG_FILLER)
{
uint16 chunk_length;
if ((chunk_length=

View file

@ -3058,7 +3058,7 @@ static MARIA_HA *get_MARIA_HA_from_REDO_record(const
case LOGREC_REDO_INDEX:
case LOGREC_REDO_INDEX_FREE_PAGE:
index_page_redo_entry= 1;
/* Fall through */
/* fall through*/
case LOGREC_REDO_INSERT_ROW_HEAD:
case LOGREC_REDO_INSERT_ROW_TAIL:
case LOGREC_REDO_PURGE_ROW_HEAD:

View file

@ -263,7 +263,7 @@ int mi_extra(MI_INFO *info, enum ha_extra_function function, void *extra_arg)
//share->deleting= TRUE;
share->global_changed= FALSE; /* force writing changed flag */
_mi_mark_file_changed(info);
/* Fall through */
/* fall through */
case HA_EXTRA_PREPARE_FOR_RENAME:
mysql_mutex_lock(&THR_LOCK_myisam);
share->last_version= 0L; /* Impossible version */

View file

@ -1704,13 +1704,16 @@ bool CSphSEQuery::ParseField ( char * sField )
char * sLat = sValue;
char * p = sValue;
if (!( p = strchr ( p, ',' ) )) break; *p++ = '\0';
if (!( p = strchr ( p, ',' ) )) break;
*p++ = '\0';
char * sLong = p;
if (!( p = strchr ( p, ',' ) )) break; *p++ = '\0';
if (!( p = strchr ( p, ',' ) )) break;
*p++ = '\0';
char * sLatVal = p;
if (!( p = strchr ( p, ',' ) )) break; *p++ = '\0';
if (!( p = strchr ( p, ',' ) )) break;
*p++ = '\0';
char * sLongVal = p;
m_sGeoLatAttr = chop(sLat);
@ -1779,7 +1782,8 @@ bool CSphSEQuery::ParseField ( char * sField )
while ( sRest )
{
char * sId = sRest;
if (!( sRest = strchr ( sRest, ':' ) )) break; *sRest++ = '\0';
if (!( sRest = strchr ( sRest, ':' ) )) break;
*sRest++ = '\0';
if (!( sRest - sId )) break;
char * sValue = sRest;

View file

@ -112,6 +112,7 @@ endmacro(append_cflags_if_supported)
set_cflags_if_supported(-Wno-missing-field-initializers)
append_cflags_if_supported(-Wno-vla)
append_cflags_if_supported(-Wno-implicit-fallthrough)
IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/PerconaFT/")
IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ft-index/")

View file

@ -38,7 +38,7 @@ ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT
CREATE TABLE t2 (a char(256));
ERROR 42000: Column length too big for column 'a' (max = 255); use BLOB or TEXT instead
CREATE TABLE t1 (a varchar(70000) default "hello");
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
ERROR 42000: Column length too big for column 'a' (max = 65532); use BLOB or TEXT instead
CREATE TABLE t2 (a blob default "hello");
ERROR 42000: BLOB/TEXT column 'a' can't have a default value
drop table if exists t1,t2;

View file

@ -577,7 +577,7 @@ dtype_get_fixed_size_low(
return(len);
#endif /* !UNIV_HOTBACKUP */
/* Treat as variable-length. */
/* Fall through */
/* fall through */
case DATA_VARCHAR:
case DATA_BINARY:
case DATA_DECIMAL:

View file

@ -2735,6 +2735,7 @@ row_sel_field_store_in_mysql_format_func(
case DATA_SYS:
/* These column types should never be shipped to MySQL. */
ut_ad(0);
/* fall through */
case DATA_CHAR:
case DATA_FIXBINARY:

View file

@ -5029,7 +5029,6 @@ static int my_uni_utf8_no_range(CHARSET_INFO *cs __attribute__((unused)),
switch (count)
{
/* Fall through all cases!!! */
case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;
/* fall through */
case 2: r[1]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0xc0;
@ -7509,7 +7508,6 @@ my_wc_mb_utf8mb4(CHARSET_INFO *cs __attribute__((unused)),
return MY_CS_TOOSMALLN(count);
switch (count) {
/* Fall through all cases!!! */
case 4: r[3] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x10000;
/* fall through */
case 3: r[2] = (uchar) (0x80 | (wc & 0x3f)); wc = wc >> 6; wc |= 0x800;
@ -7544,7 +7542,6 @@ my_wc_mb_utf8mb4_no_range(CHARSET_INFO *cs __attribute__((unused)),
switch (count)
{
/* Fall through all cases!!! */
case 4: r[3]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x10000;
/* fall through */
case 3: r[2]= (uchar) (0x80 | (wc & 0x3f)); wc= wc >> 6; wc |= 0x800;

View file

@ -1466,11 +1466,9 @@ static double my_strtod_int(const char *s00, char **se, int *error, char *buf, s
esign= 0;
if (++s < end)
switch (c= *s) {
case '-':
esign= 1;
/* fall through */
case '+':
c= *++s;
case '-': esign= 1;
/* fall through */
case '+': c= *++s;
}
if (s < end && c >= '0' && c <= '9')
{