mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge tag 'mariadb-5.5.46' into 5.5-galera
This commit is contained in:
2
VERSION
2
VERSION
@@ -1,4 +1,4 @@
|
||||
MYSQL_VERSION_MAJOR=5
|
||||
MYSQL_VERSION_MINOR=5
|
||||
MYSQL_VERSION_PATCH=45
|
||||
MYSQL_VERSION_PATCH=46
|
||||
MYSQL_VERSION_EXTRA=
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# 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
|
||||
@@ -47,6 +47,7 @@ MYSQL_ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c)
|
||||
TARGET_LINK_LIBRARIES(mysqldump mysqlclient)
|
||||
|
||||
MYSQL_ADD_EXECUTABLE(mysqlimport mysqlimport.c)
|
||||
SET_SOURCE_FILES_PROPERTIES(mysqlimport.c PROPERTIES COMPILE_FLAGS "-DTHREADS")
|
||||
TARGET_LINK_LIBRARIES(mysqlimport mysqlclient)
|
||||
|
||||
MYSQL_ADD_EXECUTABLE(mysql_upgrade mysql_upgrade.c COMPONENT Server)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2012, Oracle and/or its affiliates.
|
||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2015, 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
|
||||
@@ -30,19 +31,14 @@
|
||||
|
||||
#include "client_priv.h"
|
||||
#include "mysql_version.h"
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
#include <my_pthread.h>
|
||||
#endif
|
||||
|
||||
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
|
||||
|
||||
|
||||
/* Global Thread counter */
|
||||
uint counter;
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
uint counter= 0;
|
||||
pthread_mutex_t counter_mutex;
|
||||
pthread_cond_t count_threshhold;
|
||||
#endif
|
||||
|
||||
static void db_error_with_table(MYSQL *mysql, char *table);
|
||||
static void db_error(MYSQL *mysql);
|
||||
@@ -486,6 +482,11 @@ static void safe_exit(int error, MYSQL *mysql)
|
||||
{
|
||||
if (error && ignore_errors)
|
||||
return;
|
||||
|
||||
/* in multi-threaded mode protect from concurrent safe_exit's */
|
||||
if (counter)
|
||||
pthread_mutex_lock(&counter_mutex);
|
||||
|
||||
if (mysql)
|
||||
mysql_close(mysql);
|
||||
|
||||
@@ -568,7 +569,6 @@ static char *field_escape(char *to,const char *from,uint length)
|
||||
|
||||
int exitcode= 0;
|
||||
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
pthread_handler_t worker_thread(void *arg)
|
||||
{
|
||||
int error;
|
||||
@@ -608,7 +608,6 @@ error:
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
@@ -628,7 +627,6 @@ int main(int argc, char **argv)
|
||||
}
|
||||
sf_leaking_memory=0; /* from now on we cleanup properly */
|
||||
|
||||
#ifdef HAVE_LIBPTHREAD
|
||||
if (opt_use_threads && !lock_tables)
|
||||
{
|
||||
pthread_t mainthread; /* Thread descriptor */
|
||||
@@ -682,7 +680,6 @@ int main(int argc, char **argv)
|
||||
pthread_attr_destroy(&attr);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
MYSQL *mysql= 0;
|
||||
if (!(mysql= db_connect(current_host,current_db,current_user,opt_password)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# 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
|
||||
@@ -50,10 +50,12 @@ IF(CMAKE_C_COMPILER MATCHES "icl")
|
||||
SET(MSVC TRUE)
|
||||
ENDIF()
|
||||
|
||||
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
|
||||
ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501")
|
||||
ADD_DEFINITIONS(-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE)
|
||||
ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501)
|
||||
# We do not want the windows.h macros min/max
|
||||
ADD_DEFINITIONS(-DNOMINMAX)
|
||||
# Speed up build process excluding unused header files
|
||||
ADD_DEFINITIONS("-DWIN32_LEAN_AND_MEAN")
|
||||
ADD_DEFINITIONS(-DWIN32_LEAN_AND_MEAN)
|
||||
|
||||
# Adjust compiler and linker flags
|
||||
IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
|
||||
@@ -12,6 +12,35 @@ before calling SSL_new();
|
||||
|
||||
*** end Note ***
|
||||
|
||||
yaSSL Release notes, version 2.3.8 (9/17/2015)
|
||||
This release of yaSSL fixes a high security vulnerability. All users
|
||||
SHOULD update. If using yaSSL for TLS on the server side with private
|
||||
RSA keys allowing ephemeral key exchange you MUST update and regenerate
|
||||
the RSA private keys. This report is detailed in:
|
||||
https://people.redhat.com/~fweimer/rsa-crt-leaks.pdf
|
||||
yaSSL now detects RSA signature faults and returns an error.
|
||||
|
||||
yaSSL Patch notes, version 2.3.7e (6/26/2015)
|
||||
This release of yaSSL includes a fix for Date less than comparison.
|
||||
Previously yaSSL would return true on less than comparisons if the Dates
|
||||
were equal. Reported by Oracle. No security problem, but if a cert was
|
||||
generated right now, a server started using it in the same second, and a
|
||||
client tried to verify it in the same second it would report not yet valid.
|
||||
|
||||
yaSSL Patch notes, version 2.3.7d (6/22/2015)
|
||||
This release of yaSSL includes a fix for input_buffer set_current with
|
||||
index 0. SSL_peek() at front of waiting data could trigger. Robert
|
||||
Golebiowski of Oracle identified and suggested a fix, thanks!
|
||||
|
||||
yaSSL Patch notes, version 2.3.7c (6/12/2015)
|
||||
This release of yaSSL does certificate DATE comparisons to the second
|
||||
instead of to the minute, helpful when using freshly generated certs.
|
||||
Though keep in mind that time sync differences could still show up.
|
||||
|
||||
yaSSL Patch notes, version 2.3.7b (3/18/2015)
|
||||
This release of yaSSL fixes a potential crash with corrupted private keys.
|
||||
Also detects bad keys earlier for user.
|
||||
|
||||
yaSSL Release notes, version 2.3.7 (12/10/2014)
|
||||
This release of yaSSL fixes the potential to process duplicate handshake
|
||||
messages by explicitly marking/checking received handshake messages.
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "rsa.h"
|
||||
|
||||
|
||||
#define YASSL_VERSION "2.3.7"
|
||||
#define YASSL_VERSION "2.3.8"
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
@@ -53,7 +53,8 @@ enum YasslError {
|
||||
compress_error = 118,
|
||||
decompress_error = 119,
|
||||
pms_version_error = 120,
|
||||
sanityCipher_error = 121
|
||||
sanityCipher_error = 121,
|
||||
rsaSignFault_error = 122
|
||||
|
||||
// !!!! add error message to .cpp !!!!
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ void input_buffer::set_error()
|
||||
|
||||
void input_buffer::set_current(uint i)
|
||||
{
|
||||
if (error_ == 0 && (i == 0 || check(i - 1, size_) == 0))
|
||||
if (error_ == 0 && check(i ? i - 1 : 0, size_) == 0)
|
||||
current_ = i;
|
||||
else
|
||||
error_ = -1;
|
||||
|
||||
@@ -1172,6 +1172,8 @@ void sendCertificateVerify(SSL& ssl, BufferOutput buffer)
|
||||
|
||||
CertificateVerify verify;
|
||||
verify.Build(ssl);
|
||||
if (ssl.GetError()) return;
|
||||
|
||||
RecordLayerHeader rlHeader;
|
||||
HandShakeHeader hsHeader;
|
||||
mySTL::auto_ptr<output_buffer> out(NEW_YS output_buffer);
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#include "file.hpp" // for TaoCrypt Source
|
||||
#include "coding.hpp" // HexDecoder
|
||||
#include "helpers.hpp" // for placement new hack
|
||||
#include "rsa.hpp" // for TaoCrypt RSA key decode
|
||||
#include "dsa.hpp" // for TaoCrypt DSA key decode
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -54,6 +56,8 @@ namespace yaSSL {
|
||||
|
||||
int read_file(SSL_CTX* ctx, const char* file, int format, CertType type)
|
||||
{
|
||||
int ret = SSL_SUCCESS;
|
||||
|
||||
if (format != SSL_FILETYPE_ASN1 && format != SSL_FILETYPE_PEM)
|
||||
return SSL_BAD_FILETYPE;
|
||||
|
||||
@@ -141,8 +145,31 @@ int read_file(SSL_CTX* ctx, const char* file, int format, CertType type)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (type == PrivateKey && ctx->privateKey_) {
|
||||
// see if key is valid early
|
||||
TaoCrypt::Source rsaSource(ctx->privateKey_->get_buffer(),
|
||||
ctx->privateKey_->get_length());
|
||||
TaoCrypt::RSA_PrivateKey rsaKey;
|
||||
rsaKey.Initialize(rsaSource);
|
||||
|
||||
if (rsaSource.GetError().What()) {
|
||||
// rsa failed see if DSA works
|
||||
|
||||
TaoCrypt::Source dsaSource(ctx->privateKey_->get_buffer(),
|
||||
ctx->privateKey_->get_length());
|
||||
TaoCrypt::DSA_PrivateKey dsaKey;
|
||||
dsaKey.Initialize(dsaSource);
|
||||
|
||||
if (rsaSource.GetError().What()) {
|
||||
// neither worked
|
||||
ret = SSL_FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(input);
|
||||
return SSL_SUCCESS;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -148,6 +148,10 @@ void SetErrorString(YasslError error, char* buffer)
|
||||
strncpy(buffer, "sanity check on cipher text size error", max);
|
||||
break;
|
||||
|
||||
case rsaSignFault_error:
|
||||
strncpy(buffer, "rsa signature fault error", max);
|
||||
break;
|
||||
|
||||
// openssl errors
|
||||
case SSL_ERROR_WANT_READ :
|
||||
strncpy(buffer, "the read operation would block", max);
|
||||
|
||||
@@ -196,9 +196,16 @@ void DH_Server::build(SSL& ssl)
|
||||
sha.update(tmp.get_buffer(), tmp.get_size());
|
||||
sha.get_digest(&hash[MD5_LEN]);
|
||||
|
||||
if (ssl.getSecurity().get_parms().sig_algo_ == rsa_sa_algo)
|
||||
if (ssl.getSecurity().get_parms().sig_algo_ == rsa_sa_algo) {
|
||||
auth->sign(signature_, hash, sizeof(hash),
|
||||
ssl.getCrypto().get_random());
|
||||
// check for rsa signautre fault
|
||||
if (!auth->verify(hash, sizeof(hash), signature_,
|
||||
auth->get_signatureLength())) {
|
||||
ssl.SetError(rsaSignFault_error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
auth->sign(signature_, &hash[MD5_LEN], SHA_LEN,
|
||||
ssl.getCrypto().get_random());
|
||||
@@ -2159,6 +2166,12 @@ void CertificateVerify::Build(SSL& ssl)
|
||||
memcpy(sig.get(), len, VERIFY_HEADER);
|
||||
rsa.sign(sig.get() + VERIFY_HEADER, hashes_.md5_, sizeof(Hashes),
|
||||
ssl.getCrypto().get_random());
|
||||
// check for rsa signautre fault
|
||||
if (!rsa.verify(hashes_.md5_, sizeof(Hashes), sig.get() + VERIFY_HEADER,
|
||||
rsa.get_cipherLength())) {
|
||||
ssl.SetError(rsaSignFault_error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else { // DSA
|
||||
DSS dss(cert.get_privateKey(), cert.get_privateKeyLength(), false);
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace TaoCrypt {
|
||||
namespace { // locals
|
||||
|
||||
|
||||
// to the minute
|
||||
// to the second
|
||||
bool operator>(tm& a, tm& b)
|
||||
{
|
||||
if (a.tm_year > b.tm_year)
|
||||
@@ -60,13 +60,18 @@ bool operator>(tm& a, tm& b)
|
||||
a.tm_min > b.tm_min)
|
||||
return true;
|
||||
|
||||
if (a.tm_year == b.tm_year && a.tm_mon == b.tm_mon &&
|
||||
a.tm_mday == b.tm_mday && a.tm_hour == b.tm_hour &&
|
||||
a.tm_min == b.tm_min && a.tm_sec > b.tm_sec)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool operator<(tm& a, tm&b)
|
||||
{
|
||||
return !(a>b);
|
||||
return (b>a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -140,6 +140,10 @@ word32 RSA_BlockType2::UnPad(const byte *pkcsBlock, unsigned int pkcsBlockLen,
|
||||
void RSA_BlockType1::Pad(const byte* input, word32 inputLen, byte* pkcsBlock,
|
||||
word32 pkcsBlockLen, RandomNumberGenerator&) const
|
||||
{
|
||||
// sanity checks
|
||||
if (input == NULL || pkcsBlock == NULL)
|
||||
return;
|
||||
|
||||
// convert from bit length to byte length
|
||||
if (pkcsBlockLen % 8 != 0)
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#
|
||||
|
||||
|
||||
no_pid=-1
|
||||
server_pid=$no_pid
|
||||
|
||||
|
||||
|
||||
@@ -11,9 +11,8 @@
|
||||
##############################################################################
|
||||
tablespace : disabled in MariaDB (no TABLESPACE table attribute)
|
||||
events_time_zone : Test is not predictable as it depends on precise timing.
|
||||
lowercase_table3 : Bug#11762269 2010-06-30 alik main.lowercase_table3 on Mac OSX
|
||||
read_many_rows_innodb : Bug#11748886 2010-11-15 mattiasj report already exists
|
||||
archive-big : Bug#11817185 2011-03-10 Anitha Disabled since this leads to timeout on Solaris Sparc
|
||||
log_tables-big : Bug#11756699 2010-11-15 mattiasj report already exists
|
||||
mysql_embedded : Bug#12561297 2011-05-14 Anitha Dependent on PB2 changes - eventum#41836
|
||||
file_contents : MDEV-6526 these files are not installed anymore
|
||||
lowercase_fs_on : lower_case_table_names=0 is not an error until 10.1
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
# ==== Usage ====
|
||||
#
|
||||
# [--let $shutdown_timeout= 30]
|
||||
# [--let $allow_rpl_inited= 1]
|
||||
# --source include/restart_mysqld.inc
|
||||
|
||||
if ($rpl_inited)
|
||||
{
|
||||
@@ -7,6 +12,16 @@ if ($rpl_inited)
|
||||
}
|
||||
}
|
||||
|
||||
--let $server_shutdown_timeout= 10
|
||||
if ($shutdown_timeout)
|
||||
{
|
||||
--let $server_shutdown_timeout= $shutdown_timeout
|
||||
}
|
||||
if ($shutdown_timeout == 0)
|
||||
{
|
||||
--let $server_shutdown_timeout= 0
|
||||
}
|
||||
|
||||
# Write file to make mysql-test-run.pl expect the "crash", but don't start
|
||||
# it until it's told to
|
||||
--let $_server_id= `SELECT @@server_id`
|
||||
@@ -15,7 +30,7 @@ if ($rpl_inited)
|
||||
|
||||
# Send shutdown to the connected server and give
|
||||
# it 10 seconds to die before zapping it
|
||||
shutdown_server 10;
|
||||
shutdown_server $server_shutdown_timeout;
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $_expect_file_name
|
||||
|
||||
@@ -234,3 +234,20 @@ SELECT if(1, NULL, (SELECT min('hello')));
|
||||
if(1, NULL, (SELECT min('hello')))
|
||||
NULL
|
||||
End of 5.2 tests
|
||||
#
|
||||
# MDEV-8663: IF Statement returns multiple values erroneously
|
||||
# (or Assertion `!null_value' failed in Item::send(Protocol*, String*)
|
||||
#
|
||||
CREATE TABLE `t1` (
|
||||
`datas` VARCHAR(25) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
Warnings:
|
||||
Warning 1286 Unknown storage engine 'InnoDB'
|
||||
Warning 1266 Using storage engine MyISAM for table 't1'
|
||||
INSERT INTO `t1` VALUES ('1,2'), ('2,3'), ('3,4');
|
||||
SELECT IF(FIND_IN_SET('1', `datas`), 1.5, IF(FIND_IN_SET('2', `datas`), 2, NULL)) AS `First`, '1' AS `Second`, '2' AS `Third` FROM `t1`;
|
||||
First Second Third
|
||||
1.5 1 2
|
||||
2.0 1 2
|
||||
NULL 1 2
|
||||
drop table t1;
|
||||
|
||||
@@ -374,5 +374,203 @@ NULL
|
||||
Warnings:
|
||||
Warning 1411 Incorrect timeout value: '-1' for function get_lock
|
||||
#
|
||||
# MDEV-8624 MariaDB hangs on query with many logical condition
|
||||
#
|
||||
CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`submitdate` datetime DEFAULT NULL,
|
||||
`lastpage` int(11) DEFAULT NULL,
|
||||
`startlanguage` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`token` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`datestamp` datetime NOT NULL,
|
||||
`startdate` datetime NOT NULL,
|
||||
`ipaddr` text COLLATE utf8_unicode_ci,
|
||||
`refurl` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1723` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1724` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1725` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1726` double DEFAULT NULL,
|
||||
`57813X540X1909` double DEFAULT NULL,
|
||||
`57813X541X17271` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17272` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17273` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17274` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17275` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17276` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17281` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17282` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17283` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17284` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17285` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17286` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18131` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18132` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18133` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18134` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18135` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18136` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18137` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18138` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18139` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18141` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18142` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18143` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18144` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18145` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18146` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18147` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18148` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18149` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18451` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18452` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18453` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18454` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18455` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18456` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18461` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18462` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18463` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18464` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18465` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18466` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18711` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18712` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18713` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18714` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18715` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18716` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18717` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18718` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18721` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18722` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18723` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18724` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18725` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18726` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18727` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18728` text COLLATE utf8_unicode_ci,
|
||||
`57813X546X1902` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X546X1903` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X546X1904` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X545X1901` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `lime_survey_57813_idx` (`token`),
|
||||
KEY `57813X540X1723` (`57813X540X1723`(100)),
|
||||
KEY `57813X540X1724` (`57813X540X1724`(100)),
|
||||
KEY `57813X540X1726` (`57813X540X1726`),
|
||||
KEY `57813X540X1725` (`57813X540X1725`(100)),
|
||||
KEY `57813X546X1902` (`57813X546X1902`),
|
||||
KEY `57813X546X1903` (`57813X546X1903`),
|
||||
KEY `57813X546X1904` (`57813X546X1904`)
|
||||
);
|
||||
SELECT
|
||||
COUNT(*) as `N`,
|
||||
ROUND(
|
||||
(
|
||||
SUM(
|
||||
(
|
||||
(
|
||||
IF( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99', 57813X541X17271, 0 ) +
|
||||
IF( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99', 57813X541X17272, 0 ) +
|
||||
IF( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99', 57813X541X17273, 0 ) +
|
||||
IF( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99', 57813X541X17274, 0 ) +
|
||||
IF( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99', 57813X541X17275, 0 ) +
|
||||
IF( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99', 57813X541X17276, 0 ) +
|
||||
IF( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99', 57813X542X18131, 0 ) +
|
||||
IF( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99', 57813X542X18132, 0 ) +
|
||||
IF( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99', 57813X542X18133, 0 ) +
|
||||
IF( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99', 57813X542X18134, 0 ) +
|
||||
IF( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99', 57813X542X18135, 0 ) +
|
||||
IF( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99', 57813X542X18136, 0 ) +
|
||||
IF( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99', 57813X542X18137, 0 ) +
|
||||
IF( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99', 57813X542X18138, 0 ) +
|
||||
IF( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99', 57813X542X18139, 0 ) +
|
||||
IF( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99', 57813X543X18451, 0 ) +
|
||||
IF( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99', 57813X543X18452, 0 ) +
|
||||
IF( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99', 57813X543X18453, 0 ) +
|
||||
IF( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99', 57813X543X18454, 0 ) +
|
||||
IF( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99', 57813X543X18455, 0 ) +
|
||||
IF( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99', 57813X543X18456, 0 ) +
|
||||
IF( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99', 57813X544X18711, 0 ) +
|
||||
IF( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99', 57813X544X18712, 0 ) +
|
||||
IF( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99', 57813X544X18713, 0 ) +
|
||||
IF( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99', 57813X544X18714, 0 ) +
|
||||
IF( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99', 57813X544X18715, 0 ) +
|
||||
IF( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99', 57813X544X18716, 0 ) +
|
||||
IF( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99', 57813X544X18717, 0 ) +
|
||||
IF( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99', 57813X544X18718, 0 )
|
||||
)
|
||||
/
|
||||
(
|
||||
IF( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99', 1, 0 )
|
||||
)
|
||||
)
|
||||
)
|
||||
/ COUNT(*) ), 4) as `AVG`
|
||||
FROM `t1`
|
||||
WHERE `submitdate` IS NOT NULL
|
||||
AND (
|
||||
( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99' ) OR
|
||||
( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99' ) OR
|
||||
( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99' ) OR
|
||||
( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99' ) OR
|
||||
( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99' ) OR
|
||||
( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99' ) OR
|
||||
( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99' ) OR
|
||||
( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99' ) OR
|
||||
( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99' ) OR
|
||||
( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99' ) OR
|
||||
( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99' ) OR
|
||||
( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99' ) OR
|
||||
( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99' ) OR
|
||||
( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99' ) OR
|
||||
( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99' ) OR
|
||||
( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99' ) OR
|
||||
( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99' ) OR
|
||||
( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99' ) OR
|
||||
( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99' ) OR
|
||||
( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99' ) OR
|
||||
( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99' ) OR
|
||||
( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99' ) OR
|
||||
( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99' ) OR
|
||||
( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99' ) OR
|
||||
( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99' ) OR
|
||||
( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99' ) OR
|
||||
( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99' ) OR
|
||||
( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99' ) OR
|
||||
( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99' ) )
|
||||
AND 57813X540X1723 = 'Test';
|
||||
N AVG
|
||||
0 NULL
|
||||
drop table t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
||||
@@ -6,15 +6,15 @@ select variable_name from information_schema.session_variables where variable_na
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
variable_name
|
||||
BASEDIR
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
a exists (select 1 from information_schema.columns where table_schema=concat('tes',a))
|
||||
a 0
|
||||
t 1
|
||||
z 0
|
||||
show status like 'created_tmp_tables';
|
||||
Variable_name Value
|
||||
Created_tmp_tables 38
|
||||
drop table t1;
|
||||
create table t1 (x int);
|
||||
create table t2 (x int);
|
||||
create table t3 (x int);
|
||||
create table t4 AS select table_name from information_schema.TABLES where table_schema = database() and table_type = 'BASE TABLE' ;
|
||||
delete from t4 where table_name not in (select table_name from information_schema.TABLES where table_schema = database() and table_type = 'BASE TABLE');
|
||||
select * from t4;
|
||||
table_name
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
t4
|
||||
drop table t1, t2, t3, t4;
|
||||
|
||||
@@ -93,3 +93,30 @@ a b
|
||||
216 !&bb b;
|
||||
3 !b3
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#16171518 LOAD XML DOES NOT HANDLE EMPTY ELEMENTS
|
||||
#
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 VARCHAR(3), col4 VARCHAR(4));
|
||||
LOAD XML INFILE '../../std_data/bug16171518_1.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3, col4;
|
||||
col1 col2 col3 col4
|
||||
0bc def ghi jkl
|
||||
1no NULL pqr stu
|
||||
2BC DEF GHI JKL
|
||||
3NO NULL PQR STU
|
||||
4bc def ghi jkl
|
||||
5no pqr stu vwx
|
||||
6BC DEF NULL JKL
|
||||
7NO PQR STU VWX
|
||||
8bc def ghi NULL
|
||||
9kl NULL mno pqr
|
||||
ABC DEF NULL JKL
|
||||
MNO NULL STU VWX
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 INTEGER);
|
||||
LOAD XML INFILE '../../std_data/bug16171518_2.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3;
|
||||
col1 col2 col3
|
||||
ABC DEF NULL
|
||||
GHI NULL 123
|
||||
DROP TABLE t1;
|
||||
|
||||
3
mysql-test/r/lowercase_fs_on.result
Normal file
3
mysql-test/r/lowercase_fs_on.result
Normal file
@@ -0,0 +1,3 @@
|
||||
#
|
||||
# Bug#20198490 : LOWER_CASE_TABLE_NAMES=0 ON WINDOWS LEADS TO PROBLEMS
|
||||
#
|
||||
@@ -1,11 +0,0 @@
|
||||
call mtr.add_suppression("Cannot find or open table test/BUG29839 from");
|
||||
DROP TABLE IF EXISTS t1,T1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
SELECT * FROM T1;
|
||||
a
|
||||
FLUSH TABLES;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE bug29839 (a INT) ENGINE=INNODB;
|
||||
SELECT * FROM BUG29839;
|
||||
ERROR 42S02: Table 'test.BUG29839' doesn't exist
|
||||
DROP TABLE bug29839;
|
||||
@@ -4292,7 +4292,6 @@ Abernathy
|
||||
aberrant
|
||||
aberration
|
||||
drop table words;
|
||||
mysqlimport: Error: 1146, Table 'test.words' doesn't exist, when using table: words
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table words2;
|
||||
@@ -5281,6 +5280,34 @@ drop table t1, t2;
|
||||
#
|
||||
# End of 5.1 tests
|
||||
#
|
||||
#
|
||||
# Bug #20772273 : MYSQLIMPORT --USE-THREADS DOESN'T USE MULTIPLE THREADS
|
||||
#
|
||||
CREATE DATABASE db_20772273;
|
||||
USE db_20772273;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
CREATE TABLE t2(a INT);
|
||||
INSERT INTO t2 VALUES (3), (4);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
3
|
||||
4
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
3
|
||||
4
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP DATABASE db_20772273;
|
||||
Usage: mysqldump [OPTIONS] database [tables]
|
||||
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
|
||||
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
|
||||
|
||||
@@ -1089,7 +1089,7 @@ partition by key (a)
|
||||
subpartition by hash (sin(a+b))
|
||||
(partition x1 (subpartition x11, subpartition x12),
|
||||
partition x2 (subpartition x21, subpartition x22));
|
||||
ERROR HY000: It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning
|
||||
ERROR HY000: This partition function is not allowed
|
||||
select load_file('$MYSQLD_DATADIR/test/t1.par');
|
||||
load_file('$MYSQLD_DATADIR/test/t1.par')
|
||||
NULL
|
||||
|
||||
@@ -81,7 +81,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
@@ -3590,7 +3590,7 @@ delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'IN/ALL/ANY subquery'
|
||||
CREATE VIEW v2 AS SELECT * FROM t1 WHERE no_such_column = (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
@@ -7015,3 +7015,69 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
exists(select 1 from t1 group by `c` in (select `c` from t1))
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
#
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
ControlRev
|
||||
NULL
|
||||
#
|
||||
# MDEV-7445:Server crash with Signal 6
|
||||
#
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
END |
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
drop procedure procedure2;
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
sq
|
||||
#
|
||||
# MDEV-7846:Server crashes in Item_subselect::fix
|
||||
#_fields or fails with Thread stack overrun
|
||||
#
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
|
||||
@@ -88,7 +88,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
@@ -3594,7 +3594,7 @@ delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'IN/ALL/ANY subquery'
|
||||
CREATE VIEW v2 AS SELECT * FROM t1 WHERE no_such_column = (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
@@ -7012,6 +7012,72 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
exists(select 1 from t1 group by `c` in (select `c` from t1))
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
#
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
ControlRev
|
||||
NULL
|
||||
#
|
||||
# MDEV-7445:Server crash with Signal 6
|
||||
#
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
END |
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
drop procedure procedure2;
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
sq
|
||||
#
|
||||
# MDEV-7846:Server crashes in Item_subselect::fix
|
||||
#_fields or fails with Thread stack overrun
|
||||
#
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
set optimizer_switch=default;
|
||||
select @@optimizer_switch like '%materialization=on%';
|
||||
@@optimizer_switch like '%materialization=on%'
|
||||
|
||||
@@ -84,7 +84,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
@@ -3590,7 +3590,7 @@ delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'IN/ALL/ANY subquery'
|
||||
CREATE VIEW v2 AS SELECT * FROM t1 WHERE no_such_column = (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
@@ -7010,4 +7010,70 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
exists(select 1 from t1 group by `c` in (select `c` from t1))
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
#
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
ControlRev
|
||||
NULL
|
||||
#
|
||||
# MDEV-7445:Server crash with Signal 6
|
||||
#
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
END |
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
drop procedure procedure2;
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
sq
|
||||
#
|
||||
# MDEV-7846:Server crashes in Item_subselect::fix
|
||||
#_fields or fails with Thread stack overrun
|
||||
#
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
set @optimizer_switch_for_subselect_test=null;
|
||||
|
||||
@@ -87,7 +87,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
@@ -3596,7 +3596,7 @@ delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'IN/ALL/ANY subquery'
|
||||
CREATE VIEW v2 AS SELECT * FROM t1 WHERE no_such_column = (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
@@ -7021,6 +7021,72 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
exists(select 1 from t1 group by `c` in (select `c` from t1))
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
#
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
ControlRev
|
||||
NULL
|
||||
#
|
||||
# MDEV-7445:Server crash with Signal 6
|
||||
#
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
END |
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
drop procedure procedure2;
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
sq
|
||||
#
|
||||
# MDEV-7846:Server crashes in Item_subselect::fix
|
||||
#_fields or fails with Thread stack overrun
|
||||
#
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
set optimizer_switch=default;
|
||||
select @@optimizer_switch like '%subquery_cache=on%';
|
||||
@@optimizer_switch like '%subquery_cache=on%'
|
||||
|
||||
@@ -84,7 +84,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
ERROR HY000: Incorrect usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1))' at line 1
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;
|
||||
@@ -3590,7 +3590,7 @@ delete from t1 where c <= 1140006215 and (select b from t2 where a = 2) = 1;
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'IN/ALL/ANY subquery'
|
||||
CREATE VIEW v2 AS SELECT * FROM t1 WHERE no_such_column = (SELECT 1);
|
||||
ERROR 42S22: Unknown column 'no_such_column' in 'where clause'
|
||||
SELECT * FROM t1 WHERE no_such_column = ANY (SELECT 1);
|
||||
@@ -7010,5 +7010,71 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
exists(select 1 from t1 group by `c` in (select `c` from t1))
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
#
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
ControlRev
|
||||
NULL
|
||||
#
|
||||
# MDEV-7445:Server crash with Signal 6
|
||||
#
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
END |
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
call procedure2();
|
||||
ControlRev
|
||||
NULL
|
||||
drop procedure procedure2;
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
sq
|
||||
#
|
||||
# MDEV-7846:Server crashes in Item_subselect::fix
|
||||
#_fields or fails with Thread stack overrun
|
||||
#
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
set @optimizer_switch_for_subselect_test=null;
|
||||
set @join_cache_level_for_subselect_test=NULL;
|
||||
|
||||
@@ -561,6 +561,21 @@ ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function
|
||||
DROP VIEW v1;
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
# Bug #21143080: UPDATE ON VARCHAR AND TEXT COLUMNS PRODUCE INCORRECT
|
||||
# RESULTS
|
||||
CREATE TABLE t1 (a VARCHAR(50), b TEXT, c CHAR(50)) ENGINE=INNODB;
|
||||
INSERT INTO t1 (a, b, c) VALUES ('start trail', '', 'even longer string');
|
||||
UPDATE t1 SET b = a, a = 'inject';
|
||||
SELECT a, b FROM t1;
|
||||
a b
|
||||
inject start trail
|
||||
UPDATE t1 SET b = c, c = 'inject';
|
||||
SELECT c, b FROM t1;
|
||||
c b
|
||||
inject even longer string
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-3948 Assertion `records_are_comparable(table)' fails in compare_record(const TABLE*) on UPDATE with simple AND condition, index_merge+index_merge_intersection, InnoDB
|
||||
#
|
||||
# Verify that UPDATE does the same number of handler_update
|
||||
# operations, no matter if there is ORDER BY or not.
|
||||
|
||||
@@ -4830,6 +4830,41 @@ View Create View character_set_client collation_connection
|
||||
v4 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `col2`) union all (select '' AS `Name_exp_1`) latin1 latin1_swedish_ci
|
||||
DROP VIEW v1, v2, v3, v4, v5;
|
||||
#
|
||||
# BUG#19886430: VIEW CREATION WITH NAMED COLUMNS, OVER UNION,
|
||||
# IS REJECTED
|
||||
# Without the patch, reports an error.
|
||||
CREATE VIEW v1 (fld1, fld2) AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
# The column names are explicitly specified and not duplicates, hence
|
||||
# succeeds.
|
||||
CREATE VIEW v2 (fld1, fld2) AS
|
||||
SELECT 1 AS a, 2 AS a
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
# The column name in the first SELECT are not duplicates, hence succeeds.
|
||||
CREATE VIEW v3 AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
# Should report an error, since the explicitly specified column names are
|
||||
# duplicates.
|
||||
CREATE VIEW v4 (fld1, fld1) AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
ERROR 42S21: Duplicate column name 'fld1'
|
||||
# Should report an error, since duplicate column name is specified in the
|
||||
# First SELECT.
|
||||
CREATE VIEW v4 AS
|
||||
SELECT 1 AS a, 2 AS a
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
ERROR 42S21: Duplicate column name 'a'
|
||||
# Cleanup
|
||||
DROP VIEW v1, v2, v3;
|
||||
#
|
||||
# lp:833600 Wrong result with view + outer join + uncorrelated subquery (non-semijoin)
|
||||
#
|
||||
CREATE TABLE t1 ( a int, b int );
|
||||
|
||||
59
mysql-test/std_data/bug16171518_1.dat
Normal file
59
mysql-test/std_data/bug16171518_1.dat
Normal file
@@ -0,0 +1,59 @@
|
||||
<test_rows>
|
||||
<row>
|
||||
<col1>0bc</col1>
|
||||
<col2>def</col2>
|
||||
<col3>ghi</col3>
|
||||
<col4>jkl</col4>
|
||||
</row>
|
||||
<row>
|
||||
<col1>1no</col1>
|
||||
<col2/>
|
||||
<col3>pqr</col3>
|
||||
<col4>stu</col4>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<col1>2BC</col1>
|
||||
<col2>DEF</col2>
|
||||
<col3>GHI</col3>
|
||||
<col4>JKL</col4>
|
||||
</row>
|
||||
<row>
|
||||
<col1>3NO</col1>
|
||||
<col2 />
|
||||
<col3>PQR</col3>
|
||||
<col4>STU</col4>
|
||||
</row>
|
||||
|
||||
<row col1="4bc" col2="def" col3="ghi" col4="jkl"/>
|
||||
<row col1="5no" col2="pqr" col3="stu" col4="vwx" />
|
||||
|
||||
<row>
|
||||
<field name='col1'>6BC</field>
|
||||
<field name='col2'>DEF</field>
|
||||
<field name='col3'></field>
|
||||
<field name='col4'>JKL</field>
|
||||
</row>
|
||||
<row>
|
||||
<field name='col1'>7NO</field>
|
||||
<field name='col2'>PQR</field>
|
||||
<field name='col3'>STU</field>
|
||||
<field name='col4'>VWX</field>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<col1>8bc</col1>
|
||||
<col2>def</col2>
|
||||
<col3>ghi</col3>
|
||||
<col4 />
|
||||
</row>
|
||||
<row>
|
||||
<col1>9kl</col1>
|
||||
<col2/>
|
||||
<col3>mno</col3>
|
||||
<col4>pqr</col4>
|
||||
</row>
|
||||
|
||||
<row col1="ABC" col2="DEF" col3="" col4="JKL"/>
|
||||
<row col1="MNO" col2="" col3="STU" col4="VWX"/>
|
||||
</test_rows>
|
||||
12
mysql-test/std_data/bug16171518_2.dat
Normal file
12
mysql-test/std_data/bug16171518_2.dat
Normal file
@@ -0,0 +1,12 @@
|
||||
<test_rows>
|
||||
<row>
|
||||
<col1>ABC</col1>
|
||||
<col2>DEF</col2>
|
||||
<col3 />
|
||||
</row>
|
||||
<row>
|
||||
<col1>GHI</col1>
|
||||
<col2 />
|
||||
<col3>123</col3>
|
||||
</row>
|
||||
</test_rows>
|
||||
@@ -1409,7 +1409,7 @@ BEGIN
|
||||
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=000000124.450000000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
### @1=124.45000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
@@ -1426,7 +1426,7 @@ BEGIN
|
||||
#010909 4:46:40 server id 1 end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test`.`t1`
|
||||
### SET
|
||||
### @1=-000000543.210000000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
### @1=-543.21000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
@@ -1443,7 +1443,7 @@ BEGIN
|
||||
#010909 4:46:40 server id 1 end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||
### DELETE FROM `test`.`t1`
|
||||
### WHERE
|
||||
### @1=000000124.450000000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
### @1=124.45000 /* DECIMAL(10,5) meta=2565 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
|
||||
@@ -2390,9 +2390,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2483,9 +2483,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2659,9 +2659,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2752,9 +2752,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2832,9 +2832,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2925,9 +2925,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3005,9 +3005,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3178,9 +3178,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3271,9 +3271,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3444,9 +3444,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3537,9 +3537,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3630,9 +3630,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
|
||||
@@ -2390,9 +2390,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2485,9 +2485,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2663,9 +2663,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2758,9 +2758,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2838,9 +2838,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -2933,9 +2933,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3013,9 +3013,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3188,9 +3188,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3283,9 +3283,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3458,9 +3458,9 @@ BEGIN
|
||||
### @22=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='9999:12:31' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=9999-12-31 23:59:59 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=2146522447 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3553,9 +3553,9 @@ BEGIN
|
||||
### @22=-1.797... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=0 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000000 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=0 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='1000:01:01' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=1000-01-01 00:00:00 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=75601 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
@@ -3648,9 +3648,9 @@ BEGIN
|
||||
### @22=-2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @23=2.225... /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @24=1 /* DOUBLE meta=8 nullable=1 is_null=0 */
|
||||
### @25=-000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=000000009.999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=000000001 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @25=-9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @26=9999999999 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @27=1 /* DECIMAL(10,0) meta=2560 nullable=1 is_null=0 */
|
||||
### @28='2008:08:04' /* DATE meta=0 nullable=1 is_null=0 */
|
||||
### @29=2008-08-04 16:18:06 /* DATETIME meta=0 nullable=1 is_null=0 */
|
||||
### @30=1217855904 /* TIMESTAMP meta=0 nullable=0 is_null=0 */
|
||||
|
||||
Binary file not shown.
36
mysql-test/suite/innodb/r/innodb_bug68148.result
Normal file
36
mysql-test/suite/innodb/r/innodb_bug68148.result
Normal file
@@ -0,0 +1,36 @@
|
||||
set global innodb_file_per_table=1;
|
||||
CREATE TABLE ref_table1 (id int(11) NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
|
||||
CREATE TABLE ref_table2 (id int(11) NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
|
||||
CREATE TABLE `main` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ref_id1` int(11) NOT NULL,
|
||||
`ref_id2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `idx_1` (`ref_id1`,`ref_id2`),
|
||||
KEY `FK_set_out_analysis_route_id` (`ref_id2`),
|
||||
CONSTRAINT `FK_1` FOREIGN KEY (`ref_id1`) REFERENCES `ref_table1` (`id`) ,
|
||||
CONSTRAINT `FK_2` FOREIGN KEY (`ref_id2`) REFERENCES `ref_table2` (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP INDEX `idx_1` ON `main`;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
main
|
||||
ref_table1
|
||||
ref_table2
|
||||
# restart and see if we can still access the main table
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
ALTER TABLE `main` ADD INDEX `idx_1` (`ref_id1`);
|
||||
SHOW CREATE TABLE `main`;
|
||||
Table Create Table
|
||||
main CREATE TABLE `main` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ref_id1` int(11) NOT NULL,
|
||||
`ref_id2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `FK_set_out_analysis_route_id` (`ref_id2`),
|
||||
KEY `idx_1` (`ref_id1`),
|
||||
CONSTRAINT `FK_1` FOREIGN KEY (`ref_id1`) REFERENCES `ref_table1` (`id`),
|
||||
CONSTRAINT `FK_2` FOREIGN KEY (`ref_id2`) REFERENCES `ref_table2` (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE main, ref_table1, ref_table2;
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -2,6 +2,10 @@
|
||||
# Bug #13083023 - 60229: BROKEN COMPATIBILITY: ERROR WHILE CREATE TABLE
|
||||
# WITH FOREIGN KEY CONSTRAINT.
|
||||
|
||||
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||||
#insensitive filsystem is not allowed.
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE PERSON (
|
||||
|
||||
41
mysql-test/suite/innodb/t/innodb_bug68148.test
Normal file
41
mysql-test/suite/innodb/t/innodb_bug68148.test
Normal file
@@ -0,0 +1,41 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# Bug #68148: drop index on a foreign key column leads to missing table
|
||||
# MDEV-8845: Table disappear after modifying FK
|
||||
#
|
||||
|
||||
set global innodb_file_per_table=1;
|
||||
|
||||
CREATE TABLE ref_table1 (id int(11) NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE ref_table2 (id int(11) NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `main` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ref_id1` int(11) NOT NULL,
|
||||
`ref_id2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `idx_1` (`ref_id1`,`ref_id2`),
|
||||
KEY `FK_set_out_analysis_route_id` (`ref_id2`),
|
||||
CONSTRAINT `FK_1` FOREIGN KEY (`ref_id1`) REFERENCES `ref_table1` (`id`) ,
|
||||
CONSTRAINT `FK_2` FOREIGN KEY (`ref_id2`) REFERENCES `ref_table2` (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
DROP INDEX `idx_1` ON `main`;
|
||||
SHOW TABLES;
|
||||
|
||||
--echo # restart and see if we can still access the main table
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
# This is required to access the table
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
ALTER TABLE `main` ADD INDEX `idx_1` (`ref_id1`);
|
||||
SHOW CREATE TABLE `main`;
|
||||
|
||||
DROP TABLE main, ref_table1, ref_table2;
|
||||
|
||||
|
||||
@@ -6,6 +6,12 @@ if (`select plugin_auth_version <= "5.5.43-MariaDB-37.2" from information_schema
|
||||
# Embedded server does not support restarting.
|
||||
--source include/not_embedded.inc
|
||||
|
||||
# MDEV-8841 - close tables opened by previous tests,
|
||||
# so they don't get marked crashed when the server gets crashed
|
||||
--disable_query_log
|
||||
FLUSH TABLES;
|
||||
--enable_query_log
|
||||
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connect (con1,localhost,root);
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -1,3 +1,7 @@
|
||||
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||||
#insensitive filsystem is not allowed.
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
--source include/have_sjis.inc
|
||||
--source include/have_innodb.inc
|
||||
--character_set sjis
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -1,3 +1,7 @@
|
||||
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||||
#insensitive filsystem is not allowed.
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
--source include/have_ucs2.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -1,3 +1,7 @@
|
||||
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||||
#insensitive filsystem is not allowed.
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
--source include/have_ujis.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -1,3 +1,7 @@
|
||||
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||||
#insensitive filsystem is not allowed.
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
--source include/have_utf8.inc
|
||||
--source include/have_innodb.inc
|
||||
--disable_warnings
|
||||
|
||||
@@ -38,7 +38,7 @@ spins
|
||||
NULL
|
||||
select * from performance_schema.setup_timers where name='wait';
|
||||
NAME TIMER_NAME
|
||||
wait CYCLE
|
||||
wait {CYCLE_OR_NANOSECOND}
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
@@ -53,7 +53,7 @@ spins
|
||||
NULL
|
||||
select * from performance_schema.setup_timers where name='wait';
|
||||
NAME TIMER_NAME
|
||||
wait CYCLE
|
||||
wait {CYCLE_OR_NANOSECOND}
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
|
||||
@@ -34,6 +34,7 @@ show status like "Qcache_hits";
|
||||
|
||||
select spins from performance_schema.events_waits_current order by event_name limit 1;
|
||||
|
||||
--replace_result CYCLE {CYCLE_OR_NANOSECOND} NANOSECOND {CYCLE_OR_NANOSECOND}
|
||||
select * from performance_schema.setup_timers where name='wait';
|
||||
|
||||
show status like "Qcache_queries_in_cache";
|
||||
@@ -42,6 +43,7 @@ show status like "Qcache_hits";
|
||||
|
||||
select spins from performance_schema.events_waits_current order by event_name limit 1;
|
||||
|
||||
--replace_result CYCLE {CYCLE_OR_NANOSECOND} NANOSECOND {CYCLE_OR_NANOSECOND}
|
||||
select * from performance_schema.setup_timers where name='wait';
|
||||
|
||||
show status like "Qcache_queries_in_cache";
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
select plugin_status from information_schema.plugins where plugin_name='feedback';
|
||||
plugin_status
|
||||
ACTIVE
|
||||
SELECT variable_value INTO @feedback_used FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
SELECT variable_value = @feedback_used + 1 FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
variable_value = @feedback_used + 1
|
||||
1
|
||||
select * from information_schema.feedback where variable_name like 'feed%'
|
||||
and variable_name not like '%_uid';
|
||||
and variable_name not like '%_uid' and variable_name not like 'FEEDBACK used';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
FEEDBACK used 1
|
||||
FEEDBACK version 1.1
|
||||
FEEDBACK_SEND_RETRY_WAIT 60
|
||||
FEEDBACK_SEND_TIMEOUT 60
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
select plugin_status from information_schema.plugins where plugin_name='feedback';
|
||||
plugin_status
|
||||
ACTIVE
|
||||
SELECT variable_value INTO @feedback_used FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
SELECT variable_value = @feedback_used + 1 FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
variable_value = @feedback_used + 1
|
||||
1
|
||||
select * from information_schema.feedback where variable_name like 'feed%'
|
||||
and variable_name not like '%_uid';
|
||||
and variable_name not like '%_uid' and variable_name not like 'FEEDBACK used';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
FEEDBACK used 2
|
||||
FEEDBACK version 1.1
|
||||
FEEDBACK_SEND_RETRY_WAIT 60
|
||||
FEEDBACK_SEND_TIMEOUT 60
|
||||
|
||||
@@ -4,7 +4,24 @@ if (`select count(*) = 0 from information_schema.plugins where plugin_name = 'fe
|
||||
}
|
||||
|
||||
select plugin_status from information_schema.plugins where plugin_name='feedback';
|
||||
|
||||
# Every SELECT from INFORMATION_SCHEMA.FEEDBACK increases the value of 'FEEDBACK used'.
|
||||
# We cannot record the actual value, because the test can be executed more than once,
|
||||
# but we can check that the value indeed increases as expected.
|
||||
# There is still a room for some race condition, e.g. if at the very moment
|
||||
# between first SELECT to store the value and the next SELECT to check that it increases,
|
||||
# the feedback plugin is activated. But the probability of it is close to 0,
|
||||
# so lets get back to it if it ever happens.
|
||||
|
||||
# Lets say the plugin was used X times before this SELECT
|
||||
SELECT variable_value INTO @feedback_used FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
|
||||
# Now $feedback_used == X+1, and 'FEEDBACK used' is also X+1. And variable_value is increased again when we run the next SELECT
|
||||
SELECT variable_value = @feedback_used + 1 FROM information_schema.feedback where variable_name = 'FEEDBACK used';
|
||||
|
||||
# Now when we are happy with 'FEEDBACK used', we can check everything else
|
||||
|
||||
--replace_result https http
|
||||
--sorted_result
|
||||
select * from information_schema.feedback where variable_name like 'feed%'
|
||||
and variable_name not like '%_uid';
|
||||
and variable_name not like '%_uid' and variable_name not like 'FEEDBACK used';
|
||||
|
||||
@@ -14,6 +14,15 @@ if (!$MTR_FEEDBACK_PLUGIN) {
|
||||
# is doing some work in other workers.
|
||||
#
|
||||
sleep 310;
|
||||
|
||||
# The test expects that the plugin will send a report at least 2 times,
|
||||
# now (5 min after loading) and on server shutdown which happens below.
|
||||
# Since we have already waited for 5 min, let's be generous
|
||||
# and make sure the server has enough time to shut down properly.
|
||||
# We won't lose anything if the shutdown is fast, but if it's slow, the plugin
|
||||
# will still be able to finish the job and write about it in the error log.
|
||||
|
||||
--let $shutdown_timeout= 60
|
||||
source include/restart_mysqld.inc;
|
||||
|
||||
replace_result https http;
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
start slave;
|
||||
include/rpl_end.inc
|
||||
|
||||
1
mysql-test/suite/rpl/t/rpl_innodb_bug30888.opt
Normal file
1
mysql-test/suite/rpl/t/rpl_innodb_bug30888.opt
Normal file
@@ -0,0 +1 @@
|
||||
--innodb-flush-log-at-trx-commit=2
|
||||
@@ -10,3 +10,10 @@
|
||||
--exec $MYSQL_SLAP --silent --socket=$SLAVE_MYSOCK -q "START SLAVE; STOP SLAVE; SHOW GLOBAL STATUS" -c 2 --number-of-queries=100 --create-schema=test
|
||||
|
||||
# All done.
|
||||
|
||||
--connection slave
|
||||
start slave;
|
||||
|
||||
--connection master
|
||||
--source include/rpl_end.inc
|
||||
|
||||
|
||||
@@ -206,6 +206,20 @@ SELECT if(1, NULL, (SELECT min('hello')));
|
||||
|
||||
--echo End of 5.2 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-8663: IF Statement returns multiple values erroneously
|
||||
--echo # (or Assertion `!null_value' failed in Item::send(Protocol*, String*)
|
||||
--echo #
|
||||
CREATE TABLE `t1` (
|
||||
`datas` VARCHAR(25) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO `t1` VALUES ('1,2'), ('2,3'), ('3,4');
|
||||
|
||||
SELECT IF(FIND_IN_SET('1', `datas`), 1.5, IF(FIND_IN_SET('2', `datas`), 2, NULL)) AS `First`, '1' AS `Second`, '2' AS `Third` FROM `t1`;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--disable_query_log
|
||||
# Restore timezone to default
|
||||
set time_zone= @@global.time_zone;
|
||||
|
||||
@@ -397,6 +397,205 @@ drop table t1,tv;
|
||||
SELECT GET_LOCK('ul1', NULL);
|
||||
SELECT GET_LOCK('ul1', -1);
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-8624 MariaDB hangs on query with many logical condition
|
||||
--echo #
|
||||
CREATE TABLE `t1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`submitdate` datetime DEFAULT NULL,
|
||||
`lastpage` int(11) DEFAULT NULL,
|
||||
`startlanguage` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`token` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`datestamp` datetime NOT NULL,
|
||||
`startdate` datetime NOT NULL,
|
||||
`ipaddr` text COLLATE utf8_unicode_ci,
|
||||
`refurl` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1723` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1724` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1725` text COLLATE utf8_unicode_ci,
|
||||
`57813X540X1726` double DEFAULT NULL,
|
||||
`57813X540X1909` double DEFAULT NULL,
|
||||
`57813X541X17271` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17272` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17273` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17274` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17275` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17276` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X541X17281` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17282` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17283` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17284` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17285` text COLLATE utf8_unicode_ci,
|
||||
`57813X541X17286` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18131` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18132` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18133` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18134` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18135` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18136` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18137` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18138` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18139` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X542X18141` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18142` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18143` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18144` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18145` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18146` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18147` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18148` text COLLATE utf8_unicode_ci,
|
||||
`57813X542X18149` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18451` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18452` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18453` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18454` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18455` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18456` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X543X18461` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18462` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18463` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18464` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18465` text COLLATE utf8_unicode_ci,
|
||||
`57813X543X18466` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18711` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18712` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18713` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18714` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18715` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18716` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18717` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18718` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X544X18721` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18722` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18723` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18724` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18725` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18726` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18727` text COLLATE utf8_unicode_ci,
|
||||
`57813X544X18728` text COLLATE utf8_unicode_ci,
|
||||
`57813X546X1902` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X546X1903` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X546X1904` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`57813X545X1901` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `lime_survey_57813_idx` (`token`),
|
||||
KEY `57813X540X1723` (`57813X540X1723`(100)),
|
||||
KEY `57813X540X1724` (`57813X540X1724`(100)),
|
||||
KEY `57813X540X1726` (`57813X540X1726`),
|
||||
KEY `57813X540X1725` (`57813X540X1725`(100)),
|
||||
KEY `57813X546X1902` (`57813X546X1902`),
|
||||
KEY `57813X546X1903` (`57813X546X1903`),
|
||||
KEY `57813X546X1904` (`57813X546X1904`)
|
||||
);
|
||||
|
||||
SELECT
|
||||
COUNT(*) as `N`,
|
||||
ROUND(
|
||||
(
|
||||
SUM(
|
||||
(
|
||||
(
|
||||
IF( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99', 57813X541X17271, 0 ) +
|
||||
IF( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99', 57813X541X17272, 0 ) +
|
||||
IF( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99', 57813X541X17273, 0 ) +
|
||||
IF( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99', 57813X541X17274, 0 ) +
|
||||
IF( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99', 57813X541X17275, 0 ) +
|
||||
IF( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99', 57813X541X17276, 0 ) +
|
||||
IF( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99', 57813X542X18131, 0 ) +
|
||||
IF( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99', 57813X542X18132, 0 ) +
|
||||
IF( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99', 57813X542X18133, 0 ) +
|
||||
IF( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99', 57813X542X18134, 0 ) +
|
||||
IF( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99', 57813X542X18135, 0 ) +
|
||||
IF( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99', 57813X542X18136, 0 ) +
|
||||
IF( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99', 57813X542X18137, 0 ) +
|
||||
IF( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99', 57813X542X18138, 0 ) +
|
||||
IF( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99', 57813X542X18139, 0 ) +
|
||||
IF( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99', 57813X543X18451, 0 ) +
|
||||
IF( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99', 57813X543X18452, 0 ) +
|
||||
IF( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99', 57813X543X18453, 0 ) +
|
||||
IF( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99', 57813X543X18454, 0 ) +
|
||||
IF( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99', 57813X543X18455, 0 ) +
|
||||
IF( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99', 57813X543X18456, 0 ) +
|
||||
IF( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99', 57813X544X18711, 0 ) +
|
||||
IF( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99', 57813X544X18712, 0 ) +
|
||||
IF( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99', 57813X544X18713, 0 ) +
|
||||
IF( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99', 57813X544X18714, 0 ) +
|
||||
IF( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99', 57813X544X18715, 0 ) +
|
||||
IF( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99', 57813X544X18716, 0 ) +
|
||||
IF( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99', 57813X544X18717, 0 ) +
|
||||
IF( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99', 57813X544X18718, 0 )
|
||||
)
|
||||
/
|
||||
(
|
||||
IF( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99', 1, 0 ) +
|
||||
IF( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99', 1, 0 ) +
|
||||
IF( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99', 1, 0 ) +
|
||||
IF( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99', 1, 0 ) +
|
||||
IF( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99', 1, 0 )
|
||||
)
|
||||
)
|
||||
)
|
||||
/ COUNT(*) ), 4) as `AVG`
|
||||
FROM `t1`
|
||||
WHERE `submitdate` IS NOT NULL
|
||||
AND (
|
||||
( 57813X541X17271 IS NOT NULL AND 57813X541X17271 != '' AND 57813X541X17271 != '99' ) OR
|
||||
( 57813X541X17272 IS NOT NULL AND 57813X541X17272 != '' AND 57813X541X17272 != '99' ) OR
|
||||
( 57813X541X17273 IS NOT NULL AND 57813X541X17273 != '' AND 57813X541X17273 != '99' ) OR
|
||||
( 57813X541X17274 IS NOT NULL AND 57813X541X17274 != '' AND 57813X541X17274 != '99' ) OR
|
||||
( 57813X541X17275 IS NOT NULL AND 57813X541X17275 != '' AND 57813X541X17275 != '99' ) OR
|
||||
( 57813X541X17276 IS NOT NULL AND 57813X541X17276 != '' AND 57813X541X17276 != '99' ) OR
|
||||
( 57813X542X18131 IS NOT NULL AND 57813X542X18131 != '' AND 57813X542X18131 != '99' ) OR
|
||||
( 57813X542X18132 IS NOT NULL AND 57813X542X18132 != '' AND 57813X542X18132 != '99' ) OR
|
||||
( 57813X542X18133 IS NOT NULL AND 57813X542X18133 != '' AND 57813X542X18133 != '99' ) OR
|
||||
( 57813X542X18134 IS NOT NULL AND 57813X542X18134 != '' AND 57813X542X18134 != '99' ) OR
|
||||
( 57813X542X18135 IS NOT NULL AND 57813X542X18135 != '' AND 57813X542X18135 != '99' ) OR
|
||||
( 57813X542X18136 IS NOT NULL AND 57813X542X18136 != '' AND 57813X542X18136 != '99' ) OR
|
||||
( 57813X542X18137 IS NOT NULL AND 57813X542X18137 != '' AND 57813X542X18137 != '99' ) OR
|
||||
( 57813X542X18138 IS NOT NULL AND 57813X542X18138 != '' AND 57813X542X18138 != '99' ) OR
|
||||
( 57813X542X18139 IS NOT NULL AND 57813X542X18139 != '' AND 57813X542X18139 != '99' ) OR
|
||||
( 57813X543X18451 IS NOT NULL AND 57813X543X18451 != '' AND 57813X543X18451 != '99' ) OR
|
||||
( 57813X543X18452 IS NOT NULL AND 57813X543X18452 != '' AND 57813X543X18452 != '99' ) OR
|
||||
( 57813X543X18453 IS NOT NULL AND 57813X543X18453 != '' AND 57813X543X18453 != '99' ) OR
|
||||
( 57813X543X18454 IS NOT NULL AND 57813X543X18454 != '' AND 57813X543X18454 != '99' ) OR
|
||||
( 57813X543X18455 IS NOT NULL AND 57813X543X18455 != '' AND 57813X543X18455 != '99' ) OR
|
||||
( 57813X543X18456 IS NOT NULL AND 57813X543X18456 != '' AND 57813X543X18456 != '99' ) OR
|
||||
( 57813X544X18711 IS NOT NULL AND 57813X544X18711 != '' AND 57813X544X18711 != '99' ) OR
|
||||
( 57813X544X18712 IS NOT NULL AND 57813X544X18712 != '' AND 57813X544X18712 != '99' ) OR
|
||||
( 57813X544X18713 IS NOT NULL AND 57813X544X18713 != '' AND 57813X544X18713 != '99' ) OR
|
||||
( 57813X544X18714 IS NOT NULL AND 57813X544X18714 != '' AND 57813X544X18714 != '99' ) OR
|
||||
( 57813X544X18715 IS NOT NULL AND 57813X544X18715 != '' AND 57813X544X18715 != '99' ) OR
|
||||
( 57813X544X18716 IS NOT NULL AND 57813X544X18716 != '' AND 57813X544X18716 != '99' ) OR
|
||||
( 57813X544X18717 IS NOT NULL AND 57813X544X18717 != '' AND 57813X544X18717 != '99' ) OR
|
||||
( 57813X544X18718 IS NOT NULL AND 57813X544X18718 != '' AND 57813X544X18718 != '99' ) )
|
||||
AND 57813X540X1723 = 'Test';
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
||||
@@ -8,15 +8,12 @@ select variable_name from information_schema.session_variables where variable_na
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
|
||||
#
|
||||
# information_schema tables inside subqueries, they should not be re-populated
|
||||
# (i_s.columns needs to scan i_s itself, creating a tmp table for every i_s
|
||||
# table. if it's re-populated, it'll do that multiple times)
|
||||
# MDEV-8796 Delete with sub query with information_schema.TABLES deletes too many rows
|
||||
#
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
# fix the result in ps-protocol
|
||||
--replace_result 39 38
|
||||
show status like 'created_tmp_tables';
|
||||
drop table t1;
|
||||
create table t1 (x int);
|
||||
create table t2 (x int);
|
||||
create table t3 (x int);
|
||||
create table t4 AS select table_name from information_schema.TABLES where table_schema = database() and table_type = 'BASE TABLE' ;
|
||||
delete from t4 where table_name not in (select table_name from information_schema.TABLES where table_schema = database() and table_type = 'BASE TABLE');
|
||||
select * from t4;
|
||||
drop table t1, t2, t3, t4;
|
||||
|
||||
@@ -116,3 +116,17 @@ LOAD XML INFILE '../../std_data/loadxml.dat' INTO TABLE t1
|
||||
ROWS IDENTIFIED BY '<row>' (a,@b) SET b=concat('!',@b);
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#16171518 LOAD XML DOES NOT HANDLE EMPTY ELEMENTS
|
||||
--echo #
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 VARCHAR(3), col4 VARCHAR(4));
|
||||
LOAD XML INFILE '../../std_data/bug16171518_1.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3, col4;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (col1 VARCHAR(3), col2 VARCHAR(3), col3 INTEGER);
|
||||
LOAD XML INFILE '../../std_data/bug16171518_2.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 ORDER BY col1, col2, col3;
|
||||
DROP TABLE t1;
|
||||
|
||||
38
mysql-test/t/lowercase_fs_on.test
Normal file
38
mysql-test/t/lowercase_fs_on.test
Normal file
@@ -0,0 +1,38 @@
|
||||
#
|
||||
# Specific tests for case-insensitive file systems
|
||||
# i.e. lower_case_filesystem=ON
|
||||
#
|
||||
-- source include/have_case_insensitive_file_system.inc
|
||||
# Embedded server does not support restarting.
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#20198490 : LOWER_CASE_TABLE_NAMES=0 ON WINDOWS LEADS TO PROBLEMS
|
||||
--echo #
|
||||
|
||||
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err;
|
||||
|
||||
--error 0,1
|
||||
--remove_file $SEARCH_FILE
|
||||
|
||||
#Shutdown the server
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
#Start the server with --lower_case_table_names=0 in Windows.
|
||||
--enable_reconnect
|
||||
--error 1
|
||||
--exec $MYSQLD_CMD --lower_case_table_names=0 > $SEARCH_FILE 2>&1
|
||||
|
||||
#Search for the error messege in the server error log.
|
||||
let SEARCH_PATTERN= \[ERROR\] The server option \'lower_case_table_names\' is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination\. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode\.;
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
#Restart the server
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
#Cleanup
|
||||
--error 0,1
|
||||
--remove_file $SEARCH_FILE
|
||||
@@ -1 +0,0 @@
|
||||
--lower_case_table_names=0
|
||||
@@ -1,37 +0,0 @@
|
||||
#
|
||||
# Test of force of lower-case-table-names=0
|
||||
# (User has case insensitive file system and wants to preserve case of
|
||||
# table names)
|
||||
#
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_lowercase0.inc
|
||||
--source include/have_case_insensitive_file_system.inc
|
||||
--source include/not_windows.inc
|
||||
|
||||
call mtr.add_suppression("Cannot find or open table test/BUG29839 from");
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,T1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# This is actually an error, but ok as the user has forced this
|
||||
# by using --lower-case-table-names=0
|
||||
CREATE TABLE t1 (a INT);
|
||||
SELECT * FROM T1;
|
||||
FLUSH TABLES;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# InnoDB should in this case be case sensitive
|
||||
# Note that this is not true on windows as no this OS, InnoDB is always
|
||||
# storing things in lower case.
|
||||
#
|
||||
|
||||
CREATE TABLE bug29839 (a INT) ENGINE=INNODB;
|
||||
--error ER_NO_SUCH_TABLE
|
||||
SELECT * FROM BUG29839;
|
||||
DROP TABLE bug29839;
|
||||
|
||||
# End of 4.1 tests
|
||||
@@ -901,13 +901,8 @@ select * from t1;
|
||||
create view v1 as
|
||||
select * from v3 where b in (1, 2, 3, 4, 5, 6, 7);
|
||||
|
||||
# Disable warnings since LIMIT warning for unsafe statement if
|
||||
# binlog_format = STATEMENT. Note: after BUG#45832, the warning should
|
||||
# not be issued.
|
||||
--disable_warnings
|
||||
create view v2 as
|
||||
select v3.a from v3, v1 where v1.a=v3.a and v3.b=3 limit 1;
|
||||
--enable_warnings
|
||||
|
||||
--exec $MYSQL_DUMP --skip-comments test
|
||||
|
||||
@@ -1777,7 +1772,7 @@ drop table words;
|
||||
--replace_regex /.*mysqlimport(\.exe)*/mysqlimport/
|
||||
--replace_result mysqldump.exe mysqldump
|
||||
--error 1
|
||||
--exec $MYSQL_IMPORT --silent --use-threads=2 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt $MYSQLTEST_VARDIR/std_data/words.dat $MYSQLTEST_VARDIR/std_data/words2.dat 2>&1
|
||||
--exec $MYSQL_IMPORT --silent --use-threads=2 test $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt $MYSQLTEST_VARDIR/std_data/words.dat $MYSQLTEST_VARDIR/std_data/words2.dat
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
@@ -2456,6 +2451,35 @@ drop table t1, t2;
|
||||
--echo # End of 5.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Bug #20772273 : MYSQLIMPORT --USE-THREADS DOESN'T USE MULTIPLE THREADS
|
||||
--echo #
|
||||
|
||||
CREATE DATABASE db_20772273;
|
||||
USE db_20772273;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
CREATE TABLE t2(a INT);
|
||||
INSERT INTO t2 VALUES (3), (4);
|
||||
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
--exec $MYSQL_DUMP --tab=$MYSQLTEST_VARDIR/tmp/ db_20772273
|
||||
--exec $MYSQL db_20772273 < $MYSQLTEST_VARDIR/tmp/t1.sql
|
||||
--exec $MYSQL db_20772273 < $MYSQLTEST_VARDIR/tmp/t2.sql
|
||||
|
||||
# Test mysqlimport with multiple threads
|
||||
--exec $MYSQL_IMPORT --silent --use-threads=2 db_20772273 $MYSQLTEST_VARDIR/tmp/t1.txt $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
#Cleanup
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP DATABASE db_20772273;
|
||||
|
||||
#
|
||||
# MDEV-6091 mysqldump goes in a loop and segfaults if --dump-slave is specified and it cannot connect to the server
|
||||
#
|
||||
|
||||
@@ -1146,7 +1146,7 @@ subpartition by hash (rand(a+b));
|
||||
#
|
||||
# Subpartition by hash, wrong subpartition function
|
||||
#
|
||||
--error ER_SUBPARTITION_ERROR
|
||||
--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
|
||||
@@ -53,7 +53,7 @@ SELECT 1 IN (SELECT 1);
|
||||
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
-- error ER_WRONG_USAGE
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
-- error ER_WRONG_PARAMETERS_TO_PROCEDURE
|
||||
-- error ER_PARSE_ERROR
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
-- error ER_BAD_FIELD_ERROR
|
||||
SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
|
||||
@@ -5890,3 +5890,77 @@ DROP TABLE t1,t2;
|
||||
create table t1 (c int);
|
||||
select exists(select 1 from t1 group by `c` in (select `c` from t1));
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7565: Server crash with Signal 6 (part 2)
|
||||
--echo #
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7445:Server crash with Signal 6
|
||||
--echo #
|
||||
|
||||
--delimiter |
|
||||
CREATE PROCEDURE procedure2()
|
||||
BEGIN
|
||||
Select
|
||||
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
|
||||
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
|
||||
) As `ControlRev`
|
||||
From
|
||||
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
|
||||
Group By TestCase.Revenue, TestCase.TemplateID;
|
||||
|
||||
END |
|
||||
--delimiter ;
|
||||
call procedure2();
|
||||
call procedure2();
|
||||
|
||||
drop procedure procedure2;
|
||||
|
||||
|
||||
SELECT
|
||||
(SELECT user FROM mysql.user
|
||||
WHERE h.host in (SELECT host FROM mysql.user)
|
||||
) AS sq
|
||||
FROM mysql.host h GROUP BY h.host;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7846:Server crashes in Item_subselect::fix
|
||||
--echo #_fields or fails with Thread stack overrun
|
||||
--echo #
|
||||
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 table3.column3 IN ( SELECT 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;
|
||||
|
||||
@@ -506,6 +506,21 @@ DROP VIEW v1;
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # Bug #21143080: UPDATE ON VARCHAR AND TEXT COLUMNS PRODUCE INCORRECT
|
||||
--echo # RESULTS
|
||||
|
||||
CREATE TABLE t1 (a VARCHAR(50), b TEXT, c CHAR(50)) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t1 (a, b, c) VALUES ('start trail', '', 'even longer string');
|
||||
UPDATE t1 SET b = a, a = 'inject';
|
||||
SELECT a, b FROM t1;
|
||||
UPDATE t1 SET b = c, c = 'inject';
|
||||
SELECT c, b FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-3948 Assertion `records_are_comparable(table)' fails in compare_record(const TABLE*) on UPDATE with simple AND condition, index_merge+index_merge_intersection, InnoDB
|
||||
--echo #
|
||||
--echo # Verify that UPDATE does the same number of handler_update
|
||||
--echo # operations, no matter if there is ORDER BY or not.
|
||||
|
||||
@@ -4741,6 +4741,50 @@ SHOW CREATE VIEW v4;
|
||||
|
||||
DROP VIEW v1, v2, v3, v4, v5;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # BUG#19886430: VIEW CREATION WITH NAMED COLUMNS, OVER UNION,
|
||||
--echo # IS REJECTED
|
||||
|
||||
--echo # Without the patch, reports an error.
|
||||
CREATE VIEW v1 (fld1, fld2) AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
|
||||
--echo # The column names are explicitly specified and not duplicates, hence
|
||||
--echo # succeeds.
|
||||
CREATE VIEW v2 (fld1, fld2) AS
|
||||
SELECT 1 AS a, 2 AS a
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
|
||||
--echo # The column name in the first SELECT are not duplicates, hence succeeds.
|
||||
CREATE VIEW v3 AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
|
||||
--echo # Should report an error, since the explicitly specified column names are
|
||||
--echo # duplicates.
|
||||
--error ER_DUP_FIELDNAME
|
||||
CREATE VIEW v4 (fld1, fld1) AS
|
||||
SELECT 1 AS a, 2 AS b
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
|
||||
--echo # Should report an error, since duplicate column name is specified in the
|
||||
--echo # First SELECT.
|
||||
--error ER_DUP_FIELDNAME
|
||||
CREATE VIEW v4 AS
|
||||
SELECT 1 AS a, 2 AS a
|
||||
UNION ALL
|
||||
SELECT 1 AS a, 1 AS a;
|
||||
|
||||
--echo # Cleanup
|
||||
DROP VIEW v1, v2, v3;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
# gone so execution of other tests won't be affected by their presence.
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
19
sql/field.h
19
sql/field.h
@@ -1,7 +1,7 @@
|
||||
#ifndef FIELD_INCLUDED
|
||||
#define FIELD_INCLUDED
|
||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2014, SkySQL Ab.
|
||||
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2015, 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
|
||||
@@ -638,6 +638,16 @@ public:
|
||||
/* Hash value */
|
||||
virtual void hash(ulong *nr, ulong *nr2);
|
||||
|
||||
/**
|
||||
Checks whether a string field is part of write_set.
|
||||
|
||||
@return
|
||||
FALSE - If field is not char/varchar/....
|
||||
- If field is char/varchar/.. and is not part of write set.
|
||||
TRUE - If field is char/varchar/.. and is part of write set.
|
||||
*/
|
||||
virtual bool is_updatable() const { return FALSE; }
|
||||
|
||||
/* Check whether the field can be used as a join attribute in hash join */
|
||||
virtual bool hash_join_is_possible() { return TRUE; }
|
||||
virtual bool eq_cmp_as_binary() { return TRUE; }
|
||||
@@ -824,6 +834,11 @@ public:
|
||||
|
||||
int store_decimal(const my_decimal *d);
|
||||
uint32 max_data_length() const;
|
||||
bool is_updatable() const
|
||||
{
|
||||
DBUG_ASSERT(table && table->write_set);
|
||||
return bitmap_is_set(table->write_set, field_index);
|
||||
}
|
||||
};
|
||||
|
||||
/* base class for float and double and decimal (old one) */
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2012, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2012, Monty Program Ab
|
||||
|
||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2015, 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
|
||||
@@ -863,15 +862,10 @@ int field_conv(Field *to,Field *from)
|
||||
{ // Be sure the value is stored
|
||||
Field_blob *blob=(Field_blob*) to;
|
||||
from->val_str(&blob->value);
|
||||
/*
|
||||
Copy value if copy_blobs is set, or source is not a string and
|
||||
we have a pointer to its internal string conversion buffer.
|
||||
*/
|
||||
if (to->table->copy_blobs ||
|
||||
(!blob->value.is_alloced() &&
|
||||
from->real_type() != MYSQL_TYPE_STRING &&
|
||||
from->real_type() != MYSQL_TYPE_VARCHAR))
|
||||
|
||||
if (!blob->value.is_alloced() && from->is_updatable())
|
||||
blob->value.copy();
|
||||
|
||||
return blob->store(blob->value.ptr(),blob->value.length(),from->charset());
|
||||
}
|
||||
if (from->real_type() == MYSQL_TYPE_ENUM &&
|
||||
|
||||
@@ -1442,9 +1442,36 @@ bool Item_in_optimizer::eval_not_null_tables(uchar *opt_arg)
|
||||
bool Item_in_optimizer::fix_left(THD *thd, Item **ref)
|
||||
{
|
||||
DBUG_ENTER("Item_in_optimizer::fix_left");
|
||||
if ((!args[0]->fixed && args[0]->fix_fields(thd, args)) ||
|
||||
(!cache && !(cache= Item_cache::get_cache(args[0]))))
|
||||
/*
|
||||
Here we will store pointer on place of main storage of left expression.
|
||||
For usual IN (ALL/ANY) it is subquery left_expr.
|
||||
For other cases (MAX/MIN optimization, non-transformed EXISTS (10.0))
|
||||
it is args[0].
|
||||
*/
|
||||
Item **ref0= args;
|
||||
if (args[1]->type() == Item::SUBSELECT_ITEM &&
|
||||
((Item_subselect *)args[1])->is_in_predicate())
|
||||
{
|
||||
/*
|
||||
left_expr->fix_fields() may cause left_expr to be substituted for
|
||||
another item. (e.g. an Item_field may be changed into Item_ref). This
|
||||
transformation is undone at the end of statement execution (e.g. the
|
||||
Item_ref is deleted). However, Item_in_optimizer::args[0] may keep
|
||||
the pointer to the post-transformation item. Because of that, on the
|
||||
next execution we need to copy args[1]->left_expr again.
|
||||
*/
|
||||
ref0= &(((Item_in_subselect *)args[1])->left_expr);
|
||||
args[0]= ((Item_in_subselect *)args[1])->left_expr;
|
||||
}
|
||||
if ((!(*ref0)->fixed && (*ref0)->fix_fields(thd, ref0)) ||
|
||||
(!cache && !(cache= Item_cache::get_cache(*ref0))))
|
||||
DBUG_RETURN(1);
|
||||
/*
|
||||
During fix_field() expression could be substituted.
|
||||
So we copy changes before use
|
||||
*/
|
||||
if (args[0] != (*ref0))
|
||||
args[0]= (*ref0);
|
||||
DBUG_PRINT("info", ("actual fix fields"));
|
||||
|
||||
cache->setup(args[0]);
|
||||
@@ -1500,6 +1527,16 @@ bool Item_in_optimizer::fix_left(THD *thd, Item **ref)
|
||||
bool Item_in_optimizer::fix_fields(THD *thd, Item **ref)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 0);
|
||||
Item_subselect *sub= 0;
|
||||
uint col;
|
||||
|
||||
/*
|
||||
MAX/MIN optimization can convert the subquery into
|
||||
expr + Item_singlerow_subselect
|
||||
*/
|
||||
if (args[1]->type() == Item::SUBSELECT_ITEM)
|
||||
sub= (Item_subselect *)args[1];
|
||||
|
||||
if (fix_left(thd, ref))
|
||||
return TRUE;
|
||||
if (args[0]->maybe_null)
|
||||
@@ -1507,10 +1544,10 @@ bool Item_in_optimizer::fix_fields(THD *thd, Item **ref)
|
||||
|
||||
if (!args[1]->fixed && args[1]->fix_fields(thd, args+1))
|
||||
return TRUE;
|
||||
Item_in_subselect * sub= (Item_in_subselect *)args[1];
|
||||
if (args[0]->cols() != sub->engine->cols())
|
||||
if ((sub && ((col= args[0]->cols()) != sub->engine->cols())) ||
|
||||
(!sub && (args[1]->cols() != (col= 1))))
|
||||
{
|
||||
my_error(ER_OPERAND_COLUMNS, MYF(0), args[0]->cols());
|
||||
my_error(ER_OPERAND_COLUMNS, MYF(0), col);
|
||||
return TRUE;
|
||||
}
|
||||
if (args[1]->maybe_null)
|
||||
@@ -2692,7 +2729,8 @@ Item_func_if::str_op(String *str)
|
||||
String *res=arg->val_str(str);
|
||||
if (res)
|
||||
res->set_charset(collation.collation);
|
||||
null_value=arg->null_value;
|
||||
if ((null_value=arg->null_value))
|
||||
res= NULL;
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -2703,7 +2741,8 @@ Item_func_if::decimal_op(my_decimal *decimal_value)
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
Item *arg= args[0]->val_bool() ? args[1] : args[2];
|
||||
my_decimal *value= arg->val_decimal(decimal_value);
|
||||
null_value= arg->null_value;
|
||||
if ((null_value= arg->null_value))
|
||||
value= NULL;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
@@ -887,7 +887,7 @@ String *Item_func_hybrid_result_type::val_str(String *str)
|
||||
case DECIMAL_RESULT:
|
||||
{
|
||||
my_decimal decimal_value, *val;
|
||||
if (!(val= decimal_op(&decimal_value)))
|
||||
if (!(val= decimal_op_with_null_check(&decimal_value)))
|
||||
return 0; // null is set
|
||||
my_decimal_round(E_DEC_FATAL_ERROR, val, decimals, FALSE, val);
|
||||
str->set_charset(collation.collation);
|
||||
@@ -914,24 +914,22 @@ String *Item_func_hybrid_result_type::val_str(String *str)
|
||||
if (is_temporal_type(field_type()))
|
||||
{
|
||||
MYSQL_TIME ltime;
|
||||
if (date_op(<ime,
|
||||
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0) ||
|
||||
str->alloc(MAX_DATE_STRING_REP_LENGTH))
|
||||
{
|
||||
null_value= 1;
|
||||
if (date_op_with_null_check(<ime) ||
|
||||
(null_value= str->alloc(MAX_DATE_STRING_REP_LENGTH)))
|
||||
return (String *) 0;
|
||||
}
|
||||
ltime.time_type= mysql_type_to_time_type(field_type());
|
||||
str->length(my_TIME_to_str(<ime, const_cast<char*>(str->ptr()), decimals));
|
||||
str->set_charset(&my_charset_bin);
|
||||
DBUG_ASSERT(!null_value);
|
||||
return str;
|
||||
}
|
||||
return str_op(&str_value);
|
||||
return str_op_with_null_check(&str_value);
|
||||
case TIME_RESULT:
|
||||
case ROW_RESULT:
|
||||
case IMPOSSIBLE_RESULT:
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
DBUG_ASSERT(!null_value || (str == NULL));
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -944,7 +942,7 @@ double Item_func_hybrid_result_type::val_real()
|
||||
{
|
||||
my_decimal decimal_value, *val;
|
||||
double result;
|
||||
if (!(val= decimal_op(&decimal_value)))
|
||||
if (!(val= decimal_op_with_null_check(&decimal_value)))
|
||||
return 0.0; // null is set
|
||||
my_decimal2double(E_DEC_FATAL_ERROR, val, &result);
|
||||
return result;
|
||||
@@ -961,18 +959,14 @@ double Item_func_hybrid_result_type::val_real()
|
||||
if (is_temporal_type(field_type()))
|
||||
{
|
||||
MYSQL_TIME ltime;
|
||||
if (date_op(<ime,
|
||||
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0 ))
|
||||
{
|
||||
null_value= 1;
|
||||
if (date_op_with_null_check(<ime))
|
||||
return 0;
|
||||
}
|
||||
ltime.time_type= mysql_type_to_time_type(field_type());
|
||||
return TIME_to_double(<ime);
|
||||
}
|
||||
char *end_not_used;
|
||||
int err_not_used;
|
||||
String *res= str_op(&str_value);
|
||||
String *res= str_op_with_null_check(&str_value);
|
||||
return (res ? my_strntod(res->charset(), (char*) res->ptr(), res->length(),
|
||||
&end_not_used, &err_not_used) : 0.0);
|
||||
}
|
||||
@@ -992,7 +986,7 @@ longlong Item_func_hybrid_result_type::val_int()
|
||||
case DECIMAL_RESULT:
|
||||
{
|
||||
my_decimal decimal_value, *val;
|
||||
if (!(val= decimal_op(&decimal_value)))
|
||||
if (!(val= decimal_op_with_null_check(&decimal_value)))
|
||||
return 0; // null is set
|
||||
longlong result;
|
||||
my_decimal2int(E_DEC_FATAL_ERROR, val, unsigned_flag, &result);
|
||||
@@ -1007,18 +1001,14 @@ longlong Item_func_hybrid_result_type::val_int()
|
||||
if (is_temporal_type(field_type()))
|
||||
{
|
||||
MYSQL_TIME ltime;
|
||||
if (date_op(<ime,
|
||||
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0))
|
||||
{
|
||||
null_value= 1;
|
||||
if (date_op_with_null_check(<ime))
|
||||
return 0;
|
||||
}
|
||||
ltime.time_type= mysql_type_to_time_type(field_type());
|
||||
return TIME_to_ulonglong(<ime);
|
||||
}
|
||||
int err_not_used;
|
||||
String *res;
|
||||
if (!(res= str_op(&str_value)))
|
||||
if (!(res= str_op_with_null_check(&str_value)))
|
||||
return 0;
|
||||
|
||||
char *end= (char*) res->ptr() + res->length();
|
||||
@@ -1040,17 +1030,21 @@ my_decimal *Item_func_hybrid_result_type::val_decimal(my_decimal *decimal_value)
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
switch (cached_result_type) {
|
||||
case DECIMAL_RESULT:
|
||||
val= decimal_op(decimal_value);
|
||||
val= decimal_op_with_null_check(decimal_value);
|
||||
break;
|
||||
case INT_RESULT:
|
||||
{
|
||||
longlong result= int_op();
|
||||
if (null_value)
|
||||
return NULL;
|
||||
int2my_decimal(E_DEC_FATAL_ERROR, result, unsigned_flag, decimal_value);
|
||||
break;
|
||||
}
|
||||
case REAL_RESULT:
|
||||
{
|
||||
double result= (double)real_op();
|
||||
if (null_value)
|
||||
return NULL;
|
||||
double2my_decimal(E_DEC_FATAL_ERROR, result, decimal_value);
|
||||
break;
|
||||
}
|
||||
@@ -1059,19 +1053,20 @@ my_decimal *Item_func_hybrid_result_type::val_decimal(my_decimal *decimal_value)
|
||||
if (is_temporal_type(field_type()))
|
||||
{
|
||||
MYSQL_TIME ltime;
|
||||
if (date_op(<ime,
|
||||
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0))
|
||||
if (date_op_with_null_check(<ime))
|
||||
{
|
||||
my_decimal_set_zero(decimal_value);
|
||||
null_value= 1;
|
||||
return 0;
|
||||
}
|
||||
ltime.time_type= mysql_type_to_time_type(field_type());
|
||||
return date2my_decimal(<ime, decimal_value);
|
||||
}
|
||||
String *res;
|
||||
if (!(res= str_op(&str_value)))
|
||||
if (!(res= str_op_with_null_check(&str_value)))
|
||||
{
|
||||
null_value= 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
str2my_decimal(E_DEC_FATAL_ERROR, (char*) res->ptr(),
|
||||
res->length(), res->charset(), decimal_value);
|
||||
@@ -1094,7 +1089,7 @@ bool Item_func_hybrid_result_type::get_date(MYSQL_TIME *ltime,
|
||||
case DECIMAL_RESULT:
|
||||
{
|
||||
my_decimal value, *res;
|
||||
if (!(res= decimal_op(&value)) ||
|
||||
if (!(res= decimal_op_with_null_check(&value)) ||
|
||||
decimal_to_datetime_with_warn(res, ltime, fuzzydate,
|
||||
field_name_or_null()))
|
||||
goto err;
|
||||
@@ -1124,7 +1119,7 @@ bool Item_func_hybrid_result_type::get_date(MYSQL_TIME *ltime,
|
||||
return date_op(ltime, fuzzydate);
|
||||
char buff[40];
|
||||
String tmp(buff,sizeof(buff), &my_charset_bin),*res;
|
||||
if (!(res= str_op(&tmp)) ||
|
||||
if (!(res= str_op_with_null_check(&tmp)) ||
|
||||
str_to_datetime_with_warn(res->charset(), res->ptr(), res->length(),
|
||||
ltime, fuzzydate) <= MYSQL_TIMESTAMP_ERROR)
|
||||
goto err;
|
||||
|
||||
@@ -377,17 +377,17 @@ public:
|
||||
|
||||
void no_rows_in_result()
|
||||
{
|
||||
bool_func_call_args info;
|
||||
info.original_func_item= this;
|
||||
info.bool_function= &Item::no_rows_in_result;
|
||||
walk(&Item::call_bool_func_processor, FALSE, (uchar*) &info);
|
||||
for (uint i= 0; i < arg_count; i++)
|
||||
{
|
||||
args[i]->no_rows_in_result();
|
||||
}
|
||||
}
|
||||
void restore_to_before_no_rows_in_result()
|
||||
{
|
||||
bool_func_call_args info;
|
||||
info.original_func_item= this;
|
||||
info.bool_function= &Item::restore_to_before_no_rows_in_result;
|
||||
walk(&Item::call_bool_func_processor, FALSE, (uchar*) &info);
|
||||
for (uint i= 0; i < arg_count; i++)
|
||||
{
|
||||
args[i]->no_rows_in_result();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -411,6 +411,29 @@ public:
|
||||
|
||||
class Item_func_hybrid_result_type: public Item_func
|
||||
{
|
||||
/*
|
||||
Helper methods to make sure that the result of
|
||||
decimal_op(), str_op() and date_op() is properly synched with null_value.
|
||||
*/
|
||||
bool date_op_with_null_check(MYSQL_TIME *ltime)
|
||||
{
|
||||
bool rc= date_op(ltime,
|
||||
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0);
|
||||
DBUG_ASSERT(!rc ^ null_value);
|
||||
return rc;
|
||||
}
|
||||
String *str_op_with_null_check(String *str)
|
||||
{
|
||||
String *res= str_op(str);
|
||||
DBUG_ASSERT((res != NULL) ^ null_value);
|
||||
return res;
|
||||
}
|
||||
my_decimal *decimal_op_with_null_check(my_decimal *decimal_buffer)
|
||||
{
|
||||
my_decimal *res= decimal_op(decimal_buffer);
|
||||
DBUG_ASSERT((res != NULL) ^ null_value);
|
||||
return res;
|
||||
}
|
||||
protected:
|
||||
Item_result cached_result_type;
|
||||
|
||||
|
||||
@@ -1363,7 +1363,7 @@ Item_in_subselect::Item_in_subselect(Item * left_exp,
|
||||
upper_item(0)
|
||||
{
|
||||
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
|
||||
left_expr= left_exp;
|
||||
left_expr_orig= left_expr= left_exp;
|
||||
func= &eq_creator;
|
||||
init(select_lex, new select_exists_subselect(this));
|
||||
max_columns= UINT_MAX;
|
||||
@@ -1387,7 +1387,7 @@ Item_allany_subselect::Item_allany_subselect(Item * left_exp,
|
||||
:Item_in_subselect(), func_creator(fc), all(all_arg)
|
||||
{
|
||||
DBUG_ENTER("Item_allany_subselect::Item_allany_subselect");
|
||||
left_expr= left_exp;
|
||||
left_expr_orig= left_expr= left_exp;
|
||||
func= func_creator(all_arg);
|
||||
init(select_lex, new select_exists_subselect(this));
|
||||
max_columns= 1;
|
||||
@@ -2586,15 +2586,13 @@ Item_in_subselect::select_in_like_transformer(JOIN *join)
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
if (!optimizer)
|
||||
{
|
||||
result= (!(optimizer= new Item_in_optimizer(left_expr, this)));
|
||||
result= (!(optimizer= new Item_in_optimizer(left_expr_orig, this)));
|
||||
if (result)
|
||||
goto out;
|
||||
}
|
||||
|
||||
thd->lex->current_select= current->return_after_parsing();
|
||||
result= optimizer->fix_left(thd, optimizer->arguments());
|
||||
/* fix_fields can change reference to left_expr, we need reassign it */
|
||||
left_expr= optimizer->arguments()[0];
|
||||
thd->lex->current_select= current;
|
||||
|
||||
if (changed)
|
||||
@@ -2653,10 +2651,12 @@ bool Item_in_subselect::fix_fields(THD *thd_arg, Item **ref)
|
||||
{
|
||||
uint outer_cols_num;
|
||||
List<Item> *inner_cols;
|
||||
char const *save_where= thd->where;
|
||||
|
||||
if (test_strategy(SUBS_SEMI_JOIN))
|
||||
return !( (*ref)= new Item_int(1));
|
||||
|
||||
thd->where= "IN/ALL/ANY subquery";
|
||||
/*
|
||||
Check if the outer and inner IN operands match in those cases when we
|
||||
will not perform IN=>EXISTS transformation. Currently this is when we
|
||||
@@ -2687,7 +2687,7 @@ bool Item_in_subselect::fix_fields(THD *thd_arg, Item **ref)
|
||||
if (outer_cols_num != inner_cols->elements)
|
||||
{
|
||||
my_error(ER_OPERAND_COLUMNS, MYF(0), outer_cols_num);
|
||||
return TRUE;
|
||||
goto err;
|
||||
}
|
||||
if (outer_cols_num > 1)
|
||||
{
|
||||
@@ -2697,20 +2697,24 @@ bool Item_in_subselect::fix_fields(THD *thd_arg, Item **ref)
|
||||
{
|
||||
inner_col= inner_col_it++;
|
||||
if (inner_col->check_cols(left_expr->element_index(i)->cols()))
|
||||
return TRUE;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (thd_arg->lex->is_view_context_analysis() &&
|
||||
left_expr && !left_expr->fixed &&
|
||||
if (left_expr && !left_expr->fixed &&
|
||||
left_expr->fix_fields(thd_arg, &left_expr))
|
||||
return TRUE;
|
||||
goto err;
|
||||
else
|
||||
if (Item_subselect::fix_fields(thd_arg, ref))
|
||||
return TRUE;
|
||||
if (Item_subselect::fix_fields(thd_arg, ref))
|
||||
goto err;
|
||||
fixed= TRUE;
|
||||
thd->where= save_where;
|
||||
return FALSE;
|
||||
|
||||
err:
|
||||
thd->where= save_where;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -449,6 +449,12 @@ protected:
|
||||
Item **having_item);
|
||||
public:
|
||||
Item *left_expr;
|
||||
/*
|
||||
Important for PS/SP: left_expr_orig is the item that left_expr originally
|
||||
pointed at. That item is allocated on the statement arena, while
|
||||
left_expr could later be changed to something on the execution arena.
|
||||
*/
|
||||
Item *left_expr_orig;
|
||||
/* Priority of this predicate in the convert-to-semi-join-nest process. */
|
||||
int sj_convert_priority;
|
||||
/*
|
||||
|
||||
@@ -2015,15 +2015,10 @@ log_event_print_value(IO_CACHE *file, const uchar *ptr,
|
||||
my_decimal dec;
|
||||
binary2my_decimal(E_DEC_FATAL_ERROR, (uchar*) ptr, &dec,
|
||||
precision, decimals);
|
||||
int i, end;
|
||||
char buff[512], *pos;
|
||||
pos= buff;
|
||||
pos+= sprintf(buff, "%s", dec.sign() ? "-" : "");
|
||||
end= ROUND_UP(dec.frac) + ROUND_UP(dec.intg)-1;
|
||||
for (i=0; i < end; i++)
|
||||
pos+= sprintf(pos, "%09d.", dec.buf[i]);
|
||||
pos+= sprintf(pos, "%09d", dec.buf[i]);
|
||||
my_b_printf(file, "%s", buff);
|
||||
int length= DECIMAL_MAX_STR_LENGTH;
|
||||
char buff[DECIMAL_MAX_STR_LENGTH + 1];
|
||||
decimal2string(&dec, buff, &length, 0, 0, 0);
|
||||
my_b_write(file, (uchar*)buff, length);
|
||||
my_snprintf(typestr, typestr_length, "DECIMAL(%d,%d)",
|
||||
precision, decimals);
|
||||
return bin_size;
|
||||
|
||||
@@ -4052,13 +4052,24 @@ static int init_common_variables()
|
||||
{
|
||||
if (lower_case_table_names_used)
|
||||
{
|
||||
#if MYSQL_VERSION_ID < 100100
|
||||
if (global_system_variables.log_warnings)
|
||||
sql_print_warning("\
|
||||
You have forced lower_case_table_names to 0 through a command-line \
|
||||
option, even though your file system '%s' is case insensitive. This means \
|
||||
that you can corrupt a MyISAM table by accessing it with different cases. \
|
||||
You should consider changing lower_case_table_names to 1 or 2",
|
||||
mysql_real_data_home);
|
||||
sql_print_warning("You have forced lower_case_table_names to 0 through "
|
||||
"a command-line option, even though your file system "
|
||||
"'%s' is case insensitive. This means that you can "
|
||||
"corrupt your tables if you access them using names "
|
||||
"with different letter case. You should consider "
|
||||
"changing lower_case_table_names to 1 or 2",
|
||||
mysql_real_data_home);
|
||||
#else
|
||||
sql_print_error("The server option 'lower_case_table_names' is "
|
||||
"configured to use case sensitive table names but the "
|
||||
"data directory resides on a case-insensitive file system. "
|
||||
"Please use a case sensitive file system for your data "
|
||||
"directory or switch to a case-insensitive table name "
|
||||
"mode.");
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2014, Monty Program Ab.
|
||||
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2015, 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
|
||||
@@ -4081,10 +4081,19 @@ int find_used_partitions(PART_PRUNE_PARAM *ppar, SEL_ARG *key_tree)
|
||||
key_tree->min_flag |
|
||||
key_tree->max_flag,
|
||||
&subpart_iter);
|
||||
DBUG_ASSERT(res); /* We can't get "no satisfying subpartitions" */
|
||||
if (res == 0)
|
||||
{
|
||||
/*
|
||||
The only case where we can get "no satisfying subpartitions"
|
||||
returned from the above call is when an error has occurred.
|
||||
*/
|
||||
DBUG_ASSERT(range_par->thd->is_error());
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (res == -1)
|
||||
goto pop_and_go_right; /* all subpartitions satisfy */
|
||||
|
||||
|
||||
uint32 subpart_id;
|
||||
bitmap_clear_all(&ppar->subparts_bitmap);
|
||||
while ((subpart_id= subpart_iter.get_next(&subpart_iter)) !=
|
||||
|
||||
@@ -620,6 +620,18 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
thd->stmt_arena->state != Query_arena::PREPARED)
|
||||
*/
|
||||
{
|
||||
SELECT_LEX *current= thd->lex->current_select;
|
||||
thd->lex->current_select= current->return_after_parsing();
|
||||
char const *save_where= thd->where;
|
||||
thd->where= "IN/ALL/ANY subquery";
|
||||
|
||||
bool failure= !in_subs->left_expr->fixed &&
|
||||
in_subs->left_expr->fix_fields(thd, &in_subs->left_expr);
|
||||
thd->lex->current_select= current;
|
||||
thd->where= save_where;
|
||||
if (failure)
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
|
||||
/*
|
||||
Check if the left and right expressions have the same # of
|
||||
columns, i.e. we don't have a case like
|
||||
@@ -633,18 +645,6 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
my_error(ER_OPERAND_COLUMNS, MYF(0), in_subs->left_expr->cols());
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
SELECT_LEX *current= thd->lex->current_select;
|
||||
thd->lex->current_select= current->return_after_parsing();
|
||||
char const *save_where= thd->where;
|
||||
thd->where= "IN/ALL/ANY subquery";
|
||||
|
||||
bool failure= !in_subs->left_expr->fixed &&
|
||||
in_subs->left_expr->fix_fields(thd, &in_subs->left_expr);
|
||||
thd->lex->current_select= current;
|
||||
thd->where= save_where;
|
||||
if (failure)
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
}
|
||||
|
||||
DBUG_PRINT("info", ("Checking if subq can be converted to semi-join"));
|
||||
@@ -703,6 +703,12 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
if (!optimizer_flag(thd, OPTIMIZER_SWITCH_IN_TO_EXISTS) &&
|
||||
!optimizer_flag(thd, OPTIMIZER_SWITCH_MATERIALIZATION))
|
||||
my_error(ER_ILLEGAL_SUBQUERY_OPTIMIZER_SWITCHES, MYF(0));
|
||||
/*
|
||||
Transform each subquery predicate according to its overloaded
|
||||
transformer.
|
||||
*/
|
||||
if (subselect->select_transformer(join))
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
/*
|
||||
If the subquery predicate is IN/=ANY, analyse and set all possible
|
||||
@@ -754,12 +760,6 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
allany_subs->add_strategy(strategy);
|
||||
}
|
||||
|
||||
/*
|
||||
Transform each subquery predicate according to its overloaded
|
||||
transformer.
|
||||
*/
|
||||
if (subselect->select_transformer(join))
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
@@ -1592,8 +1592,19 @@ 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);
|
||||
/*
|
||||
Create Item_func_eq. Note that
|
||||
1. this is done on the statement, not execution, arena
|
||||
2. if it's a PS then this happens only once - on the first execution.
|
||||
On following re-executions, the item will be fix_field-ed normally.
|
||||
3. Thus it should be created as if it was fix_field'ed, in particular
|
||||
all pointers to items in the execution arena should be protected
|
||||
with thd->change_item_tree
|
||||
*/
|
||||
Item_func_eq *item_eq=
|
||||
new Item_func_eq(subq_pred->left_expr, subq_lex->ref_pointer_array[0]);
|
||||
new Item_func_eq(subq_pred->left_expr_orig, subq_lex->ref_pointer_array[0]);
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright (c) 2006, 2013, Oracle and/or its affiliates.
|
||||
/* Copyright (c) 2006, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2015, 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
|
||||
@@ -1109,15 +1110,22 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
|
||||
{
|
||||
int err= 0;
|
||||
|
||||
/* Check for partition expression. */
|
||||
if (!list_of_part_fields)
|
||||
{
|
||||
DBUG_ASSERT(part_expr);
|
||||
err= part_expr->walk(&Item::check_partition_func_processor, 0,
|
||||
NULL);
|
||||
if (!err && is_sub_partitioned() && !list_of_subpart_fields)
|
||||
err= subpart_expr->walk(&Item::check_partition_func_processor, 0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* Check for sub partition expression. */
|
||||
if (!err && is_sub_partitioned() && !list_of_subpart_fields)
|
||||
{
|
||||
DBUG_ASSERT(subpart_expr);
|
||||
err= subpart_expr->walk(&Item::check_partition_func_processor, 0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (err)
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
||||
|
||||
@@ -4688,16 +4688,19 @@ bool check_grant(THD *thd, ulong want_access, TABLE_LIST *tables,
|
||||
tl && number-- && tl != first_not_own_table;
|
||||
tl= tl->next_global)
|
||||
{
|
||||
sctx = test(tl->security_ctx) ? tl->security_ctx : thd->security_ctx;
|
||||
TABLE_LIST *const t_ref=
|
||||
tl->correspondent_table ? tl->correspondent_table : tl;
|
||||
sctx = test(t_ref->security_ctx) ? t_ref->security_ctx :
|
||||
thd->security_ctx;
|
||||
|
||||
const ACL_internal_table_access *access=
|
||||
get_cached_table_access(&tl->grant.m_internal,
|
||||
tl->get_db_name(),
|
||||
tl->get_table_name());
|
||||
get_cached_table_access(&t_ref->grant.m_internal,
|
||||
t_ref->get_db_name(),
|
||||
t_ref->get_table_name());
|
||||
|
||||
if (access)
|
||||
{
|
||||
switch(access->check(orig_want_access, &tl->grant.privilege))
|
||||
switch(access->check(orig_want_access, &t_ref->grant.privilege))
|
||||
{
|
||||
case ACL_INTERNAL_ACCESS_GRANTED:
|
||||
/*
|
||||
@@ -4721,33 +4724,33 @@ bool check_grant(THD *thd, ulong want_access, TABLE_LIST *tables,
|
||||
if (!want_access)
|
||||
continue; // ok
|
||||
|
||||
if (!(~tl->grant.privilege & want_access) ||
|
||||
tl->is_anonymous_derived_table() || tl->schema_table)
|
||||
if (!(~t_ref->grant.privilege & want_access) ||
|
||||
t_ref->is_anonymous_derived_table() || t_ref->schema_table)
|
||||
{
|
||||
/*
|
||||
It is subquery in the FROM clause. VIEW set tl->derived after
|
||||
It is subquery in the FROM clause. VIEW set t_ref->derived after
|
||||
table opening, but this function always called before table opening.
|
||||
*/
|
||||
if (!tl->referencing_view)
|
||||
if (!t_ref->referencing_view)
|
||||
{
|
||||
/*
|
||||
If it's a temporary table created for a subquery in the FROM
|
||||
clause, or an INFORMATION_SCHEMA table, drop the request for
|
||||
a privilege.
|
||||
*/
|
||||
tl->grant.want_privilege= 0;
|
||||
t_ref->grant.want_privilege= 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
GRANT_TABLE *grant_table= table_hash_search(sctx->host, sctx->ip,
|
||||
tl->get_db_name(),
|
||||
t_ref->get_db_name(),
|
||||
sctx->priv_user,
|
||||
tl->get_table_name(),
|
||||
t_ref->get_table_name(),
|
||||
FALSE);
|
||||
|
||||
if (!grant_table)
|
||||
{
|
||||
want_access &= ~tl->grant.privilege;
|
||||
want_access &= ~t_ref->grant.privilege;
|
||||
goto err; // No grants
|
||||
}
|
||||
|
||||
@@ -4758,17 +4761,17 @@ bool check_grant(THD *thd, ulong want_access, TABLE_LIST *tables,
|
||||
if (any_combination_will_do)
|
||||
continue;
|
||||
|
||||
tl->grant.grant_table= grant_table; // Remember for column test
|
||||
tl->grant.version= grant_version;
|
||||
tl->grant.privilege|= grant_table->privs;
|
||||
tl->grant.want_privilege= ((want_access & COL_ACLS) & ~tl->grant.privilege);
|
||||
t_ref->grant.grant_table= grant_table; // Remember for column test
|
||||
t_ref->grant.version= grant_version;
|
||||
t_ref->grant.privilege|= grant_table->privs;
|
||||
t_ref->grant.want_privilege= ((want_access & COL_ACLS) & ~t_ref->grant.privilege);
|
||||
|
||||
if (!(~tl->grant.privilege & want_access))
|
||||
if (!(~t_ref->grant.privilege & want_access))
|
||||
continue;
|
||||
|
||||
if (want_access & ~(grant_table->cols | tl->grant.privilege))
|
||||
if (want_access & ~(grant_table->cols | t_ref->grant.privilege))
|
||||
{
|
||||
want_access &= ~(grant_table->cols | tl->grant.privilege);
|
||||
want_access &= ~(grant_table->cols | t_ref->grant.privilege);
|
||||
goto err; // impossible
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1685,13 +1685,20 @@ bool close_temporary_tables(THD *thd)
|
||||
if (!thd->temporary_tables)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
/*
|
||||
Ensure we don't have open HANDLERs for tables we are about to close.
|
||||
This is necessary when close_temporary_tables() is called as part
|
||||
of execution of BINLOG statement (e.g. for format description event).
|
||||
*/
|
||||
mysql_ha_rm_temporary_tables(thd);
|
||||
if (!mysql_bin_log.is_open())
|
||||
{
|
||||
TABLE *tmp_next;
|
||||
for (table= thd->temporary_tables; table; table= tmp_next)
|
||||
for (TABLE *t= thd->temporary_tables; t; t= tmp_next)
|
||||
{
|
||||
tmp_next= table->next;
|
||||
close_temporary(table, 1, 1);
|
||||
tmp_next= t->next;
|
||||
mysql_lock_remove(thd, thd->lock, t);
|
||||
close_temporary(t, 1, 1);
|
||||
}
|
||||
thd->temporary_tables= 0;
|
||||
DBUG_RETURN(FALSE);
|
||||
@@ -1786,6 +1793,7 @@ bool close_temporary_tables(THD *thd)
|
||||
strlen(table->s->table_name.str));
|
||||
s_query.append(',');
|
||||
next= table->next;
|
||||
mysql_lock_remove(thd, thd->lock, table);
|
||||
close_temporary(table, 1, 1);
|
||||
}
|
||||
thd->clear_error();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2001, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2013, Monty Program Ab.
|
||||
/* Copyright (c) 2001, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2011, 2015, 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
|
||||
@@ -1187,3 +1187,36 @@ void mysql_ha_set_explicit_lock_duration(THD *thd)
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Remove temporary tables from the HANDLER's hash table. The reason
|
||||
for having a separate function, rather than calling
|
||||
mysql_ha_rm_tables() is that it is not always feasible (e.g. in
|
||||
close_temporary_tables) to obtain a TABLE_LIST containing the
|
||||
temporary tables.
|
||||
|
||||
@See close_temporary_tables
|
||||
@param thd Thread identifier.
|
||||
*/
|
||||
void mysql_ha_rm_temporary_tables(THD *thd)
|
||||
{
|
||||
DBUG_ENTER("mysql_ha_rm_temporary_tables");
|
||||
|
||||
TABLE_LIST *tmp_handler_tables= NULL;
|
||||
for (uint i= 0; i < thd->handler_tables_hash.records; i++)
|
||||
{
|
||||
TABLE_LIST *handler_table= reinterpret_cast<TABLE_LIST*>
|
||||
(my_hash_element(&thd->handler_tables_hash, i));
|
||||
|
||||
if (handler_table->table && handler_table->table->s->tmp_table)
|
||||
{
|
||||
handler_table->next_local= tmp_handler_tables;
|
||||
tmp_handler_tables= handler_table;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp_handler_tables)
|
||||
mysql_ha_rm_tables(thd, tmp_handler_tables);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef SQL_HANDLER_INCLUDED
|
||||
#define SQL_HANDLER_INCLUDED
|
||||
/* Copyright (C) 2010 Monty Program Ab
|
||||
/* Copyright (c) 2006, 2015, Oracle and/or its affiliates.
|
||||
Copyright (C) 2010, 2015, 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
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
@@ -73,6 +75,7 @@ void mysql_ha_flush_tables(THD *thd, TABLE_LIST *all_tables);
|
||||
void mysql_ha_rm_tables(THD *thd, TABLE_LIST *tables);
|
||||
void mysql_ha_cleanup(THD *thd);
|
||||
void mysql_ha_set_explicit_lock_duration(THD *thd);
|
||||
void mysql_ha_rm_temporary_tables(THD *thd);
|
||||
|
||||
SQL_HANDLER *mysql_ha_read_prepare(THD *thd, TABLE_LIST *tables,
|
||||
enum enum_ha_read_modes mode, char *keyname,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2014, SkySQL Ab.
|
||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2015, 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
|
||||
@@ -3888,7 +3888,6 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
|
||||
/* Add selected items to field list */
|
||||
List_iterator_fast<Item> it(*items);
|
||||
Item *item;
|
||||
Field *tmp_field;
|
||||
DBUG_ENTER("create_table_from_items");
|
||||
|
||||
tmp_table.alias= 0;
|
||||
@@ -3903,24 +3902,49 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
|
||||
|
||||
while ((item=it++))
|
||||
{
|
||||
Create_field *cr_field;
|
||||
Field *field, *def_field;
|
||||
Field *tmp_table_field;
|
||||
if (item->type() == Item::FUNC_ITEM)
|
||||
{
|
||||
if (item->result_type() != STRING_RESULT)
|
||||
field= item->tmp_table_field(&tmp_table);
|
||||
tmp_table_field= item->tmp_table_field(&tmp_table);
|
||||
else
|
||||
field= item->tmp_table_field_from_field_type(&tmp_table, 0);
|
||||
tmp_table_field= item->tmp_table_field_from_field_type(&tmp_table,
|
||||
false);
|
||||
}
|
||||
else
|
||||
field= create_tmp_field(thd, &tmp_table, item, item->type(),
|
||||
(Item ***) 0, &tmp_field, &def_field, 0, 0, 0, 0,
|
||||
0);
|
||||
if (!field ||
|
||||
!(cr_field=new Create_field(field,(item->type() == Item::FIELD_ITEM ?
|
||||
((Item_field *)item)->field :
|
||||
(Field*) 0))))
|
||||
DBUG_RETURN(0);
|
||||
{
|
||||
Field *from_field, * default_field;
|
||||
tmp_table_field= create_tmp_field(thd, &tmp_table, item, item->type(),
|
||||
(Item ***) NULL, &from_field, &default_field,
|
||||
0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
if (!tmp_table_field)
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
Field *table_field;
|
||||
|
||||
switch (item->type())
|
||||
{
|
||||
/*
|
||||
We have to take into account both the real table's fields and
|
||||
pseudo-fields used in trigger's body. These fields are used
|
||||
to copy defaults values later inside constructor of
|
||||
the class Create_field.
|
||||
*/
|
||||
case Item::FIELD_ITEM:
|
||||
case Item::TRIGGER_FIELD_ITEM:
|
||||
table_field= ((Item_field *) item)->field;
|
||||
break;
|
||||
default:
|
||||
table_field= NULL;
|
||||
}
|
||||
|
||||
Create_field *cr_field= new Create_field(tmp_table_field, table_field);
|
||||
|
||||
if (!cr_field)
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
if (item->maybe_null)
|
||||
cr_field->flags &= ~NOT_NULL_FLAG;
|
||||
alter_info->create_list.push_back(cr_field);
|
||||
@@ -3988,7 +4012,7 @@ static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
|
||||
{
|
||||
if (!thd->is_error()) // CREATE ... IF NOT EXISTS
|
||||
my_ok(thd); // succeed, but did nothing
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2014, Monty Progrm Ab
|
||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2015, 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
|
||||
@@ -2012,8 +2012,15 @@ int READ_INFO::read_xml()
|
||||
break;
|
||||
|
||||
case '/': /* close tag */
|
||||
level--;
|
||||
chr= my_tospace(GET);
|
||||
/* Decrease the 'level' only when (i) It's not an */
|
||||
/* (without space) empty tag i.e. <tag/> or, (ii) */
|
||||
/* It is of format <row col="val" .../> */
|
||||
if(chr != '>' || in_tag)
|
||||
{
|
||||
level--;
|
||||
in_tag= false;
|
||||
}
|
||||
if(chr != '>') /* if this is an empty tag <tag /> */
|
||||
tag.length(0); /* we should keep tag value */
|
||||
while(chr != '>' && chr != my_b_EOF)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2014, SkySQL Ab.
|
||||
/* Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
||||
Copyright (c) 2008, 2015, 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
|
||||
@@ -5693,9 +5693,12 @@ check_table_access(THD *thd, ulong requirements,TABLE_LIST *tables,
|
||||
for (; i < number && tables != first_not_own_table && tables;
|
||||
tables= tables->next_global, i++)
|
||||
{
|
||||
TABLE_LIST *const table_ref= tables->correspondent_table ?
|
||||
tables->correspondent_table : tables;
|
||||
|
||||
ulong want_access= requirements;
|
||||
if (tables->security_ctx)
|
||||
sctx= tables->security_ctx;
|
||||
if (table_ref->security_ctx)
|
||||
sctx= table_ref->security_ctx;
|
||||
else
|
||||
sctx= backup_ctx;
|
||||
|
||||
@@ -5703,26 +5706,26 @@ check_table_access(THD *thd, ulong requirements,TABLE_LIST *tables,
|
||||
Register access for view underlying table.
|
||||
Remove SHOW_VIEW_ACL, because it will be checked during making view
|
||||
*/
|
||||
tables->grant.orig_want_privilege= (want_access & ~SHOW_VIEW_ACL);
|
||||
table_ref->grant.orig_want_privilege= (want_access & ~SHOW_VIEW_ACL);
|
||||
|
||||
if (tables->schema_table_reformed)
|
||||
if (table_ref->schema_table_reformed)
|
||||
{
|
||||
if (check_show_access(thd, tables))
|
||||
if (check_show_access(thd, table_ref))
|
||||
goto deny;
|
||||
continue;
|
||||
}
|
||||
|
||||
DBUG_PRINT("info", ("derived: %d view: %d", tables->derived != 0,
|
||||
tables->view != 0));
|
||||
if (tables->is_anonymous_derived_table() ||
|
||||
(tables->table && tables->table->s &&
|
||||
(int)tables->table->s->tmp_table))
|
||||
DBUG_PRINT("info", ("derived: %d view: %d", table_ref->derived != 0,
|
||||
table_ref->view != 0));
|
||||
if (table_ref->is_anonymous_derived_table() ||
|
||||
(table_ref->table && table_ref->table->s &&
|
||||
(int)table_ref->table->s->tmp_table))
|
||||
continue;
|
||||
thd->security_ctx= sctx;
|
||||
|
||||
if (check_access(thd, want_access, tables->get_db_name(),
|
||||
&tables->grant.privilege,
|
||||
&tables->grant.m_internal,
|
||||
if (check_access(thd, want_access, table_ref->get_db_name(),
|
||||
&table_ref->grant.privilege,
|
||||
&table_ref->grant.m_internal,
|
||||
0, no_errors))
|
||||
goto deny;
|
||||
}
|
||||
|
||||
@@ -14702,6 +14702,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
case Item::FIELD_ITEM:
|
||||
case Item::DEFAULT_VALUE_ITEM:
|
||||
case Item::INSERT_VALUE_ITEM:
|
||||
case Item::TRIGGER_FIELD_ITEM:
|
||||
{
|
||||
Item_field *field= (Item_field*) item;
|
||||
bool orig_modify= modify_item;
|
||||
@@ -17150,6 +17151,10 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
|
||||
if (return_tab < join->return_tab)
|
||||
join->return_tab= return_tab;
|
||||
|
||||
/* check for errors evaluating the condition */
|
||||
if (join->thd->is_error())
|
||||
DBUG_RETURN(NESTED_LOOP_ERROR);
|
||||
|
||||
if (join->return_tab < join_tab)
|
||||
DBUG_RETURN(NESTED_LOOP_OK);
|
||||
/*
|
||||
|
||||
@@ -7747,13 +7747,14 @@ bool get_schema_tables_result(JOIN *join,
|
||||
TABLE_LIST *table_list= tab->table->pos_in_table_list;
|
||||
if (table_list->schema_table && thd->fill_information_schema_tables())
|
||||
{
|
||||
#if MYSQL_VERSION_ID > 100105
|
||||
#error I_S tables only need to be re-populated if make_cond_for_info_schema() will preserve outer fields
|
||||
bool is_subselect= (&lex->unit != lex->current_select->master_unit() &&
|
||||
lex->current_select->master_unit()->item);
|
||||
#else
|
||||
#define is_subselect false
|
||||
#endif
|
||||
/*
|
||||
I_S tables only need to be re-populated if make_cond_for_info_schema()
|
||||
preserves outer fields
|
||||
*/
|
||||
bool is_subselect= &lex->unit != lex->current_select->master_unit() &&
|
||||
lex->current_select->master_unit()->item &&
|
||||
tab->select_cond &&
|
||||
tab->select_cond->used_tables() & OUTER_REF_TABLE_BIT;
|
||||
|
||||
/* A value of 0 indicates a dummy implementation */
|
||||
if (table_list->schema_table->fill_table == 0)
|
||||
|
||||
@@ -4010,6 +4010,12 @@ static bool check_if_created_table_can_be_opened(THD *thd,
|
||||
result= (open_table_def(thd, &share, 0) ||
|
||||
open_table_from_share(thd, &share, "", 0, (uint) READ_ALL,
|
||||
0, &table, TRUE));
|
||||
/*
|
||||
Assert that the change list is empty as no partition function currently
|
||||
needs to modify item tree. May need call THD::rollback_item_tree_changes
|
||||
later before calling closefrm if the change list is not empty.
|
||||
*/
|
||||
DBUG_ASSERT(thd->change_list.is_empty());
|
||||
if (! result)
|
||||
(void) closefrm(&table, 0);
|
||||
|
||||
|
||||
@@ -10618,8 +10618,20 @@ procedure_clause:
|
||||
if (add_proc_to_list(lex->thd, item))
|
||||
MYSQL_YYABORT;
|
||||
Lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
||||
|
||||
/*
|
||||
PROCEDURE CLAUSE cannot handle subquery as one of its parameter,
|
||||
so set expr_allows_subselect as false to disallow any subqueries
|
||||
further. Reset expr_allows_subselect back to true once the
|
||||
parameters are reduced.
|
||||
*/
|
||||
Lex->expr_allows_subselect= false;
|
||||
}
|
||||
'(' procedure_list ')'
|
||||
{
|
||||
/* Subqueries are allowed from now.*/
|
||||
Lex->expr_allows_subselect= true;
|
||||
}
|
||||
;
|
||||
|
||||
procedure_list:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# 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
|
||||
@@ -88,6 +88,18 @@ IF(NOT CMAKE_CROSSCOMPILING)
|
||||
CHECK_C_SOURCE_RUNS(
|
||||
"#include<stdint.h>
|
||||
int main()
|
||||
{
|
||||
unsigned char c;
|
||||
|
||||
__atomic_test_and_set(&c, __ATOMIC_ACQUIRE);
|
||||
__atomic_clear(&c, __ATOMIC_RELEASE);
|
||||
return(0);
|
||||
}"
|
||||
HAVE_IB_GCC_ATOMIC_TEST_AND_SET
|
||||
)
|
||||
CHECK_C_SOURCE_RUNS(
|
||||
"#include<stdint.h>
|
||||
int main()
|
||||
{
|
||||
__sync_synchronize();
|
||||
return(0);
|
||||
@@ -110,6 +122,10 @@ IF(HAVE_IB_GCC_ATOMIC_BUILTINS)
|
||||
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_BUILTINS=1)
|
||||
ENDIF()
|
||||
|
||||
IF(HAVE_IB_GCC_ATOMIC_TEST_AND_SET)
|
||||
ADD_DEFINITIONS(-DHAVE_IB_GCC_ATOMIC_TEST_AND_SET=1)
|
||||
ENDIF()
|
||||
|
||||
IF(HAVE_IB_GCC_SYNC_SYNCHRONISE)
|
||||
ADD_DEFINITIONS(-DHAVE_IB_GCC_SYNC_SYNCHRONISE=1)
|
||||
ENDIF()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1994, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
@@ -2085,6 +2085,7 @@ btr_cur_optimistic_update(
|
||||
ulint max_size;
|
||||
ulint new_rec_size;
|
||||
ulint old_rec_size;
|
||||
ulint max_ins_size = 0;
|
||||
dtuple_t* new_entry;
|
||||
roll_ptr_t roll_ptr;
|
||||
trx_t* trx;
|
||||
@@ -2195,6 +2196,11 @@ any_extern:
|
||||
: (old_rec_size
|
||||
+ page_get_max_insert_size_after_reorganize(page, 1));
|
||||
|
||||
if (!page_zip) {
|
||||
max_ins_size = page_get_max_insert_size_after_reorganize(
|
||||
page, 1);
|
||||
}
|
||||
|
||||
if (!(((max_size >= BTR_CUR_PAGE_REORGANIZE_LIMIT)
|
||||
&& (max_size >= new_rec_size))
|
||||
|| (page_get_n_recs(page) <= 1))) {
|
||||
@@ -2246,10 +2252,14 @@ any_extern:
|
||||
rec = btr_cur_insert_if_possible(cursor, new_entry, 0/*n_ext*/, mtr);
|
||||
ut_a(rec); /* <- We calculated above the insert would fit */
|
||||
|
||||
if (page_zip && !dict_index_is_clust(index)
|
||||
if (!dict_index_is_clust(index)
|
||||
&& page_is_leaf(page)) {
|
||||
/* Update the free bits in the insert buffer. */
|
||||
ibuf_update_free_bits_zip(block, mtr);
|
||||
if (page_zip) {
|
||||
ibuf_update_free_bits_zip(block, mtr);
|
||||
} else {
|
||||
ibuf_update_free_bits_low(block, max_ins_size, mtr);
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore the old explicit lock state on the record */
|
||||
@@ -2358,6 +2368,7 @@ btr_cur_pessimistic_update(
|
||||
ulint n_reserved;
|
||||
ulint n_ext;
|
||||
ulint* offsets = NULL;
|
||||
ulint max_ins_size = 0;
|
||||
|
||||
*big_rec = NULL;
|
||||
|
||||
@@ -2495,6 +2506,11 @@ make_external:
|
||||
ut_ad(flags & BTR_KEEP_POS_FLAG);
|
||||
}
|
||||
|
||||
if (!page_zip) {
|
||||
max_ins_size = page_get_max_insert_size_after_reorganize(
|
||||
page, 1);
|
||||
}
|
||||
|
||||
/* Store state of explicit locks on rec on the page infimum record,
|
||||
before deleting rec. The page infimum acts as a dummy carrier of the
|
||||
locks, taking care also of lock releases, before we can move the locks
|
||||
@@ -2540,10 +2556,15 @@ make_external:
|
||||
big_rec_vec != NULL && (flags & BTR_KEEP_POS_FLAG),
|
||||
mtr);
|
||||
|
||||
if (page_zip && !dict_index_is_clust(index)
|
||||
if (!dict_index_is_clust(index)
|
||||
&& page_is_leaf(page)) {
|
||||
/* Update the free bits in the insert buffer. */
|
||||
ibuf_update_free_bits_zip(block, mtr);
|
||||
if (page_zip) {
|
||||
ibuf_update_free_bits_zip(block, mtr);
|
||||
} else {
|
||||
ibuf_update_free_bits_low(block, max_ins_size,
|
||||
mtr);
|
||||
}
|
||||
}
|
||||
|
||||
err = DB_SUCCESS;
|
||||
|
||||
@@ -4245,7 +4245,6 @@ col_loop2:
|
||||
ptr = dict_accept(cs, ptr, ")", &success);
|
||||
|
||||
if (!success || foreign->n_fields != i) {
|
||||
dict_foreign_free(foreign);
|
||||
|
||||
dict_foreign_report_syntax_err(
|
||||
"%s table %s with foreign key constraint"
|
||||
@@ -4258,6 +4257,9 @@ col_loop2:
|
||||
" failed. Foreign key constraint parse error in %s"
|
||||
" close to %s. Too few referenced columns, you have %d when you should have %d.",
|
||||
operation, create_name, start_of_latest_foreign, orig, i, foreign->n_fields);
|
||||
|
||||
dict_foreign_free(foreign);
|
||||
|
||||
return(DB_CANNOT_ADD_CONSTRAINT);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
@@ -37,6 +37,20 @@ Created 9/6/1995 Heikki Tuuri
|
||||
#include "univ.i"
|
||||
#include "ut0lst.h"
|
||||
|
||||
#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \
|
||||
|| defined _M_X64 || defined __WIN__
|
||||
|
||||
#define IB_STRONG_MEMORY_MODEL
|
||||
|
||||
#endif /* __i386__ || __x86_64__ || _M_IX86 || M_X64 || __WIN__ */
|
||||
|
||||
#ifdef HAVE_WINDOWS_ATOMICS
|
||||
typedef LONG lock_word_t; /*!< On Windows, InterlockedExchange operates
|
||||
on LONG variable */
|
||||
#else
|
||||
typedef byte lock_word_t;
|
||||
#endif
|
||||
|
||||
#ifdef __WIN__
|
||||
/** Native event (slow)*/
|
||||
typedef HANDLE os_native_event_t;
|
||||
@@ -321,31 +335,61 @@ amount of increment. */
|
||||
# define os_atomic_increment_ulint(ptr, amount) \
|
||||
os_atomic_increment(ptr, amount)
|
||||
|
||||
/**********************************************************//**
|
||||
Returns the old value of *ptr, atomically sets *ptr to new_val */
|
||||
# if defined(HAVE_IB_GCC_ATOMIC_TEST_AND_SET)
|
||||
|
||||
#if defined(__powerpc__) || defined(__aarch64__)
|
||||
/*
|
||||
os_atomic_test_and_set_byte_release() should imply a release barrier before
|
||||
setting, and a full barrier after. But __sync_lock_test_and_set() is only
|
||||
documented as an aquire barrier. So on PowerPC we need to add the full
|
||||
barrier explicitly. */
|
||||
# define os_atomic_test_and_set_byte_release(ptr, new_val) \
|
||||
do { __sync_lock_release(ptr); \
|
||||
__sync_synchronize(); } while (0)
|
||||
#else
|
||||
/*
|
||||
On x86, __sync_lock_test_and_set() happens to be full barrier, due to
|
||||
LOCK prefix.
|
||||
*/
|
||||
# define os_atomic_test_and_set_byte_release(ptr, new_val) \
|
||||
__sync_lock_test_and_set(ptr, (byte) new_val)
|
||||
#endif
|
||||
/*
|
||||
os_atomic_test_and_set_byte_acquire() is a full memory barrier on x86. But
|
||||
in general, just an aquire barrier should be sufficient. */
|
||||
# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
|
||||
__sync_lock_test_and_set(ptr, (byte) new_val)
|
||||
/** Do an atomic test-and-set.
|
||||
@param[in,out] ptr Memory location to set to non-zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_test_and_set(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(__atomic_test_and_set(ptr, __ATOMIC_ACQUIRE));
|
||||
}
|
||||
|
||||
/** Do an atomic clear.
|
||||
@param[in,out] ptr Memory location to set to zero */
|
||||
static inline
|
||||
void
|
||||
os_atomic_clear(volatile lock_word_t* ptr)
|
||||
{
|
||||
__atomic_clear(ptr, __ATOMIC_RELEASE);
|
||||
}
|
||||
|
||||
# elif defined(IB_STRONG_MEMORY_MODEL)
|
||||
|
||||
/** Do an atomic test and set.
|
||||
@param[in,out] ptr Memory location to set to non-zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_test_and_set(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(__sync_lock_test_and_set(ptr, 1));
|
||||
}
|
||||
|
||||
/** Do an atomic release.
|
||||
|
||||
In theory __sync_lock_release should be used to release the lock.
|
||||
Unfortunately, it does not work properly alone. The workaround is
|
||||
that more conservative __sync_lock_test_and_set is used instead.
|
||||
|
||||
Performance regression was observed at some conditions for Intel
|
||||
architecture. Disable release barrier on Intel architecture for now.
|
||||
@param[in,out] ptr Memory location to write to
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_clear(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(__sync_lock_test_and_set(ptr, 0));
|
||||
}
|
||||
|
||||
# else
|
||||
|
||||
# error "Unsupported platform"
|
||||
|
||||
# endif /* HAVE_IB_GCC_ATOMIC_TEST_AND_SET */
|
||||
|
||||
#elif defined(HAVE_IB_SOLARIS_ATOMICS)
|
||||
|
||||
@@ -394,13 +438,25 @@ amount of increment. */
|
||||
# define os_atomic_increment_ulint(ptr, amount) \
|
||||
atomic_add_long_nv(ptr, amount)
|
||||
|
||||
/**********************************************************//**
|
||||
Returns the old value of *ptr, atomically sets *ptr to new_val */
|
||||
/** Do an atomic xchg and set to non-zero.
|
||||
@param[in,out] ptr Memory location to set to non-zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_test_and_set(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(atomic_swap_uchar(ptr, 1));
|
||||
}
|
||||
|
||||
# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
|
||||
atomic_swap_uchar(ptr, new_val)
|
||||
# define os_atomic_test_and_set_byte_release(ptr, new_val) \
|
||||
atomic_swap_uchar(ptr, new_val)
|
||||
/** Do an atomic xchg and set to zero.
|
||||
@param[in,out] ptr Memory location to set to zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_clear(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(atomic_swap_uchar(ptr, 0));
|
||||
}
|
||||
|
||||
#elif defined(HAVE_WINDOWS_ATOMICS)
|
||||
|
||||
@@ -442,15 +498,27 @@ amount of increment. */
|
||||
# define os_atomic_increment_ulint(ptr, amount) \
|
||||
((ulint) (win_xchg_and_add(ptr, amount) + amount))
|
||||
|
||||
/**********************************************************//**
|
||||
Returns the old value of *ptr, atomically sets *ptr to new_val.
|
||||
InterlockedExchange() operates on LONG, and the LONG will be
|
||||
clobbered */
|
||||
/** Do an atomic test and set.
|
||||
InterlockedExchange() operates on LONG, and the LONG will be clobbered
|
||||
@param[in,out] ptr Memory location to set to non-zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_test_and_set(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(InterlockedExchange(ptr, 1));
|
||||
}
|
||||
|
||||
# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
|
||||
((byte) InterlockedExchange(ptr, new_val))
|
||||
# define os_atomic_test_and_set_byte_release(ptr, new_val) \
|
||||
((byte) InterlockedExchange(ptr, new_val))
|
||||
/** Do an atomic release.
|
||||
InterlockedExchange() operates on LONG, and the LONG will be clobbered
|
||||
@param[in,out] ptr Memory location to set to zero
|
||||
@return the previous value */
|
||||
static inline
|
||||
lock_word_t
|
||||
os_atomic_clear(volatile lock_word_t* ptr)
|
||||
{
|
||||
return(InterlockedExchange(ptr, 0));
|
||||
}
|
||||
|
||||
#else
|
||||
# define IB_ATOMICS_STARTUP_MSG \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 1995, 2015, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
@@ -45,13 +45,6 @@ Created 9/5/1995 Heikki Tuuri
|
||||
extern my_bool timed_mutexes;
|
||||
#endif /* UNIV_DEBUG && !UNIV_HOTBACKUP */
|
||||
|
||||
#ifdef HAVE_WINDOWS_ATOMICS
|
||||
typedef LONG lock_word_t; /*!< On Windows, InterlockedExchange operates
|
||||
on LONG variable */
|
||||
#else
|
||||
typedef byte lock_word_t;
|
||||
#endif
|
||||
|
||||
#if defined UNIV_PFS_MUTEX || defined UNIV_PFS_RWLOCK
|
||||
/* There are mutexes/rwlocks that we want to exclude from
|
||||
instrumentation even if their corresponding performance schema
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user