Merge branch '5.5' into 10.0
This commit is contained in:
commit
872649c7ba
2
VERSION
2
VERSION
@ -1,3 +1,3 @@
|
|||||||
MYSQL_VERSION_MAJOR=10
|
MYSQL_VERSION_MAJOR=10
|
||||||
MYSQL_VERSION_MINOR=0
|
MYSQL_VERSION_MINOR=0
|
||||||
MYSQL_VERSION_PATCH=24
|
MYSQL_VERSION_PATCH=25
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
@ -4740,9 +4746,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);
|
||||||
@ -4810,9 +4816,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\
|
||||||
@ -4905,10 +4911,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)
|
||||||
{
|
{
|
||||||
@ -4920,7 +4927,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)
|
||||||
@ -4939,9 +4946,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);
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
2
debian/mariadb-test-10.0.dirs
vendored
2
debian/mariadb-test-10.0.dirs
vendored
@ -50,8 +50,6 @@ usr/share/mysql/mysql-test/suite/ndb
|
|||||||
usr/share/mysql/mysql-test/suite/ndb/t
|
usr/share/mysql/mysql-test/suite/ndb/t
|
||||||
usr/share/mysql/mysql-test/suite/ndb/r
|
usr/share/mysql/mysql-test/suite/ndb/r
|
||||||
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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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_;
|
||||||
|
@ -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_;
|
||||||
|
@ -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)))
|
||||||
|
@ -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");
|
||||||
|
@ -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
|
||||||
|
@ -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 */
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -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 #
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -231,3 +231,16 @@ case t1.f1 when '00:00:00' then 1 end
|
|||||||
1
|
1
|
||||||
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;
|
||||||
|
@ -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);
|
||||||
|
@ -3279,6 +3279,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);
|
||||||
|
14
mysql-test/r/ctype_cp850.result
Normal file
14
mysql-test/r/ctype_cp850.result
Normal 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
|
||||||
|
#
|
@ -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);
|
||||||
|
@ -4470,6 +4470,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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -660,9 +660,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;
|
||||||
|
30
mysql-test/r/insert_innodb.result
Normal file
30
mysql-test/r/insert_innodb.result
Normal 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;
|
@ -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
|
||||||
#
|
#
|
||||||
|
@ -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,
|
||||||
|
@ -1335,7 +1335,7 @@ sysdate-is-now FALSE
|
|||||||
table-cache 400
|
table-cache 400
|
||||||
table-definition-cache 400
|
table-definition-cache 400
|
||||||
table-open-cache 400
|
table-open-cache 400
|
||||||
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 500
|
thread-pool-max-threads 500
|
||||||
|
@ -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
|
||||||
|
158
mysql-test/r/set_password_plugin-9835.result
Normal file
158
mysql-test/r/set_password_plugin-9835.result
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
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 mysql_native_password *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
||||||
|
newpass localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
||||||
|
newpassnat localhost *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
|
||||||
|
oldauth localhost mysql_old_password 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;
|
@ -71,7 +71,7 @@ connection default;
|
|||||||
set password for u1 = PASSWORD('SOMETHINGELSE');
|
set password for u1 = PASSWORD('SOMETHINGELSE');
|
||||||
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
||||||
user host password plugin authentication_string
|
user host password plugin authentication_string
|
||||||
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6 mysql_native_password *7AFEFD08B6B720E781FB000CAA418F54FA662626
|
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6
|
||||||
#
|
#
|
||||||
# Here we should use the password field, as that primes over
|
# Here we should use the password field, as that primes over
|
||||||
# the authentication_string field.
|
# the authentication_string field.
|
||||||
@ -115,7 +115,7 @@ connection default;
|
|||||||
update mysql.user set authentication_string = '' where user='u1';
|
update mysql.user set authentication_string = '' where user='u1';
|
||||||
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
||||||
user host password plugin authentication_string
|
user host password plugin authentication_string
|
||||||
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6 mysql_native_password
|
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6
|
||||||
flush privileges;
|
flush privileges;
|
||||||
show grants for u1;
|
show grants for u1;
|
||||||
Grants for u1@%
|
Grants for u1@%
|
||||||
@ -127,7 +127,7 @@ GRANT SELECT ON `mysql`.* TO 'u1'@'%'
|
|||||||
connect con1, localhost, u1,'SOMETHINGELSE',;
|
connect con1, localhost, u1,'SOMETHINGELSE',;
|
||||||
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
select user, host, password, plugin, authentication_string from mysql.user where user = 'u1';
|
||||||
user host password plugin authentication_string
|
user host password plugin authentication_string
|
||||||
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6 mysql_native_password
|
u1 % *054B7BBD2B9A553DA560520DCD3F76DA2D81B7C6
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
connection default;
|
connection default;
|
||||||
#
|
#
|
||||||
|
@ -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;
|
||||||
|
7
mysql-test/r/ssl_timeout-9836.result
Normal file
7
mysql-test/r/ssl_timeout-9836.result
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
SET @@net_read_timeout=1;
|
||||||
|
SELECT 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
SELECT 1;
|
||||||
|
1
|
||||||
|
1
|
@ -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 00:00:00
|
||||||
|
2 2016-02-01 2016-01-28 00:00:00
|
||||||
|
3 2016-03-01 2016-03-31 00:00:00
|
||||||
|
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));
|
||||||
|
@ -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
|
||||||
|
3
mysql-test/r/wait_timeout_not_windows.result
Normal file
3
mysql-test/r/wait_timeout_not_windows.result
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
set global log_warnings=2;
|
||||||
|
set @@wait_timeout=1;
|
||||||
|
set global log_warnings=@@log_warnings;
|
@ -683,7 +683,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
|
||||||
|
@ -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`)
|
||||||
|
@ -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
|
||||||
#
|
#
|
||||||
|
@ -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
|
||||||
|
@ -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 */
|
||||||
#
|
#
|
||||||
@ -175,7 +175,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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
13
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result
Normal file
13
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL_innodb.result
Normal 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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
55
mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL_innodb.test
Normal file
55
mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL_innodb.test
Normal 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
|
||||||
|
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -193,3 +193,12 @@ 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;
|
||||||
|
16
mysql-test/t/ctype_cp850.test
Normal file
16
mysql-test/t/ctype_cp850.test
Normal 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 #
|
@ -67,10 +67,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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -484,6 +484,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
|
||||||
|
43
mysql-test/t/insert_innodb.test
Normal file
43
mysql-test/t/insert_innodb.test
Normal 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;
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# 6619 SHOW PROCESSLIST returns empty result set after KILL QUERY
|
# MDEV-6619 SHOW PROCESSLIST returns empty result set after KILL QUERY
|
||||||
#
|
#
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
--source include/have_debug_sync.inc
|
--source include/have_debug_sync.inc
|
||||||
|
@ -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
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--debug
|
|
@ -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 (
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
128
mysql-test/t/set_password_plugin-9835.test
Normal file
128
mysql-test/t/set_password_plugin-9835.test
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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;
|
||||||
|
|
@ -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;
|
||||||
|
1
mysql-test/t/ssl_timeout-9836.opt
Normal file
1
mysql-test/t/ssl_timeout-9836.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--loose-thread-handling=pool-of-threads
|
11
mysql-test/t/ssl_timeout-9836.test
Normal file
11
mysql-test/t/ssl_timeout-9836.test
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# MDEV-9836 Connection lost when using SSL
|
||||||
|
#
|
||||||
|
-- source include/have_ssl_communication.inc
|
||||||
|
connect(con1,localhost,root,,,,,SSL);
|
||||||
|
SET @@net_read_timeout=1;
|
||||||
|
SELECT 1;
|
||||||
|
# MDEV-9836 - YASSL bug - SSL connection lost if it has been idle, for longer than net_read_timeout
|
||||||
|
-- sleep 2
|
||||||
|
SELECT 1;
|
||||||
|
disconnect con1;
|
@ -385,6 +385,36 @@ select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
|||||||
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
|
||||||
|
--echo #
|
||||||
|
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);
|
||||||
|
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;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str
|
--echo # MDEV-9511 Valgrind warnings 'Invalid read' in Field_newdate::cmp and Field_newdate::val_str
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -445,6 +445,14 @@ SELECT MAX(ts) = '2011-01-06 12:34:30' FROM t1;
|
|||||||
SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1;
|
SELECT MAX(dt) = '2011-01-06 12:34:30' FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-9413 "datetime >= coalesce(c1(NULL))" doesn't return expected NULL
|
||||||
|
--echo #
|
||||||
|
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;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.5 tests
|
--echo End of 5.5 tests
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
16
mysql-test/t/wait_timeout_not_windows.test
Normal file
16
mysql-test/t/wait_timeout_not_windows.test
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
source include/not_embedded.inc;
|
||||||
|
source include/not_windows.inc;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-7775 Wrong error message (Unknown error) when idle sessions are killed after wait_timeout
|
||||||
|
#
|
||||||
|
set global log_warnings=2;
|
||||||
|
connect (foo,localhost,root);
|
||||||
|
set @@wait_timeout=1;
|
||||||
|
sleep 2;
|
||||||
|
connection default;
|
||||||
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||||
|
let SEARCH_RANGE= -50;
|
||||||
|
let SEARCH_PATTERN= Aborted.*Got timeout reading communication packets;
|
||||||
|
source include/search_pattern_in_file.inc;
|
||||||
|
set global log_warnings=@@log_warnings;
|
@ -18,7 +18,6 @@
|
|||||||
#include "mysys_err.h"
|
#include "mysys_err.h"
|
||||||
#include <my_dir.h> /* for stat */
|
#include <my_dir.h> /* for stat */
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include "mysys_err.h"
|
|
||||||
#if defined(HAVE_UTIME_H)
|
#if defined(HAVE_UTIME_H)
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#elif defined(HAVE_SYS_UTIME_H)
|
#elif defined(HAVE_SYS_UTIME_H)
|
||||||
|
@ -310,6 +310,7 @@ void print_find_structs()
|
|||||||
add_structs_to_map(root_by_len,max_len);
|
add_structs_to_map(root_by_len,max_len);
|
||||||
set_links(root_by_len,max_len);
|
set_links(root_by_len,max_len);
|
||||||
print_hash_map("sql_functions_map");
|
print_hash_map("sql_functions_map");
|
||||||
|
free(hash_map);
|
||||||
|
|
||||||
hash_map= 0;
|
hash_map= 0;
|
||||||
size_hash_map= 0;
|
size_hash_map= 0;
|
||||||
@ -319,6 +320,7 @@ void print_find_structs()
|
|||||||
add_structs_to_map(root_by_len2,max_len2);
|
add_structs_to_map(root_by_len2,max_len2);
|
||||||
set_links(root_by_len2,max_len2);
|
set_links(root_by_len2,max_len2);
|
||||||
print_hash_map("symbols_map");
|
print_hash_map("symbols_map");
|
||||||
|
free(hash_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2013, Monty Program Ab.
|
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
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef HANDLER_INCLUDED
|
#ifndef HANDLER_INCLUDED
|
||||||
#define HANDLER_INCLUDED
|
#define HANDLER_INCLUDED
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2014, Monty Program Ab.
|
Copyright (c) 2009, 2016, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
@ -419,7 +419,9 @@ static const uint MYSQL_START_TRANS_OPT_READ_WRITE = 4;
|
|||||||
/* Flags for method is_fatal_error */
|
/* Flags for method is_fatal_error */
|
||||||
#define HA_CHECK_DUP_KEY 1
|
#define HA_CHECK_DUP_KEY 1
|
||||||
#define HA_CHECK_DUP_UNIQUE 2
|
#define HA_CHECK_DUP_UNIQUE 2
|
||||||
|
#define HA_CHECK_FK_ERROR 4
|
||||||
#define HA_CHECK_DUP (HA_CHECK_DUP_KEY + HA_CHECK_DUP_UNIQUE)
|
#define HA_CHECK_DUP (HA_CHECK_DUP_KEY + HA_CHECK_DUP_UNIQUE)
|
||||||
|
#define HA_CHECK_ALL (~0U)
|
||||||
|
|
||||||
enum legacy_db_type
|
enum legacy_db_type
|
||||||
{
|
{
|
||||||
@ -2822,7 +2824,10 @@ public:
|
|||||||
((flags & HA_CHECK_DUP_KEY) &&
|
((flags & HA_CHECK_DUP_KEY) &&
|
||||||
(error == HA_ERR_FOUND_DUPP_KEY ||
|
(error == HA_ERR_FOUND_DUPP_KEY ||
|
||||||
error == HA_ERR_FOUND_DUPP_UNIQUE)) ||
|
error == HA_ERR_FOUND_DUPP_UNIQUE)) ||
|
||||||
error == HA_ERR_AUTOINC_ERANGE)
|
error == HA_ERR_AUTOINC_ERANGE ||
|
||||||
|
((flags & HA_CHECK_FK_ERROR) &&
|
||||||
|
(error == HA_ERR_ROW_IS_REFERENCED ||
|
||||||
|
error == HA_ERR_NO_REFERENCED_ROW)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -4153,4 +4158,4 @@ inline const char *table_case_name(HA_CREATE_INFO *info, const char *name)
|
|||||||
|
|
||||||
void print_keydup_error(TABLE *table, KEY *key, const char *msg, myf errflag);
|
void print_keydup_error(TABLE *table, KEY *key, const char *msg, myf errflag);
|
||||||
void print_keydup_error(TABLE *table, KEY *key, myf errflag);
|
void print_keydup_error(TABLE *table, KEY *key, myf errflag);
|
||||||
#endif
|
#endif /* HANDLER_INCLUDED */
|
||||||
|
11
sql/item.cc
11
sql/item.cc
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2016, 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
|
||||||
@ -1306,8 +1306,8 @@ Item *Item_param::safe_charset_converter(CHARSET_INFO *tocs)
|
|||||||
to it's possible that the converter will not be needed at all:
|
to it's possible that the converter will not be needed at all:
|
||||||
|
|
||||||
PREPARE stmt FROM 'SELECT * FROM t1 WHERE field = ?';
|
PREPARE stmt FROM 'SELECT * FROM t1 WHERE field = ?';
|
||||||
SET @@arg= 1;
|
SET @arg= 1;
|
||||||
EXECUTE stms USING @arg;
|
EXECUTE stmt USING @arg;
|
||||||
|
|
||||||
In the above example result_type is STRING_RESULT at prepare time,
|
In the above example result_type is STRING_RESULT at prepare time,
|
||||||
and INT_RESULT at execution time.
|
and INT_RESULT at execution time.
|
||||||
@ -3835,7 +3835,7 @@ Item_param::eq(const Item *item, bool binary_cmp) const
|
|||||||
|
|
||||||
void Item_param::print(String *str, enum_query_type query_type)
|
void Item_param::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
if (state == NO_VALUE)
|
if (state == NO_VALUE || query_type & QT_NO_DATA_EXPANSION)
|
||||||
{
|
{
|
||||||
str->append('?');
|
str->append('?');
|
||||||
}
|
}
|
||||||
@ -6734,7 +6734,8 @@ Item *Item_field::update_value_transformer(uchar *select_arg)
|
|||||||
|
|
||||||
void Item_field::print(String *str, enum_query_type query_type)
|
void Item_field::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
if (field && field->table->const_table)
|
if (field && field->table->const_table &&
|
||||||
|
!(query_type & QT_NO_DATA_EXPANSION))
|
||||||
{
|
{
|
||||||
print_value(str);
|
print_value(str);
|
||||||
return;
|
return;
|
||||||
|
@ -2363,7 +2363,7 @@ public:
|
|||||||
max_length= 0;
|
max_length= 0;
|
||||||
name= name_par ? name_par : (char*) "NULL";
|
name= name_par ? name_par : (char*) "NULL";
|
||||||
fixed= 1;
|
fixed= 1;
|
||||||
collation.set(cs, DERIVATION_IGNORABLE);
|
collation.set(cs, DERIVATION_IGNORABLE, MY_REPERTOIRE_ASCII);
|
||||||
}
|
}
|
||||||
enum Type type() const { return NULL_ITEM; }
|
enum Type type() const { return NULL_ITEM; }
|
||||||
bool eq(const Item *item, bool binary_cmp) const { return null_eq(item); }
|
bool eq(const Item *item, bool binary_cmp) const { return null_eq(item); }
|
||||||
|
@ -161,10 +161,11 @@ static int cmp_row_type(Item* item1, Item* item2)
|
|||||||
|
|
||||||
static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
|
static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
|
||||||
{
|
{
|
||||||
uint i;
|
uint unsigned_count= items[0]->unsigned_flag;
|
||||||
type[0]= items[0]->cmp_type();
|
type[0]= items[0]->cmp_type();
|
||||||
for (i= 1 ; i < nitems ; i++)
|
for (uint i= 1 ; i < nitems ; i++)
|
||||||
{
|
{
|
||||||
|
unsigned_count+= items[i]->unsigned_flag;
|
||||||
type[0]= item_cmp_type(type[0], items[i]->cmp_type());
|
type[0]= item_cmp_type(type[0], items[i]->cmp_type());
|
||||||
/*
|
/*
|
||||||
When aggregating types of two row expressions we have to check
|
When aggregating types of two row expressions we have to check
|
||||||
@ -176,6 +177,12 @@ static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
|
|||||||
if (type[0] == ROW_RESULT && cmp_row_type(items[0], items[i]))
|
if (type[0] == ROW_RESULT && cmp_row_type(items[0], items[i]))
|
||||||
return 1; // error found: invalid usage of rows
|
return 1; // error found: invalid usage of rows
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
If all arguments are of INT type but have different unsigned_flag values,
|
||||||
|
switch to DECIMAL_RESULT.
|
||||||
|
*/
|
||||||
|
if (type[0] == INT_RESULT && unsigned_count != nitems && unsigned_count != 0)
|
||||||
|
type[0]= DECIMAL_RESULT;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2621,10 +2628,7 @@ bool Item_func_ifnull::date_op(MYSQL_TIME *ltime, uint fuzzydate)
|
|||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
if (!args[0]->get_date_with_conversion(ltime, fuzzydate & ~TIME_FUZZY_DATES))
|
if (!args[0]->get_date_with_conversion(ltime, fuzzydate & ~TIME_FUZZY_DATES))
|
||||||
return (null_value= false);
|
return (null_value= false);
|
||||||
if (!args[1]->get_date_with_conversion(ltime, fuzzydate & ~TIME_FUZZY_DATES))
|
return (null_value= args[1]->get_date_with_conversion(ltime, fuzzydate & ~TIME_FUZZY_DATES));
|
||||||
return (null_value= false);
|
|
||||||
bzero((char*) ltime,sizeof(*ltime));
|
|
||||||
return null_value= !(fuzzydate & TIME_FUZZY_DATES);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3081,24 +3085,6 @@ bool Item_func_case::fix_fields(THD *thd, Item **ref)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Item_func_case::agg_str_lengths(Item* arg)
|
|
||||||
{
|
|
||||||
fix_char_length(MY_MAX(max_char_length(), arg->max_char_length()));
|
|
||||||
set_if_bigger(decimals, arg->decimals);
|
|
||||||
unsigned_flag= unsigned_flag && arg->unsigned_flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Item_func_case::agg_num_lengths(Item *arg)
|
|
||||||
{
|
|
||||||
uint len= my_decimal_length_to_precision(arg->max_length, arg->decimals,
|
|
||||||
arg->unsigned_flag) - arg->decimals;
|
|
||||||
set_if_bigger(max_length, len);
|
|
||||||
set_if_bigger(decimals, arg->decimals);
|
|
||||||
unsigned_flag= unsigned_flag && arg->unsigned_flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if (*place) and new_value points to different Items and call
|
Check if (*place) and new_value points to different Items and call
|
||||||
THD::change_item_tree() if needed.
|
THD::change_item_tree() if needed.
|
||||||
@ -3164,17 +3150,7 @@ void Item_func_case::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
collation.set_numeric();
|
fix_attributes(agg, nagg);
|
||||||
max_length=0;
|
|
||||||
decimals=0;
|
|
||||||
unsigned_flag= TRUE;
|
|
||||||
for (uint i= 0; i < ncases; i+= 2)
|
|
||||||
agg_num_lengths(args[i + 1]);
|
|
||||||
if (else_expr_num != -1)
|
|
||||||
agg_num_lengths(args[else_expr_num]);
|
|
||||||
max_length= my_decimal_precision_to_length_no_truncation(max_length +
|
|
||||||
decimals, decimals,
|
|
||||||
unsigned_flag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3374,16 +3350,12 @@ double Item_func_coalesce::real_op()
|
|||||||
bool Item_func_coalesce::date_op(MYSQL_TIME *ltime,uint fuzzydate)
|
bool Item_func_coalesce::date_op(MYSQL_TIME *ltime,uint fuzzydate)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
null_value= 0;
|
|
||||||
for (uint i= 0; i < arg_count; i++)
|
for (uint i= 0; i < arg_count; i++)
|
||||||
{
|
{
|
||||||
bool res= args[i]->get_date_with_conversion(ltime,
|
if (!args[i]->get_date_with_conversion(ltime, fuzzydate & ~TIME_FUZZY_DATES))
|
||||||
fuzzydate & ~TIME_FUZZY_DATES);
|
return (null_value= false);
|
||||||
if (!args[i]->null_value)
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
bzero((char*) ltime,sizeof(*ltime));
|
return (null_value= true);
|
||||||
return null_value|= !(fuzzydate & TIME_FUZZY_DATES);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3406,19 +3378,32 @@ void Item_func_coalesce::fix_length_and_dec()
|
|||||||
{
|
{
|
||||||
cached_field_type= agg_field_type(args, arg_count);
|
cached_field_type= agg_field_type(args, arg_count);
|
||||||
agg_result_type(&cached_result_type, args, arg_count);
|
agg_result_type(&cached_result_type, args, arg_count);
|
||||||
|
fix_attributes(args, arg_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if MYSQL_VERSION_ID > 100100
|
||||||
|
#error Rename this to Item_hybrid_func::fix_attributes() when mering to 10.1
|
||||||
|
#endif
|
||||||
|
void Item_func_hybrid_result_type::fix_attributes(Item **items, uint nitems)
|
||||||
|
{
|
||||||
switch (cached_result_type) {
|
switch (cached_result_type) {
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
if (count_string_result_length(cached_field_type, args, arg_count))
|
if (count_string_result_length(field_type(),
|
||||||
|
items, nitems))
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case DECIMAL_RESULT:
|
case DECIMAL_RESULT:
|
||||||
count_decimal_length();
|
collation.set_numeric();
|
||||||
|
count_decimal_length(items, nitems);
|
||||||
break;
|
break;
|
||||||
case REAL_RESULT:
|
case REAL_RESULT:
|
||||||
count_real_length();
|
collation.set_numeric();
|
||||||
|
count_real_length(items, nitems);
|
||||||
break;
|
break;
|
||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
count_only_length(args, arg_count);
|
collation.set_numeric();
|
||||||
|
count_only_length(items, nitems);
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
break;
|
break;
|
||||||
case ROW_RESULT:
|
case ROW_RESULT:
|
||||||
|
@ -1274,8 +1274,6 @@ public:
|
|||||||
Item *find_item(String *str);
|
Item *find_item(String *str);
|
||||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||||
void cleanup();
|
void cleanup();
|
||||||
void agg_str_lengths(Item *arg);
|
|
||||||
void agg_num_lengths(Item *arg);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -639,16 +639,16 @@ void Item_func::count_datetime_length(Item **item, uint nitems)
|
|||||||
result length/precision depends on argument ones.
|
result length/precision depends on argument ones.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Item_func::count_decimal_length()
|
void Item_func::count_decimal_length(Item **item, uint nitems)
|
||||||
{
|
{
|
||||||
int max_int_part= 0;
|
int max_int_part= 0;
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
unsigned_flag= 1;
|
unsigned_flag= 1;
|
||||||
for (uint i=0 ; i < arg_count ; i++)
|
for (uint i=0 ; i < nitems ; i++)
|
||||||
{
|
{
|
||||||
set_if_bigger(decimals, args[i]->decimals);
|
set_if_bigger(decimals, item[i]->decimals);
|
||||||
set_if_bigger(max_int_part, args[i]->decimal_int_part());
|
set_if_bigger(max_int_part, item[i]->decimal_int_part());
|
||||||
set_if_smaller(unsigned_flag, args[i]->unsigned_flag);
|
set_if_smaller(unsigned_flag, item[i]->unsigned_flag);
|
||||||
}
|
}
|
||||||
int precision= MY_MIN(max_int_part + decimals, DECIMAL_MAX_PRECISION);
|
int precision= MY_MIN(max_int_part + decimals, DECIMAL_MAX_PRECISION);
|
||||||
fix_char_length(my_decimal_precision_to_length_no_truncation(precision,
|
fix_char_length(my_decimal_precision_to_length_no_truncation(precision,
|
||||||
@ -679,19 +679,19 @@ void Item_func::count_only_length(Item **item, uint nitems)
|
|||||||
result length/precision depends on argument ones.
|
result length/precision depends on argument ones.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Item_func::count_real_length()
|
void Item_func::count_real_length(Item **item, uint nitems)
|
||||||
{
|
{
|
||||||
uint32 length= 0;
|
uint32 length= 0;
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
max_length= 0;
|
max_length= 0;
|
||||||
for (uint i=0 ; i < arg_count ; i++)
|
for (uint i=0 ; i < nitems ; i++)
|
||||||
{
|
{
|
||||||
if (decimals != NOT_FIXED_DEC)
|
if (decimals != NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
set_if_bigger(decimals, args[i]->decimals);
|
set_if_bigger(decimals, item[i]->decimals);
|
||||||
set_if_bigger(length, (args[i]->max_length - args[i]->decimals));
|
set_if_bigger(length, (item[i]->max_length - item[i]->decimals));
|
||||||
}
|
}
|
||||||
set_if_bigger(max_length, args[i]->max_length);
|
set_if_bigger(max_length, item[i]->max_length);
|
||||||
}
|
}
|
||||||
if (decimals != NOT_FIXED_DEC)
|
if (decimals != NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
@ -809,7 +809,7 @@ void Item_num_op::fix_length_and_dec(void)
|
|||||||
if (r0 == REAL_RESULT || r1 == REAL_RESULT ||
|
if (r0 == REAL_RESULT || r1 == REAL_RESULT ||
|
||||||
r0 == STRING_RESULT || r1 ==STRING_RESULT)
|
r0 == STRING_RESULT || r1 ==STRING_RESULT)
|
||||||
{
|
{
|
||||||
count_real_length();
|
count_real_length(args, arg_count);
|
||||||
max_length= float_length(decimals);
|
max_length= float_length(decimals);
|
||||||
cached_result_type= REAL_RESULT;
|
cached_result_type= REAL_RESULT;
|
||||||
}
|
}
|
||||||
@ -6305,6 +6305,8 @@ bool Item_func_match::fix_index()
|
|||||||
|
|
||||||
for (i=1; i < arg_count; i++)
|
for (i=1; i < arg_count; i++)
|
||||||
{
|
{
|
||||||
|
if (args[i]->type() != FIELD_ITEM)
|
||||||
|
goto err;
|
||||||
item=(Item_field*)args[i];
|
item=(Item_field*)args[i];
|
||||||
for (keynr=0 ; keynr < fts ; keynr++)
|
for (keynr=0 ; keynr < fts ; keynr++)
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef ITEM_FUNC_INCLUDED
|
#ifndef ITEM_FUNC_INCLUDED
|
||||||
#define ITEM_FUNC_INCLUDED
|
#define ITEM_FUNC_INCLUDED
|
||||||
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2014, MariaDB
|
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
|
||||||
@ -40,6 +40,13 @@ protected:
|
|||||||
*/
|
*/
|
||||||
uint allowed_arg_cols;
|
uint allowed_arg_cols;
|
||||||
String *val_str_from_val_str_ascii(String *str, String *str2);
|
String *val_str_from_val_str_ascii(String *str, String *str2);
|
||||||
|
|
||||||
|
void count_only_length(Item **item, uint nitems);
|
||||||
|
void count_real_length(Item **item, uint nitems);
|
||||||
|
void count_decimal_length(Item **item, uint nitems);
|
||||||
|
void count_datetime_length(Item **item, uint nitems);
|
||||||
|
bool count_string_result_length(enum_field_types field_type,
|
||||||
|
Item **item, uint nitems);
|
||||||
public:
|
public:
|
||||||
uint arg_count;
|
uint arg_count;
|
||||||
/*
|
/*
|
||||||
@ -154,16 +161,10 @@ public:
|
|||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
void print_op(String *str, enum_query_type query_type);
|
void print_op(String *str, enum_query_type query_type);
|
||||||
void print_args(String *str, uint from, enum_query_type query_type);
|
void print_args(String *str, uint from, enum_query_type query_type);
|
||||||
void count_only_length(Item **item, uint nitems);
|
|
||||||
void count_real_length();
|
|
||||||
void count_decimal_length();
|
|
||||||
inline bool get_arg0_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
inline bool get_arg0_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
|
||||||
{
|
{
|
||||||
return (null_value=args[0]->get_date_with_conversion(ltime, fuzzy_date));
|
return (null_value=args[0]->get_date_with_conversion(ltime, fuzzy_date));
|
||||||
}
|
}
|
||||||
void count_datetime_length(Item **item, uint nitems);
|
|
||||||
bool count_string_result_length(enum_field_types field_type,
|
|
||||||
Item **item, uint nitems);
|
|
||||||
inline bool get_arg0_time(MYSQL_TIME *ltime)
|
inline bool get_arg0_time(MYSQL_TIME *ltime)
|
||||||
{
|
{
|
||||||
null_value= args[0]->get_time(ltime);
|
null_value= args[0]->get_time(ltime);
|
||||||
@ -253,7 +254,7 @@ public:
|
|||||||
char buf[256];
|
char buf[256];
|
||||||
String str(buf, sizeof(buf), system_charset_info);
|
String str(buf, sizeof(buf), system_charset_info);
|
||||||
str.length(0);
|
str.length(0);
|
||||||
print(&str, QT_ORDINARY);
|
print(&str, QT_NO_DATA_EXPANSION);
|
||||||
my_error(ER_DATA_OUT_OF_RANGE, MYF(0), type_name, str.c_ptr_safe());
|
my_error(ER_DATA_OUT_OF_RANGE, MYF(0), type_name, str.c_ptr_safe());
|
||||||
}
|
}
|
||||||
inline double raise_float_overflow()
|
inline double raise_float_overflow()
|
||||||
@ -444,7 +445,7 @@ class Item_func_hybrid_result_type: public Item_func
|
|||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
Item_result cached_result_type;
|
Item_result cached_result_type;
|
||||||
|
void fix_attributes(Item **item, uint nitems);
|
||||||
public:
|
public:
|
||||||
Item_func_hybrid_result_type() :Item_func(), cached_result_type(REAL_RESULT)
|
Item_func_hybrid_result_type() :Item_func(), cached_result_type(REAL_RESULT)
|
||||||
{ collation.set_numeric(); }
|
{ collation.set_numeric(); }
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef ITEM_GEOFUNC_INCLUDED
|
#ifndef ITEM_GEOFUNC_INCLUDED
|
||||||
#define ITEM_GEOFUNC_INCLUDED
|
#define ITEM_GEOFUNC_INCLUDED
|
||||||
|
|
||||||
/* Copyright (c) 2000, 2010 Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016 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
|
||||||
@ -191,7 +191,7 @@ public:
|
|||||||
if (args[i]->fixed && args[i]->field_type() != MYSQL_TYPE_GEOMETRY)
|
if (args[i]->fixed && args[i]->field_type() != MYSQL_TYPE_GEOMETRY)
|
||||||
{
|
{
|
||||||
String str;
|
String str;
|
||||||
args[i]->print(&str, QT_ORDINARY);
|
args[i]->print(&str, QT_NO_DATA_EXPANSION);
|
||||||
str.append('\0');
|
str.append('\0');
|
||||||
my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "non geometric",
|
my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "non geometric",
|
||||||
str.ptr());
|
str.ptr());
|
||||||
|
@ -281,7 +281,7 @@ const char *show_comp_option_name[]= {"YES", "NO", "DISABLED"};
|
|||||||
|
|
||||||
static const char *tc_heuristic_recover_names[]=
|
static const char *tc_heuristic_recover_names[]=
|
||||||
{
|
{
|
||||||
"COMMIT", "ROLLBACK", NullS
|
"OFF", "COMMIT", "ROLLBACK", NullS
|
||||||
};
|
};
|
||||||
static TYPELIB tc_heuristic_recover_typelib=
|
static TYPELIB tc_heuristic_recover_typelib=
|
||||||
{
|
{
|
||||||
@ -8660,6 +8660,7 @@ mysqld_get_one_option(int optid,
|
|||||||
log_error_file_ptr= const_cast<char*>("");
|
log_error_file_ptr= const_cast<char*>("");
|
||||||
break;
|
break;
|
||||||
case OPT_IGNORE_DB_DIRECTORY:
|
case OPT_IGNORE_DB_DIRECTORY:
|
||||||
|
opt_ignore_db_dirs= NULL; // will be set in ignore_db_dirs_process_additions
|
||||||
if (*argument == 0)
|
if (*argument == 0)
|
||||||
ignore_db_dirs_reset();
|
ignore_db_dirs_reset();
|
||||||
else
|
else
|
||||||
|
12
sql/mysqld.h
12
sql/mysqld.h
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2006, 2015, Oracle and/or its affiliates.
|
/* Copyright (c) 2006, 2016, 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
|
||||||
@ -623,7 +623,13 @@ enum enum_query_type
|
|||||||
/// Without character set introducers.
|
/// Without character set introducers.
|
||||||
QT_WITHOUT_INTRODUCERS= (1 << 1),
|
QT_WITHOUT_INTRODUCERS= (1 << 1),
|
||||||
/// view internal representation (like QT_ORDINARY except ORDER BY clause)
|
/// view internal representation (like QT_ORDINARY except ORDER BY clause)
|
||||||
QT_VIEW_INTERNAL= (1 << 2)
|
QT_VIEW_INTERNAL= (1 << 2),
|
||||||
|
/**
|
||||||
|
If an expression is constant, print the expression, not the value
|
||||||
|
it evaluates to. Should be used for error messages, so that they
|
||||||
|
don't reveal values.
|
||||||
|
*/
|
||||||
|
QT_NO_DATA_EXPANSION= (1 << 9),
|
||||||
};
|
};
|
||||||
|
|
||||||
/* query_id */
|
/* query_id */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2014, SkySQL Ab.
|
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
|
||||||
@ -742,9 +742,8 @@ static ACL_USER *find_user_wild(const char *host, const char *user, const char *
|
|||||||
static ACL_ROLE *find_acl_role(const char *user);
|
static ACL_ROLE *find_acl_role(const char *user);
|
||||||
static ROLE_GRANT_PAIR *find_role_grant_pair(const LEX_STRING *u, const LEX_STRING *h, const LEX_STRING *r);
|
static ROLE_GRANT_PAIR *find_role_grant_pair(const LEX_STRING *u, const LEX_STRING *h, const LEX_STRING *r);
|
||||||
static ACL_USER_BASE *find_acl_user_base(const char *user, const char *host);
|
static ACL_USER_BASE *find_acl_user_base(const char *user, const char *host);
|
||||||
static bool update_user_table(THD *thd, TABLE *table, const char *host,
|
static bool update_user_table(THD *, TABLE *, const char *, const char *, const
|
||||||
const char *user, const char *new_password,
|
char *, uint, bool);
|
||||||
uint new_password_len);
|
|
||||||
static my_bool acl_load(THD *thd, TABLE_LIST *tables);
|
static my_bool acl_load(THD *thd, TABLE_LIST *tables);
|
||||||
static my_bool grant_load(THD *thd, TABLE_LIST *tables);
|
static my_bool grant_load(THD *thd, TABLE_LIST *tables);
|
||||||
static inline void get_grantor(THD *thd, char* grantor);
|
static inline void get_grantor(THD *thd, char* grantor);
|
||||||
@ -1035,7 +1034,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
grant_version++; /* Privileges updated */
|
grant_version++; /* Privileges updated */
|
||||||
|
|
||||||
init_sql_alloc(&acl_memroot, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
|
init_sql_alloc(&acl_memroot, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
|
||||||
(void) my_init_dynamic_array(&acl_hosts,sizeof(ACL_HOST), 20, 50, MYF(0));
|
|
||||||
if (tables[0].table) // "host" table may not exist (e.g. in MySQL 5.6.7+)
|
if (tables[0].table) // "host" table may not exist (e.g. in MySQL 5.6.7+)
|
||||||
{
|
{
|
||||||
if (init_read_record(&read_record_info, thd, table= tables[0].table,
|
if (init_read_record(&read_record_info, thd, table= tables[0].table,
|
||||||
@ -1097,11 +1095,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
NULL, 1, 1, FALSE))
|
NULL, 1, 1, FALSE))
|
||||||
goto end;
|
goto end;
|
||||||
table->use_all_columns();
|
table->use_all_columns();
|
||||||
(void) my_init_dynamic_array(&acl_users,sizeof(ACL_USER), 50, 100, MYF(0));
|
|
||||||
(void) my_hash_init2(&acl_roles,50, &my_charset_utf8_bin,
|
|
||||||
0, 0, 0, (my_hash_get_key) acl_role_get_key, 0,
|
|
||||||
(void (*)(void *))free_acl_role, 0);
|
|
||||||
|
|
||||||
username_char_length= MY_MIN(table->field[1]->char_length(),
|
username_char_length= MY_MIN(table->field[1]->char_length(),
|
||||||
USERNAME_CHAR_LENGTH);
|
USERNAME_CHAR_LENGTH);
|
||||||
password_length= table->field[2]->field_length /
|
password_length= table->field[2]->field_length /
|
||||||
@ -1361,7 +1354,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
NULL, 1, 1, FALSE))
|
NULL, 1, 1, FALSE))
|
||||||
goto end;
|
goto end;
|
||||||
table->use_all_columns();
|
table->use_all_columns();
|
||||||
(void) my_init_dynamic_array(&acl_dbs,sizeof(ACL_DB), 50, 100, MYF(0));
|
|
||||||
while (!(read_record_info.read_record(&read_record_info)))
|
while (!(read_record_info.read_record(&read_record_info)))
|
||||||
{
|
{
|
||||||
ACL_DB db;
|
ACL_DB db;
|
||||||
@ -1423,8 +1415,6 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
end_read_record(&read_record_info);
|
end_read_record(&read_record_info);
|
||||||
freeze_size(&acl_dbs);
|
freeze_size(&acl_dbs);
|
||||||
|
|
||||||
(void) my_init_dynamic_array(&acl_proxy_users, sizeof(ACL_PROXY_USER),
|
|
||||||
50, 100, MYF(0));
|
|
||||||
if (tables[3].table)
|
if (tables[3].table)
|
||||||
{
|
{
|
||||||
if (init_read_record(&read_record_info, thd, table= tables[3].table,
|
if (init_read_record(&read_record_info, thd, table= tables[3].table,
|
||||||
@ -1461,10 +1451,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
NULL, 1, 1, FALSE))
|
NULL, 1, 1, FALSE))
|
||||||
goto end;
|
goto end;
|
||||||
table->use_all_columns();
|
table->use_all_columns();
|
||||||
/* account for every role mapping */
|
|
||||||
|
|
||||||
(void) my_hash_init2(&acl_roles_mappings, 50, system_charset_info, 0, 0, 0,
|
|
||||||
(my_hash_get_key) acl_role_map_get_key, 0, 0, 0);
|
|
||||||
MEM_ROOT temp_root;
|
MEM_ROOT temp_root;
|
||||||
init_alloc_root(&temp_root, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
|
init_alloc_root(&temp_root, ACL_ALLOC_BLOCK_SIZE, 0, MYF(0));
|
||||||
while (!(read_record_info.read_record(&read_record_info)))
|
while (!(read_record_info.read_record(&read_record_info)))
|
||||||
@ -1503,6 +1490,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
return_val= FALSE;
|
return_val= FALSE;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
end_read_record(&read_record_info);
|
||||||
thd->variables.sql_mode= old_sql_mode;
|
thd->variables.sql_mode= old_sql_mode;
|
||||||
DBUG_RETURN(return_val);
|
DBUG_RETURN(return_val);
|
||||||
}
|
}
|
||||||
@ -1519,12 +1507,12 @@ void acl_free(bool end)
|
|||||||
delete_dynamic(&acl_proxy_users);
|
delete_dynamic(&acl_proxy_users);
|
||||||
my_hash_free(&acl_check_hosts);
|
my_hash_free(&acl_check_hosts);
|
||||||
my_hash_free(&acl_roles_mappings);
|
my_hash_free(&acl_roles_mappings);
|
||||||
plugin_unlock(0, native_password_plugin);
|
|
||||||
plugin_unlock(0, old_password_plugin);
|
|
||||||
if (!end)
|
if (!end)
|
||||||
acl_cache->clear(1); /* purecov: inspected */
|
acl_cache->clear(1); /* purecov: inspected */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
plugin_unlock(0, native_password_plugin);
|
||||||
|
plugin_unlock(0, old_password_plugin);
|
||||||
delete acl_cache;
|
delete acl_cache;
|
||||||
acl_cache=0;
|
acl_cache=0;
|
||||||
}
|
}
|
||||||
@ -1605,6 +1593,15 @@ my_bool acl_reload(THD *thd)
|
|||||||
old_acl_roles_mappings= acl_roles_mappings;
|
old_acl_roles_mappings= acl_roles_mappings;
|
||||||
old_acl_proxy_users= acl_proxy_users;
|
old_acl_proxy_users= acl_proxy_users;
|
||||||
old_acl_dbs= acl_dbs;
|
old_acl_dbs= acl_dbs;
|
||||||
|
my_init_dynamic_array(&acl_hosts, sizeof(ACL_HOST), 20, 50, MYF(0));
|
||||||
|
my_init_dynamic_array(&acl_users, sizeof(ACL_USER), 50, 100, MYF(0));
|
||||||
|
my_init_dynamic_array(&acl_dbs, sizeof(ACL_DB), 50, 100, MYF(0));
|
||||||
|
my_init_dynamic_array(&acl_proxy_users, sizeof(ACL_PROXY_USER), 50, 100, MYF(0));
|
||||||
|
my_hash_init2(&acl_roles,50, &my_charset_utf8_bin,
|
||||||
|
0, 0, 0, (my_hash_get_key) acl_role_get_key, 0,
|
||||||
|
(void (*)(void *))free_acl_role, 0);
|
||||||
|
my_hash_init2(&acl_roles_mappings, 50, system_charset_info, 0, 0, 0,
|
||||||
|
(my_hash_get_key) acl_role_map_get_key, 0, 0, 0);
|
||||||
old_mem= acl_memroot;
|
old_mem= acl_memroot;
|
||||||
delete_dynamic(&acl_wild_hosts);
|
delete_dynamic(&acl_wild_hosts);
|
||||||
my_hash_free(&acl_check_hosts);
|
my_hash_free(&acl_check_hosts);
|
||||||
@ -2611,6 +2608,7 @@ bool change_password(THD *thd, const char *host, const char *user,
|
|||||||
enum_binlog_format save_binlog_format;
|
enum_binlog_format save_binlog_format;
|
||||||
uint new_password_len= (uint) strlen(new_password);
|
uint new_password_len= (uint) strlen(new_password);
|
||||||
bool result= 1;
|
bool result= 1;
|
||||||
|
bool use_salt= 0;
|
||||||
DBUG_ENTER("change_password");
|
DBUG_ENTER("change_password");
|
||||||
DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'",
|
DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'",
|
||||||
host,user,new_password));
|
host,user,new_password));
|
||||||
@ -2668,6 +2666,7 @@ bool change_password(THD *thd, const char *host, const char *user,
|
|||||||
acl_user->auth_string.length= new_password_len;
|
acl_user->auth_string.length= new_password_len;
|
||||||
set_user_salt(acl_user, new_password, new_password_len);
|
set_user_salt(acl_user, new_password, new_password_len);
|
||||||
set_user_plugin(acl_user, new_password_len);
|
set_user_plugin(acl_user, new_password_len);
|
||||||
|
use_salt= 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE,
|
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE,
|
||||||
@ -2676,7 +2675,7 @@ bool change_password(THD *thd, const char *host, const char *user,
|
|||||||
if (update_user_table(thd, table,
|
if (update_user_table(thd, table,
|
||||||
safe_str(acl_user->host.hostname),
|
safe_str(acl_user->host.hostname),
|
||||||
safe_str(acl_user->user.str),
|
safe_str(acl_user->user.str),
|
||||||
new_password, new_password_len))
|
new_password, new_password_len, use_salt))
|
||||||
{
|
{
|
||||||
mysql_mutex_unlock(&acl_cache->lock); /* purecov: deadcode */
|
mysql_mutex_unlock(&acl_cache->lock); /* purecov: deadcode */
|
||||||
goto end;
|
goto end;
|
||||||
@ -2972,7 +2971,8 @@ bool hostname_requires_resolving(const char *hostname)
|
|||||||
|
|
||||||
static bool update_user_table(THD *thd, TABLE *table,
|
static bool update_user_table(THD *thd, TABLE *table,
|
||||||
const char *host, const char *user,
|
const char *host, const char *user,
|
||||||
const char *new_password, uint new_password_len)
|
const char *new_password, uint new_password_len,
|
||||||
|
bool reset_plugin)
|
||||||
{
|
{
|
||||||
char user_key[MAX_KEY_LENGTH];
|
char user_key[MAX_KEY_LENGTH];
|
||||||
int error;
|
int error;
|
||||||
@ -2995,6 +2995,11 @@ static bool update_user_table(THD *thd, TABLE *table,
|
|||||||
}
|
}
|
||||||
store_record(table,record[1]);
|
store_record(table,record[1]);
|
||||||
table->field[2]->store(new_password, new_password_len, system_charset_info);
|
table->field[2]->store(new_password, new_password_len, system_charset_info);
|
||||||
|
if (reset_plugin && table->s->fields >= 41)
|
||||||
|
{
|
||||||
|
table->field[40]->reset();
|
||||||
|
table->field[41]->reset();
|
||||||
|
}
|
||||||
if ((error=table->file->ha_update_row(table->record[1],table->record[0])) &&
|
if ((error=table->file->ha_update_row(table->record[1],table->record[0])) &&
|
||||||
error != HA_ERR_RECORD_IS_THE_SAME)
|
error != HA_ERR_RECORD_IS_THE_SAME)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2016, MariaDB
|
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
|
||||||
@ -2100,6 +2100,18 @@ public:
|
|||||||
current_stmt_binlog_format == BINLOG_FORMAT_ROW);
|
current_stmt_binlog_format == BINLOG_FORMAT_ROW);
|
||||||
return current_stmt_binlog_format == BINLOG_FORMAT_ROW;
|
return current_stmt_binlog_format == BINLOG_FORMAT_ROW;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
Determine if binlogging is disabled for this session
|
||||||
|
@retval 0 if the current statement binlogging is disabled
|
||||||
|
(could be because of binlog closed/binlog option
|
||||||
|
is set to false).
|
||||||
|
@retval 1 if the current statement will be binlogged
|
||||||
|
*/
|
||||||
|
inline bool is_current_stmt_binlog_disabled() const
|
||||||
|
{
|
||||||
|
return (!(variables.option_bits & OPTION_BIN_LOG) ||
|
||||||
|
!mysql_bin_log.is_open());
|
||||||
|
}
|
||||||
|
|
||||||
enum binlog_filter_state
|
enum binlog_filter_state
|
||||||
{
|
{
|
||||||
|
@ -1196,7 +1196,8 @@ void end_connection(THD *thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!thd->killed && (net->error && net->vio != 0))
|
if (!thd->killed && (net->error && net->vio != 0))
|
||||||
thd->print_aborted_warning(1, ER(ER_UNKNOWN_ERROR));
|
thd->print_aborted_warning(1,
|
||||||
|
thd->get_stmt_da()->is_error() ? thd->get_stmt_da()->message() : ER(ER_UNKNOWN_ERROR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2016, 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
|
||||||
@ -1588,9 +1588,10 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
else
|
else
|
||||||
table->file->insert_id_for_cur_row= insert_id_for_cur_row;
|
table->file->insert_id_for_cur_row= insert_id_for_cur_row;
|
||||||
bool is_duplicate_key_error;
|
bool is_duplicate_key_error;
|
||||||
if (table->file->is_fatal_error(error, HA_CHECK_DUP))
|
if (table->file->is_fatal_error(error, HA_CHECK_ALL))
|
||||||
goto err;
|
goto err;
|
||||||
is_duplicate_key_error= table->file->is_fatal_error(error, 0);
|
is_duplicate_key_error=
|
||||||
|
table->file->is_fatal_error(error, HA_CHECK_ALL & ~HA_CHECK_DUP);
|
||||||
if (!is_duplicate_key_error)
|
if (!is_duplicate_key_error)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -1718,7 +1719,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
error != HA_ERR_RECORD_IS_THE_SAME)
|
error != HA_ERR_RECORD_IS_THE_SAME)
|
||||||
{
|
{
|
||||||
if (info->ignore &&
|
if (info->ignore &&
|
||||||
!table->file->is_fatal_error(error, HA_CHECK_DUP_KEY))
|
!table->file->is_fatal_error(error, HA_CHECK_ALL))
|
||||||
{
|
{
|
||||||
if (!(thd->variables.old_behavior &
|
if (!(thd->variables.old_behavior &
|
||||||
OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE))
|
OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE))
|
||||||
@ -1848,7 +1849,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
|
|||||||
{
|
{
|
||||||
DEBUG_SYNC(thd, "write_row_noreplace");
|
DEBUG_SYNC(thd, "write_row_noreplace");
|
||||||
if (!info->ignore ||
|
if (!info->ignore ||
|
||||||
table->file->is_fatal_error(error, HA_CHECK_DUP))
|
table->file->is_fatal_error(error, HA_CHECK_ALL))
|
||||||
goto err;
|
goto err;
|
||||||
if (!(thd->variables.old_behavior &
|
if (!(thd->variables.old_behavior &
|
||||||
OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE))
|
OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE))
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2015, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2016, 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
|
||||||
@ -255,6 +255,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||||||
{
|
{
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
thd_proc_info(thd, "executing");
|
||||||
/*
|
/*
|
||||||
Let us emit an error if we are loading data to table which is used
|
Let us emit an error if we are loading data to table which is used
|
||||||
in subselect in SET clause like we do it for INSERT.
|
in subselect in SET clause like we do it for INSERT.
|
||||||
|
@ -427,7 +427,7 @@ MY_LOCALE my_locale_da_DK
|
|||||||
|
|
||||||
/***** LOCALE BEGIN de_AT: German - Austria *****/
|
/***** LOCALE BEGIN de_AT: German - Austria *****/
|
||||||
static const char *my_locale_month_names_de_AT[13] =
|
static const char *my_locale_month_names_de_AT[13] =
|
||||||
{"Jänner","Feber","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember", NullS };
|
{"Jänner","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember", NullS };
|
||||||
static const char *my_locale_ab_month_names_de_AT[13] =
|
static const char *my_locale_ab_month_names_de_AT[13] =
|
||||||
{"Jän","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez", NullS };
|
{"Jän","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez", NullS };
|
||||||
static const char *my_locale_day_names_de_AT[8] =
|
static const char *my_locale_day_names_de_AT[8] =
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user