Commit a3908e32 authored by Otto Kekäläinen's avatar Otto Kekäläinen
Browse files

Update upstream source from tag 'upstream/5.5.61'

Update to upstream version '5.5.61'
with Debian dir 20b939dcfbc305feda76bc5cca6748b5c526a79c
parents 908ae0c2 1627a8b1
...@@ -236,3 +236,9 @@ storage/mroonga/vendor/groonga/src/grnslap ...@@ -236,3 +236,9 @@ storage/mroonga/vendor/groonga/src/grnslap
storage/mroonga/vendor/groonga/src/groonga storage/mroonga/vendor/groonga/src/groonga
storage/mroonga/vendor/groonga/src/groonga-benchmark storage/mroonga/vendor/groonga/src/groonga-benchmark
storage/mroonga/vendor/groonga/src/suggest/groonga-suggest-create-dataset storage/mroonga/vendor/groonga/src/suggest/groonga-suggest-create-dataset
# macOS garbage
.DS_Store
# QtCreator && CodeBlocks
*.cbp
commit: fafdac3365f4943e73bcefd0e0d07d69997a9724 commit: a49ec980422e04ce1a37344be09aa6254f16fa2a
date: 2018-01-18 17:56:28 +0100 date: 2018-07-30 15:32:22 +0300
build-date: 2018-01-18 17:10:34 +0000 build-date: 2018-07-30 12:57:27 +0000
short: fafdac3 short: a49ec98
branch: HEAD branch: HEAD
MySQL source 5.5.59 MySQL source 5.5.61
MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MAJOR=5
MYSQL_VERSION_MINOR=5 MYSQL_VERSION_MINOR=5
MYSQL_VERSION_PATCH=59 MYSQL_VERSION_PATCH=61
MYSQL_VERSION_EXTRA= MYSQL_VERSION_EXTRA=
...@@ -4559,8 +4559,11 @@ static char *get_arg(char *line, get_arg_mode mode) ...@@ -4559,8 +4559,11 @@ static char *get_arg(char *line, get_arg_mode mode)
} }
for (start=ptr ; *ptr; ptr++) for (start=ptr ; *ptr; ptr++)
{ {
if ((*ptr == '\\' && ptr[1]) || // escaped character /* if short_cmd use historical rules (only backslash) otherwise SQL rules */
(!short_cmd && qtype && *ptr == qtype && ptr[1] == qtype)) // quote if (short_cmd
? (*ptr == '\\' && ptr[1]) // escaped character
: (*ptr == '\\' && ptr[1] && qtype != '`') || // escaped character
(qtype && *ptr == qtype && ptr[1] == qtype)) // quote
{ {
// Remove (or skip) the backslash (or a second quote) // Remove (or skip) the backslash (or a second quote)
if (mode != CHECK) if (mode != CHECK)
......
...@@ -4701,6 +4701,12 @@ static int dump_selected_tables(char *db, char **table_names, int tables) ...@@ -4701,6 +4701,12 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
if (opt_xml) if (opt_xml)
print_xml_tag(md_result_file, "", "\n", "database", "name=", db, NullS); print_xml_tag(md_result_file, "", "\n", "database", "name=", db, NullS);
/* obtain dump of routines (procs/functions) */
if (opt_routines && mysql_get_server_version(mysql) >= 50009)
{
DBUG_PRINT("info", ("Dumping routines for database %s", db));
dump_routines_for_db(db);
}
/* Dump each selected table */ /* Dump each selected table */
for (pos= dump_tables; pos < end; pos++) for (pos= dump_tables; pos < end; pos++)
{ {
...@@ -4729,12 +4735,6 @@ static int dump_selected_tables(char *db, char **table_names, int tables) ...@@ -4729,12 +4735,6 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
DBUG_PRINT("info", ("Dumping events for database %s", db)); DBUG_PRINT("info", ("Dumping events for database %s", db));
dump_events_for_db(db); dump_events_for_db(db);
} }
/* obtain dump of routines (procs/functions) */
if (opt_routines && mysql_get_server_version(mysql) >= 50009)
{
DBUG_PRINT("info", ("Dumping routines for database %s", db));
dump_routines_for_db(db);
}
free_root(&root, MYF(0)); free_root(&root, MYF(0));
my_free(order_by); my_free(order_by);
order_by= 0; order_by= 0;
......
...@@ -840,7 +840,7 @@ build_table_string(void) ...@@ -840,7 +840,7 @@ build_table_string(void)
if (auto_generate_sql_guid_primary) if (auto_generate_sql_guid_primary)
{ {
dynstr_append(&table_string, "id varchar(32) primary key"); dynstr_append(&table_string, "id varchar(36) primary key");
if (num_int_cols || num_char_cols || auto_generate_sql_guid_primary) if (num_int_cols || num_char_cols || auto_generate_sql_guid_primary)
dynstr_append(&table_string, ","); dynstr_append(&table_string, ",");
...@@ -855,7 +855,7 @@ build_table_string(void) ...@@ -855,7 +855,7 @@ build_table_string(void)
if (count) /* Except for the first pass we add a comma */ if (count) /* Except for the first pass we add a comma */
dynstr_append(&table_string, ","); dynstr_append(&table_string, ",");
if (snprintf(buf, HUGE_STRING_LENGTH, "id%d varchar(32) unique key", count) if (snprintf(buf, HUGE_STRING_LENGTH, "id%d varchar(36) unique key", count)
> HUGE_STRING_LENGTH) > HUGE_STRING_LENGTH)
{ {
fprintf(stderr, "Memory Allocation error in create table\n"); fprintf(stderr, "Memory Allocation error in create table\n");
......
...@@ -8672,6 +8672,7 @@ void init_re(void) ...@@ -8672,6 +8672,7 @@ void init_re(void)
"[[:space:]]*SELECT[[:space:]]|" "[[:space:]]*SELECT[[:space:]]|"
"[[:space:]]*CREATE[[:space:]]+TABLE[[:space:]]|" "[[:space:]]*CREATE[[:space:]]+TABLE[[:space:]]|"
"[[:space:]]*DO[[:space:]]|" "[[:space:]]*DO[[:space:]]|"
"[[:space:]]*HANDLER[[:space:]]+.*[[:space:]]+READ[[:space:]]|"
"[[:space:]]*SET[[:space:]]+OPTION[[:space:]]|" "[[:space:]]*SET[[:space:]]+OPTION[[:space:]]|"
"[[:space:]]*DELETE[[:space:]]+MULTI[[:space:]]|" "[[:space:]]*DELETE[[:space:]]+MULTI[[:space:]]|"
"[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|" "[[:space:]]*UPDATE[[:space:]]+MULTI[[:space:]]|"
......
...@@ -148,6 +148,7 @@ ...@@ -148,6 +148,7 @@
#cmakedefine HAVE_CUSERID 1 #cmakedefine HAVE_CUSERID 1
#cmakedefine HAVE_CXX_NEW 1 #cmakedefine HAVE_CXX_NEW 1
#cmakedefine HAVE_DIRECTIO 1 #cmakedefine HAVE_DIRECTIO 1
#cmakedefine HAVE_DLADDR 1
#cmakedefine HAVE_DLERROR 1 #cmakedefine HAVE_DLERROR 1
#cmakedefine HAVE_DLOPEN 1 #cmakedefine HAVE_DLOPEN 1
#cmakedefine HAVE_DOPRNT 1 #cmakedefine HAVE_DOPRNT 1
......
...@@ -346,6 +346,7 @@ CHECK_FUNCTION_EXISTS (ftruncate HAVE_FTRUNCATE) ...@@ -346,6 +346,7 @@ CHECK_FUNCTION_EXISTS (ftruncate HAVE_FTRUNCATE)
CHECK_FUNCTION_EXISTS (getline HAVE_GETLINE) CHECK_FUNCTION_EXISTS (getline HAVE_GETLINE)
CHECK_FUNCTION_EXISTS (compress HAVE_COMPRESS) CHECK_FUNCTION_EXISTS (compress HAVE_COMPRESS)
CHECK_FUNCTION_EXISTS (crypt HAVE_CRYPT) CHECK_FUNCTION_EXISTS (crypt HAVE_CRYPT)
CHECK_FUNCTION_EXISTS (dladdr HAVE_DLADDR)
CHECK_FUNCTION_EXISTS (dlerror HAVE_DLERROR) CHECK_FUNCTION_EXISTS (dlerror HAVE_DLERROR)
CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN) CHECK_FUNCTION_EXISTS (dlopen HAVE_DLOPEN)
CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD) CHECK_FUNCTION_EXISTS (fchmod HAVE_FCHMOD)
......
...@@ -787,6 +787,16 @@ int DoProcessReply(SSL& ssl) ...@@ -787,6 +787,16 @@ int DoProcessReply(SSL& ssl)
needHdr = true; needHdr = true;
else { else {
buffer >> hdr; buffer >> hdr;
/*
According to RFC 4346 (see "7.4.1.3. Server Hello"), the Server Hello
packet needs to specify the highest supported TLS version, but not
higher than what client requests. YaSSL highest supported version is
TLSv1.1 (=3.2) - if the client requests a higher version, downgrade it
here to 3.2.
See also Appendix E of RFC 5246 (TLS 1.2)
*/
if (hdr.version_.major_ == 3 && hdr.version_.minor_ > 2)
hdr.version_.minor_ = 2;
ssl.verifyState(hdr); ssl.verifyState(hdr);
} }
......
...@@ -144,6 +144,7 @@ typedef struct st_heap_share ...@@ -144,6 +144,7 @@ typedef struct st_heap_share
uint key_version; /* Updated on key change */ uint key_version; /* Updated on key change */
uint file_version; /* Update on clear */ uint file_version; /* Update on clear */
uint reclength; /* Length of one record */ uint reclength; /* Length of one record */
uint visible; /* Offset to the visible/deleted mark */
uint changed; uint changed;
uint keys,max_key_length; uint keys,max_key_length;
uint currently_disabled_keys; /* saved value from "keys" when disabled */ uint currently_disabled_keys; /* saved value from "keys" when disabled */
......
...@@ -1373,11 +1373,19 @@ static inline char *dlerror(void) ...@@ -1373,11 +1373,19 @@ static inline char *dlerror(void)
#ifndef HAVE_DLERROR #ifndef HAVE_DLERROR
#define dlerror() "" #define dlerror() ""
#endif #endif
#ifndef HAVE_DLADDR
#define dladdr(A, B) 0
/* Dummy definition in case we're missing dladdr() */
typedef struct { const char *dli_fname, dli_fbase; } Dl_info;
#endif
#else #else
#define dlerror() "No support for dynamic loading (static build?)" #define dlerror() "No support for dynamic loading (static build?)"
#define dlopen(A,B) 0 #define dlopen(A,B) 0
#define dlsym(A,B) 0 #define dlsym(A,B) 0
#define dlclose(A) 0 #define dlclose(A) 0
#define dladdr(A, B) 0
/* Dummy definition in case we're missing dladdr() */
typedef struct { const char *dli_fname, dli_fbase; } Dl_info;
#endif #endif
/* /*
......
...@@ -13,6 +13,14 @@ ...@@ -13,6 +13,14 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* clang -> gcc */
#ifndef __has_feature
# define __has_feature(x) 0
#endif
#if __has_feature(address_sanitizer)
# define __SANITIZE_ADDRESS__ 1
#endif
#ifdef HAVE_valgrind #ifdef HAVE_valgrind
#define IF_VALGRIND(A,B) A #define IF_VALGRIND(A,B) A
#else #else
...@@ -27,6 +35,8 @@ ...@@ -27,6 +35,8 @@
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len) # define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
#elif defined(__SANITIZE_ADDRESS__) #elif defined(__SANITIZE_ADDRESS__)
# include <sanitizer/asan_interface.h> # include <sanitizer/asan_interface.h>
/* How to do manual poisoning:
https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
# define MEM_UNDEFINED(a,len) ASAN_UNPOISON_MEMORY_REGION(a,len) # define MEM_UNDEFINED(a,len) ASAN_UNPOISON_MEMORY_REGION(a,len)
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len) # define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0) # define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
...@@ -39,10 +49,9 @@ ...@@ -39,10 +49,9 @@
#endif /* HAVE_VALGRIND */ #endif /* HAVE_VALGRIND */
#ifndef DBUG_OFF #ifndef DBUG_OFF
#define TRASH_FILL(A,B,C) do { memset(A, C, B); MEM_UNDEFINED(A, B); } while (0) #define TRASH_FILL(A,B,C) do { MEM_UNDEFINED(A,B); memset(A,C,B); } while(0)
#else #else
#define TRASH_FILL(A,B,C) do { MEM_CHECK_ADDRESSABLE(A,B);MEM_UNDEFINED(A,B);} while (0) #define TRASH_FILL(A,B,C) do { MEM_UNDEFINED(A,B); } while(0)
#endif #endif
#define TRASH_ALLOC(A,B) TRASH_FILL(A,B,0xA5) #define TRASH_ALLOC(A,B) do { TRASH_FILL(A,B,0xA5); MEM_UNDEFINED(A,B); } while(0)
#define TRASH_FREE(A,B) TRASH_FILL(A,B,0x8F) #define TRASH_FREE(A,B) do { TRASH_FILL(A,B,0x8F); MEM_NOACCESS(A,B); } while(0)
#define TRASH(A,B) TRASH_FREE(A,B)
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. /* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
Copyright (c) 2010, 2013, Monty Program Ab Copyright (c) 2010, 2018, 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
......
#ifndef SQL_COMMON_INCLUDED #ifndef SQL_COMMON_INCLUDED
#define SQL_COMMON_INCLUDED #define SQL_COMMON_INCLUDED
/* Copyright (c) 2003, 2012, Oracle and/or its affiliates. /* Copyright (c) 2003, 2018, Oracle and/or its affiliates.
Copyright (c) 2010, 2012, Monty Program Ab Copyright (c) 2010, 2018, 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
......
...@@ -84,7 +84,7 @@ sub is_child { ...@@ -84,7 +84,7 @@ sub is_child {
} }
my @safe_process_cmd; our @safe_process_cmd;
my $safe_kill; my $safe_kill;
my $bindir; my $bindir;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# -*- cperl -*- # -*- cperl -*-
# Copyright (c) 2004, 2014, Oracle and/or its affiliates. # Copyright (c) 2004, 2014, Oracle and/or its affiliates.
# Copyright (c) 2009, 2017, MariaDB Corporation # Copyright (c) 2009, 2018, MariaDB Corporation
# #
# 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
...@@ -637,50 +637,59 @@ sub run_test_server ($$$) { ...@@ -637,50 +637,59 @@ sub run_test_server ($$$) {
my $worker_savename= basename($worker_savedir); my $worker_savename= basename($worker_savedir);
my $savedir= "$opt_vardir/log/$worker_savename"; my $savedir= "$opt_vardir/log/$worker_savename";
if ($opt_max_save_datadir > 0 &&
$num_saved_datadir >= $opt_max_save_datadir)
{
mtr_report(" - skipping '$worker_savedir/'");
rmtree($worker_savedir);
}
else {
mtr_report(" - saving '$worker_savedir/' to '$savedir/'");
rename($worker_savedir, $savedir);
# Move any core files from e.g. mysqltest # Move any core files from e.g. mysqltest
foreach my $coref (glob("core*"), glob("*.dmp")) foreach my $coref (glob("core*"), glob("*.dmp"))
{ {
mtr_report(" - found '$coref', moving it to '$savedir'"); mtr_report(" - found '$coref', moving it to '$worker_savedir'");
move($coref, $savedir); move($coref, $worker_savedir);
} }
if ($opt_max_save_core > 0) {
# Limit number of core files saved find(
find({ no_chdir => 1, {
wanted => sub { no_chdir => 1,
wanted => sub
{
my $core_file= $File::Find::name; my $core_file= $File::Find::name;
my $core_name= basename($core_file); my $core_name= basename($core_file);
# Name beginning with core, not ending in .gz # Name beginning with core, not ending in .gz
if (($core_name =~ /^core/ and $core_name !~ /\.gz$/) if (($core_name =~ /^core/ and $core_name !~ /\.gz$/)
or (IS_WINDOWS and $core_name =~ /\.dmp$/)){ or (IS_WINDOWS and $core_name =~ /\.dmp$/))
{
# Ending with .dmp # Ending with .dmp
mtr_report(" - found '$core_name'", mtr_report(" - found '$core_name'",
"($num_saved_cores/$opt_max_save_core)"); "($num_saved_cores/$opt_max_save_core)");
My::CoreDump->show($core_file, $exe_mysqld, $opt_parallel); My::CoreDump->show($core_file, $exe_mysqld, $opt_parallel);
if ($num_saved_cores >= $opt_max_save_core) { # Limit number of core files saved
if ($opt_max_save_core > 0 &&
$num_saved_cores >= $opt_max_save_core)
{
mtr_report(" - deleting it, already saved", mtr_report(" - deleting it, already saved",
"$opt_max_save_core"); "$opt_max_save_core");
unlink("$core_file"); unlink("$core_file");
} else {
mtr_compress_file($core_file) unless @opt_cases;
} }
else
{
mtr_compress_file($core_file) unless @opt_cases;
++$num_saved_cores; ++$num_saved_cores;
} }
} }
}
}, },
$savedir); $worker_savedir);
if ($opt_max_save_datadir > 0 &&
$num_saved_datadir >= $opt_max_save_datadir)
{
mtr_report(" - skipping '$worker_savedir/'");
rmtree($worker_savedir);
} }
else
{
mtr_report(" - saving '$worker_savedir/' to '$savedir/'");
rename($worker_savedir, $savedir);
} }
resfile_print_test(); resfile_print_test();
$num_saved_datadir++; $num_saved_datadir++;
...@@ -1605,6 +1614,7 @@ sub command_line_setup { ...@@ -1605,6 +1614,7 @@ sub command_line_setup {
$opt_manual_debug || $opt_dbx || $opt_client_dbx || $opt_manual_dbx || $opt_manual_debug || $opt_dbx || $opt_client_dbx || $opt_manual_dbx ||
$opt_debugger || $opt_client_debugger ) $opt_debugger || $opt_client_debugger )
{ {
$ENV{ASAN_OPTIONS}= 'abort_on_error=1:'.($ENV{ASAN_OPTIONS} || '');
if ( using_extern() ) if ( using_extern() )
{ {
mtr_error("Can't use --extern when using debugger"); mtr_error("Can't use --extern when using debugger");
...@@ -5377,7 +5387,7 @@ sub mysqld_start ($$) { ...@@ -5377,7 +5387,7 @@ sub mysqld_start ($$) {
my $args; my $args;
mtr_init_args(\$args); mtr_init_args(\$args);
if ( $opt_valgrind_mysqld ) if ( $opt_valgrind_mysqld and not $opt_gdb and not $opt_manual_gdb )
{ {
valgrind_arguments($args, \$exe); valgrind_arguments($args, \$exe);
} }
...@@ -5980,11 +5990,20 @@ sub gdb_arguments { ...@@ -5980,11 +5990,20 @@ sub gdb_arguments {
unlink($gdb_init_file); unlink($gdb_init_file);
# Put $args into a single string # Put $args into a single string
my $str= join(" ", @$$args);
$input = $input ? "< $input" : ""; $input = $input ? "< $input" : "";
# write init file for mysqld or client if ($type ne 'client' and $opt_valgrind_mysqld) {
mtr_tofile($gdb_init_file, "set args $str $input\n"); my $v = $$exe;
my $vargs = [];
valgrind_arguments($vargs, \$v);
mtr_tofile($gdb_init_file, <<EOF);
shell @My::SafeProcess::safe_process_cmd --parent-pid=`pgrep -x gdb` -- $v --vgdb-error=0 @$vargs @$$args &
shell sleep 1
target remote | /usr/lib64/valgrind/../../bin/vgdb
EOF
} else {
mtr_tofile($gdb_init_file, "set args @$$args $input\n");
}
if ( $opt_manual_gdb ) if ( $opt_manual_gdb )
{ {
...@@ -6032,7 +6051,7 @@ sub lldb_arguments { ...@@ -6032,7 +6051,7 @@ sub lldb_arguments {
$input = $input ? "< $input" : ""; $input = $input ? "< $input" : "";
# write init file for mysqld or client # write init file for mysqld or client
mtr_tofile($lldb_init_file, "set args $str $input\n"); mtr_tofile($lldb_init_file, "process launch --stop-at-entry -- $str $input\n");
print "\nTo start lldb for $type, type in another window:\n"; print "\nTo start lldb for $type, type in another window:\n";
print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n"; print "cd $glob_mysql_test_dir && lldb -s $lldb_init_file $$exe\n";
......
...@@ -537,3 +537,32 @@ pk ...@@ -537,3 +537,32 @@ pk
-5 -5
1 1
drop table t1; drop table t1;
#
# Start of 5.5 tests
#
#
# MDEV-16534 PPC64: Unexpected error with a negative values into auto-increment columns in HEAP, MyISAM, ARIA
#
CREATE TABLE t1 (
id TINYINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` tinyint(4) NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 (name) VALUES ('dog');
UPDATE t1 SET id=-1 WHERE id=1;
INSERT INTO t1 (name) VALUES ('cat');
SELECT * FROM t1;
id name
-1 dog
2 cat
DROP TABLE t1;
#
# End of 5.5 tests
#
set @old_dbug=@@global.debug_dbug;
set global debug_dbug='+d,auth_disconnect';
create user 'bad' identified by 'worse';
set global debug_dbug=@old_dbug;
drop user bad;
...@@ -4397,5 +4397,36 @@ Field Type Null Key Default Extra ...@@ -4397,5 +4397,36 @@ Field Type Null Key Default Extra
c1 mediumtext YES NULL c1 mediumtext YES NULL
DROP TABLE t1; DROP TABLE t1;
# #
# MDEV-15624 Changing the default character set to utf8mb4 changes query evaluation in a very surprising way
#
SET NAMES utf8;
CREATE TABLE t1 (id INT);
INSERT INTO t1 VALUES (1),(2),(3);
SELECT COUNT(DISTINCT c) FROM (SELECT id, REPLACE(uuid_short(), '0', CAST('o' AS CHAR CHARACTER SET ucs2)) AS c FROM t1) AS d1;
COUNT(DISTINCT c)
3
SELECT DISTINCT REPLACE(uuid_short(), '0', CAST('o' AS CHAR CHARACTER SET ucs2)) AS c FROM t1;
c
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
SELECT COUNT(DISTINCT c) FROM (SELECT id, INSERT(uuid_short(), 1, 1, CAST('0' AS CHAR CHARACTER SET ucs2)) AS c FROM t1) AS d1;
COUNT(DISTINCT c)
3
SELECT DISTINCT INSERT(uuid_short(), 1, 1, CAST('0' AS CHAR CHARACTER SET ucs2)) AS c FROM t1;
c
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
SELECT COUNT(DISTINCT c) FROM (SELECT id, CONCAT(uuid_short(), CAST('0' AS CHAR CHARACTER SET ucs2)) AS c FROM t1) AS d1;
COUNT(DISTINCT c)
3
SELECT DISTINCT CONCAT(uuid_short(), CAST('0' AS CHAR CHARACTER SET ucs2)) AS c FROM t1;
c
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
DROP TABLE t1;
#
# End of 5.5 tests # End of 5.5 tests
# #
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment