1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge branch '10.0' into 10.1

This commit is contained in:
Sergei Golubchik
2016-05-04 15:23:26 +02:00
218 changed files with 3608 additions and 1021 deletions

View File

@ -1,3 +1,3 @@
MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MAJOR=10
MYSQL_VERSION_MINOR=1 MYSQL_VERSION_MINOR=1
MYSQL_VERSION_PATCH=13 MYSQL_VERSION_PATCH=14

View File

@ -1,5 +1,6 @@
/* /*
Copyright (c) 2001, 2012, Oracle and/or its affiliates. Copyright (c) 2001, 2012, Oracle and/or its affiliates.
Copyright (c) 2009, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,6 @@
/* /*
Copyright (c) 2000, 2014, Oracle and/or its affiliates. Copyright (c) 2000, 2014, Oracle and/or its affiliates.
Copyright (c) 2009, 2013, Monty Program Ab. Copyright (c) 2009, 2016, MariaDB
Copyright (c) 2013, 2014, SkySQL Ab
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -96,9 +95,16 @@ extern "C" {
#endif #endif
} }
#if !defined(HAVE_VIDATTR) #ifdef HAVE_VIDATTR
#undef vidattr static int have_curses= 0;
#define vidattr(A) {} // Can't get this to work static void my_vidattr(chtype attrs)
{
if (have_curses)
vidattr(attrs);
}
#else
#undef HAVE_SETUPTERM
#define my_vidattr(A) {} // Can't get this to work
#endif #endif
#ifdef FN_NO_CASE_SENSE #ifdef FN_NO_CASE_SENSE
@ -4735,9 +4741,9 @@ com_status(String *buffer __attribute__((unused)),
if (skip_updates) if (skip_updates)
{ {
vidattr(A_BOLD); my_vidattr(A_BOLD);
tee_fprintf(stdout, "\nAll updates ignored to this database\n"); tee_fprintf(stdout, "\nAll updates ignored to this database\n");
vidattr(A_NORMAL); my_vidattr(A_NORMAL);
} }
#ifdef USE_POPEN #ifdef USE_POPEN
tee_fprintf(stdout, "Current pager:\t\t%s\n", pager); tee_fprintf(stdout, "Current pager:\t\t%s\n", pager);
@ -4805,9 +4811,9 @@ com_status(String *buffer __attribute__((unused)),
} }
if (safe_updates) if (safe_updates)
{ {
vidattr(A_BOLD); my_vidattr(A_BOLD);
tee_fprintf(stdout, "\nNote that you are running in safe_update_mode:\n"); tee_fprintf(stdout, "\nNote that you are running in safe_update_mode:\n");
vidattr(A_NORMAL); my_vidattr(A_NORMAL);
tee_fprintf(stdout, "\ tee_fprintf(stdout, "\
UPDATEs and DELETEs that don't use a key in the WHERE clause are not allowed.\n\ UPDATEs and DELETEs that don't use a key in the WHERE clause are not allowed.\n\
(One can force an UPDATE/DELETE by adding LIMIT # at the end of the command.)\n\ (One can force an UPDATE/DELETE by adding LIMIT # at the end of the command.)\n\
@ -4900,10 +4906,11 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
{ {
if (!inited) if (!inited)
{ {
inited=1;
#ifdef HAVE_SETUPTERM #ifdef HAVE_SETUPTERM
(void) setupterm((char *)0, 1, (int *) 0); int errret;
have_curses= setupterm((char *)0, 1, &errret) != ERR;
#endif #endif
inited=1;
} }
if (info_type == INFO_ERROR) if (info_type == INFO_ERROR)
{ {
@ -4915,7 +4922,7 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
putchar('\a'); /* This should make a bell */ putchar('\a'); /* This should make a bell */
#endif #endif
} }
vidattr(A_STANDOUT); my_vidattr(A_STANDOUT);
if (error) if (error)
{ {
if (sqlstate) if (sqlstate)
@ -4934,9 +4941,9 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
tee_fputs(": ", file); tee_fputs(": ", file);
} }
else else
vidattr(A_BOLD); my_vidattr(A_BOLD);
(void) tee_puts(str, file); (void) tee_puts(str, file);
vidattr(A_NORMAL); my_vidattr(A_NORMAL);
} }
if (unbuffered) if (unbuffered)
fflush(file); fflush(file);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2006, 2013, Oracle and/or its affiliates. Copyright (c) 2006, 2013, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, MariaDB Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2000, 2014, Oracle and/or its affiliates. Copyright (c) 2000, 2014, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, MariaDB Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -34,6 +34,7 @@
#define TABLE TABLE_CLIENT #define TABLE TABLE_CLIENT
#include "client_priv.h" #include "client_priv.h"
#include <my_time.h> #include <my_time.h>
#include <sslopt-vars.h>
/* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */ /* That one is necessary for defines of OPTION_NO_FOREIGN_KEY_CHECKS etc */
#include "sql_priv.h" #include "sql_priv.h"
#include "log_event.h" #include "log_event.h"
@ -1403,6 +1404,7 @@ static struct my_option my_options[] =
{"socket", 'S', "The socket file to use for connection.", {"socket", 'S', "The socket file to use for connection.",
&sock, &sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, &sock, &sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0,
0, 0}, 0, 0},
#include <sslopt-longopts.h>
{"start-datetime", OPT_START_DATETIME, {"start-datetime", OPT_START_DATETIME,
"Start reading the binlog at first event having a datetime equal or " "Start reading the binlog at first event having a datetime equal or "
"posterior to the argument; the argument must be a date and time " "posterior to the argument; the argument must be a date and time "
@ -1621,6 +1623,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
DBUG_PUSH(argument ? argument : default_dbug_option); DBUG_PUSH(argument ? argument : default_dbug_option);
break; break;
#endif #endif
#include <sslopt-case.h>
case 'd': case 'd':
one_database = 1; one_database = 1;
break; break;
@ -1773,6 +1776,18 @@ static Exit_status safe_connect()
return ERROR_STOP; return ERROR_STOP;
} }
#ifdef HAVE_OPENSSL
if (opt_use_ssl)
{
mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
opt_ssl_capath, opt_ssl_cipher);
mysql_options(mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
}
mysql_options(mysql,MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
(char*)&opt_ssl_verify_server_cert);
#endif /*HAVE_OPENSSL*/
if (opt_plugindir && *opt_plugindir) if (opt_plugindir && *opt_plugindir)
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugindir); mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugindir);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2001, 2013, Oracle and/or its affiliates. Copyright (c) 2001, 2013, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, MariaDB Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2000, 2013, Oracle and/or its affiliates. Copyright (c) 2000, 2013, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, Monty Program Ab. Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2000, 2015, Oracle and/or its affiliates. Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2011, 2015, MariaDB Copyright (c) 2011, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2000, 2015, Oracle and/or its affiliates. Copyright (c) 2000, 2015, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, MariaDB Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2005, 2015, Oracle and/or its affiliates. Copyright (c) 2005, 2015, Oracle and/or its affiliates.
Copyright (c) 2010, 2015, MariaDB Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. /* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
Copyright (c) 2009, 2013, Monty Program Ab. Copyright (c) 2009, 2016, Monty Program Ab.
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by

View File

@ -209,11 +209,13 @@ MACRO(MYSQL_ADD_PLUGIN)
IF(ARG_COMPONENT) IF(ARG_COMPONENT)
IF(CPACK_COMPONENTS_ALL AND IF(CPACK_COMPONENTS_ALL AND
NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT}) NOT CPACK_COMPONENTS_ALL MATCHES ${ARG_COMPONENT})
IF (ARG_STORAGE_ENGINE)
SET(ver " = %{version}-%{release}")
ENDIF()
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT} PARENT_SCOPE)
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} ${ARG_COMPONENT})
SET(CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} PARENT_SCOPE)
IF (NOT ARG_CLIENT) IF (NOT ARG_CLIENT)
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB" PARENT_SCOPE) SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_REQUIRES "MariaDB${ver}" PARENT_SCOPE)
ENDIF() ENDIF()
# workarounds for cmake issues #13248 and #12864: # workarounds for cmake issues #13248 and #12864:
SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE) SET(CPACK_RPM_${ARG_COMPONENT}_PACKAGE_PROVIDES "cmake_bug_13248" PARENT_SCOPE)

View File

@ -44,8 +44,6 @@ usr/share/mysql/mysql-test/suite/jp/r
usr/share/mysql/mysql-test/suite/jp/include usr/share/mysql/mysql-test/suite/jp/include
usr/share/mysql/mysql-test/suite/jp/std_data usr/share/mysql/mysql-test/suite/jp/std_data
usr/share/mysql/mysql-test/suite/maria usr/share/mysql/mysql-test/suite/maria
usr/share/mysql/mysql-test/suite/maria/t
usr/share/mysql/mysql-test/suite/maria/r
usr/share/mysql/mysql-test/suite/funcs_2 usr/share/mysql/mysql-test/suite/funcs_2
usr/share/mysql/mysql-test/suite/funcs_2/lib usr/share/mysql/mysql-test/suite/funcs_2/lib
usr/share/mysql/mysql-test/suite/funcs_2/t usr/share/mysql/mysql-test/suite/funcs_2/t

View File

@ -12,6 +12,12 @@ before calling SSL_new();
*** end Note *** *** end Note ***
yaSSL Release notes, version 2.3.9b (2/03/2016)
This release of yaSSL fixes the OpenSSL compatibility function
X509_NAME_get_index_by_NID() to use the actual index of the common name
instead of searching on the format prefix. Thanks for the report from
yashwant.sahu@oracle.com . Anyone using this function should update.
yaSSL Release notes, version 2.3.9 (12/01/2015) yaSSL Release notes, version 2.3.9 (12/01/2015)
This release of yaSSL fixes two client side Diffie-Hellman problems. This release of yaSSL fixes two client side Diffie-Hellman problems.
yaSSL was only handling the cases of zero or one leading zeros for the key yaSSL was only handling the cases of zero or one leading zeros for the key

View File

@ -34,7 +34,7 @@
#include "rsa.h" #include "rsa.h"
#define YASSL_VERSION "2.3.9" #define YASSL_VERSION "2.3.9b"
#if defined(__cplusplus) #if defined(__cplusplus)

View File

@ -191,14 +191,18 @@ private:
class X509_NAME { class X509_NAME {
char* name_; char* name_;
size_t sz_; size_t sz_;
int cnPosition_; // start of common name, -1 is none
int cnLen_; // length of above
ASN1_STRING entry_; ASN1_STRING entry_;
public: public:
X509_NAME(const char*, size_t sz); X509_NAME(const char*, size_t sz, int pos, int len);
~X509_NAME(); ~X509_NAME();
const char* GetName() const; const char* GetName() const;
ASN1_STRING* GetEntry(int i); ASN1_STRING* GetEntry(int i);
size_t GetLength() const; size_t GetLength() const;
int GetCnPosition() const { return cnPosition_; }
int GetCnLength() const { return cnLen_; }
private: private:
X509_NAME(const X509_NAME&); // hide copy X509_NAME(const X509_NAME&); // hide copy
X509_NAME& operator=(const X509_NAME&); // and assign X509_NAME& operator=(const X509_NAME&); // and assign
@ -226,7 +230,7 @@ class X509 {
StringHolder afterDate_; // not valid after StringHolder afterDate_; // not valid after
public: public:
X509(const char* i, size_t, const char* s, size_t, X509(const char* i, size_t, const char* s, size_t,
ASN1_STRING *b, ASN1_STRING *a); ASN1_STRING *b, ASN1_STRING *a, int, int, int, int);
~X509() {} ~X509() {}
X509_NAME* GetIssuer(); X509_NAME* GetIssuer();

View File

@ -304,7 +304,10 @@ int CertManager::Validate()
afterDate.type= cert.GetAfterDateType(); afterDate.type= cert.GetAfterDateType();
afterDate.length= strlen((char *) afterDate.data) + 1; afterDate.length= strlen((char *) afterDate.data) + 1;
peerX509_ = NEW_YS X509(cert.GetIssuer(), iSz, cert.GetCommonName(), peerX509_ = NEW_YS X509(cert.GetIssuer(), iSz, cert.GetCommonName(),
sSz, &beforeDate, &afterDate); sSz, &beforeDate, &afterDate,
cert.GetIssuerCnStart(), cert.GetIssuerCnLength(),
cert.GetSubjectCnStart(), cert.GetSubjectCnLength()
);
if (err == TaoCrypt::SIG_OTHER_E && verifyCallback_) { if (err == TaoCrypt::SIG_OTHER_E && verifyCallback_) {
X509_STORE_CTX store; X509_STORE_CTX store;
@ -350,7 +353,9 @@ int CertManager::SetPrivateKey(const x509& key)
afterDate.type= cd.GetAfterDateType(); afterDate.type= cd.GetAfterDateType();
afterDate.length= strlen((char *) afterDate.data) + 1; afterDate.length= strlen((char *) afterDate.data) + 1;
selfX509_ = NEW_YS X509(cd.GetIssuer(), iSz, cd.GetCommonName(), selfX509_ = NEW_YS X509(cd.GetIssuer(), iSz, cd.GetCommonName(),
sSz, &beforeDate, &afterDate); sSz, &beforeDate, &afterDate,
cd.GetIssuerCnStart(), cd.GetIssuerCnLength(),
cd.GetSubjectCnStart(), cd.GetSubjectCnLength());
} }
return 0; return 0;
} }
@ -367,7 +372,9 @@ void CertManager::setPeerX509(X509* x)
ASN1_STRING* after = x->GetAfter(); ASN1_STRING* after = x->GetAfter();
peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(), peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(),
subject->GetName(), subject->GetLength(), before, after); subject->GetName(), subject->GetLength(), before, after,
issuer->GetCnPosition(), issuer->GetCnLength(),
subject->GetCnPosition(), subject->GetCnLength());
} }

View File

@ -1351,15 +1351,13 @@ int ASN1_STRING_type(ASN1_STRING *x)
int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos) int X509_NAME_get_index_by_NID(X509_NAME* name,int nid, int lastpos)
{ {
int idx = -1; // not found int idx = -1; // not found
const char* start = &name->GetName()[lastpos + 1]; int cnPos = -1;
switch (nid) { switch (nid) {
case NID_commonName: case NID_commonName:
const char* found = strstr(start, "/CN="); cnPos = name->GetCnPosition();
if (found) { if (lastpos < cnPos)
found += 4; // advance to str idx = cnPos;
idx = found - start + lastpos + 1;
}
break; break;
} }
@ -1471,10 +1469,6 @@ int SSL_peek(SSL* ssl, void* buffer, int sz)
int SSL_pending(SSL* ssl) int SSL_pending(SSL* ssl)
{ {
// Just in case there's pending data that hasn't been processed yet...
char c;
SSL_peek(ssl, &c, 1);
return ssl->bufferedData(); return ssl->bufferedData();
} }

View File

@ -1554,8 +1554,9 @@ void SSL_SESSION::CopyX509(X509* x)
ASN1_TIME* after = x->GetAfter(); ASN1_TIME* after = x->GetAfter();
peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(), peerX509_ = NEW_YS X509(issuer->GetName(), issuer->GetLength(),
subject->GetName(), subject->GetLength(), subject->GetName(), subject->GetLength(), before, after,
before, after); issuer->GetCnPosition(), issuer->GetCnLength(),
subject->GetCnPosition(), subject->GetCnLength());
} }
@ -2472,8 +2473,8 @@ void Security::set_resuming(bool b)
} }
X509_NAME::X509_NAME(const char* n, size_t sz) X509_NAME::X509_NAME(const char* n, size_t sz, int pos, int len)
: name_(0), sz_(sz) : name_(0), sz_(sz), cnPosition_(pos), cnLen_(len)
{ {
if (sz) { if (sz) {
name_ = NEW_YS char[sz]; name_ = NEW_YS char[sz];
@ -2503,8 +2504,10 @@ size_t X509_NAME::GetLength() const
X509::X509(const char* i, size_t iSz, const char* s, size_t sSz, X509::X509(const char* i, size_t iSz, const char* s, size_t sSz,
ASN1_STRING *b, ASN1_STRING *a) ASN1_STRING *b, ASN1_STRING *a,
: issuer_(i, iSz), subject_(s, sSz), int issPos, int issLen,
int subPos, int subLen)
: issuer_(i, iSz, issPos, issLen), subject_(s, sSz, subPos, subLen),
beforeDate_((char *) b->data, b->length, b->type), beforeDate_((char *) b->data, b->length, b->type),
afterDate_((char *) a->data, a->length, a->type) afterDate_((char *) a->data, a->length, a->type)
{} {}
@ -2539,17 +2542,19 @@ ASN1_STRING* X509_NAME::GetEntry(int i)
if (i < 0 || i >= int(sz_)) if (i < 0 || i >= int(sz_))
return 0; return 0;
if (i != cnPosition_ || cnLen_ <= 0) // only entry currently supported
return 0;
if (cnLen_ > int(sz_-i)) // make sure there's room in read buffer
return 0;
if (entry_.data) if (entry_.data)
ysArrayDelete(entry_.data); ysArrayDelete(entry_.data);
entry_.data = NEW_YS byte[sz_]; // max size; entry_.data = NEW_YS byte[cnLen_+1]; // max size;
memcpy(entry_.data, &name_[i], sz_ - i); memcpy(entry_.data, &name_[i], cnLen_);
if (entry_.data[sz_ -i - 1]) { entry_.data[cnLen_] = 0;
entry_.data[sz_ - i] = 0; entry_.length = cnLen_;
entry_.length = int(sz_) - i;
}
else
entry_.length = int(sz_) - i - 1;
entry_.type = 0; entry_.type = 0;
return &entry_; return &entry_;

View File

@ -285,6 +285,10 @@ public:
byte GetBeforeDateType() const { return beforeDateType_; } byte GetBeforeDateType() const { return beforeDateType_; }
const char* GetAfterDate() const { return afterDate_; } const char* GetAfterDate() const { return afterDate_; }
byte GetAfterDateType() const { return afterDateType_; } byte GetAfterDateType() const { return afterDateType_; }
int GetSubjectCnStart() const { return subCnPos_; }
int GetIssuerCnStart() const { return issCnPos_; }
int GetSubjectCnLength() const { return subCnLen_; }
int GetIssuerCnLength() const { return issCnLen_; }
void DecodeToKey(); void DecodeToKey();
private: private:
@ -294,6 +298,10 @@ private:
word32 sigLength_; // length of signature word32 sigLength_; // length of signature
word32 signatureOID_; // sum of algorithm object id word32 signatureOID_; // sum of algorithm object id
word32 keyOID_; // sum of key algo object id word32 keyOID_; // sum of key algo object id
int subCnPos_; // subject common name start, -1 is none
int subCnLen_; // length of above
int issCnPos_; // issuer common name start, -1 is none
int issCnLen_; // length of above
byte subjectHash_[SHA_SIZE]; // hash of all Names byte subjectHash_[SHA_SIZE]; // hash of all Names
byte issuerHash_[SHA_SIZE]; // hash of all Names byte issuerHash_[SHA_SIZE]; // hash of all Names
byte* signature_; byte* signature_;

View File

@ -482,8 +482,9 @@ void DH_Decoder::Decode(DH& key)
CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers, CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers,
bool noVerify, CertType ct) bool noVerify, CertType ct)
: BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0), : BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0), subCnPos_(-1),
signature_(0), verify_(!noVerify) subCnLen_(0), issCnPos_(-1), issCnLen_(0), signature_(0),
verify_(!noVerify)
{ {
issuer_[0] = 0; issuer_[0] = 0;
subject_[0] = 0; subject_[0] = 0;
@ -804,6 +805,13 @@ void CertDecoder::GetName(NameType nt)
case COMMON_NAME: case COMMON_NAME:
if (!(ptr = AddTag(ptr, buf_end, "/CN=", 4, strLen))) if (!(ptr = AddTag(ptr, buf_end, "/CN=", 4, strLen)))
return; return;
if (nt == ISSUER) {
issCnPos_ = (int)(ptr - strLen - issuer_);
issCnLen_ = (int)strLen;
} else {
subCnPos_ = (int)(ptr - strLen - subject_);
subCnLen_ = (int)strLen;
}
break; break;
case SUR_NAME: case SUR_NAME:
if (!(ptr = AddTag(ptr, buf_end, "/SN=", 4, strLen))) if (!(ptr = AddTag(ptr, buf_end, "/SN=", 4, strLen)))

View File

@ -470,10 +470,28 @@ inline void showPeer(SSL* ssl)
char* issuer = X509_NAME_oneline(X509_get_issuer_name(peer), 0, 0); char* issuer = X509_NAME_oneline(X509_get_issuer_name(peer), 0, 0);
char* subject = X509_NAME_oneline(X509_get_subject_name(peer), 0, 0); char* subject = X509_NAME_oneline(X509_get_subject_name(peer), 0, 0);
printf("peer's cert info:\n issuer : %s\n subject: %s\n", issuer, X509_NAME_ENTRY* se = NULL;
subject); ASN1_STRING* sd = NULL;
char* subCN = NULL;
X509_NAME* sub = X509_get_subject_name(peer);
int lastpos = -1;
if (sub)
lastpos = X509_NAME_get_index_by_NID(sub, NID_commonName, lastpos);
if (lastpos >= 0) {
se = X509_NAME_get_entry(sub, lastpos);
if (se)
sd = X509_NAME_ENTRY_get_data(se);
if (sd)
subCN = (char*)ASN1_STRING_data(sd);
}
printf("peer's cert info:\n issuer : %s\n subject: %s\n"
" subject cn: %s\n", issuer, subject, subCN);
free(subject); free(subject);
free(issuer); free(issuer);
} }
else else
printf("peer has no cert!\n"); printf("peer has no cert!\n");

View File

@ -274,6 +274,25 @@ SET(CLIENT_API_FUNCTIONS
) )
IF(CMAKE_SYSTEM_NAME MATCHES "Linux") IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
IF (NOT DISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING)
INCLUDE (CheckCSourceCompiles)
FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.ld"
"VERSION {\nlibmysqlclient_18 {\nglobal: *;\n};\n}\n")
SET(CMAKE_REQUIRED_LIBRARIES "-Wl,src.ld")
CHECK_C_SOURCE_COMPILES("int main() { return 0; }"
SUPPORTS_VERSION_IN_LINK_SCRIPT)
SET(CMAKE_REQUIRED_LIBRARIES)
IF (NOT SUPPORTS_VERSION_IN_LINK_SCRIPT)
# https://sourceware.org/bugzilla/show_bug.cgi?id=16895
MESSAGE(SEND_ERROR "Your current linker does not support VERSION "
"command in linker scripts like a GNU ld or any compatible linker "
"should. Perhaps you're using gold? Either switch to GNU ld compatible "
"linker or run cmake with -DDISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING=TRUE "
"to be able to complete the build")
ENDIF (NOT SUPPORTS_VERSION_IN_LINK_SCRIPT)
# When building RPM, or DEB package on Debian, use ELF symbol versioning # When building RPM, or DEB package on Debian, use ELF symbol versioning
# for compatibility with distribution packages, so client shared library can # for compatibility with distribution packages, so client shared library can
# painlessly replace the one supplied by the distribution. # painlessly replace the one supplied by the distribution.
@ -358,14 +377,26 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
make_scrambled_password_323 make_scrambled_password_323
) )
# Linker script to version symbols in Fedora- and Debian- compatible way, MDEV-5529
SET(VERSION_SCRIPT_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/libmysql_versions.ld.in)
# Generate version script. # Generate version script.
# Create semicolon separated lists of functions to export from # Create semicolon separated lists of functions to export from
# Since RPM packages use separate versioning for 5.1 API # Since RPM packages use separate versioning for 5.1 API
# and 5.5 API (libmysqlclient_16 vs libmysqlclient_18), # and 5.5 API (libmysqlclient_16 vs libmysqlclient_18),
# we need 2 lists. # we need 2 lists.
SET (VERSION_HEADER
"VERSION {
libmysqlclient_18 {
global:")
SET (VERSION_FOOTER
" local:
*;
};
libmysqlclient_16 {
/* empty here. aliases are added above */
};
}
")
SET (CLIENT_API_5_1_LIST) SET (CLIENT_API_5_1_LIST)
SET (CLIENT_API_5_1_ALIASES) SET (CLIENT_API_5_1_ALIASES)
FOREACH (f ${CLIENT_API_FUNCTIONS_5_1} ${CLIENT_API_5_1_EXTRA}) FOREACH (f ${CLIENT_API_FUNCTIONS_5_1} ${CLIENT_API_5_1_EXTRA})
@ -378,6 +409,13 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(CLIENT_API_5_5_LIST "${CLIENT_API_5_5_LIST}\t${f};\n") SET(CLIENT_API_5_5_LIST "${CLIENT_API_5_5_LIST}\t${f};\n")
ENDFOREACH() ENDFOREACH()
ELSE (NOT DISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING)
SET (CLIENT_API_5_1_ALIASES "/* Versioning disabled per user request. MDEV-5982 */")
ENDIF (NOT DISABLE_LIBMYSQLCLIENT_SYMBOL_VERSIONING)
# Linker script to version symbols in Fedora- and Debian- compatible way, MDEV-5529
SET(VERSION_SCRIPT_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/libmysql_versions.ld.in)
CONFIGURE_FILE( CONFIGURE_FILE(
${VERSION_SCRIPT_TEMPLATE} ${VERSION_SCRIPT_TEMPLATE}
${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld ${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld
@ -386,7 +424,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(VERSION_SCRIPT_LINK_FLAGS SET(VERSION_SCRIPT_LINK_FLAGS
"-Wl,${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld") "-Wl,${CMAKE_CURRENT_BINARY_DIR}/libmysql_versions.ld")
ENDIF() ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(CLIENT_SOURCES SET(CLIENT_SOURCES

View File

@ -27,19 +27,7 @@ mysql_get_charset_by_csname = get_charset_by_csname;
mysql_net_realloc = net_realloc; mysql_net_realloc = net_realloc;
mysql_client_errors = client_errors; mysql_client_errors = client_errors;
VERSION { @VERSION_HEADER@
libmysqlclient_18 {
global:
@CLIENT_API_5_1_LIST@ @CLIENT_API_5_1_LIST@
@CLIENT_API_5_5_LIST@ @CLIENT_API_5_5_LIST@
@VERSION_FOOTER@
local:
*;
};
libmysqlclient_16 {
/* empty here. aliases are added above */
};
}

View File

@ -1818,6 +1818,12 @@ SELECT f1() FROM t1 LEFT JOIN (SELECT 1 AS a FROM t1 LIMIT 0) AS d ON 1 GROUP BY
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
--echo #
SELECT @@collation_connection;
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
--echo # --echo #
--echo # MDEV-5702 Incorrect results are returned with NULLIF() --echo # MDEV-5702 Incorrect results are returned with NULLIF()
--echo # --echo #

View File

@ -1,4 +1,5 @@
-- require r/have_crypt.require # encrypt('a') is NULL if crypt(3) is not available
disable_query_log; # encrypt('a') is "*0" in fips mode
show variables like 'have_crypt'; if (`select length(encrypt('a')) > 3 IS NOT TRUE`) {
enable_query_log; skip No crypt(3);
}

View File

@ -0,0 +1,6 @@
# in the FIPS mode, OpenSSL disables DES and other weak algorithms
source include/have_ssl_crypto_functs.inc;
if (`select des_encrypt("a", "b") IS NULL`) {
skip DES is disabled (fips mode?);
}

View File

@ -3222,7 +3222,7 @@ sub mysql_install_db {
# Create mtr database # Create mtr database
mtr_tofile($bootstrap_sql_file, mtr_tofile($bootstrap_sql_file,
"CREATE DATABASE mtr;\n"); "CREATE DATABASE mtr CHARSET=latin1;\n");
# Add help tables and data for warning detection and supression # Add help tables and data for warning detection and supression
mtr_tofile($bootstrap_sql_file, mtr_tofile($bootstrap_sql_file,

View File

@ -1,4 +1,3 @@
drop table if exists t1,t2,t3;
create table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b')); create table t1 (a int not null primary key, b int, c varchar(80), e enum('a','b'));
insert into t1 (a) values (1),(2),(3); insert into t1 (a) values (1),(2),(3);
alter online table t1 modify b int default 5; alter online table t1 modify b int default 5;
@ -62,6 +61,18 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge
alter online table t3 union=(t1,t2); alter online table t3 union=(t1,t2);
ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE. ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE.
drop table t1,t2,t3; drop table t1,t2,t3;
create table t1 (i int) partition by hash(i) partitions 2;
alter online table t1 comment 'test';
drop table t1;
create table t1 (a int);
alter online table t1 modify a int comment 'test';
drop table t1;
create table t1 (a int) engine=innodb;
alter online table t1 modify a int comment 'test';
drop table t1;
create table t1 (a int) partition by hash(a) partitions 2;
alter online table t1 modify a int comment 'test';
drop table t1;
# #
# MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB # MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
# #

View File

@ -502,3 +502,9 @@ a
SELECT * FROM t1 WHERE a IN (0.8,0.9); SELECT * FROM t1 WHERE a IN (0.8,0.9);
a a
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-9372 select 100 between 1 and 9223372036854775808 returns false
#
SELECT 100 BETWEEN 1 AND 9223372036854775808;
100 BETWEEN 1 AND 9223372036854775808
1

View File

@ -8,4 +8,17 @@ a
Warnings: Warnings:
Note 1003 2000-01-01 Note 1003 2000-01-01
Note 1003 2000-01-06 Note 1003 2000-01-06
set debug_dbug='';
drop table t1;
create table t1 (id int not null, ut timestamp(6) not null);
insert into t1 values(1, '2001-01-01 00:00:00.2');
insert into t1 values(1, '2001-01-01 00:00:00.1');
select * from t1;
id ut
1 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000
select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1;
(select max(m2.ut) from t1 m2 where m1.id <> 0)
2001-01-01 00:00:00.200000
2001-01-01 00:00:00.200000
drop table t1; drop table t1;

View File

@ -232,6 +232,19 @@ case t1.f1 when '00:00:00' then 1 end
NULL NULL
drop table t1; drop table t1;
# #
# MDEV-9745 Crash with CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END
#
CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END AS a;
DESCRIBE t1;
Field Type Null Key Default Extra
a decimal(1,0) YES NULL
DROP TABLE t1;
CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 40 END AS a;
DESCRIBE t1;
Field Type Null Key Default Extra
a decimal(2,0) YES NULL
DROP TABLE t1;
#
# Start of 10.1 test # Start of 10.1 test
# #
# #

View File

@ -2887,6 +2887,15 @@ f1()
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
#
SELECT @@collation_connection;
@@collation_connection
binary
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
CASE 1 WHEN 2 THEN ( - '3' ) END
NULL
#
# MDEV-5702 Incorrect results are returned with NULLIF() # MDEV-5702 Incorrect results are returned with NULLIF()
# #
CREATE TABLE t1 (d DATE); CREATE TABLE t1 (d DATE);

View File

@ -3281,6 +3281,15 @@ f1()
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
#
SELECT @@collation_connection;
@@collation_connection
cp1251_general_ci
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
CASE 1 WHEN 2 THEN ( - '3' ) END
NULL
#
# MDEV-5702 Incorrect results are returned with NULLIF() # MDEV-5702 Incorrect results are returned with NULLIF()
# #
CREATE TABLE t1 (d DATE); CREATE TABLE t1 (d DATE);

View File

@ -0,0 +1,14 @@
#
# Start of 5.5 tests
#
#
# MDEV-9862 Illegal mix of collation, when comparing column with CASE expression
#
SET NAMES cp850;
CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1);
SELECT a FROM t1 WHERE CASE a WHEN 'aaaa' THEN 'Y' WHEN 'aaaa' THEN 'Y' ELSE NULL END <> a;
a
DROP TABLE t1;
#
# End of 5.5 tests
#

View File

@ -3563,6 +3563,15 @@ f1()
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
#
SELECT @@collation_connection;
@@collation_connection
latin1_swedish_ci
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
CASE 1 WHEN 2 THEN ( - '3' ) END
NULL
#
# MDEV-5702 Incorrect results are returned with NULLIF() # MDEV-5702 Incorrect results are returned with NULLIF()
# #
CREATE TABLE t1 (d DATE); CREATE TABLE t1 (d DATE);

View File

@ -4496,6 +4496,15 @@ f1()
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
#
SELECT @@collation_connection;
@@collation_connection
ucs2_general_ci
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
CASE 1 WHEN 2 THEN ( - '3' ) END
NULL
#
# MDEV-5702 Incorrect results are returned with NULLIF() # MDEV-5702 Incorrect results are returned with NULLIF()
# #
CREATE TABLE t1 (d DATE); CREATE TABLE t1 (d DATE);

View File

@ -5338,6 +5338,15 @@ f1()
DROP FUNCTION f1; DROP FUNCTION f1;
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-9662 Assertion `precision || !scale' failed in my_decimal_precision_to_length_no_truncation(uint, uint8, bool)
#
SELECT @@collation_connection;
@@collation_connection
utf8_general_ci
SELECT CASE 1 WHEN 2 THEN ( - '3' ) END;
CASE 1 WHEN 2 THEN ( - '3' ) END
NULL
#
# MDEV-5702 Incorrect results are returned with NULLIF() # MDEV-5702 Incorrect results are returned with NULLIF()
# #
CREATE TABLE t1 (d DATE); CREATE TABLE t1 (d DATE);

View File

@ -15,3 +15,15 @@ CREATE TABLE t1(a VARCHAR(2) CHARACTER SET big5 COLLATE big5_chinese_ci,
FULLTEXT(a)); FULLTEXT(a));
INSERT INTO t1 VALUES(0xA3C2); INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1; DROP TABLE t1;
create table t1 (
id varchar(255),
business_name text null collate utf8mb4_unicode_ci,
street_address text,
fulltext index ft (business_name),
fulltext index ft2 (street_address)
);
select * from t1 where match (business_name, street_address) against ('some business name and address here');
ERROR HY000: Can't find FULLTEXT index matching the column list
select * from t1 where match (business_name, street_address) against ('some business name and address here' in boolean mode);
id business_name street_address
drop table t1;

View File

@ -667,9 +667,14 @@ ERROR 22003: BIGINT UNSIGNED value is out of range in '(18446744073709551615 DIV
CREATE TABLE t1(a BIGINT, b BIGINT UNSIGNED); CREATE TABLE t1(a BIGINT, b BIGINT UNSIGNED);
INSERT INTO t1 VALUES(-9223372036854775808, 9223372036854775809); INSERT INTO t1 VALUES(-9223372036854775808, 9223372036854775809);
SELECT -a FROM t1; SELECT -a FROM t1;
ERROR 22003: BIGINT value is out of range in '-(-9223372036854775808)' ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)'
SELECT -b FROM t1; SELECT -b FROM t1;
ERROR 22003: BIGINT value is out of range in '-(9223372036854775809)' ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)'
INSERT INTO t1 VALUES(0,0);
SELECT -a FROM t1;
ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`a`)'
SELECT -b FROM t1;
ERROR 22003: BIGINT value is out of range in '-(`test`.`t1`.`b`)'
DROP TABLE t1; DROP TABLE t1;
SET @a:=999999999999999999999999999999999999999999999999999999999999999999999999999999999; SET @a:=999999999999999999999999999999999999999999999999999999999999999999999999999999999;
SELECT @a + @a; SELECT @a + @a;

View File

@ -1,2 +1,18 @@
SHOW GRANTS FOR root@invalid_host; SHOW GRANTS FOR root@invalid_host;
ERROR 42000: There is no such grant defined for user 'root' on host 'invalid_host' ERROR 42000: There is no such grant defined for user 'root' on host 'invalid_host'
create user test;
create user foo;
create role foo;
grant foo to test;
set role foo;
show grants for test;
Grants for test@%
GRANT foo TO 'test'@'%'
GRANT USAGE ON *.* TO 'test'@'%'
show grants for foo;
Grants for foo
GRANT USAGE ON *.* TO 'foo'
show grants for foo@'%';
ERROR 42000: Access denied for user 'test'@'%' to database 'mysql'
drop user test, foo;
drop role foo;

View File

@ -1,2 +0,0 @@
Variable_name Value
have_crypt YES

View File

@ -0,0 +1,30 @@
#
# BUG#22037930: INSERT IGNORE FAILS TO IGNORE
# FOREIGN KEY CONSTRAINT
# Setup.
CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB;
CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1))
ENGINE=INNODB;
INSERT INTO t1 VALUES(0);
INSERT INTO t2 VALUES(0);
# Without fix, an error is reported.
INSERT IGNORE INTO t2 VALUES(1);
Warnings:
Warning 1452 Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0;
UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0;
# Test for multi update.
UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3;
UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3;
# Reports an error since IGNORE is not used.
INSERT INTO t2 VALUES(1);
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
UPDATE t2 SET fld2=20 WHERE fld2=0;
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
UPDATE t1 SET fld1=20 WHERE fld1=0;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3;
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`fld2`) REFERENCES `t1` (`fld1`))
DROP TABLE t2, t1;

View File

@ -90,6 +90,17 @@ SELECT DATE_FORMAT('2001-01-07', '%w %a %W');
DATE_FORMAT('2001-01-07', '%w %a %W') DATE_FORMAT('2001-01-07', '%w %a %W')
0 Du Duminică 0 Du Duminică
End of 5.4 tests End of 5.4 tests
SET NAMES utf8;
SET lc_time_names=de_AT;
SELECT monthname('2001-01-01');
monthname('2001-01-01')
Jänner
SELECT monthname('2001-02-01');
monthname('2001-02-01')
Februar
SELECT monthname('2001-03-01');
monthname('2001-03-01')
März
# #
# Start of 5.6 tests # Start of 5.6 tests
# #

View File

@ -1,5 +1,4 @@
drop table if exists t1,t2,t3; set @@debug_dbug= 'd,opt';
drop view if exists v2,v3;
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE t2 ( CREATE TABLE t2 (
f1 DATE, f1 DATE,

View File

@ -1066,7 +1066,7 @@ The following options may be given as the first argument:
--table-open-cache=# --table-open-cache=#
The number of cached open tables The number of cached open tables
--tc-heuristic-recover=name --tc-heuristic-recover=name
Decision to use in heuristic recover process. One of: Decision to use in heuristic recover process. One of: OFF,
COMMIT, ROLLBACK COMMIT, ROLLBACK
--thread-cache-size=# --thread-cache-size=#
How many threads we should keep in a cache for reuse How many threads we should keep in a cache for reuse
@ -1155,10 +1155,8 @@ bulk-insert-buffer-size 8388608
changed-page-bitmaps ON changed-page-bitmaps ON
character-set-client-handshake TRUE character-set-client-handshake TRUE
character-set-filesystem binary character-set-filesystem binary
character-set-server latin1
character-sets-dir MYSQL_CHARSETSDIR/ character-sets-dir MYSQL_CHARSETSDIR/
chroot (No default value) chroot (No default value)
collation-server latin1_swedish_ci
completion-type NO_CHAIN completion-type NO_CHAIN
concurrent-insert AUTO concurrent-insert AUTO
console FALSE console FALSE
@ -1424,7 +1422,7 @@ sysdate-is-now FALSE
table-cache 431 table-cache 431
table-definition-cache 400 table-definition-cache 400
table-open-cache 431 table-open-cache 431
tc-heuristic-recover COMMIT tc-heuristic-recover OFF
thread-cache-size 0 thread-cache-size 0
thread-pool-idle-timeout 60 thread-pool-idle-timeout 60
thread-pool-max-threads 1000 thread-pool-max-threads 1000

View File

@ -1556,7 +1556,7 @@ set names utf8;
create table t1 (f1 varchar(10)); create table t1 (f1 varchar(10));
insert into t1 values ('2015-12-31'); insert into t1 values ('2015-12-31');
select power( timestamp( nullif( '2002-09-08', f1 ) ), 24 ) from t1; select power( timestamp( nullif( '2002-09-08', f1 ) ), 24 ) from t1;
ERROR 22003: DOUBLE value is out of range in 'pow(cast((case when '2002-09-08' = '2015-12-31' then NULL else '2002-09-08' end) as datetime(6)),24)' ERROR 22003: DOUBLE value is out of range in 'pow(cast((case when '2002-09-08' = `test`.`t1`.`f1` then NULL else '2002-09-08' end) as datetime(6)),24)'
drop table t1; drop table t1;
CREATE TABLE t1 (f1 INT); CREATE TABLE t1 (f1 INT);
INSERT INTO t1 VALUES (1),(2); INSERT INTO t1 VALUES (1),(2);

View File

@ -210,3 +210,12 @@ Ssl_cipher DHE-RSA-AES256-SHA
DROP USER bug42158@localhost; DROP USER bug42158@localhost;
set global sql_mode=default; set global sql_mode=default;
End of 5.1 tests End of 5.1 tests
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

View File

@ -6,7 +6,7 @@ insert into t1 values (2,2), (1,1);
create table t2 (a int); create table t2 (a int);
insert into t2 values (2), (3); insert into t2 values (2), (3);
set session join_cache_level=3; set session join_cache_level=3;
set @@debug_dbug= 'd:t:O,/tmp/trace.out'; set @@debug_dbug= 'd,opt';
explain select t1.b from t1,t2 where t1.b=t2.a; explain select t1.b from t1,t2 where t1.b=t2.a;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where

View File

@ -0,0 +1,160 @@
set global secure_auth=0;
create user natauth@localhost identified via 'mysql_native_password' using '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user newpass@localhost identified by password '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user newpassnat@localhost identified via 'mysql_native_password';
set password for newpassnat@localhost = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user oldauth@localhost identified with 'mysql_old_password' using '378b243e220ca493';
create user oldpass@localhost identified by password '378b243e220ca493';
create user oldpassold@localhost identified with 'mysql_old_password';
set password for oldpassold@localhost = '378b243e220ca493';
select user, host, password, plugin, authentication_string from mysql.user where user != 'root';
user host password plugin authentication_string
natauth localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
newpass localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
newpassnat localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
oldauth localhost 378b243e220ca493
oldpass localhost 378b243e220ca493
oldpassold localhost 378b243e220ca493
connect con,localhost,natauth,test,;
select current_user();
current_user()
natauth@localhost
disconnect con;
connect con,localhost,newpass,test,;
select current_user();
current_user()
newpass@localhost
disconnect con;
connect con,localhost,newpassnat,test,;
select current_user();
current_user()
newpassnat@localhost
disconnect con;
connect con,localhost,oldauth,test,;
select current_user();
current_user()
oldauth@localhost
disconnect con;
connect con,localhost,oldpass,test,;
select current_user();
current_user()
oldpass@localhost
disconnect con;
connect con,localhost,oldpassold,test,;
select current_user();
current_user()
oldpassold@localhost
disconnect con;
connection default;
flush privileges;
connect con,localhost,natauth,test,;
select current_user();
current_user()
natauth@localhost
disconnect con;
connect con,localhost,newpass,test,;
select current_user();
current_user()
newpass@localhost
disconnect con;
connect con,localhost,newpassnat,test,;
select current_user();
current_user()
newpassnat@localhost
disconnect con;
connect con,localhost,oldauth,test,;
select current_user();
current_user()
oldauth@localhost
disconnect con;
connect con,localhost,oldpass,test,;
select current_user();
current_user()
oldpass@localhost
disconnect con;
connect con,localhost,oldpassold,test,;
select current_user();
current_user()
oldpassold@localhost
disconnect con;
connection default;
set password for natauth@localhost = PASSWORD('test2');
set password for newpass@localhost = PASSWORD('test2');
set password for newpassnat@localhost = PASSWORD('test2');
set password for oldauth@localhost = PASSWORD('test2');
set password for oldpass@localhost = PASSWORD('test2');
set password for oldpassold@localhost = PASSWORD('test2');
select user, host, password, plugin, authentication_string from mysql.user where user != 'root';
user host password plugin authentication_string
natauth localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
newpass localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
newpassnat localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
oldauth localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
oldpass localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
oldpassold localhost *7CEB3FDE5F7A9C4CE5FBE610D7D8EDA62EBE5F4E
connect con,localhost,natauth,test2,;
select current_user();
current_user()
natauth@localhost
disconnect con;
connect con,localhost,newpass,test2,;
select current_user();
current_user()
newpass@localhost
disconnect con;
connect con,localhost,newpassnat,test2,;
select current_user();
current_user()
newpassnat@localhost
disconnect con;
connect con,localhost,oldauth,test2,;
select current_user();
current_user()
oldauth@localhost
disconnect con;
connect con,localhost,oldpass,test2,;
select current_user();
current_user()
oldpass@localhost
disconnect con;
connect con,localhost,oldpassold,test2,;
select current_user();
current_user()
oldpassold@localhost
disconnect con;
connection default;
flush privileges;
connect con,localhost,natauth,test2,;
select current_user();
current_user()
natauth@localhost
disconnect con;
connect con,localhost,newpass,test2,;
select current_user();
current_user()
newpass@localhost
disconnect con;
connect con,localhost,newpassnat,test2,;
select current_user();
current_user()
newpassnat@localhost
disconnect con;
connect con,localhost,oldauth,test2,;
select current_user();
current_user()
oldauth@localhost
disconnect con;
connect con,localhost,oldpass,test2,;
select current_user();
current_user()
oldpass@localhost
disconnect con;
connect con,localhost,oldpassold,test2,;
select current_user();
current_user()
oldpassold@localhost
disconnect con;
connection default;
drop user natauth@localhost, newpass@localhost, newpassnat@localhost;
drop user oldauth@localhost, oldpass@localhost, oldpassold@localhost;
set global secure_auth=default;

View File

@ -32,12 +32,9 @@ update t1, t2 set val= 1 where id1=id2;
call bug9486(); call bug9486();
lock tables t2 write; lock tables t2 write;
call bug9486(); call bug9486();
show processlist; SELECT state,info FROM information_schema.processlist WHERE id=con1root_id;
Id User Host db Command Time State Info Progress state info
# root localhost test Sleep # NULL 0.000 Waiting for table metadata lock update t1, t2 set val= 1 where id1=id2
# root localhost test Query # Waiting for table metadata lock update t1, t2 set val= 1 where id1=id2 0.000
# root localhost test Query # init show processlist 0.000
# root localhost test Sleep # NULL 0.000
unlock tables; unlock tables;
drop procedure bug9486; drop procedure bug9486;
drop table t1, t2; drop table t1, t2;

View File

@ -0,0 +1,7 @@
SET @@net_read_timeout=1;
SELECT 1;
1
1
SELECT 1;
1
1

View File

@ -439,6 +439,41 @@ select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
1 1
drop table t1; drop table t1;
# #
# MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
#
CREATE TABLE t1 (
id BIGINT NOT NULL,
date_debut DATE NOT NULL,
date_fin DATE DEFAULT NULL);
CREATE TABLE t2(
id BIGINT NOT NULL,
date_debut DATE NOT NULL,
date_fin DATE DEFAULT NULL);
INSERT INTO t1 VALUES (1,'2016-01-01','2016-01-31');
INSERT INTO t1 VALUES (2,'2016-02-01',null);
INSERT INTO t1 VALUES (3,'2016-03-01','2016-03-31');
INSERT INTO t1 VALUES (4,'2016-04-01',null);
INSERT INTO t2 VALUES (1,'2016-01-01','2016-01-31');
INSERT INTO t2 VALUES (2,'2016-02-01','2016-01-28');
INSERT INTO t2 VALUES (3,'2016-03-01',null);
INSERT INTO t2 VALUES (4,'2016-04-01',null);
SELECT t1.id,
GREATEST(t2.date_debut, t1.date_debut) AS date_debut,
LEAST(IFNULL(t2.date_fin, IFNULL(t1.date_fin, NULL)),
IFNULL(t1.date_fin, IFNULL(t2.date_fin, NULL))) AS date_fin
FROM t1 LEFT JOIN t2 ON (t1.id=t2.id);
id date_debut date_fin
1 2016-01-01 2016-01-31
2 2016-02-01 2016-01-28
3 2016-03-01 2016-03-31
4 2016-04-01 NULL
DROP TABLE t1,t2;
SELECT
LEAST(COALESCE(DATE(NULL), DATE(NULL)), COALESCE(DATE(NULL), DATE(NULL))) AS d0,
LEAST(IFNULL(DATE(NULL), DATE(NULL)), IFNULL(DATE(NULL), DATE(NULL))) AS d1;
d0 d1
NULL NULL
#
# MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str # MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str
# #
CREATE TABLE t1 (f1 DATE, f2 VARCHAR(1)); CREATE TABLE t1 (f1 DATE, f2 VARCHAR(1));

View File

@ -644,6 +644,15 @@ SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1;
MAX(dt) = '2011-01-06 12:34:30' MAX(dt) = '2011-01-06 12:34:30'
1 1
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-9413 "datetime >= coalesce(c1(NULL))" doesn't return expected NULL
#
CREATE TABLE t1(c1 TIMESTAMP(6) NULL DEFAULT NULL);
INSERT INTO t1 VALUES(NULL);
SELECT c1, '2016-06-13 20:00:00.000003' >= COALESCE( c1 ) FROM t1;
c1 '2016-06-13 20:00:00.000003' >= COALESCE( c1 )
NULL NULL
DROP TABLE t1;
End of 5.5 tests End of 5.5 tests
# #
# MDEV-7254: Assigned expression is evaluated twice when updating column TIMESTAMP NOT NULL # MDEV-7254: Assigned expression is evaluated twice when updating column TIMESTAMP NOT NULL

View File

@ -0,0 +1,4 @@
set global log_warnings=2;
set @@wait_timeout=1;
FOUND /Aborted.*Got timeout reading communication packets/ in mysqld.1.err
set global log_warnings=@@log_warnings;

View File

@ -681,7 +681,7 @@ master-bin.000001 # Query # # COMMIT
master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` ( master-bin.000001 # Query # # use `test`; CREATE TABLE IF NOT EXISTS `t3` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
master-bin.000001 # Gtid # # BEGIN GTID #-#-# master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Table_map # # table_id: # (mysql.user) master-bin.000001 # Table_map # # table_id: # (mysql.user)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F

View File

@ -0,0 +1,49 @@
call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MySQL.*");
call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB, which is different from the number of indexes .* defined in the MySQL.*");
create table t1 (pk int, i int, key(i)) engine=InnoDB;
insert into t1 values (1,1),(2,2);
flush tables;
# Save the .frm file without the PK
alter table t1 add primary key (pk);
# Stop the server, replace the frm with the old one and restart the server
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`pk` int(11) DEFAULT NULL,
`i` int(11) DEFAULT NULL,
KEY `i` (`i`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Warnings:
Warning 1082 InnoDB: Table test/t1 has a primary key in InnoDB data dictionary, but not in MySQL!
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
select * from t1;
pk i
1 1
2 2
alter table t1 add j int;
Warnings:
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
show warnings;
Level Code Message
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`pk` int(11) DEFAULT NULL,
`i` int(11) DEFAULT NULL,
`j` int(11) DEFAULT NULL,
KEY `i` (`i`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
alter table t1 add primary key (pk);
show warnings;
Level Code Message
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`pk` int(11) NOT NULL,
`i` int(11) DEFAULT NULL,
`j` int(11) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `i` (`i`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t1;

View File

@ -70,6 +70,50 @@ Error 1005 Can't create table `test`.`#sql-temporary` (errno: 150 "Foreign key c
Warning 1215 Cannot add foreign key constraint Warning 1215 Cannot add foreign key constraint
drop table t2; drop table t2;
drop table t1; drop table t1;
CREATE DATABASE kg_test1;
CREATE DATABASE kg_test2;
CREATE TABLE `kg_test1`.`group` (
Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `kg_test1`.`person` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
show create table `kg_test1`.`person`;
Table Create Table
person CREATE TABLE `person` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `kg_test2`.`person2` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
ERROR HY000: Can't create table `kg_test2`.`person2` (errno: 150 "Foreign key constraint is incorrectly formed")
CREATE TABLE `kg_test2`.`person2` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
show create table `kg_test2`.`person2`;
Table Create Table
person2 CREATE TABLE `person2` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
SHOW WARNINGS;
Level Code Message
DROP DATABASE kg_test2;
DROP DATABASE kg_test1;
CREATE TABLE `#departaments` ( CREATE TABLE `#departaments` (
`id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id_depart` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id_depart`) PRIMARY KEY (`id_depart`)

View File

@ -0,0 +1,46 @@
--source include/have_innodb.inc
--source include/not_embedded.inc
#
# MDEV-9918: [ERROR] mysqld got signal 11 during ALTER TABLE `name` COLUMN ADD
#
call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MySQL.*");
call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB, which is different from the number of indexes .* defined in the MySQL.*");
create table t1 (pk int, i int, key(i)) engine=InnoDB;
insert into t1 values (1,1),(2,2);
--let $datadir= `select @@datadir`
flush tables;
--echo # Save the .frm file without the PK
--copy_file $datadir/test/t1.frm $MYSQLTEST_VARDIR/tmp/t1.frm
alter table t1 add primary key (pk);
--echo # Stop the server, replace the frm with the old one and restart the server
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server 10
--source include/wait_until_disconnected.inc
--remove_file $datadir/test/t1.frm
--copy_file $MYSQLTEST_VARDIR/tmp/t1.frm $datadir/test/t1.frm
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
show create table t1;
select * from t1;
alter table t1 add j int;
show warnings;
show create table t1;
alter table t1 add primary key (pk);
show warnings;
show create table t1;
# Cleanup
drop table t1;

View File

@ -125,6 +125,47 @@ show warnings;
drop table t2; drop table t2;
drop table t1; drop table t1;
#
# MDEV-9142 :Adding Constraint with no database reference
# results in ERROR 1046 (3D000) at line 13: No database selected
#
CREATE DATABASE kg_test1;
CREATE DATABASE kg_test2;
CREATE TABLE `kg_test1`.`group` (
Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `kg_test1`.`person` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
show create table `kg_test1`.`person`;
--error 1005
CREATE TABLE `kg_test2`.`person2` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE `kg_test2`.`person2` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`Id`),
CONSTRAINT `fk_person_group` FOREIGN KEY (`Id`) REFERENCES `kg_test1`.`group` (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
show create table `kg_test2`.`person2`;
SHOW WARNINGS;
DROP DATABASE kg_test2;
DROP DATABASE kg_test1;
# #
# MDEV-7627: Some symbols in table name can cause to Error Code: 1050 when created FK # MDEV-7627: Some symbols in table name can cause to Error Code: 1050 when created FK
# #

View File

@ -150,7 +150,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-# slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-# slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL

View File

@ -39,7 +39,7 @@ master-bin.000001 # Query # # use `test`; CREATE OR REPLACE table t1 like t2
master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` ( master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` (
`a_in_temporary` int(11) DEFAULT NULL `a_in_temporary` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
master-bin.000001 # Gtid # # GTID #-#-# master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
binlog from server 2 binlog from server 2
@ -72,7 +72,7 @@ slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE table t1 like t2
slave-bin.000001 # Gtid # # GTID #-#-# slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` ( slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` (
`a_in_temporary` int(11) DEFAULT NULL `a_in_temporary` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
slave-bin.000001 # Gtid # # GTID #-#-# slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */ slave-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
# #
@ -172,7 +172,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-# slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-# slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL

View File

@ -153,7 +153,7 @@ slave-bin.000001 # Query # # COMMIT
slave-bin.000001 # Gtid # # GTID #-#-# slave-bin.000001 # Gtid # # GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t4` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
slave-bin.000001 # Gtid # # BEGIN GTID #-#-# slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` ( slave-bin.000001 # Query # # use `test`; CREATE TABLE `t5` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL

View File

@ -56,6 +56,10 @@ CREATE VIEW v1 AS SELECT a FROM t1 WHERE a < 100;
CREATE DATABASE d2; CREATE DATABASE d2;
source include/kill_query.inc; source include/kill_query.inc;
include/rpl_diff.inc include/rpl_diff.inc
ALTER DATABASE d1
DEFAULT CHARACTER SET = 'utf8';
source include/kill_query.inc;
include/rpl_diff.inc
DROP DATABASE d1; DROP DATABASE d1;
source include/kill_query.inc; source include/kill_query.inc;
include/rpl_diff.inc include/rpl_diff.inc
@ -83,6 +87,9 @@ include/rpl_diff.inc
DROP FUNCTION f1; DROP FUNCTION f1;
source include/kill_query.inc; source include/kill_query.inc;
include/rpl_diff.inc include/rpl_diff.inc
DROP FUNCTION IF EXISTS f2;
source include/kill_query.inc;
include/rpl_diff.inc
CREATE PROCEDURE p2 (OUT rows INT) CREATE PROCEDURE p2 (OUT rows INT)
BEGIN BEGIN
SELECT COUNT(*) INTO rows FROM t2; SELECT COUNT(*) INTO rows FROM t2;
@ -96,6 +103,9 @@ include/rpl_diff.inc
DROP PROCEDURE p1; DROP PROCEDURE p1;
source include/kill_query.inc; source include/kill_query.inc;
include/rpl_diff.inc include/rpl_diff.inc
DROP PROCEDURE IF EXISTS p2;
source include/kill_query.inc;
include/rpl_diff.inc
CREATE TABLE t2 (b int); CREATE TABLE t2 (b int);
source include/kill_query.inc; source include/kill_query.inc;
include/rpl_diff.inc include/rpl_diff.inc

View File

@ -194,7 +194,7 @@ master-bin.000001 # Gtid # # GTID #-#-#
master-bin.000001 # Query # # use `test`; CREATE TABLE `t9` ( master-bin.000001 # Query # # use `test`; CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL `b` int(11) DEFAULT NULL
) ) ENGINE=MyISAM
**** On Slave **** **** On Slave ****
SHOW CREATE TABLE t8; SHOW CREATE TABLE t8;
Table t8 Table t8
@ -207,7 +207,7 @@ Table t9
Create Table CREATE TABLE `t9` ( Create Table CREATE TABLE `t9` (
`a` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL `b` int(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9; DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
STOP SLAVE; STOP SLAVE;
include/wait_for_slave_to_stop.inc include/wait_for_slave_to_stop.inc

View File

@ -4,8 +4,9 @@ CREATE TABLE t1 (a int) ENGINE=MyISAM;
CREATE TABLE t2 (a int) ENGINE=MyISAM; CREATE TABLE t2 (a int) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (4), (5), (6); INSERT INTO t2 VALUES (4), (5), (6);
CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1;
ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1);
CREATE TABLE t1_merge LIKE tt1_merge;
include/diff_tables.inc [master:test.t1, slave:test.t1] include/diff_tables.inc [master:test.t1, slave:test.t1]
include/diff_tables.inc [master:test.t2, slave:test.t2] include/diff_tables.inc [master:test.t2, slave:test.t2]
UPDATE t1_merge SET a=10 WHERE a=1; UPDATE t1_merge SET a=10 WHERE a=1;

View File

@ -0,0 +1,13 @@
include/master-slave.inc
[connection master]
CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=InnoDB;
CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=MyISAM;
CREATE TABLE t1 LIKE temp_t1;
CREATE TABLE t2 LIKE temp_t2;
include/assert.inc ["t1 on master and temp_t1 have the same storage engine"]
include/assert.inc ["t2 on master and temp_t2 have the same storage engine"]
include/assert.inc ["t1 on slave and temp_t1 have the same storage engine"]
include/assert.inc ["t2 on slave and temp_t2 have the same storage engine"]
DROP TEMPORARY TABLE temp_t1, temp_t2;
DROP TABLE t1, t2;
include/rpl_end.inc

View File

@ -26,10 +26,8 @@
# #
# There are some part of the test are temporarily disabled because of # There are some part of the test are temporarily disabled because of
# the following bugs, please enable then once they get fixed: # the following bugs, please enable then once they get fixed:
# - BUG#44041 # - BUG#22473427
# - BUG#43353 # - Bug#22587377
# - BUG#25705
# - BUG#44171
# Temporarily disabled on Windows due to bug #47638 # Temporarily disabled on Windows due to bug #47638
--source include/not_windows.inc --source include/not_windows.inc
@ -148,11 +146,9 @@ let $rpl_diff_statement= SELECT schema_name FROM information_schema.schemata
send CREATE DATABASE d2; send CREATE DATABASE d2;
source include/kill_query_and_diff_master_slave.inc; source include/kill_query_and_diff_master_slave.inc;
# Temporarily disabled, see BUG#44041, the ALTER DATABASE can affect the send ALTER DATABASE d1
# collation of other database on slave DEFAULT CHARACTER SET = 'utf8';
#send ALTER DATABASE d1 source include/kill_query_and_diff_master_slave.inc;
# DEFAULT CHARACTER SET = 'utf8';
#source include/kill_query_and_diff_master_slave.inc;
send DROP DATABASE d1; send DROP DATABASE d1;
source include/kill_query_and_diff_master_slave.inc; source include/kill_query_and_diff_master_slave.inc;
@ -171,8 +167,8 @@ send CREATE EVENT e2
DO INSERT INTO test.t1 VALUES (2); DO INSERT INTO test.t1 VALUES (2);
source include/kill_query_and_diff_master_slave.inc; source include/kill_query_and_diff_master_slave.inc;
# Temporarily disabled because of BUG#44171, killing ALTER EVENT can # Temporarily disabled,see Bug#22587377-RPL.RPL_KILLED_DDL
# crash the server # FAILS SPORADICALLY ON PB2 IN 5.5 AND 5.6
#send ALTER EVENT e1 #send ALTER EVENT e1
# ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; # ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY;
#source include/kill_query_and_diff_master_slave.inc; #source include/kill_query_and_diff_master_slave.inc;
@ -201,16 +197,8 @@ source include/kill_query_and_diff_master_slave.inc;
# function f2 probably does not exist because the CREATE query was # function f2 probably does not exist because the CREATE query was
# killed # killed
# send DROP FUNCTION IF EXISTS f2;
# Temporarily disabled. Because of BUG#43353, KILL the query may source include/kill_query_and_diff_master_slave.inc;
# result in function not found, and for 5.1, DROP statements will be
# logged if the function is not found on master, so the following DROP
# FUNCTION statement may be interrupted and not drop the function on
# master, but still get logged and executed on slave and cause
# inconsistence. Also disable the following DROP PROCEDURE IF EXITS
# below.
#send DROP FUNCTION IF EXISTS f2;
#source include/kill_query_and_diff_master_slave.inc;
######## PROCEDURE ######## ######## PROCEDURE ########
@ -231,9 +219,8 @@ source include/kill_query_and_diff_master_slave.inc;
send DROP PROCEDURE p1; send DROP PROCEDURE p1;
source include/kill_query_and_diff_master_slave.inc; source include/kill_query_and_diff_master_slave.inc;
# Temporarily disabled because of bug#43353, see comment above for DROP FUNCTION IF EXISTS send DROP PROCEDURE IF EXISTS p2;
#send DROP PROCEDURE IF EXISTS p2; source include/kill_query_and_diff_master_slave.inc;
#source include/kill_query_and_diff_master_slave.inc;
######## TABLE ######## ######## TABLE ########
@ -261,9 +248,10 @@ source include/kill_query_and_diff_master_slave.inc;
######## SERVER ######## ######## SERVER ########
# Tempoarily disabled, see bug#25705 # Temporarily disabled, see Bug #22473427 - DROP SERVER FAILS
# AFTER ALTER SERVER+KILL QUERY
# --let $rpl_diff_statement= SELECT * FROM mysql.server WHERE name like \'s%\' # --let $rpl_diff_statement= SELECT * FROM mysql.servers WHERE Server_name like \'s%\'
# send CREATE SERVER s2 # send CREATE SERVER s2
# FOREIGN DATA WRAPPER mysql # FOREIGN DATA WRAPPER mysql

View File

@ -20,8 +20,10 @@ CREATE TABLE t1 (a int) ENGINE=MyISAM;
CREATE TABLE t2 (a int) ENGINE=MyISAM; CREATE TABLE t2 (a int) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (4), (5), (6); INSERT INTO t2 VALUES (4), (5), (6);
CREATE TABLE IF NOT EXISTS t1_merge LIKE t1; # Changed a little to check also an issue reported on BUG#20574550
ALTER TABLE t1_merge ENGINE=MERGE UNION (t2, t1); CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1;
ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1);
CREATE TABLE t1_merge LIKE tt1_merge;
--sync_slave_with_master --sync_slave_with_master

View File

@ -0,0 +1,55 @@
source include/have_innodb.inc;
source include/have_binlog_format_row.inc;
source include/master-slave.inc;
#
# BUG#20574550
# CREATE TABLE LIKE <TEMP_TABLE> does not preserve original table storage
# engine when using row based replication
#
--connection master
# Define temp_t1 and temp_t2 storage engines
--let $engine_temp_t1= InnoDB
--let $engine_temp_t2= MyISAM
# Create the two temporary tables
--eval CREATE TEMPORARY TABLE temp_t1 (c1 INT) ENGINE=$engine_temp_t1
--eval CREATE TEMPORARY TABLE temp_t2 (c1 INT) ENGINE=$engine_temp_t2
# Create t1 and t2 based on temporary tables
CREATE TABLE t1 LIKE temp_t1;
CREATE TABLE t2 LIKE temp_t2;
--sync_slave_with_master
# On master
--connection master
# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2
--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1)
--let $assert_cond= "$engine_t1" = "$engine_temp_t1"
--let $assert_text= "t1 on master and temp_t1 have the same storage engine"
--source include/assert.inc
--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1)
--let $assert_cond= "$engine_t2" = "$engine_temp_t2"
--let $assert_text= "t2 on master and temp_t2 have the same storage engine"
--source include/assert.inc
# On slave
--connection slave
# Assert that t1 and t2 have the same storage engines as temp_t1 and temp_t2
--let $engine_t1= query_get_value(SHOW TABLE STATUS WHERE Name='t1', Engine, 1)
--let $assert_cond= "$engine_t1" = "$engine_temp_t1"
--let $assert_text= "t1 on slave and temp_t1 have the same storage engine"
--source include/assert.inc
--let $engine_t2= query_get_value(SHOW TABLE STATUS WHERE Name='t2', Engine, 1)
--let $assert_cond= "$engine_t2" = "$engine_temp_t2"
--let $assert_text= "t2 on slave and temp_t2 have the same storage engine"
--source include/assert.inc
# Cleanup
--connection master
DROP TEMPORARY TABLE temp_t1, temp_t2;
DROP TABLE t1, t2;
--source include/rpl_end.inc

View File

@ -183,7 +183,7 @@
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
+VARIABLE_NAME INNODB_EMPTY_FREE_LIST_ALGORITHM +VARIABLE_NAME INNODB_EMPTY_FREE_LIST_ALGORITHM
+SESSION_VALUE NULL +SESSION_VALUE NULL
+GLOBAL_VALUE BACKOFF +GLOBAL_VALUE LEGACY
+GLOBAL_VALUE_ORIGIN COMPILE-TIME +GLOBAL_VALUE_ORIGIN COMPILE-TIME
+DEFAULT_VALUE BACKOFF +DEFAULT_VALUE BACKOFF
+VARIABLE_SCOPE GLOBAL +VARIABLE_SCOPE GLOBAL
@ -571,21 +571,14 @@
NUMERIC_MIN_VALUE NULL NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL NUMERIC_BLOCK_SIZE NULL
@@ -2203,14 +2637,28 @@ @@ -2217,6 +2651,34 @@
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT OPTIONAL
-VARIABLE_NAME INNODB_TMPDIR
-SESSION_VALUE
-GLOBAL_VALUE
+VARIABLE_NAME INNODB_TRACK_CHANGED_PAGES +VARIABLE_NAME INNODB_TRACK_CHANGED_PAGES
+SESSION_VALUE NULL +SESSION_VALUE NULL
+GLOBAL_VALUE OFF +GLOBAL_VALUE OFF
GLOBAL_VALUE_ORIGIN COMPILE-TIME +GLOBAL_VALUE_ORIGIN COMPILE-TIME
-DEFAULT_VALUE
-VARIABLE_SCOPE SESSION
-VARIABLE_TYPE VARCHAR
-VARIABLE_COMMENT Directory for temporary non-tablespace files.
+DEFAULT_VALUE OFF +DEFAULT_VALUE OFF
+VARIABLE_SCOPE GLOBAL +VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN +VARIABLE_TYPE BOOLEAN
@ -604,10 +597,16 @@
+VARIABLE_SCOPE GLOBAL +VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN +VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Force log tracker to catch up with checkpoint now +VARIABLE_COMMENT Force log tracker to catch up with checkpoint now
NUMERIC_MIN_VALUE NULL +NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL +NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL +NUMERIC_BLOCK_SIZE NULL
@@ -2294,7 +2742,7 @@ +ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG
SESSION_VALUE NULL
GLOBAL_VALUE OFF
@@ -2294,7 +2756,7 @@
DEFAULT_VALUE OFF DEFAULT_VALUE OFF
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BOOLEAN VARIABLE_TYPE BOOLEAN
@ -616,7 +615,7 @@
NUMERIC_MIN_VALUE NULL NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL NUMERIC_BLOCK_SIZE NULL
@@ -2315,6 +2763,20 @@ @@ -2315,6 +2777,20 @@
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
COMMAND_LINE_ARGUMENT NONE COMMAND_LINE_ARGUMENT NONE
@ -637,7 +636,7 @@
VARIABLE_NAME INNODB_USE_MTFLUSH VARIABLE_NAME INNODB_USE_MTFLUSH
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE OFF GLOBAL_VALUE OFF
@@ -2329,6 +2791,20 @@ @@ -2329,6 +2805,20 @@
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
COMMAND_LINE_ARGUMENT NONE COMMAND_LINE_ARGUMENT NONE
@ -658,12 +657,12 @@
VARIABLE_NAME INNODB_USE_SYS_MALLOC VARIABLE_NAME INNODB_USE_SYS_MALLOC
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE ON GLOBAL_VALUE ON
@@ -2359,12 +2835,12 @@ @@ -2359,12 +2849,12 @@
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.29 -GLOBAL_VALUE 5.6.30
+GLOBAL_VALUE 5.6.28-76.1 +GLOBAL_VALUE 5.6.29-76.2
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL

View File

@ -2359,7 +2359,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL SESSION_VALUE NULL
GLOBAL_VALUE 5.6.29 GLOBAL_VALUE 5.6.30
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL

View File

@ -13,11 +13,19 @@ let $old_status= `SELECT variable_value FROM information_schema.global_status
# A previous test could have run buffer pool dump already; # A previous test could have run buffer pool dump already;
# in this case we want to make sure that the current time is different # in this case we want to make sure that the current time is different
# from the timestamp in the status variable # from the timestamp in the status variable.
# We should have had a smart wait condition here, like the commented one below,
# but we can't because of MDEV-9867, so there will be just sleep instead.
# And it might be not enough to sleep one second, so we'll have to sleep two.
# let $wait_condition =
# SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s');
# -- source include/wait_condition.inc
let $wait_condition = if (`SELECT variable_value LIKE '%dump completed at%' FROM information_schema.global_status
SELECT TRIM(SUBSTR('$old_status', -8)) != DATE_FORMAT(CURTIME(), '%k:%i:%s'); WHERE LOWER(variable_name) = 'innodb_buffer_pool_dump_status'`)
-- source include/wait_condition.inc {
-- sleep 2
}
# Do the dump # Do the dump
SET GLOBAL innodb_buffer_pool_dump_now = ON; SET GLOBAL innodb_buffer_pool_dump_now = ON;

View File

@ -0,0 +1 @@
--loose-innodb-buffer-pool-size=20M

View File

@ -3,9 +3,7 @@
# #
--source include/have_innodb.inc --source include/have_innodb.inc
--disable_warnings --source include/have_partition.inc
drop table if exists t1,t2,t3;
--enable_warnings
# #
# Test of things that can be done online # Test of things that can be done online
# #
@ -102,6 +100,28 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge
alter online table t3 union=(t1,t2); alter online table t3 union=(t1,t2);
drop table t1,t2,t3; drop table t1,t2,t3;
#
# MDEV-9868 Altering a partitioned table comment does a full copy
#
create table t1 (i int) partition by hash(i) partitions 2;
alter online table t1 comment 'test';
drop table t1;
#
# MDEV-9168 altering a column comment does a full copy
#
create table t1 (a int);
alter online table t1 modify a int comment 'test';
drop table t1;
create table t1 (a int) engine=innodb;
alter online table t1 modify a int comment 'test';
drop table t1;
create table t1 (a int) partition by hash(a) partitions 2;
alter online table t1 modify a int comment 'test';
drop table t1;
--echo # --echo #
--echo # MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB --echo # MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
--echo # --echo #

View File

@ -409,3 +409,8 @@ SELECT * FROM t1 WHERE a=0.9;
SELECT * FROM t1 WHERE a IN (0.8,0.9); SELECT * FROM t1 WHERE a IN (0.8,0.9);
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-9372 select 100 between 1 and 9223372036854775808 returns false
--echo #
SELECT 100 BETWEEN 1 AND 9223372036854775808;

View File

@ -80,7 +80,7 @@ EOF
--write_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql --write_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql
SET SQL_MODE=""; SET SQL_MODE="";
use test; use test;
create table t1(a int) engine=example; create table t1(a int) engine=example charset=latin1;
EOF EOF
--exec $MYSQLD_BOOTSTRAP_CMD --plugin-dir=$PLUGIN_DIR < $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1 --exec $MYSQLD_BOOTSTRAP_CMD --plugin-dir=$PLUGIN_DIR < $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1
--remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql --remove_file $MYSQLTEST_VARDIR/tmp/bootstrap_plugins.sql

View File

@ -7,5 +7,16 @@ create table t1 (a date);
insert t1 values ('2000-01-02'), ('2001-02-03'), ('2002-03-04'); insert t1 values ('2000-01-02'), ('2001-02-03'), ('2002-03-04');
set debug_dbug='d,str_to_datetime_warn'; set debug_dbug='d,str_to_datetime_warn';
select * from t1 where a > date_add('2000-01-01', interval 5 day); select * from t1 where a > date_add('2000-01-01', interval 5 day);
set debug_dbug='';
drop table t1;
#
# MDEV-9707 MAX(timestamp(6) column) in correlated sub-query returns non-existent row data in original table
#
create table t1 (id int not null, ut timestamp(6) not null);
insert into t1 values(1, '2001-01-01 00:00:00.2');
insert into t1 values(1, '2001-01-01 00:00:00.1');
select * from t1;
select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1;
drop table t1; drop table t1;

View File

@ -193,6 +193,16 @@ insert t1 values ('00:00:00'),('00:01:00');
select case t1.f1 when '00:00:00' then 1 end from t1; select case t1.f1 when '00:00:00' then 1 end from t1;
drop table t1; drop table t1;
--echo #
--echo # MDEV-9745 Crash with CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END
--echo #
CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 4 END AS a;
DESCRIBE t1;
DROP TABLE t1;
CREATE TABLE t1 SELECT CASE WHEN TRUE THEN COALESCE(CAST(NULL AS UNSIGNED)) ELSE 40 END AS a;
DESCRIBE t1;
DROP TABLE t1;
--echo # --echo #
--echo # Start of 10.1 test --echo # Start of 10.1 test
--echo # --echo #

View File

@ -0,0 +1,16 @@
--echo #
--echo # Start of 5.5 tests
--echo #
--echo #
--echo # MDEV-9862 Illegal mix of collation, when comparing column with CASE expression
--echo #
SET NAMES cp850;
CREATE TABLE t1 (a CHAR(1) CHARACTER SET latin1);
SELECT a FROM t1 WHERE CASE a WHEN 'aaaa' THEN 'Y' WHEN 'aaaa' THEN 'Y' ELSE NULL END <> a;
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #

View File

@ -69,10 +69,10 @@ select /*2*/ user, host, db, command, state, info
select release_lock("test_lock2"); select release_lock("test_lock2");
drop event закачка; drop event закачка;
# Wait for release_lock("test_lock2") to complete, # Wait for get_lock("test_lock2") to complete,
# to avoid polluting the next test information_schema.processlist # to avoid polluting the next test information_schema.processlist
let $wait_condition= select count(*) = 0 from information_schema.processlist let $wait_condition= select count(*) = 0 from information_schema.processlist
where (state like 'User lock%' AND info like 'select get_lock%'); where info='select get_lock("test_lock2", 20)';
--source include/wait_condition.inc --source include/wait_condition.inc

View File

@ -32,3 +32,18 @@ INSERT INTO t1 VALUES(0xA3C2);
DROP TABLE t1; DROP TABLE t1;
# End of 5.1 tests # End of 5.1 tests
#
# MDEV-9986 Full-text search of the utf8mb4 column causes crash
#
create table t1 (
id varchar(255),
business_name text null collate utf8mb4_unicode_ci,
street_address text,
fulltext index ft (business_name),
fulltext index ft2 (street_address)
);
--error ER_FT_MATCHING_KEY_NOT_FOUND
select * from t1 where match (business_name, street_address) against ('some business name and address here');
select * from t1 where match (business_name, street_address) against ('some business name and address here' in boolean mode);
drop table t1;

View File

@ -1,4 +1,4 @@
-- source include/have_ssl_crypto_functs.inc -- source include/have_des.inc
# This test can't be in func_encrypt.test, because it requires # This test can't be in func_encrypt.test, because it requires
# --des-key-file to not be set. # --des-key-file to not be set.

View File

@ -1,4 +1,4 @@
-- source include/have_ssl_crypto_functs.inc -- source include/have_des.inc
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;

View File

@ -1,4 +1,4 @@
-- source include/have_ssl_crypto_functs.inc -- source include/have_des.inc
-- source include/have_ucs2.inc -- source include/have_ucs2.inc
--echo # --echo #

View File

@ -486,6 +486,14 @@ SELECT -a FROM t1;
--error ER_DATA_OUT_OF_RANGE --error ER_DATA_OUT_OF_RANGE
SELECT -b FROM t1; SELECT -b FROM t1;
# try with two rows now
INSERT INTO t1 VALUES(0,0);
--error ER_DATA_OUT_OF_RANGE
SELECT -a FROM t1;
--error ER_DATA_OUT_OF_RANGE
SELECT -b FROM t1;
DROP TABLE t1; DROP TABLE t1;
# Decimal overflows # Decimal overflows

View File

@ -5,3 +5,21 @@
# #
--error ER_NONEXISTING_GRANT --error ER_NONEXISTING_GRANT
SHOW GRANTS FOR root@invalid_host; SHOW GRANTS FOR root@invalid_host;
#
# MDEV-9580 SHOW GRANTS FOR <current_user> fails
#
create user test;
create user foo;
create role foo;
grant foo to test;
--connect (conn_1, localhost, test,,)
set role foo;
show grants for test; # user
show grants for foo; # role
--error ER_DBACCESS_DENIED_ERROR
show grants for foo@'%'; # user
--connection default
drop user test, foo;
drop role foo;

View File

@ -0,0 +1,43 @@
--source include/have_innodb.inc
#
# MDEV-8979 IGNORE does not ignore the error 1452
#
--echo #
--echo # BUG#22037930: INSERT IGNORE FAILS TO IGNORE
--echo # FOREIGN KEY CONSTRAINT
--echo # Setup.
CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE=INNODB;
CREATE TABLE t2 (fld2 INT, FOREIGN KEY (fld2) REFERENCES t1 (fld1))
ENGINE=INNODB;
INSERT INTO t1 VALUES(0);
INSERT INTO t2 VALUES(0);
--echo # Without fix, an error is reported.
INSERT IGNORE INTO t2 VALUES(1);
UPDATE IGNORE t2 SET fld2=20 WHERE fld2=0;
UPDATE IGNORE t1 SET fld1=20 WHERE fld1=0;
--echo # Test for multi update.
UPDATE IGNORE t1, t2 SET t2.fld2= t2.fld2 + 3;
UPDATE IGNORE t1, t2 SET t1.fld1= t1.fld1 + 3;
--echo # Reports an error since IGNORE is not used.
--error ER_NO_REFERENCED_ROW_2
INSERT INTO t2 VALUES(1);
--error ER_NO_REFERENCED_ROW_2
UPDATE t2 SET fld2=20 WHERE fld2=0;
--error ER_ROW_IS_REFERENCED_2
UPDATE t1 SET fld1=20 WHERE fld1=0;
--error ER_NO_REFERENCED_ROW_2
UPDATE t1, t2 SET t2.fld2= t2.fld2 + 3;
--error ER_ROW_IS_REFERENCED_2
UPDATE t1, t2 SET t1.fld1= t1.fld1 + 3;
DROP TABLE t2, t1;

View File

@ -23,5 +23,12 @@ SET DEBUG_SYNC='now SIGNAL go';
--error ER_QUERY_INTERRUPTED --error ER_QUERY_INTERRUPTED
reap; reap;
SET DEBUG_SYNC='reset'; SET DEBUG_SYNC='reset';
# Wait until default connection has reset query string
let $wait_condition=
SELECT COUNT(*) = 1 from information_schema.processlist
WHERE info is NULL;
--source include/wait_condition.inc
--replace_column 1 # 3 # 6 # 7 # --replace_column 1 # 3 # 6 # 7 #
SHOW PROCESSLIST; SHOW PROCESSLIST;

View File

@ -55,6 +55,14 @@ SELECT DATE_FORMAT('2001-01-06', '%w %a %W');
SELECT DATE_FORMAT('2001-01-07', '%w %a %W'); SELECT DATE_FORMAT('2001-01-07', '%w %a %W');
--echo End of 5.4 tests --echo End of 5.4 tests
#
# MDEV-9928 LC_TIME_NAMES=de_AT; unusual name for february
#
SET NAMES utf8;
SET lc_time_names=de_AT;
SELECT monthname('2001-01-01');
SELECT monthname('2001-02-01');
SELECT monthname('2001-03-01');
--echo # --echo #
--echo # Start of 5.6 tests --echo # Start of 5.6 tests

View File

@ -1 +0,0 @@
--debug

View File

@ -1,10 +1,10 @@
#
# MDEV-6830 Server crashes in best_access_path after a sequence of SELECTs invollving a temptable view
#
--source include/have_debug.inc --source include/have_debug.inc
--disable_warnings set @@debug_dbug= 'd,opt';
drop table if exists t1,t2,t3;
drop view if exists v2,v3;
--enable_warnings
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM; CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE t2 ( CREATE TABLE t2 (

View File

@ -22,7 +22,7 @@ perl;
log-slow-queries pid-file slow-query-log-file log-basename log-slow-queries pid-file slow-query-log-file log-basename
datadir slave-load-tmpdir tmpdir socket thread-pool-size datadir slave-load-tmpdir tmpdir socket thread-pool-size
large-files-support lower-case-file-system system-time-zone large-files-support lower-case-file-system system-time-zone
log-tc-size version.*/; collation-server character-set-server log-tc-size version.*/;
# Plugins which may or may not be there: # Plugins which may or may not be there:
@plugins=qw/innodb archive blackhole federated partition @plugins=qw/innodb archive blackhole federated partition

View File

@ -134,7 +134,7 @@ drop table t1;
# verification of servers certificate by setting both ca certificate # verification of servers certificate by setting both ca certificate
# and ca path to NULL # and ca path to NULL
# #
--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA --replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA
--exec $MYSQL --ssl --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1 --exec $MYSQL --ssl --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1
--echo End of 5.0 tests --echo End of 5.0 tests
@ -259,7 +259,7 @@ select 'is still running; no cipher request crashed the server' as result from d
GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509; GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509;
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
connect(con1,localhost,bug42158,,,,,SSL); connect(con1,localhost,bug42158,,,,,SSL);
--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA --replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher'; SHOW STATUS LIKE 'Ssl_cipher';
disconnect con1; disconnect con1;
connection default; connection default;
@ -268,5 +268,12 @@ DROP USER bug42158@localhost;
set global sql_mode=default; set global sql_mode=default;
--echo End of 5.1 tests --echo End of 5.1 tests
#
# MDEV-9605 mysqlbinlog does not accept ssl-ca option as expected.
#
--error 1
--exec $MYSQL_BINLOG --read-from-remote-server --ssl-ca --user=root --host=localhost nobinlog.111111
# Wait till we reached the initial number of concurrent sessions # Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc --source include/wait_until_count_sessions.inc

View File

@ -17,6 +17,7 @@ let $mysql=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$
disable_abort_on_error; disable_abort_on_error;
echo TLS1.2 ciphers: user is ok with any cipher; echo TLS1.2 ciphers: user is ok with any cipher;
exec $mysql --ssl-cipher=AES128-SHA256; exec $mysql --ssl-cipher=AES128-SHA256;
--replace_result DHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES256-GCM-SHA384
exec $mysql --ssl-cipher=TLSv1.2; exec $mysql --ssl-cipher=TLSv1.2;
echo TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA; echo TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA;
exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA256; exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA256;

View File

@ -125,12 +125,8 @@ SEND;
UPDATE `t``\""e` SET a = 12 WHERE a = 0; UPDATE `t``\""e` SET a = 12 WHERE a = 0;
--echo # default connection --echo # default connection
connection default; connection default;
let $wait_timeout= 2; let $wait_condition= SELECT COUNT(*)=2 FROM INFORMATION_SCHEMA.INNODB_LOCKS;
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE ID = $id_1 AND STATE = 'Searching rows for update';
--source include/wait_condition.inc --source include/wait_condition.inc
#--echo # tested wait condition $wait_condition_reps times
# INNODB_LOCKS only exists in innodb_plugin
--sorted_result --sorted_result
SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS SELECT lock_table, COUNT(*) FROM INFORMATION_SCHEMA.INNODB_LOCKS
GROUP BY lock_table; GROUP BY lock_table;

View File

@ -10,7 +10,7 @@ create table t2 (a int);
insert into t2 values (2), (3); insert into t2 values (2), (3);
set session join_cache_level=3; set session join_cache_level=3;
set @@debug_dbug= 'd:t:O,/tmp/trace.out'; set @@debug_dbug= 'd,opt';
explain select t1.b from t1,t2 where t1.b=t2.a; explain select t1.b from t1,t2 where t1.b=t2.a;
select t1.b from t1,t2 where t1.b=t2.a; select t1.b from t1,t2 where t1.b=t2.a;

View File

@ -0,0 +1,131 @@
#
# MDEV-9835 Valid password is not working after server restart.
#
# Various combinations of SET PASSWORD and not-empty mysql.user.plugin field
#
--source include/not_embedded.inc
--enable_connect_log
set global secure_auth=0;
# The hash (old and new) is for 'test'
create user natauth@localhost identified via 'mysql_native_password' using '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user newpass@localhost identified by password '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user newpassnat@localhost identified via 'mysql_native_password';
set password for newpassnat@localhost = '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29';
create user oldauth@localhost identified with 'mysql_old_password' using '378b243e220ca493';
create user oldpass@localhost identified by password '378b243e220ca493';
create user oldpassold@localhost identified with 'mysql_old_password';
set password for oldpassold@localhost = '378b243e220ca493';
--sorted_result
select user, host, password, plugin, authentication_string from mysql.user where user != 'root';
--connect(con,localhost,natauth,test,)
select current_user();
--disconnect con
--connect(con,localhost,newpass,test,)
select current_user();
--disconnect con
--connect(con,localhost,newpassnat,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldauth,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldpass,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldpassold,test,)
select current_user();
--disconnect con
--connection default
flush privileges;
--connect(con,localhost,natauth,test,)
select current_user();
--disconnect con
--connect(con,localhost,newpass,test,)
select current_user();
--disconnect con
--connect(con,localhost,newpassnat,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldauth,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldpass,test,)
select current_user();
--disconnect con
--connect(con,localhost,oldpassold,test,)
select current_user();
--disconnect con
--connection default
# changing to the NEW password hash
set password for natauth@localhost = PASSWORD('test2');
set password for newpass@localhost = PASSWORD('test2');
set password for newpassnat@localhost = PASSWORD('test2');
set password for oldauth@localhost = PASSWORD('test2');
set password for oldpass@localhost = PASSWORD('test2');
set password for oldpassold@localhost = PASSWORD('test2');
--sorted_result
select user, host, password, plugin, authentication_string from mysql.user where user != 'root';
--connect(con,localhost,natauth,test2,)
select current_user();
--disconnect con
--connect(con,localhost,newpass,test2,)
select current_user();
--disconnect con
--connect(con,localhost,newpassnat,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldauth,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldpass,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldpassold,test2,)
select current_user();
--disconnect con
--connection default
flush privileges;
--connect(con,localhost,natauth,test2,)
select current_user();
--disconnect con
--connect(con,localhost,newpass,test2,)
select current_user();
--disconnect con
--connect(con,localhost,newpassnat,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldauth,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldpass,test2,)
select current_user();
--disconnect con
--connect(con,localhost,oldpassold,test2,)
select current_user();
--disconnect con
--connection default
drop user natauth@localhost, newpass@localhost, newpassnat@localhost;
drop user oldauth@localhost, oldpass@localhost, oldpassold@localhost;
set global secure_auth=default;

View File

@ -77,12 +77,15 @@ call bug9486();
connection con2root; connection con2root;
lock tables t2 write; lock tables t2 write;
connection con1root; connection con1root;
let $con1root_id=`SELECT CONNECTION_ID()`;
send call bug9486(); send call bug9486();
connection con2root; connection con2root;
--sleep 2
# There should be call statement in locked state. # There should be call statement in locked state.
--replace_column 1 # 3 localhost 6 # let $wait_condition=SELECT COUNT(*)=1 FROM information_schema.processlist WHERE
show processlist; id=$con1root_id AND state='Waiting for table metadata lock';
--source include/wait_condition.inc
--replace_result $con1root_id con1root_id
eval SELECT state,info FROM information_schema.processlist WHERE id=$con1root_id;
unlock tables; unlock tables;
connection con1root; connection con1root;
reap; reap;

Some files were not shown because too many files have changed in this diff Show More