summaryrefslogtreecommitdiffstats
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plugin/auth_ed25519/ref10/fe_mul.c21
-rw-r--r--plugin/auth_ed25519/ref10/fe_sq.c21
-rw-r--r--plugin/auth_ed25519/ref10/fe_sq2.c21
-rw-r--r--plugin/auth_ed25519/ref10/fe_tobytes.c37
-rw-r--r--plugin/auth_ed25519/ref10/ge_scalarmult_base.c2
-rw-r--r--plugin/auth_ed25519/ref10/sc_muladd.c46
-rw-r--r--plugin/auth_ed25519/ref10/sc_reduce.c34
-rw-r--r--plugin/auth_gssapi/README.md10
-rw-r--r--plugin/auth_pam/auth_pam_base.c2
-rw-r--r--plugin/cracklib_password_check/CMakeLists.txt3
-rw-r--r--plugin/feedback/feedback.cc4
-rw-r--r--plugin/feedback/feedback.h1
-rw-r--r--plugin/feedback/url_http.cc18
-rw-r--r--plugin/hashicorp_key_management/CMakeLists.txt7
-rw-r--r--plugin/hashicorp_key_management/hashicorp_key_management_plugin.cc80
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/suite.pm4
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_cache_after_recreate.test2
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_check_kv_version.test6
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_migration.test2
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_rotation_age.test2
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.opt1
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.test6
-rw-r--r--plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_url_prefix.test4
-rw-r--r--plugin/test_sql_service/test_sql_service.c3
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6.result12
-rw-r--r--plugin/type_inet/mysql-test/type_inet/type_inet6.test11
-rw-r--r--plugin/type_inet/sql_type_inet.cc2
-rw-r--r--plugin/type_mysql_timestamp/plugin.cc14
-rw-r--r--plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.result422
-rw-r--r--plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.test110
-rw-r--r--plugin/type_uuid/plugin.cc8
-rw-r--r--plugin/type_uuid/sql_type_uuid.h3
-rw-r--r--plugin/versioning/versioning.cc8
33 files changed, 739 insertions, 188 deletions
diff --git a/plugin/auth_ed25519/ref10/fe_mul.c b/plugin/auth_ed25519/ref10/fe_mul.c
index 26ca8b36..8ccad3c3 100644
--- a/plugin/auth_ed25519/ref10/fe_mul.c
+++ b/plugin/auth_ed25519/ref10/fe_mul.c
@@ -1,5 +1,6 @@
#include "fe.h"
#include "crypto_int64.h"
+#include "crypto_uint64.h"
/*
h = f * g
@@ -179,16 +180,16 @@ void fe_mul(fe h,const fe f,const fe g)
crypto_int64 h7 = f0g7+f1g6 +f2g5 +f3g4 +f4g3 +f5g2 +f6g1 +f7g0 +f8g9_19+f9g8_19;
crypto_int64 h8 = f0g8+f1g7_2 +f2g6 +f3g5_2 +f4g4 +f5g3_2 +f6g2 +f7g1_2 +f8g0 +f9g9_38;
crypto_int64 h9 = f0g9+f1g8 +f2g7 +f3g6 +f4g5 +f5g4 +f6g3 +f7g2 +f8g1 +f9g0 ;
- crypto_int64 carry0;
- crypto_int64 carry1;
- crypto_int64 carry2;
- crypto_int64 carry3;
- crypto_int64 carry4;
- crypto_int64 carry5;
- crypto_int64 carry6;
- crypto_int64 carry7;
- crypto_int64 carry8;
- crypto_int64 carry9;
+ crypto_uint64 carry0;
+ crypto_uint64 carry1;
+ crypto_uint64 carry2;
+ crypto_uint64 carry3;
+ crypto_uint64 carry4;
+ crypto_uint64 carry5;
+ crypto_uint64 carry6;
+ crypto_uint64 carry7;
+ crypto_uint64 carry8;
+ crypto_uint64 carry9;
/*
|h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
diff --git a/plugin/auth_ed25519/ref10/fe_sq.c b/plugin/auth_ed25519/ref10/fe_sq.c
index 8dd11984..3c718033 100644
--- a/plugin/auth_ed25519/ref10/fe_sq.c
+++ b/plugin/auth_ed25519/ref10/fe_sq.c
@@ -1,5 +1,6 @@
#include "fe.h"
#include "crypto_int64.h"
+#include "crypto_uint64.h"
/*
h = f * f
@@ -106,16 +107,16 @@ void fe_sq(fe h,const fe f)
crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38;
crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
- crypto_int64 carry0;
- crypto_int64 carry1;
- crypto_int64 carry2;
- crypto_int64 carry3;
- crypto_int64 carry4;
- crypto_int64 carry5;
- crypto_int64 carry6;
- crypto_int64 carry7;
- crypto_int64 carry8;
- crypto_int64 carry9;
+ crypto_uint64 carry0;
+ crypto_uint64 carry1;
+ crypto_uint64 carry2;
+ crypto_uint64 carry3;
+ crypto_uint64 carry4;
+ crypto_uint64 carry5;
+ crypto_uint64 carry6;
+ crypto_uint64 carry7;
+ crypto_uint64 carry8;
+ crypto_uint64 carry9;
carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
diff --git a/plugin/auth_ed25519/ref10/fe_sq2.c b/plugin/auth_ed25519/ref10/fe_sq2.c
index 026ed3aa..97c03cf4 100644
--- a/plugin/auth_ed25519/ref10/fe_sq2.c
+++ b/plugin/auth_ed25519/ref10/fe_sq2.c
@@ -1,5 +1,6 @@
#include "fe.h"
#include "crypto_int64.h"
+#include "crypto_uint64.h"
/*
h = 2 * f * f
@@ -106,16 +107,16 @@ void fe_sq2(fe h,const fe f)
crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4 +f9f9_38;
crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
- crypto_int64 carry0;
- crypto_int64 carry1;
- crypto_int64 carry2;
- crypto_int64 carry3;
- crypto_int64 carry4;
- crypto_int64 carry5;
- crypto_int64 carry6;
- crypto_int64 carry7;
- crypto_int64 carry8;
- crypto_int64 carry9;
+ crypto_uint64 carry0;
+ crypto_uint64 carry1;
+ crypto_uint64 carry2;
+ crypto_uint64 carry3;
+ crypto_uint64 carry4;
+ crypto_uint64 carry5;
+ crypto_uint64 carry6;
+ crypto_uint64 carry7;
+ crypto_uint64 carry8;
+ crypto_uint64 carry9;
h0 += h0;
h1 += h1;
diff --git a/plugin/auth_ed25519/ref10/fe_tobytes.c b/plugin/auth_ed25519/ref10/fe_tobytes.c
index 0a63baf9..a4dff2c1 100644
--- a/plugin/auth_ed25519/ref10/fe_tobytes.c
+++ b/plugin/auth_ed25519/ref10/fe_tobytes.c
@@ -1,4 +1,5 @@
#include "fe.h"
+#include "crypto_uint32.h"
/*
Preconditions:
@@ -38,16 +39,16 @@ void fe_tobytes(unsigned char *s,const fe h)
crypto_int32 h8 = h[8];
crypto_int32 h9 = h[9];
crypto_int32 q;
- crypto_int32 carry0;
- crypto_int32 carry1;
- crypto_int32 carry2;
- crypto_int32 carry3;
- crypto_int32 carry4;
- crypto_int32 carry5;
- crypto_int32 carry6;
- crypto_int32 carry7;
- crypto_int32 carry8;
- crypto_int32 carry9;
+ crypto_uint32 carry0;
+ crypto_uint32 carry1;
+ crypto_uint32 carry2;
+ crypto_uint32 carry3;
+ crypto_uint32 carry4;
+ crypto_uint32 carry5;
+ crypto_uint32 carry6;
+ crypto_uint32 carry7;
+ crypto_uint32 carry8;
+ crypto_uint32 carry9;
q = (19 * h9 + (((crypto_int32) 1) << 24)) >> 25;
q = (h0 + q) >> 26;
@@ -87,32 +88,32 @@ void fe_tobytes(unsigned char *s,const fe h)
s[0] = h0 >> 0;
s[1] = h0 >> 8;
s[2] = h0 >> 16;
- s[3] = (h0 >> 24) | (h1 << 2);
+ s[3] = (h0 >> 24) | ((crypto_uint32)h1 << 2);
s[4] = h1 >> 6;
s[5] = h1 >> 14;
- s[6] = (h1 >> 22) | (h2 << 3);
+ s[6] = (h1 >> 22) | ((crypto_uint32)h2 << 3);
s[7] = h2 >> 5;
s[8] = h2 >> 13;
- s[9] = (h2 >> 21) | (h3 << 5);
+ s[9] = (h2 >> 21) | ((crypto_uint32)h3 << 5);
s[10] = h3 >> 3;
s[11] = h3 >> 11;
- s[12] = (h3 >> 19) | (h4 << 6);
+ s[12] = (h3 >> 19) | ((crypto_uint32)h4 << 6);
s[13] = h4 >> 2;
s[14] = h4 >> 10;
s[15] = h4 >> 18;
s[16] = h5 >> 0;
s[17] = h5 >> 8;
s[18] = h5 >> 16;
- s[19] = (h5 >> 24) | (h6 << 1);
+ s[19] = (h5 >> 24) | ((crypto_uint32)h6 << 1);
s[20] = h6 >> 7;
s[21] = h6 >> 15;
- s[22] = (h6 >> 23) | (h7 << 3);
+ s[22] = (h6 >> 23) | ((crypto_uint32)h7 << 3);
s[23] = h7 >> 5;
s[24] = h7 >> 13;
- s[25] = (h7 >> 21) | (h8 << 4);
+ s[25] = (h7 >> 21) | ((crypto_uint32)h8 << 4);
s[26] = h8 >> 4;
s[27] = h8 >> 12;
- s[28] = (h8 >> 20) | (h9 << 6);
+ s[28] = (h8 >> 20) | ((crypto_uint32)h9 << 6);
s[29] = h9 >> 2;
s[30] = h9 >> 10;
s[31] = h9 >> 18;
diff --git a/plugin/auth_ed25519/ref10/ge_scalarmult_base.c b/plugin/auth_ed25519/ref10/ge_scalarmult_base.c
index 421e4fa0..9a4ced21 100644
--- a/plugin/auth_ed25519/ref10/ge_scalarmult_base.c
+++ b/plugin/auth_ed25519/ref10/ge_scalarmult_base.c
@@ -35,7 +35,7 @@ static void select(ge_precomp *t,int pos,signed char b)
{
ge_precomp minust;
unsigned char bnegative = negative(b);
- unsigned char babs = b - (((-bnegative) & b) << 1);
+ unsigned char babs = b - ((unsigned char)((-bnegative) & b) << 1);
ge_precomp_0(t);
cmov(t,&base[pos][0],equal(babs,1));
diff --git a/plugin/auth_ed25519/ref10/sc_muladd.c b/plugin/auth_ed25519/ref10/sc_muladd.c
index 6f1e9d02..7bf222be 100644
--- a/plugin/auth_ed25519/ref10/sc_muladd.c
+++ b/plugin/auth_ed25519/ref10/sc_muladd.c
@@ -95,29 +95,29 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
crypto_int64 s21;
crypto_int64 s22;
crypto_int64 s23;
- crypto_int64 carry0;
- crypto_int64 carry1;
- crypto_int64 carry2;
- crypto_int64 carry3;
- crypto_int64 carry4;
- crypto_int64 carry5;
- crypto_int64 carry6;
- crypto_int64 carry7;
- crypto_int64 carry8;
- crypto_int64 carry9;
- crypto_int64 carry10;
- crypto_int64 carry11;
- crypto_int64 carry12;
- crypto_int64 carry13;
- crypto_int64 carry14;
- crypto_int64 carry15;
- crypto_int64 carry16;
- crypto_int64 carry17;
- crypto_int64 carry18;
- crypto_int64 carry19;
- crypto_int64 carry20;
- crypto_int64 carry21;
- crypto_int64 carry22;
+ crypto_uint64 carry0;
+ crypto_uint64 carry1;
+ crypto_uint64 carry2;
+ crypto_uint64 carry3;
+ crypto_uint64 carry4;
+ crypto_uint64 carry5;
+ crypto_uint64 carry6;
+ crypto_uint64 carry7;
+ crypto_uint64 carry8;
+ crypto_uint64 carry9;
+ crypto_uint64 carry10;
+ crypto_uint64 carry11;
+ crypto_uint64 carry12;
+ crypto_uint64 carry13;
+ crypto_uint64 carry14;
+ crypto_uint64 carry15;
+ crypto_uint64 carry16;
+ crypto_uint64 carry17;
+ crypto_uint64 carry18;
+ crypto_uint64 carry19;
+ crypto_uint64 carry20;
+ crypto_uint64 carry21;
+ crypto_uint64 carry22;
s0 = c0 + a0*b0;
s1 = c1 + a0*b1 + a1*b0;
diff --git a/plugin/auth_ed25519/ref10/sc_reduce.c b/plugin/auth_ed25519/ref10/sc_reduce.c
index d01f5a57..422d94b6 100644
--- a/plugin/auth_ed25519/ref10/sc_reduce.c
+++ b/plugin/auth_ed25519/ref10/sc_reduce.c
@@ -58,23 +58,23 @@ void sc_reduce(unsigned char *s)
crypto_int64 s21 = 2097151 & (load_3(s + 55) >> 1);
crypto_int64 s22 = 2097151 & (load_4(s + 57) >> 6);
crypto_int64 s23 = (load_4(s + 60) >> 3);
- crypto_int64 carry0;
- crypto_int64 carry1;
- crypto_int64 carry2;
- crypto_int64 carry3;
- crypto_int64 carry4;
- crypto_int64 carry5;
- crypto_int64 carry6;
- crypto_int64 carry7;
- crypto_int64 carry8;
- crypto_int64 carry9;
- crypto_int64 carry10;
- crypto_int64 carry11;
- crypto_int64 carry12;
- crypto_int64 carry13;
- crypto_int64 carry14;
- crypto_int64 carry15;
- crypto_int64 carry16;
+ crypto_uint64 carry0;
+ crypto_uint64 carry1;
+ crypto_uint64 carry2;
+ crypto_uint64 carry3;
+ crypto_uint64 carry4;
+ crypto_uint64 carry5;
+ crypto_uint64 carry6;
+ crypto_uint64 carry7;
+ crypto_uint64 carry8;
+ crypto_uint64 carry9;
+ crypto_uint64 carry10;
+ crypto_uint64 carry11;
+ crypto_uint64 carry12;
+ crypto_uint64 carry13;
+ crypto_uint64 carry14;
+ crypto_uint64 carry15;
+ crypto_uint64 carry16;
s11 += s23 * 666643;
s12 += s23 * 470296;
diff --git a/plugin/auth_gssapi/README.md b/plugin/auth_gssapi/README.md
index ea8deaaf..63598223 100644
--- a/plugin/auth_gssapi/README.md
+++ b/plugin/auth_gssapi/README.md
@@ -49,7 +49,7 @@ Usually nothing need to be done. MariaDB server should to run on a domain joine
Creating service principal is not required here (but you can still do it using [_setspn_](https://technet.microsoft.com/en-us/library/cc731241.aspx) tool)
-# Installing plugin
+## Installing plugin
- Start the server
- On Unix, edit my the my.cnf/my.ini configuration file, set the parameter gssapi-keytab-path to point to previously
@@ -72,7 +72,7 @@ configure alternative principal name with
INSTALL SONAME 'auth_gssapi'
```
-#Creating users
+## Creating users
Now, you can create a user for GSSAPI/SSPI authentication. CREATE USER command, for Kerberos user
would be like this (*long* form, see below for short one)
@@ -94,7 +94,7 @@ CREATE USER usr1 IDENTIFIED WITH gssapi;
If this syntax is used, realm part is *not* used for comparison
thus 'usr1@EXAMPLE.COM', 'usr1@EXAMPLE.CO.UK' and 'mymachine\usr1' will all identify as 'usr1'.
-#Login as GSSAPI user with command line clients
+## Login as GSSAPI user with command line clients
Using command line client, do
@@ -102,7 +102,7 @@ Using command line client, do
mysql --plugin-dir=/path/to/plugin-dir -u usr1
```
-#Plugin variables
+## Plugin variables
- **gssapi-keytab-path** (Unix only) - Path to the server keytab file
- **gssapi-principal-name** - name of the service principal.
- **gssapi-mech-name** (Windows only) - Name of the SSPI package used by server. Can be either 'Kerberos' or 'Negotiate'.
@@ -111,7 +111,7 @@ mysql --plugin-dir=/path/to/plugin-dir -u usr1
to allow non-domain environment (e.g if server does not run in domain environment).
-#Implementation
+## Implementation
Overview of the protocol between client and server
diff --git a/plugin/auth_pam/auth_pam_base.c b/plugin/auth_pam/auth_pam_base.c
index 1e8f4a08..153712df 100644
--- a/plugin/auth_pam/auth_pam_base.c
+++ b/plugin/auth_pam/auth_pam_base.c
@@ -99,7 +99,7 @@ static int conv(int n, const struct pam_message **msg,
freeing it is the responsibility of the caller */
if (*resp == 0)
{
- *resp = calloc(sizeof(struct pam_response), n);
+ *resp = calloc(n, sizeof(struct pam_response));
if (*resp == 0)
return PAM_BUF_ERR;
}
diff --git a/plugin/cracklib_password_check/CMakeLists.txt b/plugin/cracklib_password_check/CMakeLists.txt
index 79b3b80f..26349583 100644
--- a/plugin/cracklib_password_check/CMakeLists.txt
+++ b/plugin/cracklib_password_check/CMakeLists.txt
@@ -32,11 +32,12 @@ IF (HAVE_ALLOCA_H AND HAVE_CRACK_H AND HAVE_LIBCRACK AND HAVE_MEMCPY)
IF(CHECKMODULE AND SEMODULE_PACKAGE)
FOREACH(pol mariadb-plugin-cracklib-password-check)
SET(src ${CMAKE_CURRENT_SOURCE_DIR}/policy/selinux/${pol}.te)
- SET(tmp ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${pol}-pp.dir/${pol}.mod)
+ SET(tmp ${CMAKE_CURRENT_BINARY_DIR}/${pol}.mod)
SET(out ${CMAKE_CURRENT_BINARY_DIR}/${pol}.pp)
ADD_CUSTOM_COMMAND(OUTPUT ${out}
COMMAND ${CHECKMODULE} -M -m ${src} -o ${tmp}
COMMAND ${SEMODULE_PACKAGE} -m ${tmp} -o ${out}
+ COMMAND ${CMAKE_COMMAND} -E remove ${tmp}
DEPENDS ${src})
ADD_CUSTOM_TARGET(${pol}-pp ALL DEPENDS ${out})
INSTALL(FILES ${out} DESTINATION ${inst_location}/policy/selinux COMPONENT cracklib-password-check)
diff --git a/plugin/feedback/feedback.cc b/plugin/feedback/feedback.cc
index ba4850f4..845e40cc 100644
--- a/plugin/feedback/feedback.cc
+++ b/plugin/feedback/feedback.cc
@@ -339,6 +339,10 @@ static int free(void *p)
shutdown_plugin= true;
mysql_cond_signal(&sleep_condition);
mysql_mutex_unlock(&sleep_mutex);
+
+ for (uint i= 0; i < url_count; i++)
+ urls[i]->abort();
+
pthread_join(sender_thread, NULL);
mysql_mutex_destroy(&sleep_mutex);
diff --git a/plugin/feedback/feedback.h b/plugin/feedback/feedback.h
index 04fe1ab6..6021eb85 100644
--- a/plugin/feedback/feedback.h
+++ b/plugin/feedback/feedback.h
@@ -52,6 +52,7 @@ class Url {
const char *url() { return full_url.str; }
size_t url_length() { return full_url.length; }
+ virtual void abort() = 0;
virtual int send(const char* data, size_t data_length) = 0;
virtual int set_proxy(const char *proxy, size_t proxy_len)
{
diff --git a/plugin/feedback/url_http.cc b/plugin/feedback/url_http.cc
index 98116dd0..590bb06c 100644
--- a/plugin/feedback/url_http.cc
+++ b/plugin/feedback/url_http.cc
@@ -37,8 +37,9 @@ static const uint FOR_WRITING= 1;
class Url_http: public Url {
protected:
const LEX_STRING host, port, path;
- bool ssl;
LEX_STRING proxy_host, proxy_port;
+ my_socket fd;
+ bool ssl;
bool use_proxy()
{
@@ -47,7 +48,8 @@ class Url_http: public Url {
Url_http(LEX_STRING &url_arg, LEX_STRING &host_arg,
LEX_STRING &port_arg, LEX_STRING &path_arg, bool ssl_arg) :
- Url(url_arg), host(host_arg), port(port_arg), path(path_arg), ssl(ssl_arg)
+ Url(url_arg), host(host_arg), port(port_arg), path(path_arg),
+ fd(INVALID_SOCKET), ssl(ssl_arg)
{
proxy_host.length= 0;
}
@@ -60,6 +62,7 @@ class Url_http: public Url {
}
public:
+ void abort();
int send(const char* data, size_t data_length);
int set_proxy(const char *proxy, size_t proxy_len)
{
@@ -158,13 +161,18 @@ Url* http_create(const char *url, size_t url_length)
return new Url_http(full_url, host, port, path, ssl);
}
+void Url_http::abort()
+{
+ if (fd != INVALID_SOCKET)
+ closesocket(fd); // interrupt I/O waits
+}
+
/* do the vio_write and check that all data were sent ok */
#define write_check(VIO, DATA, LEN) \
(vio_write((VIO), (uchar*)(DATA), (LEN)) != (LEN))
int Url_http::send(const char* data, size_t data_length)
{
- my_socket fd= INVALID_SOCKET;
char buf[1024];
size_t len= 0;
@@ -180,6 +188,7 @@ int Url_http::send(const char* data, size_t data_length)
return 1;
}
+ DBUG_ASSERT(fd == INVALID_SOCKET);
for (addr= addrs; addr != NULL; addr= addr->ai_next)
{
fd= socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
@@ -208,6 +217,7 @@ int Url_http::send(const char* data, size_t data_length)
sql_print_error("feedback plugin: vio_new failed for url '%s'",
full_url.str);
closesocket(fd);
+ fd= INVALID_SOCKET;
return 1;
}
@@ -236,6 +246,7 @@ int Url_http::send(const char* data, size_t data_length)
free_vio_ssl_acceptor_fd(ssl_fd);
closesocket(fd);
vio_delete(vio);
+ fd= INVALID_SOCKET;
return 1;
}
}
@@ -334,6 +345,7 @@ int Url_http::send(const char* data, size_t data_length)
}
#endif
+ fd= INVALID_SOCKET;
return res;
}
diff --git a/plugin/hashicorp_key_management/CMakeLists.txt b/plugin/hashicorp_key_management/CMakeLists.txt
index bd1eee84..809b480f 100644
--- a/plugin/hashicorp_key_management/CMakeLists.txt
+++ b/plugin/hashicorp_key_management/CMakeLists.txt
@@ -1,10 +1,13 @@
-INCLUDE(FindCURL)
+FIND_PACKAGE(CURL)
IF(NOT CURL_FOUND)
# Can't build plugin
+ MESSAGE_ONCE(WARNING "Hashicorp Key Management plugin requires curl development package")
RETURN()
ENDIF()
-INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
+SET_PACKAGE_PROPERTIES(CURL PROPERTIES TYPE REQUIRED)
+
+INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
set(CPACK_RPM_hashicorp-key-management_PACKAGE_SUMMARY "Hashicorp Key Management plugin for MariaDB" PARENT_SCOPE)
set(CPACK_RPM_hashicorp-key-management_PACKAGE_DESCRIPTION "This encryption plugin uses Hashicorp Vault for storing encryption
diff --git a/plugin/hashicorp_key_management/hashicorp_key_management_plugin.cc b/plugin/hashicorp_key_management/hashicorp_key_management_plugin.cc
index bdc2f734..dfeb1aca 100644
--- a/plugin/hashicorp_key_management/hashicorp_key_management_plugin.cc
+++ b/plugin/hashicorp_key_management/hashicorp_key_management_plugin.cc
@@ -13,28 +13,21 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
-#include <my_global.h>
#include <mysql/plugin_encryption.h>
#include <mysqld_error.h>
+#include <my_alloca.h>
#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <time.h>
#include <errno.h>
#include <string>
#include <sstream>
#include <curl/curl.h>
-#ifdef _WIN32
-#include <malloc.h>
-#define alloca _alloca
-#endif
#include <algorithm>
#include <unordered_map>
#include <mutex>
-#if defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)
-#define HASHICORP_HAVE_EXCEPTIONS 1
-#else
-#define HASHICORP_HAVE_EXCEPTIONS 0
-#endif
-
#define HASHICORP_DEBUG_LOGGING 0
#define PLUGIN_ERROR_HEADER "hashicorp: "
@@ -209,15 +202,6 @@ unsigned int
if (key_version == ENCRYPTION_KEY_VERSION_INVALID)
{
clock_t timestamp;
-#if HASHICORP_HAVE_EXCEPTIONS
- try
- {
- VER_INFO &ver_info = latest_version_cache.at(key_id);
- version = ver_info.key_version;
- timestamp = ver_info.timestamp;
- }
- catch (const std::out_of_range &e)
-#else
VER_MAP::const_iterator ver_iter = latest_version_cache.find(key_id);
if (ver_iter != latest_version_cache.end())
{
@@ -225,7 +209,6 @@ unsigned int
timestamp = ver_iter->second.timestamp;
}
else
-#endif
{
mtx.unlock();
return ENCRYPTION_KEY_VERSION_INVALID;
@@ -246,13 +229,6 @@ unsigned int
}
}
KEY_INFO info;
-#if HASHICORP_HAVE_EXCEPTIONS
- try
- {
- info = key_info_cache.at(KEY_ID_AND_VERSION(key_id, version));
- }
- catch (const std::out_of_range &e)
-#else
KEY_MAP::const_iterator key_iter =
key_info_cache.find(KEY_ID_AND_VERSION(key_id, version));
if (key_iter != key_info_cache.end())
@@ -260,7 +236,6 @@ unsigned int
info = key_iter->second;
}
else
-#endif
{
mtx.unlock();
return ENCRYPTION_KEY_VERSION_INVALID;
@@ -305,20 +280,12 @@ unsigned int HCData::cache_get_version (unsigned int key_id)
{
unsigned int version;
mtx.lock();
-#if HASHICORP_HAVE_EXCEPTIONS
- try
- {
- version = latest_version_cache.at(key_id).key_version;
- }
- catch (const std::out_of_range &e)
-#else
VER_MAP::const_iterator ver_iter = latest_version_cache.find(key_id);
if (ver_iter != latest_version_cache.end())
{
version = ver_iter->second.key_version;
}
else
-#endif
{
version = ENCRYPTION_KEY_VERSION_INVALID;
}
@@ -331,15 +298,6 @@ unsigned int HCData::cache_check_version (unsigned int key_id)
unsigned int version;
clock_t timestamp;
mtx.lock();
-#if HASHICORP_HAVE_EXCEPTIONS
- try
- {
- VER_INFO &ver_info = latest_version_cache.at(key_id);
- version = ver_info.key_version;
- timestamp = ver_info.timestamp;
- }
- catch (const std::out_of_range &e)
-#else
VER_MAP::const_iterator ver_iter = latest_version_cache.find(key_id);
if (ver_iter != latest_version_cache.end())
{
@@ -347,7 +305,6 @@ unsigned int HCData::cache_check_version (unsigned int key_id)
timestamp = ver_iter->second.timestamp;
}
else
-#endif
{
mtx.unlock();
#if HASHICORP_DEBUG_LOGGING
@@ -978,29 +935,6 @@ struct st_mariadb_encryption hashicorp_key_management_plugin= {
0, 0, 0, 0, 0
};
-#ifdef _MSC_VER
-
-static int setenv (const char *name, const char *value, int overwrite)
-{
- if (!overwrite)
- {
- size_t len= 0;
- int rc= getenv_s(&len, NULL, 0, name);
- if (rc)
- {
- return rc;
- }
- if (len)
- {
- errno = EINVAL;
- return EINVAL;
- }
- }
- return _putenv_s(name, value);
-}
-
-#endif
-
#define MAX_URL_SIZE 32768
int HCData::init ()
@@ -1053,7 +987,11 @@ int HCData::init ()
bool not_equal= token_env != NULL && strcmp(token_env, token) != 0;
if (token_env == NULL || not_equal)
{
- setenv("VAULT_TOKEN", token, 1);
+#if defined(HAVE_SETENV) || !defined(_WIN32)
+ setenv("VAULT_TOKEN", token, 1);
+#else
+ _putenv_s("VAULT_TOKEN", token);
+#endif
if (not_equal)
{
my_printf_error(ER_UNKNOWN_ERROR, PLUGIN_ERROR_HEADER
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/suite.pm b/plugin/hashicorp_key_management/mysql-test/vault/suite.pm
index fce17373..bd08ff4f 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/suite.pm
+++ b/plugin/hashicorp_key_management/mysql-test/vault/suite.pm
@@ -1,9 +1,13 @@
package My::Suite::Vault;
+use My::Platform;
@ISA = qw(My::Suite);
use strict;
+return "Hashicorp Key Management plugin tests are currently not available on Windows"
+ if IS_WINDOWS;
+
return "You need to set the value of the VAULT_ADDR variable"
unless $ENV{VAULT_ADDR};
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_cache_after_recreate.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_cache_after_recreate.test
index 9dee7376..925e89a3 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_cache_after_recreate.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_cache_after_recreate.test
@@ -11,7 +11,7 @@
--exec vault kv put /bug/1 data=01234567890123456789012345678901 > /dev/null
--exec vault kv put /bug/4 data=01234567890123456789012345678904 > /dev/null
---let $restart_parameters=--plugin-load-add=hashicorp_key_management --hashicorp-key-management-vault-url="$VAULT_ADDR/v1/bug/" --hashicorp-key-management-token="$VAULT_TOKEN"
+--let $restart_parameters=--plugin-load-add=hashicorp_key_management --hashicorp-key-management-vault-url=$VAULT_ADDR/v1/bug/ --hashicorp-key-management-token=$VAULT_TOKEN
--let $restart_noprint=1
--source include/restart_mysqld.inc
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_check_kv_version.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_check_kv_version.test
index c108781b..7d9a952f 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_check_kv_version.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_check_kv_version.test
@@ -20,7 +20,7 @@
--error 0,1
--remove_file $LOG_FILE
---let $vault_defaults=--plugin-load-add=hashicorp_key_management --hashicorp_key_management=force --hashicorp-key-management-check-kv-version=on --hashicorp-key-management-token="$VAULT_TOKEN"
+--let $vault_defaults=--plugin-load-add=hashicorp_key_management --hashicorp_key_management=force --hashicorp-key-management-check-kv-version=on --hashicorp-key-management-token=$VAULT_TOKEN
--let $defaults=--defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf $vault_defaults --log-error=$LOG_FILE
--error 1
@@ -30,14 +30,14 @@
--remove_file $LOG_FILE
---let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url="$VAULT_ADDR/v1/good"
+--let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url=$VAULT_ADDR/v1/good
--let $restart_noprint=1
--source include/start_mysqld.inc
CREATE TABLE t1 (a VARCHAR(8)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=1;
INSERT INTO t1 VALUES ('foo'),('bar');
---let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url="$VAULT_ADDR/v1/good//"
+--let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url=$VAULT_ADDR/v1/good//
--source include/restart_mysqld.inc
CREATE TABLE t2 (a VARCHAR(8)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=2;
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_migration.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_migration.test
index 2e67c2cc..62253cd7 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_migration.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_migration.test
@@ -24,7 +24,7 @@ SELECT * FROM t1;
--exec vault secrets disable bug > /dev/null
--exec vault secrets enable -path /bug -version=2 kv > /dev/null
--exec vault kv put /bug/1 data=$my_key > /dev/null
---let $restart_parameters=--plugin-load-add=hashicorp_key_management --hashicorp-key-management-vault-url="$VAULT_ADDR/v1/bug/" --hashicorp-key-management-token="$VAULT_TOKEN"
+--let $restart_parameters=--plugin-load-add=hashicorp_key_management --hashicorp-key-management-vault-url=$VAULT_ADDR/v1/bug/ --hashicorp-key-management-token=$VAULT_TOKEN
--source include/restart_mysqld.inc
CREATE TABLE t2 (a VARCHAR(8)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=1;
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_rotation_age.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_rotation_age.test
index ce99406a..4cdeb227 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_rotation_age.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_key_rotation_age.test
@@ -8,7 +8,7 @@ replace_result $VAULT_ADDR VAULT_ADDR;
SHOW GLOBAL variables LIKE "hashicorp%";
--echo # Restart the server with encryption
-let $default_parameters="--innodb-tablespaces-encryption --innodb_encrypt_tables=ON";
+let $default_parameters=--innodb-tablespaces-encryption --innodb_encrypt_tables=ON;
let $restart_noprint=1;
let $restart_parameters=$default_parameters;
--source include/restart_mysqld.inc
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.opt b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.opt
new file mode 100644
index 00000000..1df46435
--- /dev/null
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.opt
@@ -0,0 +1 @@
+--innodb --loose-changed_page_bitmaps --innodb-sys-tables --innodb-flush-log-at-trx-commit=2 --sequence
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.test
index 6ade4e11..97753555 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_mariabackup.test
@@ -8,9 +8,13 @@
CREATE TABLE t(i INT) ENGINE INNODB encrypted=yes encryption_key_id=1;
INSERT INTO t VALUES(1);
-echo # mariabackup backup;
let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
+--error 0,1
+rmdir $targetdir;
+
+echo # mariabackup backup;
+
--disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir;
--enable_result_log
diff --git a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_url_prefix.test b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_url_prefix.test
index 4d26affb..ef88b61c 100644
--- a/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_url_prefix.test
+++ b/plugin/hashicorp_key_management/mysql-test/vault/t/hashicorp_url_prefix.test
@@ -16,7 +16,7 @@
--error 0,1
--remove_file $LOG_FILE
---let $vault_defaults=--plugin-load-add=hashicorp_key_management --hashicorp_key_management=force --hashicorp-key-management-check-kv-version=off --hashicorp-key-management-token="$VAULT_TOKEN"
+--let $vault_defaults=--plugin-load-add=hashicorp_key_management --hashicorp_key_management=force --hashicorp-key-management-check-kv-version=off --hashicorp-key-management-token=$VAULT_TOKEN
--let $defaults=--defaults-group-suffix=.1 --defaults-file=$MYSQLTEST_VARDIR/my.cnf $vault_defaults --log-error=$LOG_FILE
--error 1
@@ -76,7 +76,7 @@
--remove_file $LOG_FILE
---let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url="$VAULT_ADDR/v1/bug///"
+--let $restart_parameters=$vault_defaults --hashicorp-key-management-vault-url=$VAULT_ADDR/v1/bug///
--let $restart_noprint=1
--source include/start_mysqld.inc
diff --git a/plugin/test_sql_service/test_sql_service.c b/plugin/test_sql_service/test_sql_service.c
index 8b326c6f..8a9b3dab 100644
--- a/plugin/test_sql_service/test_sql_service.c
+++ b/plugin/test_sql_service/test_sql_service.c
@@ -129,7 +129,7 @@ void auditing(MYSQL_THD thd, unsigned int event_class, const void *ev)
static int run_test(MYSQL_THD thd, struct st_mysql_sys_var *var, void *save,
struct st_mysql_value *value)
{
- *(my_bool*) save= 0; /* Set value for sql_service_run_test */
+ *(my_bool*)save= 1; // must initialize the return value
return (test_passed= (do_tests() == 0)) == 0;
}
@@ -140,6 +140,7 @@ static int run_sql(MYSQL *mysql, void *save, struct st_mysql_value *value)
int len= 0;
MYSQL_RES *res;
+ *(my_bool*)save= 1; // must initialize the return value
str= value->val_str(value, NULL, &len);
if (mysql_real_query(mysql, str, len))
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6.result b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
index 5ac2657f..d43352df 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6.result
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6.result
@@ -2359,6 +2359,18 @@ Warning 1292 Incorrect inet6 value: ''
Warning 1292 Incorrect inet6 value: ''
DROP TABLE t1;
#
+# MDEV-32458 ASAN unknown-crash in Inet6::ascii_to_fbt when casting character string to inet6
+#
+CREATE TABLE t1 (c CHAR(3));
+INSERT INTO t1 VALUES ('1:0'),('00:');
+SELECT * FROM t1 WHERE c>CAST('::1' AS INET6);
+c
+Warnings:
+Warning 1292 Incorrect inet6 value: '1:0'
+Warning 1292 Incorrect inet6 value: '00:'
+DROP TABLE t1;
+# End of 10.6 tests
+#
# MDEV-22256 Assertion `length == pack_length()' failed in Field_timestamp_with_dec::sort_string
#
SET sql_mode='';
diff --git a/plugin/type_inet/mysql-test/type_inet/type_inet6.test b/plugin/type_inet/mysql-test/type_inet/type_inet6.test
index 0c56ecfe..cb3d226f 100644
--- a/plugin/type_inet/mysql-test/type_inet/type_inet6.test
+++ b/plugin/type_inet/mysql-test/type_inet/type_inet6.test
@@ -1702,6 +1702,17 @@ SELECT 1.00 + (b IN (a,'')) AS f FROM t1 ORDER BY f;
DROP TABLE t1;
--echo #
+--echo # MDEV-32458 ASAN unknown-crash in Inet6::ascii_to_fbt when casting character string to inet6
+--echo #
+
+CREATE TABLE t1 (c CHAR(3));
+INSERT INTO t1 VALUES ('1:0'),('00:');
+SELECT * FROM t1 WHERE c>CAST('::1' AS INET6);
+DROP TABLE t1;
+
+--echo # End of 10.6 tests
+
+--echo #
--echo # MDEV-22256 Assertion `length == pack_length()' failed in Field_timestamp_with_dec::sort_string
--echo #
diff --git a/plugin/type_inet/sql_type_inet.cc b/plugin/type_inet/sql_type_inet.cc
index 03c8d813..d23073d2 100644
--- a/plugin/type_inet/sql_type_inet.cc
+++ b/plugin/type_inet/sql_type_inet.cc
@@ -229,7 +229,7 @@ bool Inet6::ascii_to_fbt(const char *str, size_t str_length)
continue;
}
- if (!*p || p >= str_end)
+ if (p >= str_end || !*p)
{
DBUG_PRINT("error", ("ascii_to_ipv6(%.*s): invalid IPv6 address: "
"ending at ':'.", (int) str_length, str));
diff --git a/plugin/type_mysql_timestamp/plugin.cc b/plugin/type_mysql_timestamp/plugin.cc
index a524c5c0..6cbd76d8 100644
--- a/plugin/type_mysql_timestamp/plugin.cc
+++ b/plugin/type_mysql_timestamp/plugin.cc
@@ -103,7 +103,19 @@ public:
Field_mysql_timestampf(*name, rec, attr->unireg_check, share,
attr->temporal_dec(MAX_DATETIME_WIDTH));
}
- void Column_definition_implicit_upgrade(Column_definition *c) const override
+ const Type_handler *type_handler_for_implicit_upgrade() const override
+ {
+ /*
+ The derived method as of 10.11.8 does "return this;" anyway.
+ However, in the future this may change to return a
+ opt_mysql56_temporal_format dependent handler.
+ Here in this class we need to make sure to do "return this;"
+ not to depend on the derived method changes.
+ */
+ return this;
+ }
+ void Column_definition_implicit_upgrade_to_this(Column_definition *old)
+ const override
{
/*
Suppress the automatic upgrade depending on opt_mysql56_temporal_format,
diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.result b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.result
new file mode 100644
index 00000000..b22e7851
--- /dev/null
+++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.result
@@ -0,0 +1,422 @@
+#
+# Start of 10.11 tests
+#
+#
+# MDEV-33442 REPAIR TABLE corrupts UUIDs
+#
+CREATE PROCEDURE show_table(long_version INT)
+BEGIN
+SHOW CREATE TABLE t1;
+SELECT VERSION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
+IF long_version>0 THEN
+SELECT * FROM t1 ORDER BY b;
+ELSE
+SELECT * FROM t1 ORDER BY a DESC LIMIT 5;
+END IF;
+END;
+$$
+# Upgrade a 10.11.4 table using REPAIR
+CALL show_table(1);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+00001234-5566-0777-0888-99aabbccddee 0
+10101234-5566-0777-8888-99aabbccddee 1
+00201234-5566-0777-c888-99aabbccddee 2
+10301234-5566-0777-e888-99aabbccddee 3
+00401234-5566-1777-0888-99aabbccddee 4
+10501234-5566-1777-8888-99aabbccddee 5
+00601234-5566-1777-c888-99aabbccddee 6
+10701234-5566-1777-e888-99aabbccddee 7
+00801234-5566-2777-0888-99aabbccddee 8
+10901234-5566-2777-8888-99aabbccddee 9
+01001234-5566-2777-c888-99aabbccddee 10
+11101234-5566-2777-e888-99aabbccddee 11
+01201234-5566-3777-0888-99aabbccddee 12
+11301234-5566-3777-8888-99aabbccddee 13
+01401234-5566-3777-c888-99aabbccddee 14
+11501234-5566-3777-e888-99aabbccddee 15
+01601234-5566-4777-0888-99aabbccddee 16
+11701234-5566-4777-8888-99aabbccddee 17
+01801234-5566-4777-c888-99aabbccddee 18
+11901234-5566-4777-e888-99aabbccddee 19
+02001234-5566-5777-0888-99aabbccddee 20
+12101234-5566-5777-8888-99aabbccddee 21
+02201234-5566-5777-c888-99aabbccddee 22
+12301234-5566-5777-e888-99aabbccddee 23
+02401234-5566-6777-0888-99aabbccddee 24
+12501234-5566-6777-8888-99aabbccddee 25
+02601234-5566-6777-c888-99aabbccddee 26
+12701234-5566-6777-e888-99aabbccddee 27
+02801234-5566-7777-0888-99aabbccddee 28
+12901234-5566-7777-8888-99aabbccddee 29
+03001234-5566-7777-c888-99aabbccddee 30
+13101234-5566-7777-e888-99aabbccddee 31
+03201234-5566-8777-0888-99aabbccddee 32
+13301234-5566-8777-8888-99aabbccddee 33
+03401234-5566-8777-c888-99aabbccddee 34
+13501234-5566-8777-e888-99aabbccddee 35
+03601234-5566-9777-0888-99aabbccddee 36
+13701234-5566-9777-8888-99aabbccddee 37
+03801234-5566-9777-c888-99aabbccddee 38
+13901234-5566-9777-e888-99aabbccddee 39
+04001234-5566-a777-0888-99aabbccddee 40
+14101234-5566-a777-8888-99aabbccddee 41
+04201234-5566-a777-c888-99aabbccddee 42
+14301234-5566-a777-e888-99aabbccddee 43
+04401234-5566-b777-0888-99aabbccddee 44
+14501234-5566-b777-8888-99aabbccddee 45
+04601234-5566-b777-c888-99aabbccddee 46
+14701234-5566-b777-e888-99aabbccddee 47
+04801234-5566-c777-0888-99aabbccddee 48
+14901234-5566-c777-8888-99aabbccddee 49
+05001234-5566-c777-c888-99aabbccddee 50
+15101234-5566-c777-e888-99aabbccddee 51
+05201234-5566-d777-0888-99aabbccddee 52
+15301234-5566-d777-8888-99aabbccddee 53
+05401234-5566-d777-c888-99aabbccddee 54
+15501234-5566-d777-e888-99aabbccddee 55
+05601234-5566-e777-0888-99aabbccddee 56
+15701234-5566-e777-8888-99aabbccddee 57
+05801234-5566-e777-c888-99aabbccddee 58
+15901234-5566-e777-e888-99aabbccddee 59
+06001234-5566-f777-0888-99aabbccddee 60
+16101234-5566-f777-8888-99aabbccddee 61
+06201234-5566-f777-c888-99aabbccddee 62
+16301234-5566-f777-e888-99aabbccddee 63
+CHECK TABLE t1 FOR UPGRADE;
+Table Op Msg_type Msg_text
+test.t1 check error Upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it!
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+16301234-5566-f777-e888-99aabbccddee 63
+15901234-5566-e777-e888-99aabbccddee 59
+15501234-5566-d777-e888-99aabbccddee 55
+15101234-5566-c777-e888-99aabbccddee 51
+14701234-5566-b777-e888-99aabbccddee 47
+CHECK TABLE t1 FOR UPGRADE;
+Table Op Msg_type Msg_text
+test.t1 check error Upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it!
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+16301234-5566-f777-e888-99aabbccddee 63
+15901234-5566-e777-e888-99aabbccddee 59
+15501234-5566-d777-e888-99aabbccddee 55
+15101234-5566-c777-e888-99aabbccddee 51
+14701234-5566-b777-e888-99aabbccddee 47
+REPAIR TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 repair Warning Incorrect uuid value: '03201234-5566-8777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 33
+test.t1 repair Warning Incorrect uuid value: '03601234-5566-9777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 37
+test.t1 repair Warning Incorrect uuid value: '04001234-5566-a777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 41
+test.t1 repair Warning Incorrect uuid value: '04401234-5566-b777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 45
+test.t1 repair Warning Incorrect uuid value: '04801234-5566-c777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 49
+test.t1 repair Warning Incorrect uuid value: '05201234-5566-d777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 53
+test.t1 repair Warning Incorrect uuid value: '05601234-5566-e777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 57
+test.t1 repair Warning Incorrect uuid value: '06001234-5566-f777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 61
+test.t1 repair status OK
+CALL show_table(1);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+00001234-5566-0777-0888-99aabbccddee 0
+10101234-5566-0777-8888-99aabbccddee 1
+00201234-5566-0777-c888-99aabbccddee 2
+10301234-5566-0777-e888-99aabbccddee 3
+00401234-5566-1777-0888-99aabbccddee 4
+10501234-5566-1777-8888-99aabbccddee 5
+00601234-5566-1777-c888-99aabbccddee 6
+10701234-5566-1777-e888-99aabbccddee 7
+00801234-5566-2777-0888-99aabbccddee 8
+10901234-5566-2777-8888-99aabbccddee 9
+01001234-5566-2777-c888-99aabbccddee 10
+11101234-5566-2777-e888-99aabbccddee 11
+01201234-5566-3777-0888-99aabbccddee 12
+11301234-5566-3777-8888-99aabbccddee 13
+01401234-5566-3777-c888-99aabbccddee 14
+11501234-5566-3777-e888-99aabbccddee 15
+01601234-5566-4777-0888-99aabbccddee 16
+11701234-5566-4777-8888-99aabbccddee 17
+01801234-5566-4777-c888-99aabbccddee 18
+11901234-5566-4777-e888-99aabbccddee 19
+02001234-5566-5777-0888-99aabbccddee 20
+12101234-5566-5777-8888-99aabbccddee 21
+02201234-5566-5777-c888-99aabbccddee 22
+12301234-5566-5777-e888-99aabbccddee 23
+02401234-5566-6777-0888-99aabbccddee 24
+12501234-5566-6777-8888-99aabbccddee 25
+02601234-5566-6777-c888-99aabbccddee 26
+12701234-5566-6777-e888-99aabbccddee 27
+02801234-5566-7777-0888-99aabbccddee 28
+12901234-5566-7777-8888-99aabbccddee 29
+03001234-5566-7777-c888-99aabbccddee 30
+13101234-5566-7777-e888-99aabbccddee 31
+NULL 32
+13301234-5566-8777-8888-99aabbccddee 33
+03401234-5566-8777-c888-99aabbccddee 34
+13501234-5566-8777-e888-99aabbccddee 35
+NULL 36
+13701234-5566-9777-8888-99aabbccddee 37
+03801234-5566-9777-c888-99aabbccddee 38
+13901234-5566-9777-e888-99aabbccddee 39
+NULL 40
+14101234-5566-a777-8888-99aabbccddee 41
+04201234-5566-a777-c888-99aabbccddee 42
+14301234-5566-a777-e888-99aabbccddee 43
+NULL 44
+14501234-5566-b777-8888-99aabbccddee 45
+04601234-5566-b777-c888-99aabbccddee 46
+14701234-5566-b777-e888-99aabbccddee 47
+NULL 48
+14901234-5566-c777-8888-99aabbccddee 49
+05001234-5566-c777-c888-99aabbccddee 50
+15101234-5566-c777-e888-99aabbccddee 51
+NULL 52
+15301234-5566-d777-8888-99aabbccddee 53
+05401234-5566-d777-c888-99aabbccddee 54
+15501234-5566-d777-e888-99aabbccddee 55
+NULL 56
+15701234-5566-e777-8888-99aabbccddee 57
+05801234-5566-e777-c888-99aabbccddee 58
+15901234-5566-e777-e888-99aabbccddee 59
+NULL 60
+16101234-5566-f777-8888-99aabbccddee 61
+06201234-5566-f777-c888-99aabbccddee 62
+16301234-5566-f777-e888-99aabbccddee 63
+CHECK TABLE t1 FOR UPGRADE;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+DROP TABLE t1;
+# Upgrade a 10.11.4 table using ALTER, adding a table COMMENT
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+16301234-5566-f777-e888-99aabbccddee 63
+15901234-5566-e777-e888-99aabbccddee 59
+15501234-5566-d777-e888-99aabbccddee 55
+15101234-5566-c777-e888-99aabbccddee 51
+14701234-5566-b777-e888-99aabbccddee 47
+# ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, COMMENT 'test10';
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+ALTER IGNORE TABLE t1 COMMENT 'test11';
+Warnings:
+Warning 1292 Incorrect uuid value: '03201234-5566-8777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 33
+Warning 1292 Incorrect uuid value: '03601234-5566-9777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 37
+Warning 1292 Incorrect uuid value: '04001234-5566-a777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 41
+Warning 1292 Incorrect uuid value: '04401234-5566-b777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 45
+Warning 1292 Incorrect uuid value: '04801234-5566-c777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 49
+Warning 1292 Incorrect uuid value: '05201234-5566-d777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 53
+Warning 1292 Incorrect uuid value: '05601234-5566-e777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 57
+Warning 1292 Incorrect uuid value: '06001234-5566-f777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 61
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci COMMENT='test11'
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+# Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, COMMENT 'test12';
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci COMMENT='test12'
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+DROP TABLE t1;
+# Upgrade a 10.11.4 table using ALTER, adding a DEFAULT for 'b INT'
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+16301234-5566-f777-e888-99aabbccddee 63
+15901234-5566-e777-e888-99aabbccddee 59
+15501234-5566-d777-e888-99aabbccddee 55
+15101234-5566-c777-e888-99aabbccddee 51
+14701234-5566-b777-e888-99aabbccddee 47
+# ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY b INT NOT NULL DEFAULT 10;
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+ALTER IGNORE TABLE t1 MODIFY b INT NOT NULL DEFAULT 11;
+Warnings:
+Warning 1292 Incorrect uuid value: '03201234-5566-8777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 33
+Warning 1292 Incorrect uuid value: '03601234-5566-9777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 37
+Warning 1292 Incorrect uuid value: '04001234-5566-a777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 41
+Warning 1292 Incorrect uuid value: '04401234-5566-b777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 45
+Warning 1292 Incorrect uuid value: '04801234-5566-c777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 49
+Warning 1292 Incorrect uuid value: '05201234-5566-d777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 53
+Warning 1292 Incorrect uuid value: '05601234-5566-e777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 57
+Warning 1292 Incorrect uuid value: '06001234-5566-f777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 61
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL DEFAULT 11,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+# Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY b INT NOT NULL DEFAULT 12;
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL DEFAULT 12,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+DROP TABLE t1;
+# Upgrade a 10.11.4 table using ALTER, adding a DEFAULT for 'a UUID'
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT NULL,
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+16301234-5566-f777-e888-99aabbccddee 63
+15901234-5566-e777-e888-99aabbccddee 59
+15501234-5566-d777-e888-99aabbccddee 55
+15101234-5566-c777-e888-99aabbccddee 51
+14701234-5566-b777-e888-99aabbccddee 47
+# ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd00';
+ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
+ALTER IGNORE TABLE t1 MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd01';
+Warnings:
+Warning 1292 Incorrect uuid value: '03201234-5566-8777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 33
+Warning 1292 Incorrect uuid value: '03601234-5566-9777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 37
+Warning 1292 Incorrect uuid value: '04001234-5566-a777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 41
+Warning 1292 Incorrect uuid value: '04401234-5566-b777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 45
+Warning 1292 Incorrect uuid value: '04801234-5566-c777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 49
+Warning 1292 Incorrect uuid value: '05201234-5566-d777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 53
+Warning 1292 Incorrect uuid value: '05601234-5566-e777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 57
+Warning 1292 Incorrect uuid value: '06001234-5566-f777-0888-99aabbccddee' for column `test`.`t1`.`a` at row 61
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT '16301234-5566-f777-e888-99aabbccdd01',
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+# Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd02';
+CALL show_table(0);
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` uuid DEFAULT '16301234-5566-f777-e888-99aabbccdd02',
+ `b` int(11) NOT NULL,
+ KEY `a` (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+VERSION
+10
+a b
+12301234-5566-5777-e888-99aabbccddee 23
+11901234-5566-4777-e888-99aabbccddee 19
+11501234-5566-3777-e888-99aabbccddee 15
+11101234-5566-2777-e888-99aabbccddee 11
+10701234-5566-1777-e888-99aabbccddee 7
+DROP TABLE t1;
+DROP PROCEDURE show_table;
+#
+# End of 10.11 tests
+#
diff --git a/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.test b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.test
new file mode 100644
index 00000000..6181f6ef
--- /dev/null
+++ b/plugin/type_uuid/mysql-test/type_uuid/type_uuid_mariadb101104.test
@@ -0,0 +1,110 @@
+let $datadir= `select @@datadir`;
+
+--echo #
+--echo # Start of 10.11 tests
+--echo #
+
+--echo #
+--echo # MDEV-33442 REPAIR TABLE corrupts UUIDs
+--echo #
+
+DELIMITER $$;
+CREATE PROCEDURE show_table(long_version INT)
+BEGIN
+ SHOW CREATE TABLE t1;
+ SELECT VERSION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
+ IF long_version>0 THEN
+ SELECT * FROM t1 ORDER BY b;
+ ELSE
+ SELECT * FROM t1 ORDER BY a DESC LIMIT 5;
+ END IF;
+END;
+$$
+DELIMITER ;$$
+
+
+--echo # Upgrade a 10.11.4 table using REPAIR
+
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.frm $datadir/test/t1.frm
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYI $datadir/test/t1.MYI
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYD $datadir/test/t1.MYD
+CALL show_table(1);
+
+CHECK TABLE t1 FOR UPGRADE;
+CALL show_table(0);
+
+CHECK TABLE t1 FOR UPGRADE;
+CALL show_table(0);
+
+REPAIR TABLE t1;
+CALL show_table(1);
+
+CHECK TABLE t1 FOR UPGRADE;
+CALL show_table(0);
+
+DROP TABLE t1;
+
+--echo # Upgrade a 10.11.4 table using ALTER, adding a table COMMENT
+
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.frm $datadir/test/t1.frm
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYI $datadir/test/t1.MYI
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYD $datadir/test/t1.MYD
+CALL show_table(0);
+
+--echo # ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, COMMENT 'test10';
+ALTER IGNORE TABLE t1 COMMENT 'test11';
+CALL show_table(0);
+
+--echo # Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, COMMENT 'test12';
+CALL show_table(0);
+
+DROP TABLE t1;
+
+
+--echo # Upgrade a 10.11.4 table using ALTER, adding a DEFAULT for 'b INT'
+
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.frm $datadir/test/t1.frm
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYI $datadir/test/t1.MYI
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYD $datadir/test/t1.MYD
+CALL show_table(0);
+
+--echo # ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY b INT NOT NULL DEFAULT 10;
+ALTER IGNORE TABLE t1 MODIFY b INT NOT NULL DEFAULT 11;
+CALL show_table(0);
+
+--echo # Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY b INT NOT NULL DEFAULT 12;
+CALL show_table(0);
+
+DROP TABLE t1;
+
+
+--echo # Upgrade a 10.11.4 table using ALTER, adding a DEFAULT for 'a UUID'
+
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.frm $datadir/test/t1.frm
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYI $datadir/test/t1.MYI
+--copy_file $MTR_SUITE_DIR/std_data/mdev-29959.MYD $datadir/test/t1.MYD
+CALL show_table(0);
+
+--echo # ALTER..INPLACE should fail - the old column 'b UUID' needs upgrade
+--error ER_ALTER_OPERATION_NOT_SUPPORTED
+ALTER IGNORE TABLE t1 ALGORITHM=INPLACE, MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd00';
+ALTER IGNORE TABLE t1 MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd01';
+CALL show_table(0);
+
+--echo # Now ALTER..INPLACE should work
+ALTER IGNORE TABLE t1 MODIFY a UUID DEFAULT '16301234-5566-f777-e888-99aabbccdd02';
+CALL show_table(0);
+
+DROP TABLE t1;
+
+DROP PROCEDURE show_table;
+
+--echo #
+--echo # End of 10.11 tests
+--echo #
diff --git a/plugin/type_uuid/plugin.cc b/plugin/type_uuid/plugin.cc
index 499019e9..a1bde541 100644
--- a/plugin/type_uuid/plugin.cc
+++ b/plugin/type_uuid/plugin.cc
@@ -98,6 +98,14 @@ const Type_handler *Type_collection_uuid::find_in_array(const Type_handler *a,
return NULL;
}
+
+const Type_handler *Type_collection_uuid::type_handler_for_implicit_upgrade(
+ const Type_handler *from) const
+{
+ return Type_handler_uuid_new::singleton();
+}
+
+
/*************************************************************************/
class Create_func_uuid : public Create_func_arg0
diff --git a/plugin/type_uuid/sql_type_uuid.h b/plugin/type_uuid/sql_type_uuid.h
index 67d7471d..05d6cef6 100644
--- a/plugin/type_uuid/sql_type_uuid.h
+++ b/plugin/type_uuid/sql_type_uuid.h
@@ -316,6 +316,9 @@ public:
const override
{ return NULL; }
+ const Type_handler *type_handler_for_implicit_upgrade(
+ const Type_handler *from) const;
+
static Type_collection_uuid *singleton()
{
static Type_collection_uuid tc;
diff --git a/plugin/versioning/versioning.cc b/plugin/versioning/versioning.cc
index 38ebf762..a4916e2f 100644
--- a/plugin/versioning/versioning.cc
+++ b/plugin/versioning/versioning.cc
@@ -36,8 +36,8 @@ public:
static Create_func_trt<TRT_FIELD> s_singleton;
protected:
- Create_func_trt<TRT_FIELD>() = default;
- virtual ~Create_func_trt<TRT_FIELD>() = default;
+ Create_func_trt() = default;
+ virtual ~Create_func_trt() = default;
};
template<TR_table::field_id_t TRT_FIELD>
@@ -132,8 +132,8 @@ public:
static Create_func_trt_trx_sees<Item_func_trt_trx_seesX> s_singleton;
protected:
- Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
- virtual ~Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
+ Create_func_trt_trx_sees() = default;
+ virtual ~Create_func_trt_trx_sees() = default;
};
template<class X>