mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Merge branch '10.1' into bb-10.1-jan
This commit is contained in:
@@ -157,8 +157,8 @@ fi
|
||||
# Set flags for various build configurations.
|
||||
# Used in -valgrind builds
|
||||
# Override -DFORCE_INIT_OF_VARS from debug_cflags. It enables the macro
|
||||
# LINT_INIT(), which is only useful for silencing spurious warnings
|
||||
# of static analysis tools. We want LINT_INIT() to be a no-op in Valgrind.
|
||||
# UNINIT_VAR(), which is only useful for silencing spurious warnings
|
||||
# of static analysis tools. We want UNINIT_VAR() to be a no-op in Valgrind.
|
||||
valgrind_flags="-DHAVE_valgrind -USAFEMALLOC"
|
||||
valgrind_flags="$valgrind_flags -UFORCE_INIT_OF_VARS -Wno-uninitialized"
|
||||
valgrind_flags="$valgrind_flags -DMYSQL_SERVER_SUFFIX=-valgrind-max"
|
||||
|
@@ -3040,9 +3040,7 @@ static int com_server_help(String *buffer __attribute__((unused)),
|
||||
init_pager();
|
||||
char last_char= 0;
|
||||
|
||||
int num_name= 0, num_cat= 0;
|
||||
LINT_INIT(num_name);
|
||||
LINT_INIT(num_cat);
|
||||
int UNINIT_VAR(num_name), UNINIT_VAR(num_cat);
|
||||
|
||||
if (num_fields == 2)
|
||||
{
|
||||
@@ -3179,7 +3177,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
}
|
||||
|
||||
/* Remove garbage for nicer messages */
|
||||
LINT_INIT(buff[0]);
|
||||
LINT_INIT_STRUCT(buff[0]);
|
||||
remove_cntrl(*buffer);
|
||||
|
||||
if (buffer->is_empty())
|
||||
@@ -4698,8 +4696,7 @@ com_status(String *buffer __attribute__((unused)),
|
||||
const char *status_str;
|
||||
char buff[40];
|
||||
ulonglong id;
|
||||
MYSQL_RES *result;
|
||||
LINT_INIT(result);
|
||||
MYSQL_RES *UNINIT_VAR(result);
|
||||
|
||||
if (mysql_real_query_for_lazy(
|
||||
C_STRING_WITH_LEN("select DATABASE(), USER() limit 1")))
|
||||
@@ -5258,8 +5255,7 @@ static void init_username()
|
||||
my_free(full_username);
|
||||
my_free(part_username);
|
||||
|
||||
MYSQL_RES *result;
|
||||
LINT_INIT(result);
|
||||
MYSQL_RES *UNINIT_VAR(result);
|
||||
if (!mysql_query(&mysql,"select USER()") &&
|
||||
(result=mysql_use_result(&mysql)))
|
||||
{
|
||||
|
@@ -2617,12 +2617,11 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
|
||||
{
|
||||
char *end = (char*)((query_end && *query_end) ?
|
||||
*query_end : query + strlen(query));
|
||||
MYSQL_RES *res;
|
||||
MYSQL_RES *UNINIT_VAR(res);
|
||||
MYSQL_ROW row;
|
||||
MYSQL* mysql = cur_con->mysql;
|
||||
DYNAMIC_STRING ds_query;
|
||||
DBUG_ENTER("var_query_set");
|
||||
LINT_INIT(res);
|
||||
|
||||
if (!mysql)
|
||||
{
|
||||
@@ -2801,7 +2800,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
|
||||
{
|
||||
long row_no;
|
||||
int col_no= -1;
|
||||
MYSQL_RES* res;
|
||||
MYSQL_RES* UNINIT_VAR(res);
|
||||
MYSQL* mysql= cur_con->mysql;
|
||||
|
||||
static DYNAMIC_STRING ds_query;
|
||||
@@ -2814,7 +2813,6 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
|
||||
};
|
||||
|
||||
DBUG_ENTER("var_set_query_get_value");
|
||||
LINT_INIT(res);
|
||||
|
||||
if (!mysql)
|
||||
{
|
||||
|
@@ -57,8 +57,7 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
|
||||
char *batch_readline(LINE_BUFFER *line_buff, bool binary_mode)
|
||||
{
|
||||
char *pos;
|
||||
ulong out_length;
|
||||
LINT_INIT(out_length);
|
||||
ulong UNINIT_VAR(out_length);
|
||||
|
||||
if (!(pos=intern_read_line(line_buff, &out_length)))
|
||||
return 0;
|
||||
|
@@ -117,7 +117,12 @@ uint lf_alloc_pool_count(LF_ALLOCATOR *allocator);
|
||||
#define lf_alloc_free(PINS, PTR) lf_pinbox_free((PINS), (PTR))
|
||||
#define lf_alloc_get_pins(A) lf_pinbox_get_pins(&(A)->pinbox)
|
||||
#define lf_alloc_put_pins(PINS) lf_pinbox_put_pins(PINS)
|
||||
#define lf_alloc_direct_free(ALLOC, ADDR) my_free((ADDR))
|
||||
#define lf_alloc_direct_free(ALLOC, ADDR) \
|
||||
do { \
|
||||
if ((ALLOC)->destructor) \
|
||||
(ALLOC)->destructor((uchar*) ADDR); \
|
||||
my_free(ADDR); \
|
||||
} while(0)
|
||||
|
||||
void *lf_alloc_new(LF_PINS *pins);
|
||||
|
||||
|
@@ -382,6 +382,16 @@ typedef struct
|
||||
} MY_STRCOPY_STATUS;
|
||||
|
||||
|
||||
/*
|
||||
A structure to return the statistics of a Unicode string conversion.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MY_STRCOPY_STATUS m_native_copy_status;
|
||||
const char *m_cannot_convert_error_pos;
|
||||
} MY_STRCONV_STATUS;
|
||||
|
||||
|
||||
/* See strings/CHARSET_INFO.txt about information on this structure */
|
||||
struct my_charset_handler_st
|
||||
{
|
||||
@@ -444,22 +454,64 @@ struct my_charset_handler_st
|
||||
size_t (*scan)(CHARSET_INFO *, const char *b, const char *e,
|
||||
int sq);
|
||||
|
||||
/* Copying routines */
|
||||
/* String copying routines and helpers for them */
|
||||
/*
|
||||
copy_abort() - copy a string, abort if a bad byte sequence was found.
|
||||
charlen() - calculate length of the left-most character in bytes.
|
||||
@param cs Character set
|
||||
@param str The beginning of the string
|
||||
@param end The end of the string
|
||||
|
||||
@return MY_CS_ILSEQ if a bad byte sequence was found.
|
||||
@return MY_CS_TOOSMALLN(x) if the string ended unexpectedly.
|
||||
@return a positive number in the range 1..mbmaxlen,
|
||||
if a valid character was found.
|
||||
*/
|
||||
int (*charlen)(CHARSET_INFO *cs, const uchar *str, const uchar *end);
|
||||
/*
|
||||
well_formed_char_length() - returns character length of a string.
|
||||
|
||||
@param cs Character set
|
||||
@param str The beginning of the string
|
||||
@param end The end of the string
|
||||
@param nchars Not more than "nchars" left-most characters are checked.
|
||||
@param status[OUT] Additional statistics is returned here.
|
||||
"status" can be uninitialized before the call,
|
||||
and it is fully initialized after the call.
|
||||
|
||||
status->m_source_end_pos is set to the position where reading stopped.
|
||||
|
||||
If a bad byte sequence is found, the function returns immediately and
|
||||
status->m_well_formed_error_pos is set to the position where a bad byte
|
||||
sequence was found.
|
||||
|
||||
status->m_well_formed_error_pos is set to NULL if no bad bytes were found.
|
||||
If status->m_well_formed_error_pos is NULL after the call, that means:
|
||||
- either the function reached the end of the string,
|
||||
- or all "nchars" characters were read.
|
||||
The caller can check status->m_source_end_pos to detect which of these two
|
||||
happened.
|
||||
*/
|
||||
size_t (*well_formed_char_length)(CHARSET_INFO *cs,
|
||||
const char *str, const char *end,
|
||||
size_t nchars,
|
||||
MY_STRCOPY_STATUS *status);
|
||||
|
||||
/*
|
||||
copy_fix() - copy a string, replace bad bytes to '?'.
|
||||
Not more than "nchars" characters are copied.
|
||||
|
||||
status->m_source_end_pos is set to a position in the range
|
||||
between "src" and "src + src_length".
|
||||
between "src" and "src + src_length", where reading stopped.
|
||||
|
||||
status->m_well_formed_error_pos is set to NULL if the string
|
||||
in the range "src" and "status->m_source_end_pos" was well formed,
|
||||
or is set to "src + src_length" otherwise.
|
||||
or is set to a position between "src" and "src + src_length" where
|
||||
the leftmost bad byte sequence was found.
|
||||
*/
|
||||
size_t (*copy_abort)(CHARSET_INFO *,
|
||||
char *dst, size_t dst_length,
|
||||
const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCOPY_STATUS *status);
|
||||
size_t (*copy_fix)(CHARSET_INFO *,
|
||||
char *dst, size_t dst_length,
|
||||
const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCOPY_STATUS *status);
|
||||
};
|
||||
|
||||
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
|
||||
@@ -596,10 +648,10 @@ size_t my_copy_8bit(CHARSET_INFO *,
|
||||
char *dst, size_t dst_length,
|
||||
const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCOPY_STATUS *);
|
||||
size_t my_copy_abort_mb(CHARSET_INFO *cs,
|
||||
char *dst, size_t dst_length,
|
||||
const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCOPY_STATUS *);
|
||||
size_t my_copy_fix_mb(CHARSET_INFO *cs,
|
||||
char *dst, size_t dst_length,
|
||||
const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCOPY_STATUS *);
|
||||
|
||||
/* Functions for 8bit */
|
||||
extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *);
|
||||
@@ -691,6 +743,11 @@ size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e);
|
||||
size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos);
|
||||
size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e,
|
||||
size_t pos, int *error);
|
||||
size_t my_well_formed_char_length_8bit(CHARSET_INFO *cs,
|
||||
const char *b, const char *e,
|
||||
size_t nchars,
|
||||
MY_STRCOPY_STATUS *status);
|
||||
int my_charlen_8bit(CHARSET_INFO *, const uchar *str, const uchar *end);
|
||||
uint my_mbcharlen_8bit(CHARSET_INFO *, uint c);
|
||||
|
||||
|
||||
@@ -805,10 +862,42 @@ const MY_CONTRACTIONS *my_charset_get_contractions(CHARSET_INFO *cs,
|
||||
extern size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
|
||||
const char* fmt, va_list ap);
|
||||
|
||||
/*
|
||||
Convert a string between two character sets.
|
||||
Bad byte sequences as well as characters that cannot be
|
||||
encoded in the destination character set are replaced to '?'.
|
||||
*/
|
||||
uint32 my_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
|
||||
const char *from, uint32 from_length,
|
||||
CHARSET_INFO *from_cs, uint *errors);
|
||||
|
||||
/*
|
||||
Convert a string between two character sets.
|
||||
Bad byte sequences as well as characters that cannot be
|
||||
encoded in the destination character set are replaced to '?'.
|
||||
Not more than "nchars" characters are copied.
|
||||
Conversion statistics is returnd in "status" and is set as follows:
|
||||
- status->m_native_copy_status.m_source_end_pos - to the position
|
||||
between (src) and (src+src_length), where the function stopped reading
|
||||
the source string.
|
||||
- status->m_native_copy_status.m_well_formed_error_pos - to the position
|
||||
between (src) and (src+src_length), where the first badly formed byte
|
||||
sequence was found, or to NULL if the string was well formed in the
|
||||
given range.
|
||||
- status->m_cannot_convert_error_pos - to the position
|
||||
between (src) and (src+src_length), where the first character that
|
||||
cannot be represented in the destination character set was found,
|
||||
or to NULL if all characters in the given range were successfully
|
||||
converted.
|
||||
|
||||
"src" is allowed to be a NULL pointer. In this case "src_length" must
|
||||
be equal to 0. All "status" members are initialized to NULL, and 0 is
|
||||
returned.
|
||||
*/
|
||||
size_t my_convert_fix(CHARSET_INFO *dstcs, char *dst, size_t dst_length,
|
||||
CHARSET_INFO *srccs, const char *src, size_t src_length,
|
||||
size_t nchars, MY_STRCONV_STATUS *status);
|
||||
|
||||
#define _MY_U 01 /* Upper case */
|
||||
#define _MY_L 02 /* Lower case */
|
||||
#define _MY_NMR 04 /* Numeral (digit) */
|
||||
|
@@ -457,19 +457,6 @@ extern "C" int madvise(void *addr, size_t len, int behav);
|
||||
#define STDERR_FILENO 2
|
||||
#endif
|
||||
|
||||
/*
|
||||
Deprecated workaround for false-positive uninitialized variables
|
||||
warnings. Those should be silenced using tool-specific heuristics.
|
||||
|
||||
Enabled by default for g++ due to the bug referenced below.
|
||||
*/
|
||||
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \
|
||||
(defined(__GNUC__) && defined(__cplusplus))
|
||||
#define LINT_INIT(var) var= 0
|
||||
#else
|
||||
#define LINT_INIT(var)
|
||||
#endif
|
||||
|
||||
#ifndef SO_EXT
|
||||
#ifdef _WIN32
|
||||
#define SO_EXT ".dll"
|
||||
|
@@ -859,12 +859,11 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
|
||||
MYSQL_RES * STDCALL
|
||||
mysql_list_processes(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_DATA *fields;
|
||||
MYSQL_DATA *UNINIT_VAR(fields);
|
||||
uint field_count;
|
||||
uchar *pos;
|
||||
DBUG_ENTER("mysql_list_processes");
|
||||
|
||||
LINT_INIT(fields);
|
||||
if (simple_command(mysql,COM_PROCESS_INFO,0,0,0))
|
||||
DBUG_RETURN(0);
|
||||
free_old_query(mysql);
|
||||
|
@@ -597,7 +597,7 @@ Warning 1366 Incorrect string value: '\x80\' for column 'a' at row 61
|
||||
Warning 1366 Incorrect string value: '\x80]' for column 'a' at row 62
|
||||
Warning 1366 Incorrect string value: '\x80^' for column 'a' at row 63
|
||||
Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
COUNT(*)
|
||||
13973
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
|
@@ -165,7 +165,7 @@ Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
14623
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?' AND OCTET_LENGTH(a)=1;
|
||||
COUNT(*)
|
||||
63
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
|
@@ -10101,6 +10101,9 @@ COUNT(*)
|
||||
56959
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
COUNT(*)
|
||||
56959
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND a<>'?';
|
||||
COUNT(*)
|
||||
17735
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
COUNT(*)
|
||||
@@ -33632,7 +33635,7 @@ CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET eucjpms);
|
||||
INSERT INTO t1 VALUES (0x8EA0);
|
||||
SELECT HEX(a), CHAR_LENGTH(a) FROM t1;
|
||||
HEX(a) CHAR_LENGTH(a)
|
||||
0
|
||||
3F3F 2
|
||||
DROP TABLE t1;
|
||||
SELECT _eucjpms 0x8EA0;
|
||||
ERROR HY000: Invalid eucjpms character string: '8EA0'
|
||||
|
@@ -407,12 +407,12 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1\xFF' for column 's1' at row 1
|
||||
select hex(s1), hex(convert(s1 using utf8)) from t1 order by binary s1;
|
||||
hex(s1) hex(convert(s1 using utf8))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3F3F 3F3F
|
||||
3F3F 3F3F
|
||||
3F40 3F40
|
||||
3F5B 3F5B
|
||||
3F60 3F60
|
||||
3F7B 3F7B
|
||||
A141 ECA2A5
|
||||
A15A ECA381
|
||||
A161 ECA382
|
||||
@@ -445,7 +445,7 @@ FROM t1 t11, t1 t12
|
||||
WHERE t11.a >= 0x81 AND t11.a <= 0xFE
|
||||
AND t12.a >= 0x41 AND t12.a <= 0xFE
|
||||
ORDER BY t11.a, t12.a;
|
||||
SELECT s as bad_code FROM t2 WHERE a='' ORDER BY s;
|
||||
SELECT s as bad_code FROM t2 WHERE a='?' ORDER BY s;
|
||||
bad_code
|
||||
815B
|
||||
815C
|
||||
@@ -1959,7 +1959,7 @@ FE7D
|
||||
FE7E
|
||||
FE7F
|
||||
FE80
|
||||
DELETE FROM t2 WHERE a='';
|
||||
DELETE FROM t2 WHERE a='?';
|
||||
ALTER TABLE t2 ADD u VARCHAR(1) CHARACTER SET utf8, ADD a2 VARCHAR(1) CHARACTER SET euckr;
|
||||
UPDATE t2 SET u=a, a2=u;
|
||||
SELECT s as unassigned_code FROM t2 WHERE u='?';
|
||||
@@ -24492,7 +24492,7 @@ Warning 1366 Incorrect string value: '\x80\' for column 'a' at row 61
|
||||
Warning 1366 Incorrect string value: '\x80]' for column 'a' at row 62
|
||||
Warning 1366 Incorrect string value: '\x80^' for column 'a' at row 63
|
||||
Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
COUNT(*)
|
||||
22428
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
|
@@ -553,7 +553,7 @@ Warning 1366 Incorrect string value: '\x80\' for column 'a' at row 61
|
||||
Warning 1366 Incorrect string value: '\x80]' for column 'a' at row 62
|
||||
Warning 1366 Incorrect string value: '\x80^' for column 'a' at row 63
|
||||
Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
COUNT(*)
|
||||
8178
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
|
@@ -573,7 +573,7 @@ Warning 1366 Incorrect string value: '\x80\' for column 'a' at row 61
|
||||
Warning 1366 Incorrect string value: '\x80]' for column 'a' at row 62
|
||||
Warning 1366 Incorrect string value: '\x80^' for column 'a' at row 63
|
||||
Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
COUNT(*)
|
||||
23940
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
@@ -4946,3 +4946,814 @@ DROP TABLE t1;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
b VARBINARY(16),
|
||||
type SET('ascii','bad','head','tail','mb2','unassigned')
|
||||
);
|
||||
INSERT INTO t1 (b, type) VALUES (0x40, 'ascii,tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0x80, 'tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0x81, 'head,tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0xFF, 'bad');
|
||||
INSERT INTO t1 (b, type) VALUES (0xA140, 'mb2,unassigned');
|
||||
INSERT INTO t1 (b, type) VALUES (0xA1A3, 'mb2');
|
||||
INSERT INTO t1 (b, type) VALUES (0xFE40, 'mb2');
|
||||
CREATE TABLE t2 AS SELECT
|
||||
CONCAT(t1.b,t2.b) AS b,
|
||||
t1.type AS type1,
|
||||
t2.type AS type2,
|
||||
CONCAT('[',t1.type,'][',t2.type,']') AS comment
|
||||
FROM t1, t1 t2;
|
||||
CREATE TABLE t3
|
||||
(
|
||||
b VARBINARY(16),
|
||||
c VARCHAR(16) CHARACTER SET gbk,
|
||||
comment VARCHAR(128)
|
||||
);
|
||||
#
|
||||
# A combination of two valid characters, should give no warnings
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE
|
||||
(FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1)) AND
|
||||
(FIND_IN_SET('ascii',type2) OR FIND_IN_SET('mb2',type2))
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
16
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
4040 [ascii,tail][ascii,tail]
|
||||
40A140 [ascii,tail][mb2,unassigned]
|
||||
40A1A3 [ascii,tail][mb2]
|
||||
40FE40 [ascii,tail][mb2]
|
||||
A14040 [mb2,unassigned][ascii,tail]
|
||||
A140A140 [mb2,unassigned][mb2,unassigned]
|
||||
A140A1A3 [mb2,unassigned][mb2]
|
||||
A140FE40 [mb2,unassigned][mb2]
|
||||
A1A340 [mb2][ascii,tail]
|
||||
A1A3A140 [mb2][mb2,unassigned]
|
||||
A1A3A1A3 [mb2][mb2]
|
||||
A1A3FE40 [mb2][mb2]
|
||||
FE4040 [mb2][ascii,tail]
|
||||
FE40A140 [mb2][mb2,unassigned]
|
||||
FE40A1A3 [mb2][mb2]
|
||||
FE40FE40 [mb2][mb2]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that start with a tail or a bad byte,
|
||||
# or end with a bad byte, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE type1='tail' OR type1='bad' OR type2='bad'
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x80@' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x80\x80' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x80\x81' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x80\xFF' for column 'c' at row 8
|
||||
Warning 1366 Incorrect string value: '\x81\xFF' for column 'c' at row 9
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 10
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 11
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 12
|
||||
Warning 1366 Incorrect string value: '\xFF@' for column 'c' at row 13
|
||||
Warning 1366 Incorrect string value: '\xFF\x80' for column 'c' at row 14
|
||||
Warning 1366 Incorrect string value: '\xFF\x81' for column 'c' at row 15
|
||||
Warning 1366 Incorrect string value: '\xFF\xA1@' for column 'c' at row 16
|
||||
Warning 1366 Incorrect string value: '\xFF\xA1\xA3' for column 'c' at row 17
|
||||
Warning 1366 Incorrect string value: '\xFF\xFE@' for column 'c' at row 18
|
||||
Warning 1366 Incorrect string value: '\xFF\xFF' for column 'c' at row 19
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
19
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
403F 40FF [ascii,tail][bad]
|
||||
3F40 8040 [tail][ascii,tail]
|
||||
3F3F 8080 [tail][tail]
|
||||
3F3F 8081 [tail][head,tail]
|
||||
3FA140 80A140 [tail][mb2,unassigned]
|
||||
3FA1A3 80A1A3 [tail][mb2]
|
||||
3FFE40 80FE40 [tail][mb2]
|
||||
3F3F 80FF [tail][bad]
|
||||
3F3F 81FF [head,tail][bad]
|
||||
A1403F A140FF [mb2,unassigned][bad]
|
||||
A1A33F A1A3FF [mb2][bad]
|
||||
FE403F FE40FF [mb2][bad]
|
||||
3F40 FF40 [bad][ascii,tail]
|
||||
3F3F FF80 [bad][tail]
|
||||
3F3F FF81 [bad][head,tail]
|
||||
3FA140 FFA140 [bad][mb2,unassigned]
|
||||
3FA1A3 FFA1A3 [bad][mb2]
|
||||
3FFE40 FFFE40 [bad][mb2]
|
||||
3F3F FFFF [bad][bad]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that start with an ASCII or an MB2 character,
|
||||
# followed by a non-ASCII tail, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1))
|
||||
AND (FIND_IN_SET('tail',type2) AND NOT FIND_IN_SET('ascii',type2))
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 8
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
8
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
403F 4080 [ascii,tail][tail]
|
||||
403F 4081 [ascii,tail][head,tail]
|
||||
A1403F A14080 [mb2,unassigned][tail]
|
||||
A1403F A14081 [mb2,unassigned][head,tail]
|
||||
A1A33F A1A380 [mb2][tail]
|
||||
A1A33F A1A381 [mb2][head,tail]
|
||||
FE403F FE4080 [mb2][tail]
|
||||
FE403F FE4081 [mb2][head,tail]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Other sequences
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2 ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 5
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
6
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
8140 [head,tail][ascii,tail]
|
||||
8180 [head,tail][tail]
|
||||
8181 [head,tail][head,tail]
|
||||
81A140 [head,tail][mb2,unassigned]
|
||||
81FE40 [head,tail][mb2]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
81A13F 81A1A3 [head,tail][mb2]
|
||||
DELETE FROM t3;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT
|
||||
CONCAT(t1.b,t2.b,t3.b) AS b,
|
||||
t1.type AS type1,
|
||||
t2.type AS type2,
|
||||
t3.type AS type3,
|
||||
CONCAT('[',t1.type,'][',t2.type,'][',t3.type,']') AS comment
|
||||
FROM t1, t1 t2,t1 t3;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
343
|
||||
CREATE TABLE t3
|
||||
(
|
||||
b VARBINARY(16),
|
||||
c VARCHAR(16) CHARACTER SET gbk,
|
||||
comment VARCHAR(128)
|
||||
);
|
||||
#
|
||||
# A combination of three valid characters, should give no warnings
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE
|
||||
(FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1)) AND
|
||||
(FIND_IN_SET('ascii',type2) OR FIND_IN_SET('mb2',type2)) AND
|
||||
(FIND_IN_SET('ascii',type3) OR FIND_IN_SET('mb2',type3))
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
64
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
404040 [ascii,tail][ascii,tail][ascii,tail]
|
||||
4040A140 [ascii,tail][ascii,tail][mb2,unassigned]
|
||||
4040A1A3 [ascii,tail][ascii,tail][mb2]
|
||||
4040FE40 [ascii,tail][ascii,tail][mb2]
|
||||
40A14040 [ascii,tail][mb2,unassigned][ascii,tail]
|
||||
40A140A140 [ascii,tail][mb2,unassigned][mb2,unassigned]
|
||||
40A140A1A3 [ascii,tail][mb2,unassigned][mb2]
|
||||
40A140FE40 [ascii,tail][mb2,unassigned][mb2]
|
||||
40A1A340 [ascii,tail][mb2][ascii,tail]
|
||||
40A1A3A140 [ascii,tail][mb2][mb2,unassigned]
|
||||
40A1A3A1A3 [ascii,tail][mb2][mb2]
|
||||
40A1A3FE40 [ascii,tail][mb2][mb2]
|
||||
40FE4040 [ascii,tail][mb2][ascii,tail]
|
||||
40FE40A140 [ascii,tail][mb2][mb2,unassigned]
|
||||
40FE40A1A3 [ascii,tail][mb2][mb2]
|
||||
40FE40FE40 [ascii,tail][mb2][mb2]
|
||||
A1404040 [mb2,unassigned][ascii,tail][ascii,tail]
|
||||
A14040A140 [mb2,unassigned][ascii,tail][mb2,unassigned]
|
||||
A14040A1A3 [mb2,unassigned][ascii,tail][mb2]
|
||||
A14040FE40 [mb2,unassigned][ascii,tail][mb2]
|
||||
A140A14040 [mb2,unassigned][mb2,unassigned][ascii,tail]
|
||||
A140A140A140 [mb2,unassigned][mb2,unassigned][mb2,unassigned]
|
||||
A140A140A1A3 [mb2,unassigned][mb2,unassigned][mb2]
|
||||
A140A140FE40 [mb2,unassigned][mb2,unassigned][mb2]
|
||||
A140A1A340 [mb2,unassigned][mb2][ascii,tail]
|
||||
A140A1A3A140 [mb2,unassigned][mb2][mb2,unassigned]
|
||||
A140A1A3A1A3 [mb2,unassigned][mb2][mb2]
|
||||
A140A1A3FE40 [mb2,unassigned][mb2][mb2]
|
||||
A140FE4040 [mb2,unassigned][mb2][ascii,tail]
|
||||
A140FE40A140 [mb2,unassigned][mb2][mb2,unassigned]
|
||||
A140FE40A1A3 [mb2,unassigned][mb2][mb2]
|
||||
A140FE40FE40 [mb2,unassigned][mb2][mb2]
|
||||
A1A34040 [mb2][ascii,tail][ascii,tail]
|
||||
A1A340A140 [mb2][ascii,tail][mb2,unassigned]
|
||||
A1A340A1A3 [mb2][ascii,tail][mb2]
|
||||
A1A340FE40 [mb2][ascii,tail][mb2]
|
||||
A1A3A14040 [mb2][mb2,unassigned][ascii,tail]
|
||||
A1A3A140A140 [mb2][mb2,unassigned][mb2,unassigned]
|
||||
A1A3A140A1A3 [mb2][mb2,unassigned][mb2]
|
||||
A1A3A140FE40 [mb2][mb2,unassigned][mb2]
|
||||
A1A3A1A340 [mb2][mb2][ascii,tail]
|
||||
A1A3A1A3A140 [mb2][mb2][mb2,unassigned]
|
||||
A1A3A1A3A1A3 [mb2][mb2][mb2]
|
||||
A1A3A1A3FE40 [mb2][mb2][mb2]
|
||||
A1A3FE4040 [mb2][mb2][ascii,tail]
|
||||
A1A3FE40A140 [mb2][mb2][mb2,unassigned]
|
||||
A1A3FE40A1A3 [mb2][mb2][mb2]
|
||||
A1A3FE40FE40 [mb2][mb2][mb2]
|
||||
FE404040 [mb2][ascii,tail][ascii,tail]
|
||||
FE4040A140 [mb2][ascii,tail][mb2,unassigned]
|
||||
FE4040A1A3 [mb2][ascii,tail][mb2]
|
||||
FE4040FE40 [mb2][ascii,tail][mb2]
|
||||
FE40A14040 [mb2][mb2,unassigned][ascii,tail]
|
||||
FE40A140A140 [mb2][mb2,unassigned][mb2,unassigned]
|
||||
FE40A140A1A3 [mb2][mb2,unassigned][mb2]
|
||||
FE40A140FE40 [mb2][mb2,unassigned][mb2]
|
||||
FE40A1A340 [mb2][mb2][ascii,tail]
|
||||
FE40A1A3A140 [mb2][mb2][mb2,unassigned]
|
||||
FE40A1A3A1A3 [mb2][mb2][mb2]
|
||||
FE40A1A3FE40 [mb2][mb2][mb2]
|
||||
FE40FE4040 [mb2][mb2][ascii,tail]
|
||||
FE40FE40A140 [mb2][mb2][mb2,unassigned]
|
||||
FE40FE40A1A3 [mb2][mb2][mb2]
|
||||
FE40FE40FE40 [mb2][mb2][mb2]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that start with a tail or a bad byte,
|
||||
# or have a bad byte, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE type1='tail' OR type1='bad' OR type2='bad' OR type3='bad'
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x80\xFF' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x81\xFF' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\xFF@' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\xFF\x80' for column 'c' at row 8
|
||||
Warning 1366 Incorrect string value: '\xFF\x81' for column 'c' at row 9
|
||||
Warning 1366 Incorrect string value: '\xFF\xA1@' for column 'c' at row 10
|
||||
Warning 1366 Incorrect string value: '\xFF\xA1\xA3' for column 'c' at row 11
|
||||
Warning 1366 Incorrect string value: '\xFF\xFE@' for column 'c' at row 12
|
||||
Warning 1366 Incorrect string value: '\xFF\xFF' for column 'c' at row 13
|
||||
Warning 1366 Incorrect string value: '\x80@@' for column 'c' at row 14
|
||||
Warning 1366 Incorrect string value: '\x80@\x80' for column 'c' at row 15
|
||||
Warning 1366 Incorrect string value: '\x80@\x81' for column 'c' at row 16
|
||||
Warning 1366 Incorrect string value: '\x80@\xA1@' for column 'c' at row 17
|
||||
Warning 1366 Incorrect string value: '\x80@\xA1\xA3' for column 'c' at row 18
|
||||
Warning 1366 Incorrect string value: '\x80@\xFE@' for column 'c' at row 19
|
||||
Warning 1366 Incorrect string value: '\x80@\xFF' for column 'c' at row 20
|
||||
Warning 1366 Incorrect string value: '\x80\x80@' for column 'c' at row 21
|
||||
Warning 1366 Incorrect string value: '\x80\x80\x80' for column 'c' at row 22
|
||||
Warning 1366 Incorrect string value: '\x80\x80\x81' for column 'c' at row 23
|
||||
Warning 1366 Incorrect string value: '\x80\x80\xA1@' for column 'c' at row 24
|
||||
Warning 1366 Incorrect string value: '\x80\x80\xA1\xA3' for column 'c' at row 25
|
||||
Warning 1366 Incorrect string value: '\x80\x80\xFE@' for column 'c' at row 26
|
||||
Warning 1366 Incorrect string value: '\x80\x80\xFF' for column 'c' at row 27
|
||||
Warning 1366 Incorrect string value: '\x80\x81@' for column 'c' at row 28
|
||||
Warning 1366 Incorrect string value: '\x80\x81\x80' for column 'c' at row 29
|
||||
Warning 1366 Incorrect string value: '\x80\x81\x81' for column 'c' at row 30
|
||||
Warning 1366 Incorrect string value: '\x80\x81\xA1@' for column 'c' at row 31
|
||||
Warning 1366 Incorrect string value: '\x80\x81\xA1\xA3' for column 'c' at row 32
|
||||
Warning 1366 Incorrect string value: '\x80\x81\xFE@' for column 'c' at row 33
|
||||
Warning 1366 Incorrect string value: '\x80\x81\xFF' for column 'c' at row 34
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@@' for column 'c' at row 35
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\x80' for column 'c' at row 36
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\x81' for column 'c' at row 37
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\xA1@' for column 'c' at row 38
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\xA1\xA3' for column 'c' at row 39
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\xFE@' for column 'c' at row 40
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@\xFF' for column 'c' at row 41
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3@' for column 'c' at row 42
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\x80' for column 'c' at row 43
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\x81' for column 'c' at row 44
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\xA1@' for column 'c' at row 45
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\xA1\xA3' for column 'c' at row 46
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\xFE@' for column 'c' at row 47
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3\xFF' for column 'c' at row 48
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@@' for column 'c' at row 49
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\x80' for column 'c' at row 50
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\x81' for column 'c' at row 51
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\xA1@' for column 'c' at row 52
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\xA1\xA3' for column 'c' at row 53
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\xFE@' for column 'c' at row 54
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@\xFF' for column 'c' at row 55
|
||||
Warning 1366 Incorrect string value: '\x80\xFF@' for column 'c' at row 56
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\x80' for column 'c' at row 57
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\x81' for column 'c' at row 58
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\xA1@' for column 'c' at row 59
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\xA1\xA3' for column 'c' at row 60
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\xFE@' for column 'c' at row 61
|
||||
Warning 1366 Incorrect string value: '\x80\xFF\xFF' for column 'c' at row 62
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 63
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 'c' at row 64
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
163
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
40403F 4040FF [ascii,tail][ascii,tail][bad]
|
||||
403F3F 4080FF [ascii,tail][tail][bad]
|
||||
403F3F 4081FF [ascii,tail][head,tail][bad]
|
||||
40A1403F 40A140FF [ascii,tail][mb2,unassigned][bad]
|
||||
40A1A33F 40A1A3FF [ascii,tail][mb2][bad]
|
||||
40FE403F 40FE40FF [ascii,tail][mb2][bad]
|
||||
403F40 40FF40 [ascii,tail][bad][ascii,tail]
|
||||
403F3F 40FF80 [ascii,tail][bad][tail]
|
||||
403F3F 40FF81 [ascii,tail][bad][head,tail]
|
||||
403FA140 40FFA140 [ascii,tail][bad][mb2,unassigned]
|
||||
403FA1A3 40FFA1A3 [ascii,tail][bad][mb2]
|
||||
403FFE40 40FFFE40 [ascii,tail][bad][mb2]
|
||||
403F3F 40FFFF [ascii,tail][bad][bad]
|
||||
3F4040 804040 [tail][ascii,tail][ascii,tail]
|
||||
3F403F 804080 [tail][ascii,tail][tail]
|
||||
3F403F 804081 [tail][ascii,tail][head,tail]
|
||||
3F40A140 8040A140 [tail][ascii,tail][mb2,unassigned]
|
||||
3F40A1A3 8040A1A3 [tail][ascii,tail][mb2]
|
||||
3F40FE40 8040FE40 [tail][ascii,tail][mb2]
|
||||
3F403F 8040FF [tail][ascii,tail][bad]
|
||||
3F3F40 808040 [tail][tail][ascii,tail]
|
||||
3F3F3F 808080 [tail][tail][tail]
|
||||
3F3F3F 808081 [tail][tail][head,tail]
|
||||
3F3FA140 8080A140 [tail][tail][mb2,unassigned]
|
||||
3F3FA1A3 8080A1A3 [tail][tail][mb2]
|
||||
3F3FFE40 8080FE40 [tail][tail][mb2]
|
||||
3F3F3F 8080FF [tail][tail][bad]
|
||||
3F8140 808140 [tail][head,tail][ascii,tail]
|
||||
3F8180 808180 [tail][head,tail][tail]
|
||||
3F8181 808181 [tail][head,tail][head,tail]
|
||||
3F81A140 8081A140 [tail][head,tail][mb2,unassigned]
|
||||
3F81A13F 8081A1A3 [tail][head,tail][mb2]
|
||||
3F81FE40 8081FE40 [tail][head,tail][mb2]
|
||||
3F3F3F 8081FF [tail][head,tail][bad]
|
||||
3FA14040 80A14040 [tail][mb2,unassigned][ascii,tail]
|
||||
3FA1403F 80A14080 [tail][mb2,unassigned][tail]
|
||||
3FA1403F 80A14081 [tail][mb2,unassigned][head,tail]
|
||||
3FA140A140 80A140A140 [tail][mb2,unassigned][mb2,unassigned]
|
||||
3FA140A1A3 80A140A1A3 [tail][mb2,unassigned][mb2]
|
||||
3FA140FE40 80A140FE40 [tail][mb2,unassigned][mb2]
|
||||
3FA1403F 80A140FF [tail][mb2,unassigned][bad]
|
||||
3FA1A340 80A1A340 [tail][mb2][ascii,tail]
|
||||
3FA1A33F 80A1A380 [tail][mb2][tail]
|
||||
3FA1A33F 80A1A381 [tail][mb2][head,tail]
|
||||
3FA1A3A140 80A1A3A140 [tail][mb2][mb2,unassigned]
|
||||
3FA1A3A1A3 80A1A3A1A3 [tail][mb2][mb2]
|
||||
3FA1A3FE40 80A1A3FE40 [tail][mb2][mb2]
|
||||
3FA1A33F 80A1A3FF [tail][mb2][bad]
|
||||
3FFE4040 80FE4040 [tail][mb2][ascii,tail]
|
||||
3FFE403F 80FE4080 [tail][mb2][tail]
|
||||
3FFE403F 80FE4081 [tail][mb2][head,tail]
|
||||
3FFE40A140 80FE40A140 [tail][mb2][mb2,unassigned]
|
||||
3FFE40A1A3 80FE40A1A3 [tail][mb2][mb2]
|
||||
3FFE40FE40 80FE40FE40 [tail][mb2][mb2]
|
||||
3FFE403F 80FE40FF [tail][mb2][bad]
|
||||
3F3F40 80FF40 [tail][bad][ascii,tail]
|
||||
3F3F3F 80FF80 [tail][bad][tail]
|
||||
3F3F3F 80FF81 [tail][bad][head,tail]
|
||||
3F3FA140 80FFA140 [tail][bad][mb2,unassigned]
|
||||
3F3FA1A3 80FFA1A3 [tail][bad][mb2]
|
||||
3F3FFE40 80FFFE40 [tail][bad][mb2]
|
||||
3F3F3F 80FFFF [tail][bad][bad]
|
||||
81403F 8140FF [head,tail][ascii,tail][bad]
|
||||
81803F 8180FF [head,tail][tail][bad]
|
||||
81813F 8181FF [head,tail][head,tail][bad]
|
||||
81A1403F 81A140FF [head,tail][mb2,unassigned][bad]
|
||||
81A13F3F 81A1A3FF [head,tail][mb2][bad]
|
||||
81FE403F 81FE40FF [head,tail][mb2][bad]
|
||||
3F3F40 81FF40 [head,tail][bad][ascii,tail]
|
||||
3F3F3F 81FF80 [head,tail][bad][tail]
|
||||
3F3F3F 81FF81 [head,tail][bad][head,tail]
|
||||
3F3FA140 81FFA140 [head,tail][bad][mb2,unassigned]
|
||||
3F3FA1A3 81FFA1A3 [head,tail][bad][mb2]
|
||||
3F3FFE40 81FFFE40 [head,tail][bad][mb2]
|
||||
3F3F3F 81FFFF [head,tail][bad][bad]
|
||||
A140403F A14040FF [mb2,unassigned][ascii,tail][bad]
|
||||
A1403F3F A14080FF [mb2,unassigned][tail][bad]
|
||||
A1403F3F A14081FF [mb2,unassigned][head,tail][bad]
|
||||
A140A1403F A140A140FF [mb2,unassigned][mb2,unassigned][bad]
|
||||
A140A1A33F A140A1A3FF [mb2,unassigned][mb2][bad]
|
||||
A140FE403F A140FE40FF [mb2,unassigned][mb2][bad]
|
||||
A1403F40 A140FF40 [mb2,unassigned][bad][ascii,tail]
|
||||
A1403F3F A140FF80 [mb2,unassigned][bad][tail]
|
||||
A1403F3F A140FF81 [mb2,unassigned][bad][head,tail]
|
||||
A1403FA140 A140FFA140 [mb2,unassigned][bad][mb2,unassigned]
|
||||
A1403FA1A3 A140FFA1A3 [mb2,unassigned][bad][mb2]
|
||||
A1403FFE40 A140FFFE40 [mb2,unassigned][bad][mb2]
|
||||
A1403F3F A140FFFF [mb2,unassigned][bad][bad]
|
||||
A1A3403F A1A340FF [mb2][ascii,tail][bad]
|
||||
A1A33F3F A1A380FF [mb2][tail][bad]
|
||||
A1A33F3F A1A381FF [mb2][head,tail][bad]
|
||||
A1A3A1403F A1A3A140FF [mb2][mb2,unassigned][bad]
|
||||
A1A3A1A33F A1A3A1A3FF [mb2][mb2][bad]
|
||||
A1A3FE403F A1A3FE40FF [mb2][mb2][bad]
|
||||
A1A33F40 A1A3FF40 [mb2][bad][ascii,tail]
|
||||
A1A33F3F A1A3FF80 [mb2][bad][tail]
|
||||
A1A33F3F A1A3FF81 [mb2][bad][head,tail]
|
||||
A1A33FA140 A1A3FFA140 [mb2][bad][mb2,unassigned]
|
||||
A1A33FA1A3 A1A3FFA1A3 [mb2][bad][mb2]
|
||||
A1A33FFE40 A1A3FFFE40 [mb2][bad][mb2]
|
||||
A1A33F3F A1A3FFFF [mb2][bad][bad]
|
||||
FE40403F FE4040FF [mb2][ascii,tail][bad]
|
||||
FE403F3F FE4080FF [mb2][tail][bad]
|
||||
FE403F3F FE4081FF [mb2][head,tail][bad]
|
||||
FE40A1403F FE40A140FF [mb2][mb2,unassigned][bad]
|
||||
FE40A1A33F FE40A1A3FF [mb2][mb2][bad]
|
||||
FE40FE403F FE40FE40FF [mb2][mb2][bad]
|
||||
FE403F40 FE40FF40 [mb2][bad][ascii,tail]
|
||||
FE403F3F FE40FF80 [mb2][bad][tail]
|
||||
FE403F3F FE40FF81 [mb2][bad][head,tail]
|
||||
FE403FA140 FE40FFA140 [mb2][bad][mb2,unassigned]
|
||||
FE403FA1A3 FE40FFA1A3 [mb2][bad][mb2]
|
||||
FE403FFE40 FE40FFFE40 [mb2][bad][mb2]
|
||||
FE403F3F FE40FFFF [mb2][bad][bad]
|
||||
3F4040 FF4040 [bad][ascii,tail][ascii,tail]
|
||||
3F403F FF4080 [bad][ascii,tail][tail]
|
||||
3F403F FF4081 [bad][ascii,tail][head,tail]
|
||||
3F40A140 FF40A140 [bad][ascii,tail][mb2,unassigned]
|
||||
3F40A1A3 FF40A1A3 [bad][ascii,tail][mb2]
|
||||
3F40FE40 FF40FE40 [bad][ascii,tail][mb2]
|
||||
3F403F FF40FF [bad][ascii,tail][bad]
|
||||
3F3F40 FF8040 [bad][tail][ascii,tail]
|
||||
3F3F3F FF8080 [bad][tail][tail]
|
||||
3F3F3F FF8081 [bad][tail][head,tail]
|
||||
3F3FA140 FF80A140 [bad][tail][mb2,unassigned]
|
||||
3F3FA1A3 FF80A1A3 [bad][tail][mb2]
|
||||
3F3FFE40 FF80FE40 [bad][tail][mb2]
|
||||
3F3F3F FF80FF [bad][tail][bad]
|
||||
3F8140 FF8140 [bad][head,tail][ascii,tail]
|
||||
3F8180 FF8180 [bad][head,tail][tail]
|
||||
3F8181 FF8181 [bad][head,tail][head,tail]
|
||||
3F81A140 FF81A140 [bad][head,tail][mb2,unassigned]
|
||||
3F81A13F FF81A1A3 [bad][head,tail][mb2]
|
||||
3F81FE40 FF81FE40 [bad][head,tail][mb2]
|
||||
3F3F3F FF81FF [bad][head,tail][bad]
|
||||
3FA14040 FFA14040 [bad][mb2,unassigned][ascii,tail]
|
||||
3FA1403F FFA14080 [bad][mb2,unassigned][tail]
|
||||
3FA1403F FFA14081 [bad][mb2,unassigned][head,tail]
|
||||
3FA140A140 FFA140A140 [bad][mb2,unassigned][mb2,unassigned]
|
||||
3FA140A1A3 FFA140A1A3 [bad][mb2,unassigned][mb2]
|
||||
3FA140FE40 FFA140FE40 [bad][mb2,unassigned][mb2]
|
||||
3FA1403F FFA140FF [bad][mb2,unassigned][bad]
|
||||
3FA1A340 FFA1A340 [bad][mb2][ascii,tail]
|
||||
3FA1A33F FFA1A380 [bad][mb2][tail]
|
||||
3FA1A33F FFA1A381 [bad][mb2][head,tail]
|
||||
3FA1A3A140 FFA1A3A140 [bad][mb2][mb2,unassigned]
|
||||
3FA1A3A1A3 FFA1A3A1A3 [bad][mb2][mb2]
|
||||
3FA1A3FE40 FFA1A3FE40 [bad][mb2][mb2]
|
||||
3FA1A33F FFA1A3FF [bad][mb2][bad]
|
||||
3FFE4040 FFFE4040 [bad][mb2][ascii,tail]
|
||||
3FFE403F FFFE4080 [bad][mb2][tail]
|
||||
3FFE403F FFFE4081 [bad][mb2][head,tail]
|
||||
3FFE40A140 FFFE40A140 [bad][mb2][mb2,unassigned]
|
||||
3FFE40A1A3 FFFE40A1A3 [bad][mb2][mb2]
|
||||
3FFE40FE40 FFFE40FE40 [bad][mb2][mb2]
|
||||
3FFE403F FFFE40FF [bad][mb2][bad]
|
||||
3F3F40 FFFF40 [bad][bad][ascii,tail]
|
||||
3F3F3F FFFF80 [bad][bad][tail]
|
||||
3F3F3F FFFF81 [bad][bad][head,tail]
|
||||
3F3FA140 FFFFA140 [bad][bad][mb2,unassigned]
|
||||
3F3FA1A3 FFFFA1A3 [bad][bad][mb2]
|
||||
3F3FFE40 FFFFFE40 [bad][bad][mb2]
|
||||
3F3F3F FFFFFF [bad][bad][bad]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that start with an ASCII or an MB2 character,
|
||||
# followed by a pure non-ASCII tail, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1))
|
||||
AND type2='tail'
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\x80@' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x80\x80' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x80\x81' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x80@' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x80\x80' for column 'c' at row 8
|
||||
Warning 1366 Incorrect string value: '\x80\x81' for column 'c' at row 9
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@' for column 'c' at row 10
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3' for column 'c' at row 11
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@' for column 'c' at row 12
|
||||
Warning 1366 Incorrect string value: '\x80@' for column 'c' at row 13
|
||||
Warning 1366 Incorrect string value: '\x80\x80' for column 'c' at row 14
|
||||
Warning 1366 Incorrect string value: '\x80\x81' for column 'c' at row 15
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@' for column 'c' at row 16
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3' for column 'c' at row 17
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@' for column 'c' at row 18
|
||||
Warning 1366 Incorrect string value: '\x80@' for column 'c' at row 19
|
||||
Warning 1366 Incorrect string value: '\x80\x80' for column 'c' at row 20
|
||||
Warning 1366 Incorrect string value: '\x80\x81' for column 'c' at row 21
|
||||
Warning 1366 Incorrect string value: '\x80\xA1@' for column 'c' at row 22
|
||||
Warning 1366 Incorrect string value: '\x80\xA1\xA3' for column 'c' at row 23
|
||||
Warning 1366 Incorrect string value: '\x80\xFE@' for column 'c' at row 24
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
24
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
403F40 408040 [ascii,tail][tail][ascii,tail]
|
||||
403F3F 408080 [ascii,tail][tail][tail]
|
||||
403F3F 408081 [ascii,tail][tail][head,tail]
|
||||
403FA140 4080A140 [ascii,tail][tail][mb2,unassigned]
|
||||
403FA1A3 4080A1A3 [ascii,tail][tail][mb2]
|
||||
403FFE40 4080FE40 [ascii,tail][tail][mb2]
|
||||
A1403F40 A1408040 [mb2,unassigned][tail][ascii,tail]
|
||||
A1403F3F A1408080 [mb2,unassigned][tail][tail]
|
||||
A1403F3F A1408081 [mb2,unassigned][tail][head,tail]
|
||||
A1403FA140 A14080A140 [mb2,unassigned][tail][mb2,unassigned]
|
||||
A1403FA1A3 A14080A1A3 [mb2,unassigned][tail][mb2]
|
||||
A1403FFE40 A14080FE40 [mb2,unassigned][tail][mb2]
|
||||
A1A33F40 A1A38040 [mb2][tail][ascii,tail]
|
||||
A1A33F3F A1A38080 [mb2][tail][tail]
|
||||
A1A33F3F A1A38081 [mb2][tail][head,tail]
|
||||
A1A33FA140 A1A380A140 [mb2][tail][mb2,unassigned]
|
||||
A1A33FA1A3 A1A380A1A3 [mb2][tail][mb2]
|
||||
A1A33FFE40 A1A380FE40 [mb2][tail][mb2]
|
||||
FE403F40 FE408040 [mb2][tail][ascii,tail]
|
||||
FE403F3F FE408080 [mb2][tail][tail]
|
||||
FE403F3F FE408081 [mb2][tail][head,tail]
|
||||
FE403FA140 FE4080A140 [mb2][tail][mb2,unassigned]
|
||||
FE403FA1A3 FE4080A1A3 [mb2][tail][mb2]
|
||||
FE403FFE40 FE4080FE40 [mb2][tail][mb2]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that consist of two ASCII or MB2 characters,
|
||||
# followed by a pure non-ASCII tail, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1)) AND
|
||||
(FIND_IN_SET('mb2',type2) OR FIND_IN_SET('ascii',type2)) AND
|
||||
type3='tail'
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 8
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 9
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 10
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 11
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 12
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 13
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 14
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 15
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 16
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
16
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
40403F 404080 [ascii,tail][ascii,tail][tail]
|
||||
40A1403F 40A14080 [ascii,tail][mb2,unassigned][tail]
|
||||
40A1A33F 40A1A380 [ascii,tail][mb2][tail]
|
||||
40FE403F 40FE4080 [ascii,tail][mb2][tail]
|
||||
A140403F A1404080 [mb2,unassigned][ascii,tail][tail]
|
||||
A140A1403F A140A14080 [mb2,unassigned][mb2,unassigned][tail]
|
||||
A140A1A33F A140A1A380 [mb2,unassigned][mb2][tail]
|
||||
A140FE403F A140FE4080 [mb2,unassigned][mb2][tail]
|
||||
A1A3403F A1A34080 [mb2][ascii,tail][tail]
|
||||
A1A3A1403F A1A3A14080 [mb2][mb2,unassigned][tail]
|
||||
A1A3A1A33F A1A3A1A380 [mb2][mb2][tail]
|
||||
A1A3FE403F A1A3FE4080 [mb2][mb2][tail]
|
||||
FE40403F FE404080 [mb2][ascii,tail][tail]
|
||||
FE40A1403F FE40A14080 [mb2][mb2,unassigned][tail]
|
||||
FE40A1A33F FE40A1A380 [mb2][mb2][tail]
|
||||
FE40FE403F FE40FE4080 [mb2][mb2][tail]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that consist of two MB2 characters,
|
||||
# followed by a non-ASCII head or tail, all should be fixed.
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE FIND_IN_SET('mb2',type1) AND FIND_IN_SET('mb2',type2)
|
||||
AND NOT FIND_IN_SET('ascii',type3)
|
||||
AND NOT FIND_IN_SET('mb2',type3)
|
||||
ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 2
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 4
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 8
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 9
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
9
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
A140A1403F A140A14081 [mb2,unassigned][mb2,unassigned][head,tail]
|
||||
A140A1A33F A140A1A381 [mb2,unassigned][mb2][head,tail]
|
||||
A140FE403F A140FE4081 [mb2,unassigned][mb2][head,tail]
|
||||
A1A3A1403F A1A3A14081 [mb2][mb2,unassigned][head,tail]
|
||||
A1A3A1A33F A1A3A1A381 [mb2][mb2][head,tail]
|
||||
A1A3FE403F A1A3FE4081 [mb2][mb2][head,tail]
|
||||
FE40A1403F FE40A14081 [mb2][mb2,unassigned][head,tail]
|
||||
FE40A1A33F FE40A1A381 [mb2][mb2][head,tail]
|
||||
FE40FE403F FE40FE4081 [mb2][mb2][head,tail]
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that consist of head + tail + MB2 should go without warnings
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE FIND_IN_SET('head',type1)
|
||||
AND FIND_IN_SET('tail',type2)
|
||||
AND FIND_IN_SET('mb2',type3)
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
9
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
8140A140 [head,tail][ascii,tail][mb2,unassigned]
|
||||
8140A1A3 [head,tail][ascii,tail][mb2]
|
||||
8140FE40 [head,tail][ascii,tail][mb2]
|
||||
8180A140 [head,tail][tail][mb2,unassigned]
|
||||
8180A1A3 [head,tail][tail][mb2]
|
||||
8180FE40 [head,tail][tail][mb2]
|
||||
8181A140 [head,tail][head,tail][mb2,unassigned]
|
||||
8181A1A3 [head,tail][head,tail][mb2]
|
||||
8181FE40 [head,tail][head,tail][mb2]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
#
|
||||
# Sequences that consist of (ascii or mb2) + head + tail should go without warnings
|
||||
#
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1))
|
||||
AND FIND_IN_SET('head',type2)
|
||||
AND FIND_IN_SET('tail',type3)
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
12
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
408140 [ascii,tail][head,tail][ascii,tail]
|
||||
408180 [ascii,tail][head,tail][tail]
|
||||
408181 [ascii,tail][head,tail][head,tail]
|
||||
A1408140 [mb2,unassigned][head,tail][ascii,tail]
|
||||
A1408180 [mb2,unassigned][head,tail][tail]
|
||||
A1408181 [mb2,unassigned][head,tail][head,tail]
|
||||
A1A38140 [mb2][head,tail][ascii,tail]
|
||||
A1A38180 [mb2][head,tail][tail]
|
||||
A1A38181 [mb2][head,tail][head,tail]
|
||||
FE408140 [mb2][head,tail][ascii,tail]
|
||||
FE408180 [mb2][head,tail][tail]
|
||||
FE408181 [mb2][head,tail][head,tail]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2 ORDER BY b;
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 1
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 3
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 5
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 6
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 7
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 9
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 10
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 12
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 13
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 15
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 16
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 18
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 19
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 27
|
||||
Warning 1366 Incorrect string value: '\x80' for column 'c' at row 30
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 31
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 35
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 37
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 39
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 41
|
||||
Warning 1366 Incorrect string value: '\x81' for column 'c' at row 43
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'c' at row 45
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
46
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
HEX(c) comment
|
||||
4081A140 [ascii,tail][head,tail][mb2,unassigned]
|
||||
4081FE40 [ascii,tail][head,tail][mb2]
|
||||
814040 [head,tail][ascii,tail][ascii,tail]
|
||||
818040 [head,tail][tail][ascii,tail]
|
||||
818140 [head,tail][head,tail][ascii,tail]
|
||||
81A14040 [head,tail][mb2,unassigned][ascii,tail]
|
||||
81A140A140 [head,tail][mb2,unassigned][mb2,unassigned]
|
||||
81A140A1A3 [head,tail][mb2,unassigned][mb2]
|
||||
81A140FE40 [head,tail][mb2,unassigned][mb2]
|
||||
81A1A340 [head,tail][mb2][ascii,tail]
|
||||
81A1A380 [head,tail][mb2][tail]
|
||||
81A1A381 [head,tail][mb2][head,tail]
|
||||
81A1A3A140 [head,tail][mb2][mb2,unassigned]
|
||||
81A1A3FE40 [head,tail][mb2][mb2]
|
||||
81FE4040 [head,tail][mb2][ascii,tail]
|
||||
81FE40A140 [head,tail][mb2][mb2,unassigned]
|
||||
81FE40A1A3 [head,tail][mb2][mb2]
|
||||
81FE40FE40 [head,tail][mb2][mb2]
|
||||
A14081A140 [mb2,unassigned][head,tail][mb2,unassigned]
|
||||
A14081FE40 [mb2,unassigned][head,tail][mb2]
|
||||
A1A381A140 [mb2][head,tail][mb2,unassigned]
|
||||
A1A381FE40 [mb2][head,tail][mb2]
|
||||
FE4081A140 [mb2][head,tail][mb2,unassigned]
|
||||
FE4081FE40 [mb2][head,tail][mb2]
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
HEX(c) HEX(b) comment
|
||||
40403F 404081 [ascii,tail][ascii,tail][head,tail]
|
||||
4081A13F 4081A1A3 [ascii,tail][head,tail][mb2]
|
||||
40A1403F 40A14081 [ascii,tail][mb2,unassigned][head,tail]
|
||||
40A1A33F 40A1A381 [ascii,tail][mb2][head,tail]
|
||||
40FE403F 40FE4081 [ascii,tail][mb2][head,tail]
|
||||
81403F 814080 [head,tail][ascii,tail][tail]
|
||||
81403F 814081 [head,tail][ascii,tail][head,tail]
|
||||
81803F 818080 [head,tail][tail][tail]
|
||||
81803F 818081 [head,tail][tail][head,tail]
|
||||
81813F 818180 [head,tail][head,tail][tail]
|
||||
81813F 818181 [head,tail][head,tail][head,tail]
|
||||
81A1403F 81A14080 [head,tail][mb2,unassigned][tail]
|
||||
81A1403F 81A14081 [head,tail][mb2,unassigned][head,tail]
|
||||
81A1A3A13F 81A1A3A1A3 [head,tail][mb2][mb2]
|
||||
81FE403F 81FE4080 [head,tail][mb2][tail]
|
||||
81FE403F 81FE4081 [head,tail][mb2][head,tail]
|
||||
A140403F A1404081 [mb2,unassigned][ascii,tail][head,tail]
|
||||
A14081A13F A14081A1A3 [mb2,unassigned][head,tail][mb2]
|
||||
A1A3403F A1A34081 [mb2][ascii,tail][head,tail]
|
||||
A1A381A13F A1A381A1A3 [mb2][head,tail][mb2]
|
||||
FE40403F FE404081 [mb2][ascii,tail][head,tail]
|
||||
FE4081A13F FE4081A1A3 [mb2][head,tail][mb2]
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# END OF MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
#
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
|
@@ -477,7 +477,7 @@ Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
14623
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?' AND OCTET_LENGTH(a)=1;
|
||||
COUNT(*)
|
||||
63
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
|
@@ -2626,7 +2626,7 @@ Warning 1366 Incorrect string value: '\x80_' for column 'a' at row 64
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
44671
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
COUNT(*)
|
||||
17735
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
@@ -25938,7 +25938,7 @@ CREATE TABLE t1 (a VARCHAR(10) CHARACTER SET ujis);
|
||||
INSERT INTO t1 VALUES (0x8EA0);
|
||||
SELECT HEX(a), CHAR_LENGTH(a) FROM t1;
|
||||
HEX(a) CHAR_LENGTH(a)
|
||||
0
|
||||
3F3F 2
|
||||
DROP TABLE t1;
|
||||
SELECT _ujis 0x8EA0;
|
||||
ERROR HY000: Invalid ujis character string: '8EA0'
|
||||
|
@@ -225,7 +225,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -233,7 +233,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8);
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -241,7 +241,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (a text character set utf8, primary key(a(371)));
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
@@ -9332,3 +9332,15 @@ DROP TABLE allbytes;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SELECT * FROM `test😁😁test`;
|
||||
ERROR HY000: Invalid utf8 character string: 'test\xF0\x9F\x98\x81\xF0\x9F\x98\x81test'
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
|
@@ -225,7 +225,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8mb4);
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -233,7 +233,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8mb4);
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -241,7 +241,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (a text character set utf8mb4, primary key(a(371)));
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
@@ -2327,7 +2327,7 @@ select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
F0908080
|
||||
F0BFBFBF
|
||||
|
||||
3F
|
||||
delete from t1;
|
||||
Testing [F2..F3][80..BF][80..BF][80..BF]
|
||||
insert into t1 values (0xF2808080);
|
||||
@@ -2347,7 +2347,7 @@ select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
F4808080
|
||||
F48F8080
|
||||
|
||||
3F
|
||||
drop table t1;
|
||||
#
|
||||
# Check strnxfrm() with odd length
|
||||
@@ -2472,45 +2472,45 @@ F3A087AFEA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
EA9DA8
|
||||
3F3F3F3FEA9DA8
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding)) FROM t1,t2;
|
||||
HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding))
|
||||
F09D8480EA9DA8
|
||||
F09D8480EFB9AB
|
||||
F09D8480
|
||||
F09D84803F3F3F3F
|
||||
F09D849EEA9DA8
|
||||
F09D849EEFB9AB
|
||||
F09D849E
|
||||
F09D849E3F3F3F3F
|
||||
F09D859EEA9DA8
|
||||
F09D859EEFB9AB
|
||||
F09D859E
|
||||
F09D859E3F3F3F3F
|
||||
F09D878FEA9DA8
|
||||
F09D878FEFB9AB
|
||||
F09D878F
|
||||
F09D878F3F3F3F3F
|
||||
F09D9C9FEA9DA8
|
||||
F09D9C9FEFB9AB
|
||||
F09D9C9F
|
||||
F09D9C9F3F3F3F3F
|
||||
F09D9E9FEA9DA8
|
||||
F09D9E9FEFB9AB
|
||||
F09D9E9F
|
||||
F09D9E9F3F3F3F3F
|
||||
F48FBFBFEA9DA8
|
||||
F48FBFBFEFB9AB
|
||||
F48FBFBF
|
||||
F48FBFBF3F3F3F3F
|
||||
F3A087AFEA9DA8
|
||||
F3A087AFEFB9AB
|
||||
F3A087AF
|
||||
F3A087AF3F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB3F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
EA9DA8
|
||||
EFB9AB
|
||||
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
3F3F3F3FEA9DA8
|
||||
3F3F3F3FEFB9AB
|
||||
3F3F3F3F3F3F3F3F
|
||||
SELECT count(*) FROM t1, t2
|
||||
WHERE t1.utf8mb4_encoding > t2.utf8mb3_encoding;
|
||||
count(*)
|
||||
@@ -2547,7 +2547,7 @@ u_decimal hex(utf8mb4_encoding) utf8mb4_encoding
|
||||
119070 3F3F3F3F3F3F3F3F3F3F ??????????
|
||||
65131 EFB9AB3F3F3F3F3FEFB9ABEFB9AB3FEFB9AB ﹫?????﹫﹫?﹫
|
||||
119070 3F3F3F3F3F3F3F3F3F3F ??????????
|
||||
1114111
|
||||
1114111 3F3F3F3F ????
|
||||
ALTER TABLE t2 CONVERT TO CHARACTER SET utf8mb4;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@@ -2559,7 +2559,7 @@ SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
ALTER TABLE t2 CONVERT TO CHARACTER SET utf8mb3;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@@ -2571,7 +2571,7 @@ SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
ALTER TABLE t1 MODIFY utf8mb4_encoding VARCHAR(10) CHARACTER SET utf8mb3;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
@@ -2592,7 +2592,7 @@ u_decimal hex(utf8mb4_encoding)
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
65131 EFB9AB3F3F3F3F3FEFB9ABEFB9AB3FEFB9AB
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
ALTER TABLE t1 MODIFY utf8mb4_encoding VARCHAR(10) CHARACTER SET utf8mb4;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
@@ -2613,7 +2613,7 @@ u_decimal hex(utf8mb4_encoding)
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
65131 EFB9AB3F3F3F3F3FEFB9ABEFB9AB3FEFB9AB
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
ALTER TABLE t2 MODIFY utf8mb3_encoding VARCHAR(10) CHARACTER SET utf8mb4;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
@@ -2625,7 +2625,7 @@ SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
DROP TABLE IF EXISTS t3;
|
||||
CREATE TABLE t3 (
|
||||
u_decimal int NOT NULL,
|
||||
@@ -3306,5 +3306,65 @@ DFFFFFDFFFFF9CFFFF9DFFFF9EFFFF
|
||||
# End of 5.6 tests
|
||||
#
|
||||
#
|
||||
# Start of 10.0 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
#
|
||||
#
|
||||
# This test sets session character set to 3-byte utf8,
|
||||
# but then sends a 4-byte sequence (which is wrong for 3-byte utf8).
|
||||
# It should be replaced to four question marks: '????' in both columns
|
||||
# (i.e. four unknown bytes are replaced to four question marks),
|
||||
# then the rest of the string should be stored, so we get 'a ???? b'.
|
||||
#
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE t1 (
|
||||
a VARCHAR(32) CHARACTER SET utf8mb4,
|
||||
b VARCHAR(32) CHARACTER SET utf8
|
||||
);
|
||||
INSERT INTO t1 SELECT 'a 😁 b', 'a 😁 b';
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF0\x9F\x98\x81 b' for column 'a' at row 1
|
||||
Warning 1366 Incorrect string value: '\xF0\x9F\x98\x81 b' for column 'b' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
a ???? b a ???? b
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# This test sets session character set to 4-byte utf8,
|
||||
# then normally sends a 4-byte sequence.
|
||||
# It should be stored AS IS into the utf8mb4 column (a),
|
||||
# and should be replaced to a single question mark in the utf8 column (b)
|
||||
# (i.e. one character that cannot be converted is replaced to one question mark).
|
||||
#
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (
|
||||
a VARCHAR(32) CHARACTER SET utf8mb4,
|
||||
b VARCHAR(32) CHARACTER SET utf8
|
||||
);
|
||||
INSERT INTO t1 SELECT 'a 😁 b', 'a 😁 b';
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF0\x9F\x98\x81 b' for column 'b' at row 1
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
a 😁 b a ? b
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
#
|
||||
# End of tests
|
||||
#
|
||||
#
|
||||
# Start of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
#
|
||||
SET NAMES utf8mb4;
|
||||
SELECT * FROM `test😁😁test`;
|
||||
ERROR HY000: Invalid utf8mb4 character string: 'test\xF0\x9F\x98\x81\xF0\x9F\x98\x81test'
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
|
@@ -225,7 +225,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8mb4) engine heap;
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -233,7 +233,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
CREATE TABLE t1 ( a varchar(10) ) CHARACTER SET utf8mb4 ENGINE heap;
|
||||
INSERT INTO t1 VALUES ( 'test' );
|
||||
@@ -2157,7 +2157,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF0\x8F\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F0908080
|
||||
F0BFBFBF
|
||||
delete from t1;
|
||||
@@ -2177,7 +2177,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF4\x90\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F4808080
|
||||
F48F8080
|
||||
drop table t1;
|
||||
@@ -2274,7 +2274,7 @@ Warning 1366 Incorrect string value: '\xF4\x8F\xBF\xBD' for column 'utf8mb3_enco
|
||||
UPDATE t2 SET utf8mb3_encoding= _utf8mb4 x'ea9da8' where u_decimal= 42856;
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8')) FROM t1;
|
||||
HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8'))
|
||||
EA9DA8
|
||||
3F3F3F3FEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
F09D8480EA9DA8
|
||||
F09D849EEA9DA8
|
||||
@@ -2288,40 +2288,40 @@ F3A087AFEA9DA8
|
||||
F48FBFBFEA9DA8
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding)) FROM t1,t2;
|
||||
HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding))
|
||||
|
||||
EA9DA8
|
||||
EFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB
|
||||
3F3F3F3F3F3F3F3F
|
||||
3F3F3F3FEA9DA8
|
||||
3F3F3F3FEFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB3F3F3F3F
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEFB9AB
|
||||
F09D8480
|
||||
F09D84803F3F3F3F
|
||||
F09D8480EA9DA8
|
||||
F09D8480EFB9AB
|
||||
F09D849E
|
||||
F09D849E3F3F3F3F
|
||||
F09D849EEA9DA8
|
||||
F09D849EEFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D859E
|
||||
F09D859E3F3F3F3F
|
||||
F09D859EEA9DA8
|
||||
F09D859EEFB9AB
|
||||
F09D878F
|
||||
F09D878F3F3F3F3F
|
||||
F09D878FEA9DA8
|
||||
F09D878FEFB9AB
|
||||
F09D9C9F
|
||||
F09D9C9F3F3F3F3F
|
||||
F09D9C9FEA9DA8
|
||||
F09D9C9FEFB9AB
|
||||
F09D9E9F
|
||||
F09D9E9F3F3F3F3F
|
||||
F09D9E9FEA9DA8
|
||||
F09D9E9FEFB9AB
|
||||
F3A087AF
|
||||
F3A087AF3F3F3F3F
|
||||
F3A087AFEA9DA8
|
||||
F3A087AFEFB9AB
|
||||
F48FBFBF
|
||||
F48FBFBF3F3F3F3F
|
||||
F48FBFBFEA9DA8
|
||||
F48FBFBFEFB9AB
|
||||
SELECT count(*) FROM t1, t2
|
||||
@@ -2337,8 +2337,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding),utf8mb4_encoding FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding) utf8mb4_encoding
|
||||
1114111
|
||||
1114111 3F ?
|
||||
1114111 3F3F3F3F ????
|
||||
119040 3F ?
|
||||
119070 3F ?
|
||||
119070 3F3F3F3F3F3F3F3F3F3F ??????????
|
||||
@@ -2358,7 +2358,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t2 CONVERT TO CHARACTER SET utf8mb3;
|
||||
@@ -2370,7 +2370,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t1 MODIFY utf8mb4_encoding VARCHAR(10) CHARACTER SET utf8mb3;
|
||||
@@ -2382,8 +2382,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2403,8 +2403,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2424,7 +2424,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
DROP TABLE IF EXISTS t3;
|
||||
|
@@ -225,7 +225,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8mb4) engine InnoDB;
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -233,7 +233,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8mb4) engine InnoDB;
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -241,7 +241,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (a text character set utf8mb4, primary key(a(371))) engine InnoDB;
|
||||
ERROR 42000: Specified key was too long; max key length is 767 bytes
|
||||
@@ -2285,7 +2285,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF0\x8F\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F0908080
|
||||
F0BFBFBF
|
||||
delete from t1;
|
||||
@@ -2305,7 +2305,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF4\x90\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F4808080
|
||||
F48F8080
|
||||
drop table t1;
|
||||
@@ -2421,7 +2421,7 @@ Warning 1366 Incorrect string value: '\xF4\x8F\xBF\xBD' for column 'utf8mb3_enco
|
||||
UPDATE t2 SET utf8mb3_encoding= _utf8mb4 x'ea9da8' where u_decimal= 42856;
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8')) FROM t1;
|
||||
HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8'))
|
||||
EA9DA8
|
||||
3F3F3F3FEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
F09D8480EA9DA8
|
||||
F09D849EEA9DA8
|
||||
@@ -2435,40 +2435,40 @@ F3A087AFEA9DA8
|
||||
F48FBFBFEA9DA8
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding)) FROM t1,t2;
|
||||
HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding))
|
||||
|
||||
EA9DA8
|
||||
EFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB
|
||||
3F3F3F3F3F3F3F3F
|
||||
3F3F3F3FEA9DA8
|
||||
3F3F3F3FEFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB3F3F3F3F
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEFB9AB
|
||||
F09D8480
|
||||
F09D84803F3F3F3F
|
||||
F09D8480EA9DA8
|
||||
F09D8480EFB9AB
|
||||
F09D849E
|
||||
F09D849E3F3F3F3F
|
||||
F09D849EEA9DA8
|
||||
F09D849EEFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D859E
|
||||
F09D859E3F3F3F3F
|
||||
F09D859EEA9DA8
|
||||
F09D859EEFB9AB
|
||||
F09D878F
|
||||
F09D878F3F3F3F3F
|
||||
F09D878FEA9DA8
|
||||
F09D878FEFB9AB
|
||||
F09D9C9F
|
||||
F09D9C9F3F3F3F3F
|
||||
F09D9C9FEA9DA8
|
||||
F09D9C9FEFB9AB
|
||||
F09D9E9F
|
||||
F09D9E9F3F3F3F3F
|
||||
F09D9E9FEA9DA8
|
||||
F09D9E9FEFB9AB
|
||||
F3A087AF
|
||||
F3A087AF3F3F3F3F
|
||||
F3A087AFEA9DA8
|
||||
F3A087AFEFB9AB
|
||||
F48FBFBF
|
||||
F48FBFBF3F3F3F3F
|
||||
F48FBFBFEA9DA8
|
||||
F48FBFBFEFB9AB
|
||||
SELECT count(*) FROM t1, t2
|
||||
@@ -2484,8 +2484,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding),utf8mb4_encoding FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding) utf8mb4_encoding
|
||||
1114111
|
||||
1114111 3F ?
|
||||
1114111 3F3F3F3F ????
|
||||
119040 3F ?
|
||||
119070 3F ?
|
||||
119070 3F3F3F3F3F3F3F3F3F3F ??????????
|
||||
@@ -2505,7 +2505,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t2 CONVERT TO CHARACTER SET utf8mb3;
|
||||
@@ -2517,7 +2517,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t1 MODIFY utf8mb4_encoding VARCHAR(10) CHARACTER SET utf8mb3;
|
||||
@@ -2529,8 +2529,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2550,8 +2550,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2571,7 +2571,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
DROP TABLE IF EXISTS t3;
|
||||
|
@@ -225,7 +225,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 varchar(10) character set utf8mb4) engine MyISAM;
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -233,7 +233,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (s1 text character set utf8mb4) engine MyISAM;
|
||||
insert into t1 values (0x41FF);
|
||||
@@ -241,7 +241,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xFF' for column 's1' at row 1
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
413F
|
||||
drop table t1;
|
||||
create table t1 (a text character set utf8mb4, primary key(a(371))) engine MyISAM;
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
@@ -2285,7 +2285,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF0\x8F\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F0908080
|
||||
F0BFBFBF
|
||||
delete from t1;
|
||||
@@ -2305,7 +2305,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xF4\x90\x80\x80' for column 'utf8mb4' at row 1
|
||||
select hex(utf8mb4) from t1;
|
||||
hex(utf8mb4)
|
||||
|
||||
3F
|
||||
F4808080
|
||||
F48F8080
|
||||
drop table t1;
|
||||
@@ -2421,7 +2421,7 @@ Warning 1366 Incorrect string value: '\xF4\x8F\xBF\xBD' for column 'utf8mb3_enco
|
||||
UPDATE t2 SET utf8mb3_encoding= _utf8mb4 x'ea9da8' where u_decimal= 42856;
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8')) FROM t1;
|
||||
HEX(CONCAT(utf8mb4_encoding, _utf8 x'ea9da8'))
|
||||
EA9DA8
|
||||
3F3F3F3FEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
F09D8480EA9DA8
|
||||
F09D849EEA9DA8
|
||||
@@ -2435,40 +2435,40 @@ F3A087AFEA9DA8
|
||||
F48FBFBFEA9DA8
|
||||
SELECT HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding)) FROM t1,t2;
|
||||
HEX(CONCAT(utf8mb4_encoding, utf8mb3_encoding))
|
||||
|
||||
EA9DA8
|
||||
EFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB
|
||||
3F3F3F3F3F3F3F3F
|
||||
3F3F3F3FEA9DA8
|
||||
3F3F3F3FEFB9AB
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9AB3F3F3F3F
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEA9DA8
|
||||
EFB9ABF09D849EF09D859EF09D859EF09D8480F09D859FEFB9ABEFB9ABF09D85A0EFB9ABEFB9AB
|
||||
F09D8480
|
||||
F09D84803F3F3F3F
|
||||
F09D8480EA9DA8
|
||||
F09D8480EFB9AB
|
||||
F09D849E
|
||||
F09D849E3F3F3F3F
|
||||
F09D849EEA9DA8
|
||||
F09D849EEFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D84803F3F3F3F
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EA9DA8
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D849EF09D859EF09D859EF09D8480F09D859FF09D859FF09D859FF09D85A0F09D85A0F09D8480EFB9AB
|
||||
F09D859E
|
||||
F09D859E3F3F3F3F
|
||||
F09D859EEA9DA8
|
||||
F09D859EEFB9AB
|
||||
F09D878F
|
||||
F09D878F3F3F3F3F
|
||||
F09D878FEA9DA8
|
||||
F09D878FEFB9AB
|
||||
F09D9C9F
|
||||
F09D9C9F3F3F3F3F
|
||||
F09D9C9FEA9DA8
|
||||
F09D9C9FEFB9AB
|
||||
F09D9E9F
|
||||
F09D9E9F3F3F3F3F
|
||||
F09D9E9FEA9DA8
|
||||
F09D9E9FEFB9AB
|
||||
F3A087AF
|
||||
F3A087AF3F3F3F3F
|
||||
F3A087AFEA9DA8
|
||||
F3A087AFEFB9AB
|
||||
F48FBFBF
|
||||
F48FBFBF3F3F3F3F
|
||||
F48FBFBFEA9DA8
|
||||
F48FBFBFEFB9AB
|
||||
SELECT count(*) FROM t1, t2
|
||||
@@ -2484,8 +2484,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding),utf8mb4_encoding FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding) utf8mb4_encoding
|
||||
1114111
|
||||
1114111 3F ?
|
||||
1114111 3F3F3F3F ????
|
||||
119040 3F ?
|
||||
119070 3F ?
|
||||
119070 3F3F3F3F3F3F3F3F3F3F ??????????
|
||||
@@ -2505,7 +2505,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t2 CONVERT TO CHARACTER SET utf8mb3;
|
||||
@@ -2517,7 +2517,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
ALTER TABLE t1 MODIFY utf8mb4_encoding VARCHAR(10) CHARACTER SET utf8mb3;
|
||||
@@ -2529,8 +2529,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2550,8 +2550,8 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb4_encoding) FROM t1;
|
||||
u_decimal hex(utf8mb4_encoding)
|
||||
1114111
|
||||
1114111 3F
|
||||
1114111 3F3F3F3F
|
||||
119040 3F
|
||||
119070 3F
|
||||
119070 3F3F3F3F3F3F3F3F3F3F
|
||||
@@ -2571,7 +2571,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8
|
||||
SELECT u_decimal,hex(utf8mb3_encoding) FROM t2;
|
||||
u_decimal hex(utf8mb3_encoding)
|
||||
1114111
|
||||
1114111 3F3F3F3F
|
||||
42856 EA9DA8
|
||||
65131 EFB9AB
|
||||
DROP TABLE IF EXISTS t3;
|
||||
|
@@ -1,772 +0,0 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 0,20 20,0 20,0 0))'), GeomFromText('POLYGON((10 10,30 10,30 30,10 30,10 10))'));
|
||||
1 ST_Intersects(GeomFromText('POLYGON((0 0,20 0,20 20,0 20,0 0))'), GeomFromText('POLYGON((10 10,30 10,30 30,10 30,10 10))'))
|
||||
1 1
|
||||
select 0, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 40, 40 50, 20 70, 10 40))'));
|
||||
0 ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 40, 40 50, 20 70, 10 40))'))
|
||||
0 0
|
||||
select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POINT(10 10)'));
|
||||
1 ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POINT(10 10)'))
|
||||
1 1
|
||||
select 1, ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'));
|
||||
1 ST_Intersects(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'))
|
||||
1 1
|
||||
select 0, ST_Within(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'));
|
||||
0 ST_Within(GeomFromText('POLYGON((0 0,20 10,10 30, 0 0))'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'))
|
||||
0 0
|
||||
select 1, ST_Within(GeomFromText('POLYGON((1 1,20 10,10 30, 1 1))'), GeomFromText('POLYGON((0 0,30 5,10 40, 0 0))'));
|
||||
1 ST_Within(GeomFromText('POLYGON((1 1,20 10,10 30, 1 1))'), GeomFromText('POLYGON((0 0,30 5,10 40, 0 0))'))
|
||||
1 1
|
||||
create table t1 (g point);
|
||||
insert into t1 values
|
||||
(GeomFromText('POINT(2 2)')), (GeomFromText('POINT(2 4)')), (GeomFromText('POINT(2 6)')), (GeomFromText('POINT(2 8)')),
|
||||
(GeomFromText('POINT(4 2)')), (GeomFromText('POINT(4 4)')), (GeomFromText('POINT(4 6)')), (GeomFromText('POINT(4 8)')),
|
||||
(GeomFromText('POINT(6 2)')), (GeomFromText('POINT(6 4)')), (GeomFromText('POINT(6 6)')), (GeomFromText('POINT(6 8)')),
|
||||
(GeomFromText('POINT(8 2)')), (GeomFromText('POINT(8 4)')), (GeomFromText('POINT(8 6)')), (GeomFromText('POINT(8 8)'));
|
||||
select astext(g) from t1 where ST_Within(g, GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'));
|
||||
astext(g)
|
||||
POINT(4 4)
|
||||
POINT(6 2)
|
||||
POINT(6 4)
|
||||
POINT(6 6)
|
||||
select 'Contains';
|
||||
Contains
|
||||
Contains
|
||||
select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g);
|
||||
astext(g)
|
||||
POINT(4 4)
|
||||
POINT(6 2)
|
||||
POINT(6 4)
|
||||
POINT(6 6)
|
||||
select 'Intersects';
|
||||
Intersects
|
||||
Intersects
|
||||
select astext(g) from t1 where ST_Intersects(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g);
|
||||
astext(g)
|
||||
POINT(4 4)
|
||||
POINT(6 2)
|
||||
POINT(6 4)
|
||||
POINT(6 6)
|
||||
select 'Contains';
|
||||
Contains
|
||||
Contains
|
||||
select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1))'), g);
|
||||
astext(g)
|
||||
POINT(4 4)
|
||||
POINT(6 2)
|
||||
POINT(6 4)
|
||||
POINT(6 6)
|
||||
select 'Contains2';
|
||||
Contains2
|
||||
Contains2
|
||||
select astext(g) from t1 where ST_Contains(GeomFromText('POLYGON((5 1, 7 1, 7 7, 5 7, 3 3, 5 3, 5 1), (5.01 3.01, 6 5, 9 5, 8 3, 5.01 3.01))'), g);
|
||||
astext(g)
|
||||
POINT(4 4)
|
||||
POINT(6 2)
|
||||
POINT(6 6)
|
||||
POINT(8 4)
|
||||
DROP TABLE t1;
|
||||
select 0, ST_Within(GeomFromText('LINESTRING(15 15, 50 50, 60 60)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'));
|
||||
0 ST_Within(GeomFromText('LINESTRING(15 15, 50 50, 60 60)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'))
|
||||
0 0
|
||||
select 1, ST_Within(GeomFromText('LINESTRING(15 15, 16 16)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'));
|
||||
1 ST_Within(GeomFromText('LINESTRING(15 15, 16 16)'), GeomFromText('POLYGON((10 10,30 20,20 40, 10 10))'))
|
||||
1 1
|
||||
select 1, ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(50 15, 15 50)'));
|
||||
1 ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(50 15, 15 50)'))
|
||||
1 1
|
||||
select 0, ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(16 16, 51 51)'));
|
||||
0 ST_Intersects(GeomFromText('LINESTRING(15 15, 50 50)'), GeomFromText('LINESTRING(16 16, 51 51)'))
|
||||
0 1
|
||||
select 1, ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'));
|
||||
1 ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))
|
||||
1 1
|
||||
select astext(ST_Union(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))')));
|
||||
astext(ST_Union(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))')))
|
||||
POLYGON((0 0,1 2,2 0,0 0))
|
||||
select astext(ST_Intersection(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))')));
|
||||
astext(ST_Intersection(geometryfromtext('point(1 1)'), geometryfromtext('polygon((0 0, 2 0, 1 2, 0 0))')))
|
||||
POINT(1 1)
|
||||
select ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'));
|
||||
ST_Intersects(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))'))
|
||||
1
|
||||
select ST_contains(GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)), ((6 6, 6 11, 11 11, 11 6, 6 6)))'), GeomFromText('POINT(5 10)'));
|
||||
ST_contains(GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)), ((6 6, 6 11, 11 11, 11 6, 6 6)))'), GeomFromText('POINT(5 10)'))
|
||||
0
|
||||
select ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 15, 15 15, 15 10, 10 10))'));
|
||||
ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 15, 15 15, 15 10, 10 10))'))
|
||||
1
|
||||
select ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))'));
|
||||
ST_Disjoint(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))'))
|
||||
0
|
||||
select ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))'));
|
||||
ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((10 10, 10 4, 4 4, 4 10, 10 10))'))
|
||||
1
|
||||
select ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((1 1, 1 4, 4 4, 4 1, 1 1))'));
|
||||
ST_Overlaps(GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'), GeomFromText('POLYGON((1 1, 1 4, 4 4, 4 1, 1 1))'))
|
||||
0
|
||||
select ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'));
|
||||
ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'))
|
||||
0.7071067811865475
|
||||
select ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('linestring(0 1, 1 0)'));
|
||||
ST_DISTANCE(geomfromtext('polygon((0 0, 1 2, 2 1, 0 0))'), geomfromtext('linestring(0 1, 1 0)'))
|
||||
0
|
||||
select ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'));
|
||||
ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0))'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'))
|
||||
0
|
||||
select ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0),(2 2, 3 4, 4 3, 2 2))'), geomfromtext('point(3 3)'));
|
||||
ST_DISTANCE(geomfromtext('polygon((0 0, 3 6, 6 3, 0 0),(2 2, 3 4, 4 3, 2 2))'), geomfromtext('point(3 3)'))
|
||||
0.4472135954999579
|
||||
select ST_DISTANCE(geomfromtext('linestring(0 0, 3 6, 6 3, 0 0)'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'));
|
||||
ST_DISTANCE(geomfromtext('linestring(0 0, 3 6, 6 3, 0 0)'), geomfromtext('polygon((2 2, 3 4, 4 3, 2 2))'))
|
||||
0.8944271909999159
|
||||
select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))')));
|
||||
astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POLYGON((50 5, 55 10, 0 45, 50 5))')))
|
||||
POLYGON((26.47058823529412 23.823529411764707,21.951219512195124 27.439024390243905,23.855421686746986 29.819277108433734,29.289940828402365 26.36094674556213,26.47058823529412 23.823529411764707))
|
||||
select astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)')));
|
||||
astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50, 0 0)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45, 50 5)')))
|
||||
MULTIPOINT(26.47058823529412 23.823529411764707,29.289940828402365 26.36094674556213,21.951219512195124 27.439024390243905,23.855421686746986 29.819277108433734)
|
||||
select astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45)')));
|
||||
astext(ST_Intersection(GeomFromText('LINESTRING(0 0, 50 45, 40 50)'), GeomFromText('LINESTRING(50 5, 55 10, 0 45)')))
|
||||
POINT(29.289940828402365 26.36094674556213)
|
||||
select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POINT(20 20)')));
|
||||
astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('POINT(20 20)')))
|
||||
POINT(20 20)
|
||||
select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200)')));
|
||||
astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200)')))
|
||||
LINESTRING(0 0,46.666666666666664 46.666666666666664)
|
||||
select astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')));
|
||||
astext(ST_Intersection(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')))
|
||||
MULTILINESTRING((0 0,46.666666666666664 46.666666666666664),(8 10,45.33333333333333 47.33333333333333))
|
||||
select astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')));
|
||||
astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')))
|
||||
GEOMETRYCOLLECTION(LINESTRING(-10 -10,0 0),LINESTRING(-11 -9,8 10),POLYGON((0 0,40 50,50 45,0 0)),LINESTRING(46.666666666666664 46.666666666666664,200 200,199 201,45.33333333333333 47.33333333333333))
|
||||
select astext(ST_intersection(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))')));
|
||||
astext(ST_intersection(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))')))
|
||||
POLYGON((0 0,0 1,0.5 0.5,0 0))
|
||||
select astext(ST_symdifference(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))')));
|
||||
astext(ST_symdifference(geomfromtext('polygon((0 0, 1 0, 0 1, 0 0))'), geomfromtext('polygon((0 0, 1 1, 0 2, 0 0))')))
|
||||
MULTIPOLYGON(((0 0,0.5 0.5,1 0,0 0)),((0.5 0.5,0 1,0 2,1 1,0.5 0.5)))
|
||||
select astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')));
|
||||
astext(ST_UNION(GeomFromText('POLYGON((0 0, 50 45, 40 50, 0 0))'), GeomFromText('LINESTRING(-10 -10, 200 200, 199 201, -11 -9)')))
|
||||
GEOMETRYCOLLECTION(LINESTRING(-10 -10,0 0),LINESTRING(-11 -9,8 10),POLYGON((0 0,40 50,50 45,0 0)),LINESTRING(46.666666666666664 46.666666666666664,200 200,199 201,45.33333333333333 47.33333333333333))
|
||||
select astext(ST_buffer(geometryfromtext('point(1 1)'), 1));
|
||||
astext(ST_buffer(geometryfromtext('point(1 1)'), 1))
|
||||
POLYGON((1 0,0.950932325672582 0.001204543794827595,0.9019828596704393 0.004815273327803182,0.8532695255446382 0.010823490035218986,0.8049096779838717 0.01921471959676957,0.7570198200967361 0.029968746805456026,0.7097153227455377 0.043059664267791065,0.6631101466077799 0.058455934816979194,0.6173165676349102 0.07612046748871326,0.5724449065697179 0.09601070687655666,0.5286032631740024 0.11807873565164506,0.48589725580677834 0.14227138999972788,0.4444297669803978 0.16853038769745476,0.40430069550756664 0.19679246851935517,0.3656067158363545 0.226989546637263,0.32844104515298167 0.2590488746450409,0.29289321881345254 0.29289321881345254,0.2590488746450409 0.32844104515298167,0.226989546637263 0.3656067158363545,0.19679246851935517 0.40430069550756664,0.16853038769745476 0.4444297669803978,0.14227138999972788 0.48589725580677834,0.11807873565164506 0.5286032631740024,0.09601070687655666 0.5724449065697179,0.07612046748871326 0.6173165676349102,0.058455934816979194 0.6631101466077799,0.043059664267791065 0.7097153227455377,0.029968746805456026 0.7570198200967361,0.01921471959676957 0.8049096779838717,0.010823490035218986 0.8532695255446382,0.004815273327803182 0.9019828596704393,0.001204543794827595 0.950932325672582,0 1,0.004815273327803182 1.0980171403295607,0.010823490035218986 1.146730474455362,0.01921471959676957 1.1950903220161284,0.029968746805456026 1.2429801799032638,0.043059664267791065 1.2902846772544623,0.058455934816979194 1.3368898533922202,0.07612046748871326 1.3826834323650898,0.09601070687655666 1.427555093430282,0.11807873565164506 1.4713967368259975,0.14227138999972788 1.5141027441932216,0.16853038769745476 1.5555702330196022,0.19679246851935517 1.5956993044924332,0.226989546637263 1.6343932841636455,0.2590488746450409 1.6715589548470184,0.29289321881345254 1.7071067811865475,0.32844104515298167 1.7409511253549592,0.3656067158363545 1.7730104533627369,0.40430069550756664 1.8032075314806448,0.4444297669803978 1.8314696123025453,0.48589725580677834 1.8577286100002721,0.5286032631740024 1.881921264348355,0.5724449065697179 1.9039892931234434,0.6173165676349102 1.9238795325112867,0.6631101466077799 1.9415440651830207,0.7097153227455377 1.956940335732209,0.7570198200967361 1.970031253194544,0.8049096779838717 1.9807852804032304,0.8532695255446382 1.9891765099647811,0.9019828596704393 1.9951847266721967,0.950932325672582 1.9987954562051724,1 2,1.049067674327418 1.9987954562051724,1.0980171403295607 1.9951847266721967,1.146730474455362 1.9891765099647811,1.1950903220161284 1.9807852804032304,1.2429801799032638 1.970031253194544,1.2902846772544623 1.956940335732209,1.3368898533922202 1.9415440651830207,1.3826834323650898 1.9238795325112867,1.427555093430282 1.9039892931234434,1.4713967368259975 1.881921264348355,1.5141027441932216 1.8577286100002721,1.5555702330196022 1.8314696123025453,1.5956993044924332 1.8032075314806448,1.6343932841636455 1.7730104533627369,1.6715589548470184 1.7409511253549592,1.7071067811865475 1.7071067811865475,1.7409511253549592 1.6715589548470184,1.7730104533627369 1.6343932841636455,1.8032075314806448 1.5956993044924332,1.8314696123025453 1.5555702330196022,1.8577286100002721 1.5141027441932216,1.881921264348355 1.4713967368259975,1.9039892931234434 1.427555093430282,1.9238795325112867 1.3826834323650898,1.9415440651830207 1.3368898533922202,1.956940335732209 1.2902846772544623,1.970031253194544 1.2429801799032638,1.9807852804032304 1.1950903220161284,1.9891765099647811 1.146730474455362,1.9951847266721967 1.0980171403295607,1.9987954562051724 1.049067674327418,2 1,1.9951847266721967 0.9019828596704393,1.9891765099647811 0.8532695255446382,1.9807852804032304 0.8049096779838717,1.970031253194544 0.7570198200967361,1.956940335732209 0.7097153227455377,1.9415440651830207 0.6631101466077799,1.9238795325112867 0.6173165676349102,1.9039892931234434 0.5724449065697179,1.881921264348355 0.5286032631740024,1.8577286100002721 0.48589725580677834,1.8314696123025453 0.4444297669803978,1.8032075314806448 0.40430069550756664,1.7730104533627369 0.3656067158363545,1.7409511253549592 0.32844104515298167,1.7071067811865475 0.29289321881345254,1.6715589548470184 0.2590488746450409,1.6343932841636455 0.226989546637263,1.5956993044924332 0.19679246851935517,1.5555702330196022 0.16853038769745476,1.5141027441932216 0.14227138999972788,1.4713967368259975 0.11807873565164506,1.427555093430282 0.09601070687655666,1.3826834323650898 0.07612046748871326,1.3368898533922202 0.058455934816979194,1.2902846772544623 0.043059664267791065,1.2429801799032638 0.029968746805456026,1.1950903220161284 0.01921471959676957,1.146730474455362 0.010823490035218986,1.0980171403295607 0.004815273327803182,1.049067674327418 0.001204543794827595,1 0))
|
||||
create table t1(geom geometrycollection);
|
||||
insert into t1 values (geomfromtext('POLYGON((0 0, 10 10, 0 8, 0 0))'));
|
||||
insert into t1 values (geomfromtext('POLYGON((1 1, 10 10, 0 8, 1 1))'));
|
||||
select astext(geom), area(geom),round(area(ST_buffer(geom,2)), 7) from t1;
|
||||
astext(geom) area(geom) round(area(ST_buffer(geom,2)), 7)
|
||||
POLYGON((0 0,10 10,0 8,0 0)) 40 117.2416764
|
||||
POLYGON((1 1,10 10,0 8,1 1)) 36 108.5553959
|
||||
select ST_NUMPOINTS(ST_EXTERIORRING(ST_buffer(geom,2))) from t1;
|
||||
ST_NUMPOINTS(ST_EXTERIORRING(ST_buffer(geom,2)))
|
||||
133
|
||||
134
|
||||
set @geom=geomfromtext('LINESTRING(2 1, 4 2, 2 3, 2 5)');
|
||||
set @buff=ST_buffer(@geom,1);
|
||||
select ST_NUMPOINTS(ST_EXTERIORRING(@buff));
|
||||
ST_NUMPOINTS(ST_EXTERIORRING(@buff))
|
||||
202
|
||||
DROP TABLE t1;
|
||||
select st_touches(geomfromtext('point(0 0)'), geomfromtext('point(1 1)'));
|
||||
st_touches(geomfromtext('point(0 0)'), geomfromtext('point(1 1)'))
|
||||
0
|
||||
select st_touches(geomfromtext('point(1 1)'), geomfromtext('point(1 1)'));
|
||||
st_touches(geomfromtext('point(1 1)'), geomfromtext('point(1 1)'))
|
||||
1
|
||||
select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 1)'));
|
||||
st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 1)'))
|
||||
1
|
||||
select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 0)'));
|
||||
st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 0)'))
|
||||
0
|
||||
select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 2)'));
|
||||
st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('point(1 2)'))
|
||||
0
|
||||
select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1.2, 1 0, 2 0, 1 1.2))'));
|
||||
st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1.2, 1 0, 2 0, 1 1.2))'))
|
||||
1
|
||||
select st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1, 1 0, 2 0, 1 1))'));
|
||||
st_touches(geomfromtext('polygon((0 0, 2 2, 0 4, 0 0))'), geomfromtext('polygon((1 1, 1 0, 2 0, 1 1))'))
|
||||
1
|
||||
SELECT ST_Equals(PolyFromText('POLYGON((67 13, 67 18, 67 18, 59 18, 59 13, 67 13) )'),PolyFromText('POLYGON((67 13, 67 18, 59 19, 59 13, 59 13, 67 13) )')) as result;
|
||||
result
|
||||
0
|
||||
SELECT ST_Equals(PolyFromText('POLYGON((67 13, 67 18, 67 18, 59 18, 59 13, 67 13) )'),PolyFromText('POLYGON((67 13, 67 18, 59 18, 59 13, 59 13, 67 13) )')) as result;
|
||||
result
|
||||
1
|
||||
SELECT ST_Equals(PointFromText('POINT (12 13)'),PointFromText('POINT (12 13)')) as result;
|
||||
result
|
||||
1
|
||||
#
|
||||
# BUG#11755628/47429: INTERSECTION FUNCTION CRASHED MYSQLD
|
||||
# BUG#11759650/51979: UNION/INTERSECTION OF POLYGONS CRASHES MYSQL
|
||||
#
|
||||
SELECT ASTEXT(ST_UNION(GEOMFROMTEXT('POLYGON((525000 183300,525400
|
||||
183300,525400 18370, 525000 183700,525000 183300))'),
|
||||
geomfromtext('POLYGON((525298.67 183511.53,525296.57
|
||||
183510.39,525296.42 183510.31,525289.11 183506.62,525283.17
|
||||
183503.47,525280.98 183502.26,525278.63 183500.97,525278.39
|
||||
183500.84,525276.79 183500,525260.7 183491.55,525263.95
|
||||
183484.75,525265.58 183481.95,525278.97 183488.73,525276.5
|
||||
183493.45,525275.5 183495.7,525280.35 183498.2,525282.3
|
||||
183499.1,525282.2 183499.3,525283.55 183500,525301.75
|
||||
183509.35,525304.45 183504.25,525307.85 183504.95,525304.5
|
||||
183510.83,525302.81 183513.8,525298.67 183511.53),(525275.06
|
||||
183489.89,525272.06 183488.37,525268.94 183494.51,525271.94
|
||||
183496.03,525275.06 183489.89),(525263.26 183491.55,525266.15
|
||||
183493.04,525269.88 183485.82,525266.99 183484.33,525263.26
|
||||
183491.55))'))) st_u;
|
||||
st_u
|
||||
MULTIPOLYGON(((525400 18370,525000.9677614468 183300,525400 183300,525400 18370)),((525000 183300,525000 183700,525000.9677614468 183300,525000 183300)),((525265.58 183481.95,525263.95 183484.75,525260.7 183491.55,525276.79 183500,525278.39 183500.84,525278.63 183500.97,525280.98 183502.26,525283.17 183503.47,525289.11 183506.62,525296.42 183510.31,525296.57 183510.39,525298.67 183511.53,525302.81 183513.8,525304.5 183510.83,525307.85 183504.95,525304.45 183504.25,525301.75 183509.35,525283.55 183500,525282.2 183499.3,525282.3 183499.1,525280.35 183498.2,525275.5 183495.7,525276.5 183493.45,525278.97 183488.73,525265.58 183481.95),(525266.99 183484.33,525263.26 183491.55,525266.15 183493.04,525269.88 183485.82,525266.99 183484.33),(525272.06 183488.37,525268.94 183494.51,525271.94 183496.03,525275.06 183489.89,525272.06 183488.37)))
|
||||
SET @a=0x0000000001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000000000000000000000000F03F000000000000F03F0000000000000040000000000000F03F00000000000000400000000000000040000000000000F03F0000000000000040000000000000F03F000000000000F03F;
|
||||
SELECT ASTEXT(TOUCHES(@a, GEOMFROMTEXT('point(0 0)'))) t;
|
||||
t
|
||||
NULL
|
||||
SELECT astext(ST_UNION (
|
||||
PolyFromText('POLYGON(( 2 2 ,3 2,2 7,2 2),( 0 0,8 2,1 9,0 0))'),
|
||||
ExteriorRing( Envelope( MultiLineStringFromText('MULTILINESTRING((3 4,5 3),(3 0,0 5))')))));
|
||||
astext(ST_UNION (
|
||||
PolyFromText('POLYGON(( 2 2 ,3 2,2 7,2 2),( 0 0,8 2,1 9,0 0))'),
|
||||
ExteriorRing( Envelope( MultiLineStringFromText('MULTILINESTRING((3 4,5 3),(3 0,0 5))')))))
|
||||
GEOMETRYCOLLECTION(POLYGON((0 0,1 9,8 2,0 0),(2 2,2 7,3 2,2 2)),LINESTRING(0.5555555555555556 5,0 5,0 0,5 0,5 1.25),LINESTRING(2 5,2.4 5))
|
||||
SELECT astext(ST_BUFFER(LineStringFromText('LINESTRING(0 0,1 1)'),0));
|
||||
astext(ST_BUFFER(LineStringFromText('LINESTRING(0 0,1 1)'),0))
|
||||
LINESTRING(0 0,1 1)
|
||||
SELECT Round(ST_Area(ST_BUFFER(MultipointFromText('MULTIPOINT(7 7,3 7,7 2,7 4 ,7 7)'), 3)), 5);
|
||||
Round(ST_Area(ST_BUFFER(MultipointFromText('MULTIPOINT(7 7,3 7,7 2,7 4 ,7 7)'), 3)), 5)
|
||||
78.68426
|
||||
SELECT ST_INTERSECTION(NULL, NULL);
|
||||
ST_INTERSECTION(NULL, NULL)
|
||||
NULL
|
||||
SELECT ASTEXT(ST_INTERSECTION(
|
||||
MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),
|
||||
((0 5,3 5,3 0,0 0,0 1,2 1,2 2,0 2,0 5), (1 3,2 3,2 4,1 4,1 3)),
|
||||
((2 2,5 2,4 4,2 8,2 2)))'),
|
||||
MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 4,2 5,3 5)),
|
||||
((2 2,9 2,0 2,2 6,2 2)),
|
||||
((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),
|
||||
((9 9,6 8,7 0,9 9)))')));
|
||||
ASTEXT(ST_INTERSECTION(
|
||||
MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),
|
||||
((0 5,3 5,3 0,0 0,0 1,2 1,2 2,0 2,0 5), (1 3,2 3,2 4,1 4,1 3)),
|
||||
((2 2,5 2,4 4,2 8,2 2)))'),
|
||||
MULTIPOLY
|
||||
POLYGON((0 2,1 4,1 3,2 3,2 4,1 4,1.5 5,2 5,2 8,8 8,8 2,0 2),(4 4,4 6,6 6,6 4,4 4))
|
||||
SELECT ROUND(ST_LENGTH(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0),
|
||||
(8 2,1 3,9 0,4 4))'),
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 5,6 7,9 7,5 2,1 6,3 6))'))), 7);
|
||||
ROUND(ST_LENGTH(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0),
|
||||
(8 2,1 3,9 0,4 4))'),
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 5,6 7,9 7,5 2,1 6,3 6)
|
||||
90.2783626
|
||||
SELECT ST_NUMGEOMETRIES((ST_UNION(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 0,4 2,0 2,1 5,0 3,7 0,8 5,5 8),
|
||||
(6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0),
|
||||
(7 8,3 1,0 9,6 0,4 8),
|
||||
(9 3,0 4,5 9,6 4),
|
||||
(8 2,1 3,9 0,4 4))'),
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((6 0,9 3,2 5,3 6,3 2),
|
||||
(2 5,6 7,9 7,5 2,1 6,3 6))')),
|
||||
MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((7 7,3 7,3 1,7 8,7 7)),
|
||||
((3 5,2 4,2 5,3 5)),
|
||||
((7 7,8 7,3 7,7 7,7 7)),
|
||||
((0 5,3 5,3 4,1 4,1 3,3 3,3 0,0 0,0 5), (1 1,2 1,2 2,1 2,1 1)))'))));
|
||||
ST_NUMGEOMETRIES((ST_UNION(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 0,4 2,0 2,1 5,0 3,7 0,8 5,5 8),
|
||||
(6 2,4 0,3 5,3 6,4 3,6 4,3 9,0 7,3 7,8 4,2 9,5 0),
|
||||
|
||||
192
|
||||
SELECT Round(ST_AREA(ST_BUFFER( ST_UNION(
|
||||
POLYGONFROMTEXT('POLYGON((7 7, 7 7, 7 4, 7 7, 7 7))'),
|
||||
POLYGONFROMTEXT('POLYGON((7 7, 4 7, 2 9, 7 6, 7 7))')), 1)), 6);
|
||||
Round(ST_AREA(ST_BUFFER( ST_UNION(
|
||||
POLYGONFROMTEXT('POLYGON((7 7, 7 7, 7 4, 7 7, 7 7))'),
|
||||
POLYGONFROMTEXT('POLYGON((7 7, 4 7, 2 9, 7 6, 7 7))')), 1)), 6)
|
||||
21.901344
|
||||
SELECT AsText(ST_UNION(MultiPolygonFromText('
|
||||
MULTIPOLYGON(((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)),
|
||||
((0 0, 8 3, 7 4, 0 0)),
|
||||
((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)))'),
|
||||
MultiPolygonFromText(' MULTIPOLYGON(((0 0, 1 9, 4 6, 0 0)),
|
||||
((0 5, 3 5, 3 4, 1 4, 1 3, 3 3, 3 0, 0 0, 0 5), (1 1, 2 1, 2 2, 1 2, 1 1)),
|
||||
((7 7, 4 7, 6 3, 7 2, 7 7)),
|
||||
((0 5, 3 5, 3 4, 1 4, 1 3, 3 3, 3 0, 0 0, 0 5), (1 1, 2 1, 2 2, 1 2, 1 1))) ')));
|
||||
AsText(ST_UNION(MultiPolygonFromText('
|
||||
MULTIPOLYGON(((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)),
|
||||
((0 0, 8 3, 7 4, 0 0)),
|
||||
((2 2, 2 8, 8 8, 8 2, 2 2), (4 4, 4 6, 6 6, 6 4, 4 4)))'),
|
||||
MultiPolygonFr
|
||||
POLYGON((0 0,0 5,0.5555555555555556 5,1 9,2 8,8 8,8 2,5.333333333333334 2,3 1.125,3 0,0 0),(1 1,1 1.5,1.3333333333333333 2,2 2,2 1.1428571428571428,1.75 1,1 1),(3 1.7142857142857142,3 2,3.5 2,3 1.7142857142857142),(4 4,4 6,4.5 6,5.5 4,4 4))
|
||||
SELECT AsText(ST_SYMDIFFERENCE(
|
||||
MultiLineStringFromText('MULTILINESTRING((7 7, 1 7, 8 5, 7 8, 7 7),
|
||||
(6 3, 3 4, 1 1, 9 9, 9 0, 8 4, 9 9))'),
|
||||
Envelope(GeometryFromText('MULTIPOINT(7 9, 0 0, 3 7, 1 6, 0 0)'))));
|
||||
AsText(ST_SYMDIFFERENCE(
|
||||
MultiLineStringFromText('MULTILINESTRING((7 7, 1 7, 8 5, 7 8, 7 7),
|
||||
(6 3, 3 4, 1 1, 9 9, 9 0, 8 4, 9 9))'),
|
||||
Envelope(GeometryFromText('MULTIPOINT(7 9, 0 0, 3 7, 1 6, 0 0)'))))
|
||||
GEOMETRYCOLLECTION(POLYGON((0 0,0 9,7 9,7 0,0 0)),LINESTRING(9 9,8 4,9 0,9 9),LINESTRING(7 5.285714285714286,8 5,7.25 7.25),LINESTRING(7 7,7.25 7.25),LINESTRING(7.25 7.25,7 8),LINESTRING(7.25 7.25,9 9))
|
||||
SELECT AsText(ST_UNION(
|
||||
MultiPolygonFromText('MULTIPOLYGON(((9 9, 7 9, 1 1, 9 9)),
|
||||
((2 2, 1 2, 3 3, 2 2, 2 2)),
|
||||
((0 0, 7 5, 9 6, 0 0)),
|
||||
((7 7, 5 7, 1 5, 7 1, 7 7)))'),
|
||||
MultiPolygonFromText('MULTIPOLYGON(((2 2, 2 2, 1 5, 2 7, 2 2)),
|
||||
((0 5, 3 5, 3 0, 0 0, 0 5), (1 1, 2 1, 2 4, 1 4, 1 1)))')));
|
||||
AsText(ST_UNION(
|
||||
MultiPolygonFromText('MULTIPOLYGON(((9 9, 7 9, 1 1, 9 9)),
|
||||
((2 2, 1 2, 3 3, 2 2, 2 2)),
|
||||
((0 0, 7 5, 9 6, 0 0)),
|
||||
|
||||
POLYGON((0 0,0 5,1 5,2 7,2 5.5,5 7,5.5 7,7 9,9 9,7 7,7 5,9 6,7 4.666666666666667,7 1,4.25 2.833333333333333,3 2,3 0,0 0),(1 1,1 4,1.3333333333333333 4,1.8571428571428572 2.4285714285714284,1 2,1.75 2,1 1,2 2,2 1.4285714285714284,1.4 1,1 1),(1.5 1,2 1.3333333333333333,2 1,1.5 1),(3 2.142857142857143,3 3,3.4 3.4,4.1034482758620685 2.9310344827586206,3 2.142857142857143))
|
||||
SELECT AsText( ST_INTERSECTION(
|
||||
LinestringFromText('LINESTRING( 3 5, 2 5, 2 4, 3 4, 3 5 ) ') ,
|
||||
LinestringFromText('LINESTRING( 3 5, 2 4, 2 5, 3 5 ) ')
|
||||
));
|
||||
AsText( ST_INTERSECTION(
|
||||
LinestringFromText('LINESTRING( 3 5, 2 5, 2 4, 3 4, 3 5 ) ') ,
|
||||
LinestringFromText('LINESTRING( 3 5, 2 4, 2 5, 3 5 ) ')
|
||||
))
|
||||
LINESTRING(2 4,2 5,3 5)
|
||||
SELECT AsText( ST_UNION(
|
||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) );
|
||||
AsText( ST_UNION(
|
||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 7 5 , 2 0 , 2 2 ) ) ') ,
|
||||
PolygonFromText(' POLYGON( ( 2 2 , 3 2 , 3 3 , 2 5 , 2 2 ) ) ') ) )
|
||||
POLYGON((2 0,2 5,3 3,3 2,7 5,2 0))
|
||||
SELECT AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)')));
|
||||
AsText(ST_INTERSECTION(LinestringFromText('LINESTRING(1 1, 2 2)'), GeometryFromText('LINESTRING(3 3, 4 4)')))
|
||||
GEOMETRYCOLLECTION EMPTY
|
||||
SELECT AsText(ST_UNION(GEOMETRYFROMTEXT('POINT(8 1)') ,MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 5, 2 5, 2 4, 3 4, 3 5))')));
|
||||
AsText(ST_UNION(GEOMETRYFROMTEXT('POINT(8 1)') ,MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 5, 2 5, 2 4, 3 4, 3 5))')))
|
||||
GEOMETRYCOLLECTION(POINT(8 1),LINESTRING(2 4,2 5,3 5,3 4,2 4))
|
||||
SELECT ST_DISTANCE(POINTFROMTEXT('POINT(7 1)'),MULTILINESTRINGFROMTEXT('MULTILINESTRING(
|
||||
(4 7,9 7,6 1,3 4,1 1), (3 5, 2 5, 2 4, 3 4, 3 5))'));
|
||||
ST_DISTANCE(POINTFROMTEXT('POINT(7 1)'),MULTILINESTRINGFROMTEXT('MULTILINESTRING(
|
||||
(4 7,9 7,6 1,3 4,1 1), (3 5, 2 5, 2 4, 3 4, 3 5))'))
|
||||
1
|
||||
SELECT AsText(ST_UNION(POLYGONFROMTEXT('POLYGON((12 9, 3 6, 3 0, 12 9))'), POLYGONFROMTEXT('POLYGON((2 2, 7 2, 4 2, 2 0, 2 2))')));
|
||||
AsText(ST_UNION(POLYGONFROMTEXT('POLYGON((12 9, 3 6, 3 0, 12 9))'), POLYGONFROMTEXT('POLYGON((2 2, 7 2, 4 2, 2 0, 2 2))')))
|
||||
GEOMETRYCOLLECTION(POLYGON((2 0,2 2,3 2,3 6,12 9,3 0,3 1,2 0)),LINESTRING(5 2,7 2))
|
||||
SELECT ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 2 5, 7 6, 1 8),(0 0 ,1 6 ,0 1, 8 9, 2 4, 6 1, 3 5, 4 8), (9 3, 5 4, 1 8, 4 2, 5 8, 3 0))' ) ,
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 3 1, 2 7, 4 2, 6 2, 1 5))')
|
||||
), 16)));
|
||||
ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER(ST_UNION(
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 2 5, 7 6, 1 8),(0 0 ,1 6 ,0 1, 8 9, 2 4, 6 1, 3 5, 4 8), (9 3, 5 4, 1 8, 4 2, 5 8, 3 0))' ) ,
|
||||
MULTILINESTRINGFROMTEXT('MULTILINESTRING((3 4, 3 1, 2 7, 4 2, 6 2
|
||||
278
|
||||
SELECT ST_NUMGEOMETRIES(ST_DIFFERENCE (
|
||||
ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 2 4 , 5 0 , 2 9 , 6 2 , 0 2 ) , ( 4 3 , 5 6 , 9 4 , 0 7 , 7 2 , 2 0 , 8 2 ) , ( 5 0 , 1 5 , 3 7 , 7 7 ) , ( 2 3 , 9 5 , 2 0 , 8 1 ) , ( 0 9 , 9 3 , 2 8 , 8 1 , 9 4 ) ) ' ),
|
||||
ST_UNION (
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 7 2 , 6 2 , 2 6 , 2 2 ) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) ,
|
||||
ENVELOPE(
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' )
|
||||
)
|
||||
)
|
||||
),
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 2 9 , 1 3 , 7 3 , 8 5 ) , ( 5 0 , 8 1 , 2 0 , 7 4 , 1 0 ) , ( 9 2 , 5 2 , 6 5 , 8 8 , 0 2 ) , ( 0 8 , 3 9 , 4 0 , 1 0 ) , ( 0 0 , 7 6 , 8 3 , 0 0 ) ) ' )
|
||||
));
|
||||
ST_NUMGEOMETRIES(ST_DIFFERENCE (
|
||||
ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 2 4 , 5 0 , 2 9 , 6 2 , 0 2 ) , ( 4 3 , 5 6 , 9 4 , 0 7 , 7 2 , 2 0 , 8 2 ) , ( 5 0 , 1 5 , 3 7 , 7 7 ) , ( 2 3 , 9 5 , 2 0 , 8 1 ) , ( 0 9 , 9 3 , 2 8 , 8 1 , 9 4 )
|
||||
125
|
||||
SELECT ASTEXT(ST_DIFFERENCE (
|
||||
POLYGONFROMTEXT( ' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ' ) ,
|
||||
ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ' ) ,
|
||||
ST_SYMDIFFERENCE (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 3 8 , 0 8 , 6 6 , 6 1 , 0 5 , 6 7 , 3 7 ) , ( 5 8 , 7 7 , 9 0 , 8 7 ) , ( 1 5 , 1 8 , 2 3 , 3 9 ) , ( 1 3 , 9 7 , 5 5 , 0 8 , 6 9 ) , ( 3 6 , 6 9 , 8 7 , 0 2 , 4 6 , 9 5 ) ) ' ) ,
|
||||
ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 9 4 , 2 0 , 2 2 , 7 2 , 6 2 ) , ( 5 2 , 8 2 , 4 8 , 3 4 ) , ( 1 0 , 1 4 , 2 7 , 7 0 , 1 5 ) , ( 2 8 , 4 4 , 5 0 , 7 0 , 4 0 ) ) ' ) ,
|
||||
GEOMETRYFROMTEXT( ' MULTILINESTRING( ( 3 7 , 7 3 , 5 8 , 4 8 ) , ( 3 2 , 5 0 , 9 3 , 4 4 ) , ( 6 0 , 4 2 , 7 8 , 1 3 ) ) ' )
|
||||
)
|
||||
)
|
||||
)
|
||||
));
|
||||
ASTEXT(ST_DIFFERENCE (
|
||||
POLYGONFROMTEXT( ' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ' ) ,
|
||||
ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ' ) ,
|
||||
ST_SYMDIFFERENCE (
|
||||
MULTILINESTRINGFROMTEX
|
||||
POLYGON((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4))
|
||||
SELECT ST_NUMGEOMETRIES(ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 0 8 , 1 9 , 5 7 , 2 8 , 5 8 , 6 7 ) , ( 4 5 , 8 4 , 0 3 , 5 1 ) , ( 6 8 , 2 7 , 1 6 , 9 9 , 7 2 ) , ( 9 5 , 2 8 , 1 2 , 9 6 , 2 0 ) ) ' ) ,
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 7 7 , 2 7, 6 8, 7 1 , 7 7 ) ) ) ' )
|
||||
));
|
||||
ST_NUMGEOMETRIES(ST_UNION (
|
||||
MULTILINESTRINGFROMTEXT( ' MULTILINESTRING( ( 0 8 , 1 9 , 5 7 , 2 8 , 5 8 , 6 7 ) , ( 4 5 , 8 4 , 0 3 , 5 1 ) , ( 6 8 , 2 7 , 1 6 , 9 9 , 7 2 ) , ( 9 5 , 2 8 , 1 2 , 9 6 , 2 0 ) ) ' ) ,
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (
|
||||
50
|
||||
SELECT ST_BUFFER (
|
||||
LINESTRINGFROMTEXT( ' LINESTRING( 5 4 , 3 8 , 2 6 , 5 5 , 7 9 ) ' ) ,
|
||||
ST_DISTANCE (
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 4, 2 5, 3 5) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) , ( ( 0 0 , 8 3 , 9 5 , 0 0 ) ) ) ' ) ,
|
||||
ST_DIFFERENCE (
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) ,
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) , ( ( 0 0 , 3 8 , 9 4 , 0 0 ) ) ) ' )
|
||||
)
|
||||
)
|
||||
) ;
|
||||
ST_BUFFER (
|
||||
LINESTRINGFROMTEXT( ' LINESTRING( 5 4 , 3 8 , 2 6 , 5 5 , 7 9 ) ' ) ,
|
||||
ST_DISTANCE (
|
||||
MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 4, 2 5, 3 5) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) , ( ( 0 0 , 8 3 , 9 5 , 0 0 ) ) ) ' ) ,
|
||||
ST_DIFFERENCE (
|
||||
MULTIPOL
|
||||
NULL
|
||||
SELECT ST_DISTANCE ( ST_DIFFERENCE ( MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) , MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) , ( ( 0 0 , 3 8 , 9 4 , 0 0 ) ) ) ' ) ), MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 4, 2 5, 3 5) ) , ( (3 5, 2 5, 2 4, 3 4, 3 5) ) , ( ( 0 0 , 8 3 , 9 5 , 0 0 ) ) ) ' ) ) ;
|
||||
ST_DISTANCE ( ST_DIFFERENCE ( MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( (3 5, 2 5, 2 4, 3 4, 3 5) ) ) ' ) , MULTIPOLYGONFROMTEXT( ' MULTIPOLYGON( ( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 ,
|
||||
NULL
|
||||
SELECT ASTEXT(ST_INTERSECTION( GEOMETRYFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(7 7,5.33333333333333 7),LINESTRING(5.33333333333333 7,0 7,5 8,5.33333333333333 7),LINESTRING(5.33333333333333 7,7 2,7 7),POLYGON((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5)))'), geomETRYFROMTEXT(' MULTILINESTRING( ( 5 1 , 3 7 , 6 1 , 7 0 ) , ( 1 6 , 8 5 , 7 5 , 5 6 ) )') ));
|
||||
ASTEXT(ST_INTERSECTION( GEOMETRYFROMTEXT('GEOMETRYCOLLECTION(LINESTRING(7 7,5.33333333333333 7),LINESTRING(5.33333333333333 7,0 7,5 8,5.33333333333333 7),LINESTRING(5.33333333333333 7,7 2,7 7),POLYGON((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))
|
||||
MULTIPOINT(7 5,7 5.142857142857142,5.899999999999998 5.300000000000001,5.799999999999997 5.600000000000001,3 7)
|
||||
SELECT ST_CROSSES( GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 4, 2 5, 3 5) ) ') , POLYGONFROMTEXT(' POLYGON((2 4,3 4,3 5,2 5,2 4)) '));
|
||||
ST_CROSSES( GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 4, 2 5, 3 5) ) ') , POLYGONFROMTEXT(' POLYGON((2 4,3 4,3 5,2 5,2 4)) '))
|
||||
0
|
||||
SELECT ST_WITHIN( POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 2 0 , 1 0, 2 4 , 0 4, 0 5) ) ') , POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 1 4 , 1 3 , 3 3 , 3 0 , 0 0 , 0 5), ( 1 1 , 2 1 , 2 2 , 1 2 , 1 1 ) ) ') );
|
||||
ST_WITHIN( POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 2 0 , 1 0, 2 4 , 0 4, 0 5) ) ') , POLYGONFROMTEXT(' POLYGON( (0 5, 3 5, 3 4, 1 4 , 1 3 , 3 3 , 3 0 , 0 0 , 0 5), ( 1 1 , 2 1 , 2 2 , 1 2 , 1 1 ) ) ') )
|
||||
0
|
||||
SELECT ST_WITHIN( POINTFROMTEXT(' POINT(1 2 ) ') , MULTIPOLYGONFROMTEXT(' MULTIPOLYGON( ( (0 5, 3 5, 3 0, 0 0, 0 5), ( 1 1 , 2 1 , 2 4, 1 4, 1 1 ) ) ) '));
|
||||
ST_WITHIN( POINTFROMTEXT(' POINT(1 2 ) ') , MULTIPOLYGONFROMTEXT(' MULTIPOLYGON( ( (0 5, 3 5, 3 0, 0 0, 0 5), ( 1 1 , 2 1 , 2 4, 1 4, 1 1 ) ) ) '))
|
||||
1
|
||||
select ST_ASTEXT(envelope(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION EMPTY')));
|
||||
ST_ASTEXT(envelope(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION EMPTY')))
|
||||
GEOMETRYCOLLECTION EMPTY
|
||||
SELECT ST_EQUALS( GEOMETRYFROMTEXT(' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') , GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') );
|
||||
ST_EQUALS( GEOMETRYFROMTEXT(' MULTILINESTRING( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') , GEOMETRYFROMTEXT(' POLYGON( (3 5, 2 5, 2 4, 3 4, 3 5) ) ') )
|
||||
0
|
||||
SELECT ST_TOUCHES( GEOMETRYFROMTEXT(' LINESTRING( 1 1 , 1 4 , 5 0 , 8 3 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ') );
|
||||
ST_TOUCHES( GEOMETRYFROMTEXT(' LINESTRING( 1 1 , 1 4 , 5 0 , 8 3 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) ') )
|
||||
0
|
||||
SELECT ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT(' MULTIPOINT( 5 8 , 5 2 , 1 8 , 3 0 , 3 0 , 7 8 ) ') );
|
||||
ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT(' MULTIPOINT( 5 8 , 5 2 , 1 8 , 3 0 , 3 0 , 7 8 ) ') )
|
||||
0
|
||||
SELECT ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT('MULTIPOINT( 4 0 , 6 9 , 5 1, 1 4 )') );
|
||||
ST_EQUALS( MULTIPOINTFROMTEXT(' MULTIPOINT( 5 1 , 6 9 , 1 4 , 4 0 ) ') , MULTIPOINTFROMTEXT('MULTIPOINT( 4 0 , 6 9 , 5 1, 1 4 )') )
|
||||
1
|
||||
SELECT ST_WITHIN( MULTIPOINTFROMTEXT(' MULTIPOINT( 2 9 , 2 9 , 4 9 , 9 1 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) '));
|
||||
ST_WITHIN( MULTIPOINTFROMTEXT(' MULTIPOINT( 2 9 , 2 9 , 4 9 , 9 1 ) ') , POLYGONFROMTEXT(' POLYGON( ( 2 2 , 2 8 , 8 8 , 8 2 , 2 2 ) , ( 4 4 , 4 6 , 6 6 , 6 4 , 4 4 ) ) '))
|
||||
0
|
||||
SELECT ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29)') );
|
||||
ST_INTERSECTS( GeomFromText('MULTILINESTRING( ( 4030 3045 , 3149 2461 , 3004 3831 , 3775 2976 ) )') , GeomFromText('LINESTRING(3058.41 3187.91,3081.52 3153.19,3042.99 3127.57,3019.89 3162.29,3039.07 3175.05,3039.07 3175.05,3058.41 3187.91,3081.52 3153.19,
|
||||
1
|
||||
SELECT ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0,
|
||||
-2.910427500435995 0.727606875108998,
|
||||
-0.910427500435995 8.727606875108998,
|
||||
7.664100588675687 1.503849116986468,
|
||||
1.664100588675687 -2.496150883013531,
|
||||
0.0 -3.0
|
||||
))' ), 3 )));
|
||||
ST_NUMPOINTS(ST_EXTERIORRING(ST_BUFFER( POLYGONFROMTEXT( 'POLYGON( ( 0.0 -3.0,
|
||||
-2.910427500435995 0.727606875108998,
|
||||
-0.910427500435995 8.727606875108998,
|
||||
7.664100588675687 1.503849116986468,
|
||||
1.664100588675687 -2.496150883013531,
|
||||
0.0 -3.0
|
||||
))' ),
|
||||
136
|
||||
select astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1));
|
||||
astext(buffer(st_linestringfromwkb(linestring(point(-1,1), point(-1,-2))),-1))
|
||||
GEOMETRYCOLLECTION EMPTY
|
||||
DROP TABLE IF EXISTS p1;
|
||||
CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
|
||||
BEGIN
|
||||
DECLARE g GEOMETRY;
|
||||
SET g=GeomFromText(geom);
|
||||
SELECT geom AS `-----`;
|
||||
SELECT dist, GeometryType(@buf:=ST_Buffer(g, dist)) AS `buffer`, ROUND(ST_AREA(@buf),2) AS buf_area;
|
||||
END|
|
||||
#
|
||||
# Testing ST_BUFFER with positive distance
|
||||
#
|
||||
-----
|
||||
POINT(0 0))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 3.14
|
||||
-----
|
||||
LineString(0 1, 1 1))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 5.14
|
||||
-----
|
||||
LineString(9 9,8 1,1 5,0 0)
|
||||
dist buffer buf_area
|
||||
1 POLYGON 44.63
|
||||
-----
|
||||
Polygon((2 2,2 8,8 8,8 2,2 2))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 63.14
|
||||
-----
|
||||
Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 95.14
|
||||
-----
|
||||
Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 174.93
|
||||
-----
|
||||
MultiPoint(9 9,8 1,1 5)
|
||||
dist buffer buf_area
|
||||
1 MULTIPOLYGON 9.42
|
||||
-----
|
||||
MultiLineString((0 0,2 2))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 8.80
|
||||
-----
|
||||
MultiLineString((0 0,2 2,0 4))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 14.24
|
||||
-----
|
||||
MultiLineString((0 0,2 2),(0 2,2 0))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 13.59
|
||||
-----
|
||||
MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
|
||||
dist buffer buf_area
|
||||
1 MULTIPOLYGON 70.06
|
||||
-----
|
||||
MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 73.18
|
||||
-----
|
||||
MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 73.18
|
||||
-----
|
||||
GeometryCollection(Point(0 0))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 3.14
|
||||
-----
|
||||
GeometryCollection(LineString(0 0, 2 2)))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 8.80
|
||||
-----
|
||||
GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 63.14
|
||||
-----
|
||||
GeometryCollection(MultiPoint(9 9,8 1,1 5))
|
||||
dist buffer buf_area
|
||||
1 MULTIPOLYGON 9.42
|
||||
-----
|
||||
GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
|
||||
dist buffer buf_area
|
||||
1 MULTIPOLYGON 10.28
|
||||
-----
|
||||
GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
|
||||
dist buffer buf_area
|
||||
1 MULTIPOLYGON 48.28
|
||||
-----
|
||||
GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
|
||||
dist buffer buf_area
|
||||
1 POLYGON 75.92
|
||||
#
|
||||
# Testing ST_BUFFER with zero distance
|
||||
#
|
||||
-----
|
||||
POINT(0 0))
|
||||
dist buffer buf_area
|
||||
0 POINT 0.00
|
||||
-----
|
||||
LineString(0 1, 1 1))
|
||||
dist buffer buf_area
|
||||
0 LINESTRING 0.00
|
||||
-----
|
||||
LineString(9 9,8 1,1 5,0 0)
|
||||
dist buffer buf_area
|
||||
0 LINESTRING 0.00
|
||||
-----
|
||||
Polygon((2 2,2 8,8 8,8 2,2 2))
|
||||
dist buffer buf_area
|
||||
0 POLYGON 36.00
|
||||
-----
|
||||
Polygon((0 0,0 8,8 8,8 0,0 0),(2 2,6 2,6 6,2 6,2 2))
|
||||
dist buffer buf_area
|
||||
0 POLYGON 48.00
|
||||
-----
|
||||
Polygon((0 0, 0 8, 8 8, 8 10, -10 10, -10 0, 0 0))
|
||||
dist buffer buf_area
|
||||
0 POLYGON 116.00
|
||||
-----
|
||||
MultiPoint(9 9,8 1,1 5)
|
||||
dist buffer buf_area
|
||||
0 MULTIPOINT NULL
|
||||
-----
|
||||
MultiLineString((0 0,2 2))
|
||||
dist buffer buf_area
|
||||
0 MULTILINESTRING NULL
|
||||
-----
|
||||
MultiLineString((0 0,2 2,0 4))
|
||||
dist buffer buf_area
|
||||
0 MULTILINESTRING NULL
|
||||
-----
|
||||
MultiLineString((0 0,2 2),(0 2,2 0))
|
||||
dist buffer buf_area
|
||||
0 MULTILINESTRING NULL
|
||||
-----
|
||||
MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
|
||||
dist buffer buf_area
|
||||
0 MULTILINESTRING NULL
|
||||
-----
|
||||
MultiPolygon(((2 2,2 8,8 8,8 2,2 2)), ((9 9,8 1,1 5,9 9)))
|
||||
dist buffer buf_area
|
||||
0 MULTIPOLYGON 66.00
|
||||
-----
|
||||
MultiPolygon(((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)),((9 9,8 1,1 5,9 9)))
|
||||
dist buffer buf_area
|
||||
0 MULTIPOLYGON 62.00
|
||||
-----
|
||||
GeometryCollection(Point(0 0))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(LineString(0 0, 2 2)))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION 36.00
|
||||
-----
|
||||
GeometryCollection(MultiPoint(9 9,8 1,1 5))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION NULL
|
||||
-----
|
||||
GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION NULL
|
||||
-----
|
||||
GeometryCollection(MultiPolygon(((0 0, 3 0, 3 3, 0 3, 0 0)),((6 6,6 9,9 9,9 6,6 6))))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION 18.00
|
||||
-----
|
||||
GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
|
||||
dist buffer buf_area
|
||||
0 GEOMETRYCOLLECTION 36.00
|
||||
#
|
||||
# Testing ST_BUFFER with negative distance
|
||||
#
|
||||
-----
|
||||
POINT(0 0))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
LineString(0 1, 1 1))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
LineString(9 9,8 1,1 5,0 0)
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
Polygon((2 2,2 8,8 8,8 2,2 2))
|
||||
dist buffer buf_area
|
||||
-1 POLYGON 16.00
|
||||
-----
|
||||
MultiPoint(9 9,8 1,1 5)
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
MultiLineString((0 0,2 2))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
MultiLineString((0 0,2 2,0 4))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
MultiLineString((0 0,2 2),(0 2,2 0))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
MultiLineString((2 2,2 8,-2 8),(-6 -6, 6 6),(10 10, 14 14))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(Point(0 0))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(LineString(0 0, 2 2)))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(Polygon((2 2,2 8,8 8,8 2,2 2))))
|
||||
dist buffer buf_area
|
||||
-1 POLYGON 16.00
|
||||
-----
|
||||
GeometryCollection(MultiPoint(9 9,8 1,1 5))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(MultiLineString((0 0,0 1),(3 0,3 1)))
|
||||
dist buffer buf_area
|
||||
-1 GEOMETRYCOLLECTION 0.00
|
||||
-----
|
||||
GeometryCollection(Point(9 9),LineString(1 5,0 0),Polygon((2 2,2 8,8 8,8 2,2 2)))
|
||||
dist buffer buf_area
|
||||
-1 POLYGON 16.00
|
||||
SELECT ST_CONTAINS(
|
||||
GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
|
||||
GeomFromText('POINT(5 10)'));
|
||||
ST_CONTAINS(
|
||||
GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
|
||||
GeomFromText('POINT(5 10)'))
|
||||
0
|
||||
SELECT AsText(ST_UNION(
|
||||
GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
|
||||
GeomFromText('POINT(5 10)')));
|
||||
AsText(ST_UNION(
|
||||
GeomFromText('MULTIPOLYGON(((0 0, 0 5, 5 5, 5 0, 0 0)),((6 6, 6 11, 11 11, 11 6, 6 6)))'),
|
||||
GeomFromText('POINT(5 10)')))
|
||||
GEOMETRYCOLLECTION(POLYGON((0 0,0 5,5 5,5 0,0 0)),POLYGON((6 6,6 11,11 11,11 6,6 6)),POINT(5 10))
|
||||
DROP PROCEDURE p1;
|
||||
#
|
||||
# Bug #13833019 ASSERTION `T1->RESULT_RANGE' FAILED IN GCALC_OPERATION_REDUCER::END_COUPLE
|
||||
#
|
||||
SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3));
|
||||
GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((0 0,9 4,3 3,0 0)),((2 2,2 2,8 8,2 3,2 2)))'), 3))
|
||||
POLYGON
|
||||
#
|
||||
# Bug #13832749 HANDLE_FATAL_SIGNAL IN GCALC_FUNCTION::COUNT_INTERNAL
|
||||
#
|
||||
SELECT GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1));
|
||||
GeometryType(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2), (4 4,4 6,6 6,6 4,4 4)), ((9 9,8 1,1 5,9 9)))'),1))
|
||||
POLYGON
|
||||
#
|
||||
# Bug#13358363 - ASSERTION: N > 0 && N < SINUSES_CALCULATED*2+1 | GET_N_SINCOS/ADD_EDGE_BUFFER
|
||||
#
|
||||
DO ST_BUFFER(ST_GEOMCOLLFROMTEXT('linestring(1 1,2 2)'),'');
|
||||
SELECT ST_WITHIN(
|
||||
LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
|
||||
ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) '),
|
||||
ST_NUMINTERIORRINGS(POLYGONFROMTEXT('POLYGON((3 5,2 4,2 5,3 5)) '))));
|
||||
ST_WITHIN(
|
||||
LINESTRINGFROMTEXT(' LINESTRING(3 8,9 2,3 8,3 3,7 6,4 7,4 7,8 1) '),
|
||||
ST_BUFFER(MULTIPOLYGONFROMTEXT(' MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5)),((2 2,2 8,8 8,8 2,2 2),(4 4,4 6,6 6,6 4,4 4)),((0 5,3 5,3 2,1 2,1 1,3 1,3 0,0 0,0 3,2 3,2 4,0 4,0 5))) ')
|
||||
0
|
||||
SELECT ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
|
||||
ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))));
|
||||
ST_DIMENSION(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((3 5,2 5,2 4,3 4,3 5)) '),
|
||||
ST_NUMINTERIORRINGS(POLYGONFROMTEXT(' POLYGON((0 0,9 3,4 2,0 0))'))))
|
||||
2
|
||||
SELECT ST_NUMINTERIORRINGS(
|
||||
ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
|
||||
SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))));
|
||||
ST_NUMINTERIORRINGS(
|
||||
ST_ENVELOPE(ST_BUFFER(MULTIPOLYGONFROMTEXT('MULTIPOLYGON(((3 5,2 5,2 4,3 4,3 5))) '),
|
||||
SRID(MULTILINESTRINGFROMTEXT('MULTILINESTRING((2 2,4 2,1 2,2 4,2 2)) ')))))
|
||||
0
|
||||
SELECT ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
|
||||
SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))));
|
||||
ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
|
||||
SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))))
|
||||
POLYGON((9 9,5 2,4 5,9 9))
|
@@ -404,7 +404,7 @@ Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||
first second w c o e d t i r
|
||||
120 120 1 1 0 1 0 1 1 0
|
||||
120 120 1 1 0 1 0 0 1 0
|
||||
120 121 0 0 1 0 0 0 1 0
|
||||
120 122 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
120 123 NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
@@ -1378,7 +1378,7 @@ SELECT IsRing(LineFromWKB(AsBinary(Boundary(boundary)),SRID(boundary)))
|
||||
FROM named_places
|
||||
WHERE name = 'Goose Island';
|
||||
IsRing(LineFromWKB(AsBinary(Boundary(boundary)),SRID(boundary)))
|
||||
0
|
||||
1
|
||||
# Conformance Item T21
|
||||
SELECT GLength(centerline)
|
||||
FROM road_segments
|
||||
@@ -1765,3 +1765,36 @@ SRID
|
||||
0
|
||||
0
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-7510 GIS: IsRing returns false for a primitive triangle.
|
||||
#
|
||||
select ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,0 0)'));
|
||||
ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,0 0)'))
|
||||
1
|
||||
select ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,-10 -10, 0 -10, 0 0)'));
|
||||
ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,-10 -10, 0 -10, 0 0)'))
|
||||
0
|
||||
#
|
||||
# MDEV-7514 GIS: PointOnSurface returns NULL instead of the point.
|
||||
#
|
||||
SELECT ST_GEOMETRYTYPE(ST_PointOnSurface(ST_PolyFromText('POLYGON((-70.916 42.1002,-70.9468 42.0946,-70.9754 42.0875,-70.9749 42.0879,-70.9759 42.0897,-70.916 42.1002))')));
|
||||
ST_GEOMETRYTYPE(ST_PointOnSurface(ST_PolyFromText('POLYGON((-70.916 42.1002,-70.9468 42.0946,-70.9754 42.0875,-70.9749 42.0879,-70.9759 42.0897,-70.916 42.1002))')))
|
||||
NULL
|
||||
#
|
||||
# MDEV-7529 GIS: ST_Relate returns unexpected results for POINT relations
|
||||
#
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*F**FFF*') AS equals;
|
||||
equals
|
||||
1
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*****FF*') AS contains;
|
||||
contains
|
||||
1
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*F**F***') AS within;
|
||||
within
|
||||
1
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(1 1)'),'FF*FF****') as disjoint;
|
||||
disjoint
|
||||
1
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'FF*FF****') as disjoint;
|
||||
disjoint
|
||||
0
|
||||
|
@@ -519,5 +519,17 @@ a
|
||||
| a |
|
||||
| aaaaaaaaaaaaaaaaa |
|
||||
+-------------------+
|
||||
#
|
||||
# Start of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
#
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
ERROR 1300 (HY000): Invalid utf8 character string: 'test\xF0\x9F\x98\x81 '
|
||||
ERROR 1300 (HY000): Invalid binary character string: 'test\xF0\x9F\x98\x81 '
|
||||
ERROR 1300 (HY000) at line 2: Invalid utf8 character string: 'test\xF0\x9F\x98\x81'
|
||||
|
||||
End of tests
|
||||
|
@@ -618,10 +618,10 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a=binary 'aaa';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 11 NULL 2 Using index condition
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a='aaa' collate latin1_bin;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 11 NULL 2 Using index condition
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a='aaa' collate latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL a NULL NULL NULL 9 Using where
|
||||
|
@@ -620,10 +620,10 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a=binary 'aaa';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 11 NULL 2 Using index condition; Rowid-ordered scan
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a='aaa' collate latin1_bin;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 11 NULL 2 Using index condition; Rowid-ordered scan
|
||||
1 SIMPLE t1 ref a a 11 const 2 Using index condition
|
||||
explain select * from t1 where a='aaa' collate latin1_german1_ci;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL a NULL NULL NULL 9 Using where
|
||||
|
@@ -1122,14 +1122,8 @@ set statement autocommit=default for select 1;
|
||||
ERROR 42000: The system variable autocommit cannot be set in SET STATEMENT.
|
||||
set statement tx_isolation=default for select 1;
|
||||
ERROR 42000: The system variable tx_isolation cannot be set in SET STATEMENT.
|
||||
set statement rand_seed1=default for select 1;
|
||||
ERROR 42000: The system variable rand_seed1 cannot be set in SET STATEMENT.
|
||||
set statement rand_seed2=default for select 1;
|
||||
ERROR 42000: The system variable rand_seed2 cannot be set in SET STATEMENT.
|
||||
set statement skip_replication=default for select 1;
|
||||
ERROR 42000: The system variable skip_replication cannot be set in SET STATEMENT.
|
||||
set statement last_insert_id=1 for select 1;
|
||||
ERROR 42000: The system variable last_insert_id cannot be set in SET STATEMENT.
|
||||
set statement sql_log_off=default for select 1;
|
||||
ERROR 42000: The system variable sql_log_off cannot be set in SET STATEMENT.
|
||||
set statement character_set_client=default for select 1;
|
||||
@@ -1216,3 +1210,13 @@ ERROR HY000: Unknown system variable 'non_existing'
|
||||
show errors;
|
||||
Level Code Message
|
||||
Error 1193 Unknown system variable 'non_existing'
|
||||
#
|
||||
# MDEV-6954: SET STATEMENT rand_seedX = ...FOR ... makes
|
||||
# the next rand() to return 0
|
||||
#
|
||||
set @rnd=1;
|
||||
# test that rand() is not always 0 after restoring rand_seed, rand_seed2...
|
||||
# @rnd should be 0
|
||||
select @rnd;
|
||||
@rnd
|
||||
0
|
||||
|
@@ -17,3 +17,92 @@ x x x x x COMMIT
|
||||
x x x x x BEGIN GTID 20-1-1
|
||||
x x x x x use `test`; set statement gtid_domain_id = 20 for insert into t1 values (3),(4)
|
||||
drop table t1;
|
||||
reset master;
|
||||
SET @a=11;
|
||||
create table t1 (a int not null auto_increment, c int, d int, primary key (a));
|
||||
create table t2 (b int);
|
||||
insert into t2 values (1),(2);
|
||||
CREATE function f1() returns int
|
||||
BEGIN
|
||||
SET STATEMENT last_insert_id=@a for insert into t1 values (NULL, @a,
|
||||
last_insert_id());
|
||||
SET @a:=@a*100+13;
|
||||
return @a;
|
||||
end|
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using");
|
||||
select f1() from t2;
|
||||
f1()
|
||||
1113
|
||||
111313
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.
|
||||
show binlog events limit 16, 100;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
x x x x x LAST_INSERT_ID=0
|
||||
x x x x x INSERT_ID=1
|
||||
x x x x x @`a`=11
|
||||
x x x x x @`a`=11
|
||||
x x x x x use `test`; SELECT `test`.`f1`()
|
||||
x x x x x LAST_INSERT_ID=0
|
||||
x x x x x INSERT_ID=2
|
||||
x x x x x @`a`=1113
|
||||
x x x x x @`a`=1113
|
||||
x x x x x use `test`; SELECT `test`.`f1`()
|
||||
x x x x x COMMIT
|
||||
select * from t1;
|
||||
a c d
|
||||
1 11 11
|
||||
2 1113 1113
|
||||
drop function f1;
|
||||
drop table t1,t2;
|
||||
reset master;
|
||||
SET @a=11;
|
||||
create table t1 (a int not null auto_increment, c int, d int, primary key (a));
|
||||
create table t2 (b int);
|
||||
insert into t2 values (1),(2);
|
||||
CREATE function f1() returns int
|
||||
BEGIN
|
||||
SET @save= @@last_insert_id;
|
||||
SET session last_insert_id=@a;
|
||||
insert into t1 values (NULL, @a, last_insert_id());
|
||||
SET session last_insert_id=@save;
|
||||
SET @a:=@a*100+13;
|
||||
return @a;
|
||||
end|
|
||||
select f1() from t2;
|
||||
f1()
|
||||
1113
|
||||
111313
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.
|
||||
show binlog events limit 13, 100;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
x x x x x LAST_INSERT_ID=0
|
||||
x x x x x INSERT_ID=1
|
||||
x x x x x @`a`=11
|
||||
x x x x x @`save`=0
|
||||
x x x x x use `test`; SELECT `test`.`f1`()
|
||||
x x x x x LAST_INSERT_ID=0
|
||||
x x x x x INSERT_ID=2
|
||||
x x x x x @`a`=1113
|
||||
x x x x x @`save`=0
|
||||
x x x x x use `test`; SELECT `test`.`f1`()
|
||||
x x x x x COMMIT
|
||||
select * from t1;
|
||||
a c d
|
||||
1 11 11
|
||||
2 1113 1113
|
||||
drop function f1;
|
||||
drop table t1,t2;
|
||||
reset master;
|
||||
set statement last_insert_id = 112 for create table t1 as select last_insert_id();
|
||||
show binlog events limit 4,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
x x x x x LAST_INSERT_ID=112
|
||||
drop table t1;
|
||||
|
@@ -549,5 +549,65 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index PRIMARY PRIMARY 22 NULL 2 Using where; Using index
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
#
|
||||
# MDEV-6989 BINARY and COLLATE xxx_bin comparisions are not used for optimization in some cases
|
||||
#
|
||||
CREATE TABLE t1 (c1 VARCHAR(20) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t1 VALUES ('a'),('b'),('c'),('d');
|
||||
SELECT * FROM t1 WHERE c1=BINARY 'a';
|
||||
c1
|
||||
a
|
||||
EXPLAIN SELECT * FROM t1 WHERE c1=BINARY 'a';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 22 const 1 Using index
|
||||
SELECT * FROM t1 WHERE c1=_latin1'a' COLLATE latin1_bin;
|
||||
c1
|
||||
a
|
||||
EXPLAIN SELECT * FROM t1 WHERE c1=_latin1'a' COLLATE latin1_bin;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 22 const 1 Using index
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
CREATE TABLE t2 (c1 VARCHAR(10) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t2 VALUES ('a'),('b');
|
||||
SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
c1 c1
|
||||
a a
|
||||
EXPLAIN SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 12 const 1 Using index
|
||||
ALTER TABLE t1 MODIFY c1 VARBINARY(10);
|
||||
SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
c1 c1
|
||||
a a
|
||||
EXPLAIN SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 12 const 1 Using index
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a'),('c');
|
||||
CREATE TABLE t2 (c1 VARCHAR(10) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t2 VALUES ('a'),('b');
|
||||
SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
c1
|
||||
a
|
||||
c
|
||||
# t2 should be eliminated
|
||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
ALTER TABLE t1 MODIFY c1 VARBINARY(10);
|
||||
SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
c1
|
||||
a
|
||||
c
|
||||
# t2 should be eliminated
|
||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
|
@@ -392,7 +392,7 @@ Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||
first second w c o e d t i r
|
||||
120 120 1 1 0 1 0 1 1 0
|
||||
120 120 1 1 0 1 0 0 1 0
|
||||
120 121 0 0 1 0 0 0 1 0
|
||||
121 120 0 0 1 0 0 0 1 0
|
||||
121 121 1 1 0 1 0 1 1 0
|
||||
|
@@ -22,13 +22,15 @@ SHOW TABLE STATUS LIKE 't1';
|
||||
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
ALTER TABLE test.t1 ADD code VARCHAR(16) NOT NULL;
|
||||
let $1= 221;
|
||||
while ($1)
|
||||
{
|
||||
eval INSERT INTO test.t1 VALUES(CHAR(254-$1));
|
||||
eval INSERT INTO test.t1 VALUES(CHAR(254-$1), HEX(254-$1));
|
||||
dec $1;
|
||||
}
|
||||
DELETE FROM test.t1 WHERE CHAR_LENGTH(a) <> 1;
|
||||
DELETE FROM test.t1 WHERE a='?' AND code<>'3F';
|
||||
--enable_query_log
|
||||
--enable_warnings
|
||||
|
||||
|
@@ -30,7 +30,7 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA3' for column 'f1' at row 1
|
||||
select f1 from t1;
|
||||
f1
|
||||
|
||||
?
|
||||
update t1 set f1=0x6a;
|
||||
update t1 set f3=repeat(0xb1,8103);
|
||||
update t1 set f1=0x4a;
|
||||
@@ -39,5 +39,5 @@ Warnings:
|
||||
Warning 1366 Incorrect string value: '\x82' for column 'f1' at row 1
|
||||
select f1 from t1;
|
||||
f1
|
||||
|
||||
?
|
||||
drop table t1;
|
||||
|
@@ -43,8 +43,8 @@ COMMIT;
|
||||
XA RECOVER;
|
||||
formatID gtrid_length bqual_length data
|
||||
1 3 0 789
|
||||
1 3 0 456
|
||||
1 3 0 123
|
||||
1 3 0 456
|
||||
XA ROLLBACK '123';
|
||||
XA ROLLBACK '456';
|
||||
XA COMMIT '789';
|
||||
|
@@ -392,7 +392,7 @@ Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||
Intersects(g1.g, g2.g) as i, Crosses(g1.g, g2.g) as r
|
||||
FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second;
|
||||
first second w c o e d t i r
|
||||
120 120 1 1 0 1 0 1 1 0
|
||||
120 120 1 1 0 1 0 0 1 0
|
||||
120 121 0 0 1 0 0 0 1 0
|
||||
121 120 0 0 1 0 0 0 1 0
|
||||
121 121 1 1 0 1 0 1 1 0
|
||||
|
@@ -120,10 +120,6 @@ where name like "wait/synch/mutex/sql/LOCK_audit_mask";
|
||||
count(name)
|
||||
1
|
||||
select count(name) from mutex_instances
|
||||
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
||||
count(name)
|
||||
1
|
||||
select count(name) from mutex_instances
|
||||
where name like "wait/synch/mutex/sql/LOCK_plugin";
|
||||
count(name)
|
||||
1
|
||||
|
@@ -5,14 +5,14 @@ SELECT * FROM performance_schema.setup_instruments
|
||||
WHERE name IN (
|
||||
'wait/synch/mutex/sql/LOCK_user_conn',
|
||||
'wait/synch/mutex/sql/LOCK_uuid_generator',
|
||||
'wait/synch/mutex/sql/LOCK_xid_cache',
|
||||
'wait/synch/mutex/sql/LOCK_plugin',
|
||||
'stage/sql/creating table')
|
||||
AND enabled = 'yes' AND timed = 'no'
|
||||
ORDER BY name;
|
||||
NAME ENABLED TIMED
|
||||
stage/sql/creating table YES NO
|
||||
wait/synch/mutex/sql/LOCK_plugin YES NO
|
||||
wait/synch/mutex/sql/LOCK_user_conn YES NO
|
||||
wait/synch/mutex/sql/LOCK_xid_cache YES NO
|
||||
SELECT * FROM performance_schema.setup_instruments
|
||||
WHERE name = 'wait/synch/mutex/sql/LOCK_thread_count'
|
||||
AND enabled = 'no' AND timed = 'no';
|
||||
|
@@ -117,9 +117,6 @@ select count(name) from mutex_instances
|
||||
select count(name) from mutex_instances
|
||||
where name like "wait/synch/mutex/sql/LOCK_audit_mask";
|
||||
|
||||
select count(name) from mutex_instances
|
||||
where name like "wait/synch/mutex/sql/LOCK_xid_cache";
|
||||
|
||||
select count(name) from mutex_instances
|
||||
where name like "wait/synch/mutex/sql/LOCK_plugin";
|
||||
|
||||
|
@@ -12,7 +12,7 @@
|
||||
--loose-performance-schema-instrument='wait/synch/mutex/sql/LOCK_thread_count=OFF'
|
||||
--loose-performance-schema-instrument=' wait/synch/mutex/sql/LOCK_user_conn = COUNTED'
|
||||
--loose-performance-schema-instrument='wait%/synch/mutex/sql/LOCK_uu%_genera%/= COUNTED'
|
||||
--loose-performance-schema-instrument='%%wait/synch/mutex/sql/LOCK_xid_cache=COUNTED'
|
||||
--loose-performance-schema-instrument='%%wait/synch/mutex/sql/LOCK_plugin=COUNTED'
|
||||
--loose-performance-schema-instrument='%=FOO'
|
||||
--loose-performance-schema-instrument='%=%'
|
||||
--loose-performance-schema-instrument='%'
|
||||
|
@@ -15,7 +15,7 @@ SELECT * FROM performance_schema.setup_instruments
|
||||
WHERE name IN (
|
||||
'wait/synch/mutex/sql/LOCK_user_conn',
|
||||
'wait/synch/mutex/sql/LOCK_uuid_generator',
|
||||
'wait/synch/mutex/sql/LOCK_xid_cache',
|
||||
'wait/synch/mutex/sql/LOCK_plugin',
|
||||
'stage/sql/creating table')
|
||||
AND enabled = 'yes' AND timed = 'no'
|
||||
ORDER BY name;
|
||||
|
@@ -25,6 +25,8 @@ select * from information_schema.system_variables
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
@@ -46,6 +48,8 @@ select VARIABLE_NAME, VARIABLE_SCOPE, VARIABLE_TYPE, VARIABLE_COMMENT,
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
|
@@ -1,27 +1,30 @@
|
||||
select @@global.rand_seed1;
|
||||
ERROR HY000: Variable 'rand_seed1' is a SESSION variable
|
||||
set session rand_seed1=default;
|
||||
ERROR 42000: Variable 'rand_seed1' doesn't have a default value
|
||||
set session rand_seed1=10969771;
|
||||
select @@session.rand_seed1;
|
||||
@@session.rand_seed1
|
||||
0
|
||||
10969771
|
||||
show global variables like 'rand_seed1';
|
||||
Variable_name Value
|
||||
show session variables like 'rand_seed1';
|
||||
Variable_name Value
|
||||
rand_seed1 0
|
||||
rand_seed1 10969771
|
||||
select * from information_schema.global_variables where variable_name='rand_seed1';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
select * from information_schema.session_variables where variable_name='rand_seed1';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
RAND_SEED1 0
|
||||
RAND_SEED1 10969771
|
||||
set session rand_seed1=1;
|
||||
select @@session.rand_seed1;
|
||||
@@session.rand_seed1
|
||||
0
|
||||
1
|
||||
select * from information_schema.global_variables where variable_name='rand_seed1';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
select * from information_schema.session_variables where variable_name='rand_seed1';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
RAND_SEED1 0
|
||||
RAND_SEED1 1
|
||||
set global rand_seed1=1;
|
||||
ERROR HY000: Variable 'rand_seed1' is a SESSION variable and can't be used with SET GLOBAL
|
||||
set session rand_seed1=1.1;
|
||||
|
@@ -1,27 +1,30 @@
|
||||
select @@global.rand_seed2;
|
||||
ERROR HY000: Variable 'rand_seed2' is a SESSION variable
|
||||
set session rand_seed2=default;
|
||||
ERROR 42000: Variable 'rand_seed2' doesn't have a default value
|
||||
set session rand_seed2=10969771;
|
||||
select @@session.rand_seed2;
|
||||
@@session.rand_seed2
|
||||
0
|
||||
10969771
|
||||
show global variables like 'rand_seed2';
|
||||
Variable_name Value
|
||||
show session variables like 'rand_seed2';
|
||||
Variable_name Value
|
||||
rand_seed2 0
|
||||
rand_seed2 10969771
|
||||
select * from information_schema.global_variables where variable_name='rand_seed2';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
select * from information_schema.session_variables where variable_name='rand_seed2';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
RAND_SEED2 0
|
||||
RAND_SEED2 10969771
|
||||
set session rand_seed2=1;
|
||||
select @@session.rand_seed2;
|
||||
@@session.rand_seed2
|
||||
0
|
||||
1
|
||||
select * from information_schema.global_variables where variable_name='rand_seed2';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
select * from information_schema.session_variables where variable_name='rand_seed2';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
RAND_SEED2 0
|
||||
RAND_SEED2 1
|
||||
set global rand_seed2=1;
|
||||
ERROR HY000: Variable 'rand_seed2' is a SESSION variable and can't be used with SET GLOBAL
|
||||
set session rand_seed2=1.1;
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,8 @@ variable_name not in (
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
@@ -3087,34 +3089,6 @@ NUMERIC_BLOCK_SIZE 1024
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME RAND_SEED1
|
||||
SESSION_VALUE 0
|
||||
GLOBAL_VALUE NULL
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RAND_SEED2
|
||||
SESSION_VALUE 0
|
||||
GLOBAL_VALUE NULL
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RANGE_ALLOC_BLOCK_SIZE
|
||||
SESSION_VALUE 4096
|
||||
GLOBAL_VALUE 4096
|
||||
@@ -4051,6 +4025,8 @@ where variable_name in (
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
@@ -4127,6 +4103,26 @@ NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY YES
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME RAND_SEED1
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RAND_SEED2
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME SYSTEM_TIME_ZONE
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
VARIABLE_TYPE VARCHAR
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,8 @@ variable_name not in (
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
@@ -3269,34 +3271,6 @@ NUMERIC_BLOCK_SIZE 1024
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME RAND_SEED1
|
||||
SESSION_VALUE 0
|
||||
GLOBAL_VALUE NULL
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RAND_SEED2
|
||||
SESSION_VALUE 0
|
||||
GLOBAL_VALUE NULL
|
||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RANGE_ALLOC_BLOCK_SIZE
|
||||
SESSION_VALUE 4096
|
||||
GLOBAL_VALUE 4096
|
||||
@@ -4793,6 +4767,8 @@ where variable_name in (
|
||||
'lower_case_file_system',
|
||||
'lower_case_table_names',
|
||||
'open_files_limit',
|
||||
'rand_seed1',
|
||||
'rand_seed2',
|
||||
'system_time_zone',
|
||||
'version_comment',
|
||||
'version_compile_machine', 'version_compile_os',
|
||||
@@ -4869,6 +4845,26 @@ NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY YES
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME RAND_SEED1
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME RAND_SEED2
|
||||
VARIABLE_SCOPE SESSION ONLY
|
||||
VARIABLE_TYPE BIGINT UNSIGNED
|
||||
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 18446744073709551615
|
||||
NUMERIC_BLOCK_SIZE 1
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT NULL
|
||||
VARIABLE_NAME SYSTEM_TIME_ZONE
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
VARIABLE_TYPE VARCHAR
|
||||
|
@@ -6,6 +6,9 @@
|
||||
#
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
select @@global.rand_seed1;
|
||||
--error ER_NO_DEFAULT
|
||||
set session rand_seed1=default;
|
||||
set session rand_seed1=10969771;
|
||||
select @@session.rand_seed1;
|
||||
show global variables like 'rand_seed1';
|
||||
show session variables like 'rand_seed1';
|
||||
|
@@ -7,6 +7,9 @@
|
||||
#
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
select @@global.rand_seed2;
|
||||
--error ER_NO_DEFAULT
|
||||
set session rand_seed2=default;
|
||||
set session rand_seed2=10969771;
|
||||
select @@session.rand_seed2;
|
||||
show global variables like 'rand_seed2';
|
||||
show session variables like 'rand_seed2';
|
||||
|
@@ -121,7 +121,7 @@ DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
|
@@ -99,7 +99,7 @@ DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
|
@@ -446,6 +446,7 @@ SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND a<>'?';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
SELECT * FROM t1 WHERE CHAR_LENGTH(a)=2;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=3;
|
||||
|
@@ -95,8 +95,8 @@ WHERE t11.a >= 0x81 AND t11.a <= 0xFE
|
||||
AND t12.a >= 0x41 AND t12.a <= 0xFE
|
||||
ORDER BY t11.a, t12.a;
|
||||
--enable_warnings
|
||||
SELECT s as bad_code FROM t2 WHERE a='' ORDER BY s;
|
||||
DELETE FROM t2 WHERE a='';
|
||||
SELECT s as bad_code FROM t2 WHERE a='?' ORDER BY s;
|
||||
DELETE FROM t2 WHERE a='?';
|
||||
ALTER TABLE t2 ADD u VARCHAR(1) CHARACTER SET utf8, ADD a2 VARCHAR(1) CHARACTER SET euckr;
|
||||
--disable_warnings
|
||||
UPDATE t2 SET u=a, a2=u;
|
||||
@@ -145,7 +145,7 @@ ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
|
@@ -69,7 +69,7 @@ ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
|
@@ -104,7 +104,7 @@ ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
@@ -203,3 +203,228 @@ SET NAMES gbk;
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
b VARBINARY(16),
|
||||
type SET('ascii','bad','head','tail','mb2','unassigned')
|
||||
);
|
||||
INSERT INTO t1 (b, type) VALUES (0x40, 'ascii,tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0x80, 'tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0x81, 'head,tail');
|
||||
INSERT INTO t1 (b, type) VALUES (0xFF, 'bad');
|
||||
INSERT INTO t1 (b, type) VALUES (0xA140, 'mb2,unassigned');
|
||||
INSERT INTO t1 (b, type) VALUES (0xA1A3, 'mb2');
|
||||
INSERT INTO t1 (b, type) VALUES (0xFE40, 'mb2');
|
||||
CREATE TABLE t2 AS SELECT
|
||||
CONCAT(t1.b,t2.b) AS b,
|
||||
t1.type AS type1,
|
||||
t2.type AS type2,
|
||||
CONCAT('[',t1.type,'][',t2.type,']') AS comment
|
||||
FROM t1, t1 t2;
|
||||
|
||||
CREATE TABLE t3
|
||||
(
|
||||
b VARBINARY(16),
|
||||
c VARCHAR(16) CHARACTER SET gbk,
|
||||
comment VARCHAR(128)
|
||||
);
|
||||
--echo #
|
||||
--echo # A combination of two valid characters, should give no warnings
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE
|
||||
(FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1)) AND
|
||||
(FIND_IN_SET('ascii',type2) OR FIND_IN_SET('mb2',type2))
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that start with a tail or a bad byte,
|
||||
--echo # or end with a bad byte, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE type1='tail' OR type1='bad' OR type2='bad'
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that start with an ASCII or an MB2 character,
|
||||
--echo # followed by a non-ASCII tail, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1))
|
||||
AND (FIND_IN_SET('tail',type2) AND NOT FIND_IN_SET('ascii',type2))
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Other sequences
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2 ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t3;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT
|
||||
CONCAT(t1.b,t2.b,t3.b) AS b,
|
||||
t1.type AS type1,
|
||||
t2.type AS type2,
|
||||
t3.type AS type3,
|
||||
CONCAT('[',t1.type,'][',t2.type,'][',t3.type,']') AS comment
|
||||
FROM t1, t1 t2,t1 t3;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
|
||||
CREATE TABLE t3
|
||||
(
|
||||
b VARBINARY(16),
|
||||
c VARCHAR(16) CHARACTER SET gbk,
|
||||
comment VARCHAR(128)
|
||||
);
|
||||
|
||||
--echo #
|
||||
--echo # A combination of three valid characters, should give no warnings
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE
|
||||
(FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1)) AND
|
||||
(FIND_IN_SET('ascii',type2) OR FIND_IN_SET('mb2',type2)) AND
|
||||
(FIND_IN_SET('ascii',type3) OR FIND_IN_SET('mb2',type3))
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that start with a tail or a bad byte,
|
||||
--echo # or have a bad byte, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE type1='tail' OR type1='bad' OR type2='bad' OR type3='bad'
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that start with an ASCII or an MB2 character,
|
||||
--echo # followed by a pure non-ASCII tail, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1))
|
||||
AND type2='tail'
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that consist of two ASCII or MB2 characters,
|
||||
--echo # followed by a pure non-ASCII tail, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('mb2',type1) OR FIND_IN_SET('ascii',type1)) AND
|
||||
(FIND_IN_SET('mb2',type2) OR FIND_IN_SET('ascii',type2)) AND
|
||||
type3='tail'
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that consist of two MB2 characters,
|
||||
--echo # followed by a non-ASCII head or tail, all should be fixed.
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE FIND_IN_SET('mb2',type1) AND FIND_IN_SET('mb2',type2)
|
||||
AND NOT FIND_IN_SET('ascii',type3)
|
||||
AND NOT FIND_IN_SET('mb2',type3)
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that consist of head + tail + MB2 should go without warnings
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE FIND_IN_SET('head',type1)
|
||||
AND FIND_IN_SET('tail',type2)
|
||||
AND FIND_IN_SET('mb2',type3)
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
--echo #
|
||||
--echo # Sequences that consist of (ascii or mb2) + head + tail should go without warnings
|
||||
--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2
|
||||
WHERE (FIND_IN_SET('ascii',type1) OR FIND_IN_SET('mb2',type1))
|
||||
AND FIND_IN_SET('head',type2)
|
||||
AND FIND_IN_SET('tail',type3)
|
||||
ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
DELETE FROM t2 WHERE b IN (SELECT b FROM t3);
|
||||
DELETE FROM t3;
|
||||
|
||||
|
||||
#--echo #
|
||||
#--echo # Other sequences
|
||||
#--echo #
|
||||
INSERT INTO t3 (b,c,comment) SELECT b,b,comment FROM t2 ORDER BY b;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
SELECT HEX(c),comment FROM t3 WHERE b=c ORDER BY b;
|
||||
SELECT HEX(c),HEX(b),comment FROM t3 WHERE b<>c ORDER BY b;
|
||||
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # END OF MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
@@ -145,7 +145,7 @@ DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
|
@@ -1276,7 +1276,7 @@ SHOW CREATE TABLE t1;
|
||||
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'?';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=3;
|
||||
#
|
||||
|
@@ -1756,3 +1756,19 @@ let $ctype_unescape_combinations=selected;
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
--echo #
|
||||
SET NAMES utf8;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT * FROM `test😁😁test`;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
@@ -1832,7 +1832,66 @@ set @@collation_connection=utf8mb4_bin;
|
||||
--echo # End of 5.6 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6566 Different INSERT behaviour on bad bytes with and without character set conversion
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # This test sets session character set to 3-byte utf8,
|
||||
--echo # but then sends a 4-byte sequence (which is wrong for 3-byte utf8).
|
||||
--echo # It should be replaced to four question marks: '????' in both columns
|
||||
--echo # (i.e. four unknown bytes are replaced to four question marks),
|
||||
--echo # then the rest of the string should be stored, so we get 'a ???? b'.
|
||||
--echo #
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE t1 (
|
||||
a VARCHAR(32) CHARACTER SET utf8mb4,
|
||||
b VARCHAR(32) CHARACTER SET utf8
|
||||
);
|
||||
INSERT INTO t1 SELECT 'a 😁 b', 'a 😁 b';
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # This test sets session character set to 4-byte utf8,
|
||||
--echo # then normally sends a 4-byte sequence.
|
||||
--echo # It should be stored AS IS into the utf8mb4 column (a),
|
||||
--echo # and should be replaced to a single question mark in the utf8 column (b)
|
||||
--echo # (i.e. one character that cannot be converted is replaced to one question mark).
|
||||
--echo #
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
CREATE TABLE t1 (
|
||||
a VARCHAR(32) CHARACTER SET utf8mb4,
|
||||
b VARCHAR(32) CHARACTER SET utf8
|
||||
);
|
||||
INSERT INTO t1 SELECT 'a 😁 b', 'a 😁 b';
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # End of tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
--echo #
|
||||
SET NAMES utf8mb4;
|
||||
--error ER_INVALID_CHARACTER_STRING
|
||||
SELECT * FROM `test😁😁test`;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
@@ -1486,3 +1486,23 @@ ALTER TABLE t1 ADD fid INT NOT NULL;
|
||||
select SRID from information_schema.geometry_columns where F_TABLE_NAME='t1';
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7510 GIS: IsRing returns false for a primitive triangle.
|
||||
--echo #
|
||||
select ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,0 0)'));
|
||||
select ST_IsRing(ST_LineFromText('LINESTRING(0 0,0 10,10 10,-10 -10, 0 -10, 0 0)'));
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7514 GIS: PointOnSurface returns NULL instead of the point.
|
||||
--echo #
|
||||
SELECT ST_GEOMETRYTYPE(ST_PointOnSurface(ST_PolyFromText('POLYGON((-70.916 42.1002,-70.9468 42.0946,-70.9754 42.0875,-70.9749 42.0879,-70.9759 42.0897,-70.916 42.1002))')));
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-7529 GIS: ST_Relate returns unexpected results for POINT relations
|
||||
--echo #
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*F**FFF*') AS equals;
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*****FF*') AS contains;
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'T*F**F***') AS within;
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(1 1)'),'FF*FF****') as disjoint;
|
||||
select ST_Relate(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'),'FF*FF****') as disjoint;
|
||||
|
||||
|
@@ -608,5 +608,29 @@ EOF
|
||||
#
|
||||
--exec $MYSQL -t -N -e "SELECT 'a' union select 'aaaaaaaaaaaaaaaaa'"
|
||||
|
||||
--echo #
|
||||
--echo # Start of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6572 "USE dbname" with a bad sequence erroneously connects to a wrong database
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--error 1
|
||||
--exec $MYSQL --default-character-set=utf8 -e "select 1" "test😁 " 2>&1
|
||||
--error 1
|
||||
--exec $MYSQL --default-character-set=binary -e "select 1" "test😁 " 2>&1
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mdev-6572.sql
|
||||
SET NAMES utf8;
|
||||
USE test😁 ;
|
||||
EOF
|
||||
--error 1
|
||||
--exec $MYSQL --default-character-set=utf8 < $MYSQLTEST_VARDIR/tmp/mdev-6572.sql 2>&1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/mdev-6572.sql
|
||||
|
||||
--echo
|
||||
--echo End of tests
|
||||
|
@@ -1050,14 +1050,8 @@ set statement autocommit=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement tx_isolation=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement rand_seed1=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement rand_seed2=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement skip_replication=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement last_insert_id=1 for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement sql_log_off=default for select 1;
|
||||
--error ER_SET_STATEMENT_NOT_SUPPORTED
|
||||
set statement character_set_client=default for select 1;
|
||||
@@ -1117,3 +1111,23 @@ set @@old_passwords=@save_old_passwords;
|
||||
--error ER_UNKNOWN_SYSTEM_VARIABLE
|
||||
set statement non_existing=1 for select 1;
|
||||
show errors;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6954: SET STATEMENT rand_seedX = ...FOR ... makes
|
||||
--echo # the next rand() to return 0
|
||||
--echo #
|
||||
set @rnd=1;
|
||||
let $1=10;
|
||||
--disable_query_log
|
||||
--echo # test that rand() is not always 0 after restoring rand_seed, rand_seed2...
|
||||
while ($1)
|
||||
{
|
||||
--disable_result_log
|
||||
set statement rand_seed1=1, rand_seed2=1 for select 1;
|
||||
--enable_result_log
|
||||
set @rnd= rand()=0 and @rnd;
|
||||
dec $1;
|
||||
}
|
||||
--enable_query_log
|
||||
--echo # @rnd should be 0
|
||||
select @rnd;
|
||||
|
@@ -20,3 +20,68 @@ set statement gtid_domain_id = 20 for insert into t1 values (3),(4);
|
||||
show binlog events limit 5,5;
|
||||
|
||||
drop table t1;
|
||||
|
||||
reset master;
|
||||
SET @a=11;
|
||||
|
||||
create table t1 (a int not null auto_increment, c int, d int, primary key (a));
|
||||
create table t2 (b int);
|
||||
insert into t2 values (1),(2);
|
||||
|
||||
DELIMITER |;
|
||||
CREATE function f1() returns int
|
||||
BEGIN
|
||||
SET STATEMENT last_insert_id=@a for insert into t1 values (NULL, @a,
|
||||
last_insert_id());
|
||||
SET @a:=@a*100+13;
|
||||
return @a;
|
||||
end|
|
||||
DELIMITER ;|
|
||||
|
||||
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using");
|
||||
select f1() from t2;
|
||||
|
||||
--replace_column 1 x 2 x 3 x 4 x 5 x
|
||||
show binlog events limit 16, 100;
|
||||
|
||||
select * from t1;
|
||||
|
||||
drop function f1;
|
||||
drop table t1,t2;
|
||||
|
||||
|
||||
reset master;
|
||||
SET @a=11;
|
||||
|
||||
create table t1 (a int not null auto_increment, c int, d int, primary key (a));
|
||||
create table t2 (b int);
|
||||
insert into t2 values (1),(2);
|
||||
|
||||
DELIMITER |;
|
||||
CREATE function f1() returns int
|
||||
BEGIN
|
||||
SET @save= @@last_insert_id;
|
||||
SET session last_insert_id=@a;
|
||||
insert into t1 values (NULL, @a, last_insert_id());
|
||||
SET session last_insert_id=@save;
|
||||
SET @a:=@a*100+13;
|
||||
return @a;
|
||||
end|
|
||||
DELIMITER ;|
|
||||
|
||||
select f1() from t2;
|
||||
|
||||
--replace_column 1 x 2 x 3 x 4 x 5 x
|
||||
show binlog events limit 13, 100;
|
||||
|
||||
select * from t1;
|
||||
|
||||
drop function f1;
|
||||
drop table t1,t2;
|
||||
|
||||
reset master;
|
||||
set statement last_insert_id = 112 for create table t1 as select last_insert_id();
|
||||
--replace_column 1 x 2 x 3 x 4 x 5 x
|
||||
show binlog events limit 4,1;
|
||||
drop table t1;
|
||||
|
@@ -240,6 +240,42 @@ SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
|
||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-6989 BINARY and COLLATE xxx_bin comparisions are not used for optimization in some cases
|
||||
--echo #
|
||||
CREATE TABLE t1 (c1 VARCHAR(20) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t1 VALUES ('a'),('b'),('c'),('d');
|
||||
SELECT * FROM t1 WHERE c1=BINARY 'a';
|
||||
EXPLAIN SELECT * FROM t1 WHERE c1=BINARY 'a';
|
||||
SELECT * FROM t1 WHERE c1=_latin1'a' COLLATE latin1_bin;
|
||||
EXPLAIN SELECT * FROM t1 WHERE c1=_latin1'a' COLLATE latin1_bin;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
CREATE TABLE t2 (c1 VARCHAR(10) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t2 VALUES ('a'),('b');
|
||||
SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
EXPLAIN SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
ALTER TABLE t1 MODIFY c1 VARBINARY(10);
|
||||
SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
EXPLAIN SELECT * FROM t1, t2 WHERE t1.c1=t2.c1;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin);
|
||||
INSERT INTO t1 VALUES ('a'),('c');
|
||||
CREATE TABLE t2 (c1 VARCHAR(10) CHARACTER SET latin1, PRIMARY KEY(c1));
|
||||
INSERT INTO t2 VALUES ('a'),('b');
|
||||
SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
--echo # t2 should be eliminated
|
||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
ALTER TABLE t1 MODIFY c1 VARBINARY(10);
|
||||
SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
--echo # t2 should be eliminated
|
||||
EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
--echo #
|
||||
|
@@ -315,12 +315,11 @@ inline uint32* find_prev_pc(uint32* pc, uchar** fp)
|
||||
|
||||
void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack)
|
||||
{
|
||||
uchar** fp;
|
||||
uchar** UNINIT_VAR(fp);
|
||||
uint frame_count = 0, sigreturn_frame_count;
|
||||
#if defined(__alpha__) && defined(__GNUC__)
|
||||
uint32* pc;
|
||||
#endif
|
||||
LINT_INIT(fp);
|
||||
|
||||
|
||||
#ifdef __i386__
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include <mysql/plugin_encryption_key_management.h>
|
||||
#include <my_md5.h>
|
||||
#include <my_rnd.h>
|
||||
#include "sql_class.h"
|
||||
|
||||
/* rotate key randomly between 45 and 90 seconds */
|
||||
#define KEY_ROTATION_MIN 45
|
||||
@@ -80,7 +81,14 @@ static int example_key_management_plugin_init(void *p)
|
||||
my_rnd_init(&seed, time(0), 0);
|
||||
get_latest_key_version();
|
||||
|
||||
my_aes_init_dynamic_encrypt(MY_AES_ALGORITHM_CTR);
|
||||
if (current_aes_dynamic_method == MY_AES_ALGORITHM_NONE)
|
||||
{
|
||||
sql_print_error("No encryption method choosen with --encryption-algorithm. "
|
||||
"example_key_management_plugin disabled");
|
||||
return 1;
|
||||
}
|
||||
|
||||
my_aes_init_dynamic_encrypt(current_aes_dynamic_method);
|
||||
|
||||
pthread_mutex_init(&mutex, NULL);
|
||||
|
||||
|
@@ -1050,8 +1050,6 @@ int ReplSemiSyncMaster::readSlaveReply(NET *net, uint32 server_id,
|
||||
ulong trc_level = trace_level_;
|
||||
LINT_INIT_STRUCT(start_ts);
|
||||
|
||||
LINT_INIT_STRUCT(start_ts);
|
||||
|
||||
function_enter(kWho);
|
||||
|
||||
assert((unsigned char)event_buf[1] == kPacketMagicNum);
|
||||
|
@@ -1,5 +1,5 @@
|
||||
-- Copyright (C) 2003, 2013 Oracle and/or its affiliates.
|
||||
-- Copyright (C) 2010, 2014 SkySQL Ab.
|
||||
-- Copyright (C) 2010, 2015 MariaDB Corporation.
|
||||
--
|
||||
-- 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
|
||||
@@ -14,8 +14,10 @@
|
||||
-- along with this program; if not, write to the Free Software
|
||||
-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
# This part converts any old privilege tables to privilege tables suitable
|
||||
# for current version of MySQL
|
||||
# WARNING: Do not use this script to upgrade system tables older that v5.1.
|
||||
|
||||
# This part converts old privilege tables to privilege tables suitable
|
||||
# for current version of MySQL/MariaDB server.
|
||||
|
||||
# You can safely ignore all 'Duplicate column' and 'Unknown column' errors
|
||||
# because these just mean that your tables are already up to date.
|
||||
@@ -27,213 +29,9 @@
|
||||
set sql_mode='';
|
||||
set storage_engine=MyISAM;
|
||||
|
||||
ALTER TABLE user add File_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
|
||||
|
||||
# Detect whether or not we had the Grant_priv column
|
||||
SET @hadGrantPriv:=0;
|
||||
SELECT @hadGrantPriv:=1 FROM user WHERE Grant_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
|
||||
ALTER TABLE host add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
|
||||
ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
|
||||
|
||||
# Fix privileges for old tables
|
||||
UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
|
||||
UPDATE db SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
|
||||
UPDATE host SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
|
||||
|
||||
#
|
||||
# The second alter changes ssl_type to new 4.0.2 format
|
||||
# Adding columns needed by GRANT .. REQUIRE (openssl)
|
||||
|
||||
ALTER TABLE user
|
||||
ADD ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci NOT NULL,
|
||||
ADD ssl_cipher BLOB NOT NULL,
|
||||
ADD x509_issuer BLOB NOT NULL,
|
||||
ADD x509_subject BLOB NOT NULL;
|
||||
ALTER TABLE user MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL;
|
||||
|
||||
#
|
||||
# tables_priv
|
||||
#
|
||||
ALTER TABLE tables_priv
|
||||
ADD KEY Grantor (Grantor);
|
||||
|
||||
ALTER TABLE tables_priv
|
||||
MODIFY Host char(60) NOT NULL default '',
|
||||
MODIFY Db char(64) NOT NULL default '',
|
||||
MODIFY User char(80) NOT NULL default '',
|
||||
MODIFY Table_name char(64) NOT NULL default '',
|
||||
MODIFY Grantor char(141) NOT NULL default '',
|
||||
ENGINE=MyISAM,
|
||||
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
|
||||
ALTER TABLE tables_priv
|
||||
MODIFY Column_priv set('Select','Insert','Update','References')
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL,
|
||||
MODIFY Table_priv set('Select','Insert','Update','Delete','Create',
|
||||
'Drop','Grant','References','Index','Alter',
|
||||
'Create View','Show view','Trigger')
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL,
|
||||
COMMENT='Table privileges';
|
||||
|
||||
#
|
||||
# columns_priv
|
||||
#
|
||||
#
|
||||
# Name change of Type -> Column_priv from MySQL 3.22.12
|
||||
#
|
||||
ALTER TABLE columns_priv
|
||||
CHANGE Type Column_priv set('Select','Insert','Update','References')
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL;
|
||||
|
||||
ALTER TABLE columns_priv
|
||||
MODIFY Host char(60) NOT NULL default '',
|
||||
MODIFY Db char(64) NOT NULL default '',
|
||||
MODIFY User char(80) NOT NULL default '',
|
||||
MODIFY Table_name char(64) NOT NULL default '',
|
||||
MODIFY Column_name char(64) NOT NULL default '',
|
||||
ENGINE=MyISAM,
|
||||
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin,
|
||||
COMMENT='Column privileges';
|
||||
|
||||
ALTER TABLE columns_priv
|
||||
MODIFY Column_priv set('Select','Insert','Update','References')
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL;
|
||||
|
||||
#
|
||||
# Add the new 'type' column to the func table.
|
||||
#
|
||||
|
||||
ALTER TABLE func add type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL;
|
||||
|
||||
#
|
||||
# Change the user,db and host tables to current format
|
||||
#
|
||||
|
||||
# Detect whether we had Show_db_priv
|
||||
SET @hadShowDbPriv:=0;
|
||||
SELECT @hadShowDbPriv:=1 FROM user WHERE Show_db_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user
|
||||
ADD Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_priv,
|
||||
ADD Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_db_priv,
|
||||
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Super_priv,
|
||||
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv,
|
||||
ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv,
|
||||
ADD Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Execute_priv,
|
||||
ADD Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_slave_priv;
|
||||
|
||||
# Convert privileges so that users have similar privileges as before
|
||||
|
||||
UPDATE user SET Show_db_priv= Select_priv, Super_priv=Process_priv, Execute_priv=Process_priv, Create_tmp_table_priv='Y', Lock_tables_priv='Y', Repl_slave_priv=file_priv, Repl_client_priv=File_priv where user<>"" AND @hadShowDbPriv = 0;
|
||||
|
||||
|
||||
# Add fields that can be used to limit number of questions and connections
|
||||
# for some users.
|
||||
|
||||
ALTER TABLE user
|
||||
ADD max_questions int(11) NOT NULL DEFAULT 0 AFTER x509_subject,
|
||||
ADD max_updates int(11) unsigned NOT NULL DEFAULT 0 AFTER max_questions,
|
||||
ADD max_connections int(11) unsigned NOT NULL DEFAULT 0 AFTER max_updates;
|
||||
|
||||
|
||||
#
|
||||
# Add Create_tmp_table_priv and Lock_tables_priv to db and host
|
||||
#
|
||||
|
||||
ALTER TABLE db
|
||||
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
ALTER TABLE host
|
||||
ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||
ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
|
||||
|
||||
alter table user change max_questions max_questions int(11) unsigned DEFAULT 0 NOT NULL;
|
||||
|
||||
|
||||
alter table db comment='Database privileges';
|
||||
alter table host comment='Host privileges; Merged with database privileges';
|
||||
alter table user comment='Users and global privileges';
|
||||
alter table func comment='User defined functions';
|
||||
|
||||
# Convert all tables to UTF-8 with binary collation
|
||||
# and reset all char columns to correct width
|
||||
ALTER TABLE user
|
||||
MODIFY Host char(60) NOT NULL default '',
|
||||
MODIFY User char(80) NOT NULL default '',
|
||||
ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
ALTER TABLE user
|
||||
MODIFY Password char(41) character set latin1 collate latin1_bin NOT NULL default '',
|
||||
MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL;
|
||||
|
||||
ALTER TABLE db
|
||||
MODIFY Host char(60) NOT NULL default '',
|
||||
MODIFY Db char(64) NOT NULL default '',
|
||||
MODIFY User char(80) NOT NULL default '',
|
||||
ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
ALTER TABLE db
|
||||
MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
|
||||
ALTER TABLE host
|
||||
MODIFY Host char(60) NOT NULL default '',
|
||||
MODIFY Db char(64) NOT NULL default '',
|
||||
ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
ALTER TABLE host
|
||||
MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
|
||||
MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
|
||||
ALTER TABLE func
|
||||
ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
ALTER TABLE func
|
||||
MODIFY type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL;
|
||||
|
||||
#
|
||||
# Modify log tables.
|
||||
#
|
||||
|
||||
SET @old_log_state = @@global.general_log;
|
||||
SET GLOBAL general_log = 'OFF';
|
||||
ALTER TABLE general_log
|
||||
@@ -267,130 +65,25 @@ ALTER TABLE slow_log
|
||||
MODIFY thread_id BIGINT(21) UNSIGNED NOT NULL;
|
||||
SET GLOBAL slow_query_log = @old_log_state;
|
||||
|
||||
#
|
||||
# Modify plugin table.
|
||||
#
|
||||
ALTER TABLE plugin
|
||||
MODIFY name varchar(64) COLLATE utf8_general_ci NOT NULL DEFAULT '',
|
||||
MODIFY dl varchar(128) COLLATE utf8_general_ci NOT NULL DEFAULT '',
|
||||
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||
|
||||
#
|
||||
# Detect whether we had Create_view_priv
|
||||
#
|
||||
SET @hadCreateViewPriv:=0;
|
||||
SELECT @hadCreateViewPriv:=1 FROM user WHERE Create_view_priv LIKE '%';
|
||||
|
||||
#
|
||||
# Create VIEWs privileges (v5.0)
|
||||
#
|
||||
ALTER TABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
|
||||
ALTER TABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
|
||||
|
||||
ALTER TABLE host ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
|
||||
ALTER TABLE host MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
|
||||
|
||||
ALTER TABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
|
||||
ALTER TABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
|
||||
|
||||
#
|
||||
# Show VIEWs privileges (v5.0)
|
||||
#
|
||||
ALTER TABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
ALTER TABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
|
||||
ALTER TABLE host ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
ALTER TABLE host MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
|
||||
ALTER TABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
ALTER TABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
|
||||
|
||||
#
|
||||
# Assign create/show view privileges to people who have create provileges
|
||||
#
|
||||
UPDATE user SET Create_view_priv=Create_priv, Show_view_priv=Create_priv where user<>"" AND @hadCreateViewPriv = 0;
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
SET @hadCreateRoutinePriv:=0;
|
||||
SELECT @hadCreateRoutinePriv:=1 FROM user WHERE Create_routine_priv LIKE '%';
|
||||
|
||||
#
|
||||
# Create PROCEDUREs privileges (v5.0)
|
||||
#
|
||||
ALTER TABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
ALTER TABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
|
||||
ALTER TABLE host ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
ALTER TABLE host MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
|
||||
ALTER TABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
ALTER TABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
|
||||
|
||||
#
|
||||
# Alter PROCEDUREs privileges (v5.0)
|
||||
#
|
||||
ALTER TABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
ALTER TABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
|
||||
ALTER TABLE host ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
ALTER TABLE host MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
|
||||
ALTER TABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
ALTER TABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
|
||||
|
||||
ALTER TABLE db ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
ALTER TABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
|
||||
ALTER TABLE host ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
ALTER TABLE host MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
|
||||
#
|
||||
# Assign create/alter routine privileges to people who have create privileges
|
||||
#
|
||||
UPDATE user SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv where user<>"" AND @hadCreateRoutinePriv = 0;
|
||||
UPDATE db SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where user<>"" AND @hadCreateRoutinePriv = 0;
|
||||
UPDATE host SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where @hadCreateRoutinePriv = 0;
|
||||
|
||||
#
|
||||
# Add max_user_connections resource limit
|
||||
# this is signed in MariaDB so that if one sets it's to -1 then the user
|
||||
# can't connect anymore.
|
||||
# Add max_user_connections resource limit.
|
||||
# This is signed in MariaDB so that if one sets it to -1 then the user
|
||||
# cannot connect anymore.
|
||||
#
|
||||
ALTER TABLE user ADD max_user_connections int(11) DEFAULT '0' NOT NULL AFTER max_connections;
|
||||
ALTER TABLE user MODIFY max_user_connections int(11) DEFAULT '0' NOT NULL AFTER max_connections;
|
||||
|
||||
#
|
||||
# user.Create_user_priv
|
||||
#
|
||||
|
||||
SET @hadCreateUserPriv:=0;
|
||||
SELECT @hadCreateUserPriv:=1 FROM user WHERE Create_user_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
ALTER TABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
|
||||
UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y'
|
||||
WHERE @hadCreateUserPriv = 0 AND
|
||||
(user.Grant_priv = 'Y' OR db.Grant_priv = 'Y');
|
||||
|
||||
#
|
||||
# procs_priv
|
||||
#
|
||||
|
||||
ALTER TABLE procs_priv
|
||||
ENGINE=MyISAM,
|
||||
CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
|
||||
|
||||
ALTER TABLE procs_priv
|
||||
MODIFY Proc_priv set('Execute','Alter Routine','Grant')
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL;
|
||||
|
||||
ALTER IGNORE TABLE procs_priv
|
||||
MODIFY Routine_name char(64)
|
||||
COLLATE utf8_general_ci DEFAULT '' NOT NULL;
|
||||
|
||||
ALTER TABLE procs_priv
|
||||
ADD Routine_type enum('FUNCTION','PROCEDURE')
|
||||
COLLATE utf8_general_ci NOT NULL AFTER Routine_name;
|
||||
|
||||
ALTER TABLE procs_priv
|
||||
MODIFY Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER Proc_priv;
|
||||
|
||||
@@ -399,17 +92,7 @@ ALTER TABLE procs_priv
|
||||
#
|
||||
|
||||
# Correct the name fields to not binary, and expand sql_data_access
|
||||
ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
|
||||
MODIFY specific_name char(64) DEFAULT '' NOT NULL,
|
||||
MODIFY sql_data_access
|
||||
enum('CONTAINS_SQL',
|
||||
'NO_SQL',
|
||||
'READS_SQL_DATA',
|
||||
'MODIFIES_SQL_DATA'
|
||||
) DEFAULT 'CONTAINS_SQL' NOT NULL,
|
||||
MODIFY body longblob NOT NULL,
|
||||
MODIFY returns longblob NOT NULL,
|
||||
MODIFY sql_mode
|
||||
ALTER TABLE proc MODIFY sql_mode
|
||||
set('REAL_AS_FLOAT',
|
||||
'PIPES_AS_CONCAT',
|
||||
'ANSI_QUOTES',
|
||||
@@ -445,21 +128,9 @@ ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
|
||||
) DEFAULT '' NOT NULL,
|
||||
DEFAULT CHARACTER SET utf8;
|
||||
|
||||
# Correct the character set and collation
|
||||
ALTER TABLE proc CONVERT TO CHARACTER SET utf8;
|
||||
# Reset some fields after the conversion
|
||||
ALTER TABLE proc MODIFY db
|
||||
char(64) collate utf8_bin DEFAULT '' NOT NULL,
|
||||
MODIFY definer
|
||||
char(141) collate utf8_bin DEFAULT '' NOT NULL,
|
||||
MODIFY comment
|
||||
char(64) collate utf8_bin DEFAULT '' NOT NULL;
|
||||
|
||||
ALTER TABLE proc ADD character_set_client
|
||||
char(32) collate utf8_bin DEFAULT NULL
|
||||
AFTER comment;
|
||||
ALTER TABLE proc MODIFY character_set_client
|
||||
char(32) collate utf8_bin DEFAULT NULL;
|
||||
ALTER TABLE proc MODIFY definer
|
||||
char(141) collate utf8_bin DEFAULT '' NOT NULL;
|
||||
|
||||
SELECT CASE WHEN COUNT(*) > 0 THEN
|
||||
CONCAT ("WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (", @@character_set_client, "). Please verify if necessary.")
|
||||
@@ -511,27 +182,9 @@ ALTER TABLE proc MODIFY body_utf8 longblob DEFAULT NULL;
|
||||
ALTER TABLE proc MODIFY comment
|
||||
text collate utf8_bin NOT NULL;
|
||||
|
||||
#
|
||||
# EVENT privilege
|
||||
#
|
||||
SET @hadEventPriv := 0;
|
||||
SELECT @hadEventPriv :=1 FROM user WHERE Event_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
|
||||
ALTER TABLE user MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
|
||||
|
||||
UPDATE user SET Event_priv=Super_priv WHERE @hadEventPriv = 0;
|
||||
|
||||
ALTER TABLE db add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL;
|
||||
ALTER TABLE db MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL;
|
||||
|
||||
#
|
||||
# EVENT table
|
||||
#
|
||||
ALTER TABLE event DROP PRIMARY KEY;
|
||||
ALTER TABLE event ADD PRIMARY KEY(db, name);
|
||||
# Add sql_mode column just in case.
|
||||
ALTER TABLE event ADD sql_mode set ('IGNORE_BAD_TABLE_OPTIONS') AFTER on_completion;
|
||||
# Update list of sql_mode values.
|
||||
ALTER TABLE event MODIFY sql_mode
|
||||
set('REAL_AS_FLOAT',
|
||||
@@ -567,56 +220,6 @@ ALTER TABLE event MODIFY sql_mode
|
||||
'NO_ENGINE_SUBSTITUTION',
|
||||
'PAD_CHAR_TO_FULL_LENGTH'
|
||||
) DEFAULT '' NOT NULL AFTER on_completion;
|
||||
ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default '';
|
||||
|
||||
ALTER TABLE event MODIFY COLUMN originator INT UNSIGNED NOT NULL;
|
||||
ALTER TABLE event ADD COLUMN originator INT UNSIGNED NOT NULL AFTER comment;
|
||||
|
||||
ALTER TABLE event MODIFY COLUMN status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED';
|
||||
|
||||
ALTER TABLE event ADD COLUMN time_zone char(64) CHARACTER SET latin1
|
||||
NOT NULL DEFAULT 'SYSTEM' AFTER originator;
|
||||
|
||||
ALTER TABLE event ADD character_set_client
|
||||
char(32) collate utf8_bin DEFAULT NULL
|
||||
AFTER time_zone;
|
||||
ALTER TABLE event MODIFY character_set_client
|
||||
char(32) collate utf8_bin DEFAULT NULL;
|
||||
|
||||
ALTER TABLE event ADD collation_connection
|
||||
char(32) collate utf8_bin DEFAULT NULL
|
||||
AFTER character_set_client;
|
||||
ALTER TABLE event MODIFY collation_connection
|
||||
char(32) collate utf8_bin DEFAULT NULL;
|
||||
|
||||
ALTER TABLE event ADD db_collation
|
||||
char(32) collate utf8_bin DEFAULT NULL
|
||||
AFTER collation_connection;
|
||||
ALTER TABLE event MODIFY db_collation
|
||||
char(32) collate utf8_bin DEFAULT NULL;
|
||||
|
||||
ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL
|
||||
AFTER db_collation;
|
||||
ALTER TABLE event MODIFY body_utf8 longblob DEFAULT NULL;
|
||||
|
||||
|
||||
#
|
||||
# TRIGGER privilege
|
||||
#
|
||||
|
||||
SET @hadTriggerPriv := 0;
|
||||
SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv LIKE '%';
|
||||
|
||||
ALTER TABLE user ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
|
||||
ALTER TABLE user MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
|
||||
|
||||
ALTER TABLE host ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
ALTER TABLE host MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
|
||||
ALTER TABLE db ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
ALTER TABLE db MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||
|
||||
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
|
||||
|
||||
#
|
||||
# user.Create_tablespace_priv
|
||||
@@ -705,7 +308,7 @@ alter table servers modify Username char(80) not null
|
||||
alter table procs_priv modify Grantor char(141) COLLATE utf8_bin not null default '';
|
||||
alter table tables_priv modify Grantor char(141) COLLATE utf8_bin not null default '';
|
||||
|
||||
# Activate the new, possible modified privilege tables
|
||||
# Activate the new, possibly modified privilege tables.
|
||||
# This should not be needed, but gives us some extra testing that the above
|
||||
# changes was correct
|
||||
|
||||
|
@@ -3211,7 +3211,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
||||
uint port, const char *unix_socket,ulong client_flag)
|
||||
{
|
||||
char buff[NAME_LEN+USERNAME_LENGTH+100];
|
||||
int scramble_data_len, pkt_scramble_len= 0;
|
||||
int scramble_data_len, UNINIT_VAR(pkt_scramble_len);
|
||||
char *end,*host_info= 0, *server_version_end, *pkt_end;
|
||||
char *scramble_data;
|
||||
const char *scramble_plugin;
|
||||
@@ -3224,7 +3224,6 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
||||
struct sockaddr_un UNIXaddr;
|
||||
#endif
|
||||
DBUG_ENTER("mysql_real_connect");
|
||||
LINT_INIT(pkt_scramble_len);
|
||||
|
||||
DBUG_PRINT("enter",("host: %s db: %s user: %s (client)",
|
||||
host ? host : "(Null)",
|
||||
|
@@ -762,9 +762,8 @@ engine_option_value *merge_engine_table_options(engine_option_value *first,
|
||||
engine_option_value *second,
|
||||
MEM_ROOT *root)
|
||||
{
|
||||
engine_option_value *end, *opt;
|
||||
engine_option_value *UNINIT_VAR(end), *opt;
|
||||
DBUG_ENTER("merge_engine_table_options");
|
||||
LINT_INIT(end);
|
||||
|
||||
/* Create copy of first list */
|
||||
for (opt= first, first= 0; opt; opt= opt->next)
|
||||
|
@@ -1348,8 +1348,7 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
|
||||
|
||||
if (action->execute)
|
||||
{
|
||||
const char *old_proc_info;
|
||||
LINT_INIT(old_proc_info);
|
||||
const char *UNINIT_VAR(old_proc_info);
|
||||
|
||||
action->execute--;
|
||||
|
||||
|
@@ -152,13 +152,11 @@ bool read_texts(const char *file_name, const char *language,
|
||||
File file;
|
||||
char name[FN_REFLEN];
|
||||
char lang_path[FN_REFLEN];
|
||||
uchar *buff;
|
||||
uchar *UNINIT_VAR(buff);
|
||||
uchar head[32],*pos;
|
||||
DBUG_ENTER("read_texts");
|
||||
|
||||
*point= 0;
|
||||
|
||||
LINT_INIT(buff);
|
||||
funktpos=0;
|
||||
convert_dirname(lang_path, language, NullS);
|
||||
(void) my_load_path(lang_path, lang_path, lc_messages_dir);
|
||||
|
@@ -414,9 +414,7 @@ Event_db_repository::index_read_for_db_for_i_s(THD *thd, TABLE *schema_table,
|
||||
CHARSET_INFO *scs= system_charset_info;
|
||||
KEY *key_info;
|
||||
uint key_len;
|
||||
uchar *key_buf= NULL;
|
||||
LINT_INIT(key_buf);
|
||||
|
||||
uchar *key_buf;
|
||||
DBUG_ENTER("Event_db_repository::index_read_for_db_for_i_s");
|
||||
|
||||
DBUG_PRINT("info", ("Using prefix scanning on PK"));
|
||||
|
97
sql/field.cc
97
sql/field.cc
@@ -1246,11 +1246,23 @@ double Field::pos_in_interval_val_str(Field *min, Field *max, uint data_offset)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
This handles all numeric and BIT data types.
|
||||
*/
|
||||
bool Field::can_optimize_keypart_ref(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
DBUG_ASSERT(cmp_type() != STRING_RESULT);
|
||||
DBUG_ASSERT(cmp_type() != TIME_RESULT);
|
||||
return item->cmp_type() != TIME_RESULT;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
This handles all numeric and BIT data types.
|
||||
*/
|
||||
bool Field::can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item)
|
||||
const Item *const_item) const
|
||||
{
|
||||
DBUG_ASSERT(cmp_type() != STRING_RESULT);
|
||||
DBUG_ASSERT(cmp_type() != TIME_RESULT);
|
||||
@@ -5270,8 +5282,15 @@ my_decimal *Field_temporal::val_decimal(my_decimal *d)
|
||||
}
|
||||
|
||||
|
||||
bool Field_temporal::can_optimize_keypart_ref(const Item_func *cond,
|
||||
const Item *value) const
|
||||
{
|
||||
return true; // Field is of TIME_RESULT, which supersedes everything else.
|
||||
}
|
||||
|
||||
|
||||
bool Field_temporal::can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item)
|
||||
const Item *const_item) const
|
||||
{
|
||||
return true; // Field is of TIME_RESULT, which supersedes everything else.
|
||||
}
|
||||
@@ -6468,15 +6487,50 @@ uint32 Field_longstr::max_data_length() const
|
||||
}
|
||||
|
||||
|
||||
bool Field_longstr::can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item)
|
||||
bool
|
||||
Field_longstr::cmp_to_string_with_same_collation(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
// Can't use indexes when comparing a string to a number or a date
|
||||
if (const_item->cmp_type() != STRING_RESULT)
|
||||
return false;
|
||||
return item->cmp_type() == STRING_RESULT &&
|
||||
charset() == cond->compare_collation();
|
||||
}
|
||||
|
||||
// Don't use an index when comparing strings of different collations.
|
||||
return charset() == ((Item_bool_func2*) cond)->compare_collation();
|
||||
|
||||
bool
|
||||
Field_longstr::cmp_to_string_with_stricter_collation(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
return item->cmp_type() == STRING_RESULT &&
|
||||
(charset() == cond->compare_collation() ||
|
||||
cond->compare_collation()->state & MY_CS_BINSORT);
|
||||
}
|
||||
|
||||
|
||||
bool Field_longstr::can_optimize_keypart_ref(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
DBUG_ASSERT(cmp_type() == STRING_RESULT);
|
||||
return cmp_to_string_with_stricter_collation(cond, item);
|
||||
}
|
||||
|
||||
|
||||
bool Field_longstr::can_optimize_hash_join(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
DBUG_ASSERT(cmp_type() == STRING_RESULT);
|
||||
return cmp_to_string_with_same_collation(cond, item);
|
||||
}
|
||||
|
||||
|
||||
bool Field_longstr::can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item) const
|
||||
{
|
||||
/*
|
||||
Can't use indexes when comparing a string to a number or a date
|
||||
Don't use an index when comparing strings of different collations.
|
||||
*/
|
||||
DBUG_ASSERT(cmp_type() == STRING_RESULT);
|
||||
return cmp_to_string_with_same_collation(cond, const_item);
|
||||
}
|
||||
|
||||
|
||||
@@ -8489,6 +8543,31 @@ uint Field_num::is_equal(Create_field *new_field)
|
||||
}
|
||||
|
||||
|
||||
bool Field_enum::can_optimize_keypart_ref(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
DBUG_ASSERT(cmp_type() == INT_RESULT);
|
||||
DBUG_ASSERT(result_type() == STRING_RESULT);
|
||||
|
||||
switch (item->cmp_type())
|
||||
{
|
||||
case TIME_RESULT:
|
||||
return false;
|
||||
case INT_RESULT:
|
||||
case DECIMAL_RESULT:
|
||||
case REAL_RESULT:
|
||||
return true;
|
||||
case STRING_RESULT:
|
||||
return charset() == ((Item_func*)cond)->compare_collation();
|
||||
case IMPOSSIBLE_RESULT:
|
||||
case ROW_RESULT:
|
||||
DBUG_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Bit field.
|
||||
|
||||
|
38
sql/field.h
38
sql/field.h
@@ -39,6 +39,7 @@ class Relay_log_info;
|
||||
class Field;
|
||||
class Column_statistics;
|
||||
class Column_statistics_collected;
|
||||
class Item_func;
|
||||
class Item_bool_func2;
|
||||
|
||||
enum enum_check_fields
|
||||
@@ -964,9 +965,21 @@ public:
|
||||
return (double) 0.5;
|
||||
}
|
||||
|
||||
virtual bool can_optimize_keypart_ref(const Item_func *cond,
|
||||
const Item *item) const;
|
||||
virtual bool can_optimize_hash_join(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
return can_optimize_keypart_ref(cond, item);
|
||||
}
|
||||
virtual bool can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item);
|
||||
|
||||
const Item *const_item) const;
|
||||
bool can_optimize_outer_join_table_elimination(const Item_func *cond,
|
||||
const Item *item) const
|
||||
{
|
||||
// Exactly the same rules with REF access
|
||||
return can_optimize_keypart_ref(cond, item);
|
||||
}
|
||||
friend int cre_myisam(char * name, register TABLE *form, uint options,
|
||||
ulonglong auto_increment_value);
|
||||
friend class Copy_field;
|
||||
@@ -1147,6 +1160,10 @@ protected:
|
||||
return report_if_important_data(copier->source_end_pos(),
|
||||
end, count_spaces);
|
||||
}
|
||||
bool cmp_to_string_with_same_collation(const Item_func *cond,
|
||||
const Item *item) const;
|
||||
bool cmp_to_string_with_stricter_collation(const Item_func *cond,
|
||||
const Item *item) const;
|
||||
public:
|
||||
Field_longstr(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
||||
uchar null_bit_arg, utype unireg_check_arg,
|
||||
@@ -1158,8 +1175,10 @@ public:
|
||||
int store_decimal(const my_decimal *d);
|
||||
uint32 max_data_length() const;
|
||||
bool match_collation_to_optimize_range() const { return true; }
|
||||
bool can_optimize_keypart_ref(const Item_func *cond, const Item *item) const;
|
||||
bool can_optimize_hash_join(const Item_func *cond, const Item *item) const;
|
||||
bool can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item);
|
||||
const Item *const_item) const;
|
||||
};
|
||||
|
||||
/* base class for float and double and decimal (old one) */
|
||||
@@ -1587,8 +1606,13 @@ public:
|
||||
uint size_of() const { return sizeof(*this); }
|
||||
uint32 max_display_length() { return 4; }
|
||||
void move_field_offset(my_ptrdiff_t ptr_diff) {}
|
||||
bool can_optimize_keypart_ref(const Item_func *cond, const Item *item) const
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
return false;
|
||||
}
|
||||
bool can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item)
|
||||
const Item *const_item) const
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
return false;
|
||||
@@ -1625,8 +1649,9 @@ public:
|
||||
{
|
||||
return pos_in_interval_val_real(min, max);
|
||||
}
|
||||
bool can_optimize_keypart_ref(const Item_func *cond, const Item *item) const;
|
||||
bool can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item);
|
||||
const Item *const_item) const;
|
||||
};
|
||||
|
||||
|
||||
@@ -2664,8 +2689,9 @@ public:
|
||||
virtual const uchar *unpack(uchar *to, const uchar *from,
|
||||
const uchar *from_end, uint param_data);
|
||||
|
||||
bool can_optimize_keypart_ref(const Item_func *cond, const Item *item) const;
|
||||
bool can_optimize_group_min_max(const Item_bool_func2 *cond,
|
||||
const Item *const_item)
|
||||
const Item *const_item) const
|
||||
{
|
||||
/*
|
||||
Can't use GROUP_MIN_MAX optimization for ENUM and SET,
|
||||
|
@@ -300,10 +300,10 @@ int Gcalc_function::check_function(Gcalc_scan_iterator &scan_it)
|
||||
gcalc_shape_info si= events->get_shape();
|
||||
if (events->event == scev_thread ||
|
||||
events->event == scev_end ||
|
||||
events->event == scev_single_point ||
|
||||
(get_shape_kind(si) == Gcalc_function::shape_polygon))
|
||||
set_b_state(si);
|
||||
else if (get_shape_kind(si) == Gcalc_function::shape_line)
|
||||
else if (events->event == scev_single_point ||
|
||||
get_shape_kind(si) == Gcalc_function::shape_line)
|
||||
set_i_state(si);
|
||||
}
|
||||
|
||||
|
@@ -1932,12 +1932,28 @@ int ha_recover(HASH *commit_list)
|
||||
so mysql_xa_recover does not filter XID's to ensure uniqueness.
|
||||
It can be easily fixed later, if necessary.
|
||||
*/
|
||||
|
||||
static my_bool xa_recover_callback(XID_STATE *xs, Protocol *protocol)
|
||||
{
|
||||
if (xs->xa_state == XA_PREPARED)
|
||||
{
|
||||
protocol->prepare_for_resend();
|
||||
protocol->store_longlong((longlong) xs->xid.formatID, FALSE);
|
||||
protocol->store_longlong((longlong) xs->xid.gtrid_length, FALSE);
|
||||
protocol->store_longlong((longlong) xs->xid.bqual_length, FALSE);
|
||||
protocol->store(xs->xid.data, xs->xid.gtrid_length + xs->xid.bqual_length,
|
||||
&my_charset_bin);
|
||||
if (protocol->write())
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
bool mysql_xa_recover(THD *thd)
|
||||
{
|
||||
List<Item> field_list;
|
||||
Protocol *protocol= thd->protocol;
|
||||
int i=0;
|
||||
XID_STATE *xs;
|
||||
DBUG_ENTER("mysql_xa_recover");
|
||||
|
||||
field_list.push_back(new Item_int("formatID", 0, MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
@@ -1949,26 +1965,9 @@ bool mysql_xa_recover(THD *thd)
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
mysql_mutex_lock(&LOCK_xid_cache);
|
||||
while ((xs= (XID_STATE*) my_hash_element(&xid_cache, i++)))
|
||||
{
|
||||
if (xs->xa_state==XA_PREPARED)
|
||||
{
|
||||
protocol->prepare_for_resend();
|
||||
protocol->store_longlong((longlong)xs->xid.formatID, FALSE);
|
||||
protocol->store_longlong((longlong)xs->xid.gtrid_length, FALSE);
|
||||
protocol->store_longlong((longlong)xs->xid.bqual_length, FALSE);
|
||||
protocol->store(xs->xid.data, xs->xid.gtrid_length+xs->xid.bqual_length,
|
||||
&my_charset_bin);
|
||||
if (protocol->write())
|
||||
{
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
if (xid_cache_iterate(thd, (my_hash_walk_action) xa_recover_callback,
|
||||
protocol))
|
||||
DBUG_RETURN(1);
|
||||
my_eof(thd);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
@@ -5418,8 +5417,7 @@ int handler::index_read_idx_map(uchar * buf, uint index, const uchar * key,
|
||||
key_part_map keypart_map,
|
||||
enum ha_rkey_function find_flag)
|
||||
{
|
||||
int error, error1;
|
||||
LINT_INIT(error1);
|
||||
int error, UNINIT_VAR(error1);
|
||||
|
||||
error= ha_index_init(index, 0);
|
||||
if (!error)
|
||||
|
@@ -612,11 +612,11 @@ struct xid_t {
|
||||
return sizeof(formatID)+sizeof(gtrid_length)+sizeof(bqual_length)+
|
||||
gtrid_length+bqual_length;
|
||||
}
|
||||
uchar *key()
|
||||
uchar *key() const
|
||||
{
|
||||
return (uchar *)>rid_length;
|
||||
}
|
||||
uint key_length()
|
||||
uint key_length() const
|
||||
{
|
||||
return sizeof(gtrid_length)+sizeof(bqual_length)+gtrid_length+bqual_length;
|
||||
}
|
||||
|
@@ -1136,7 +1136,7 @@ public:
|
||||
virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); }
|
||||
|
||||
static CHARSET_INFO *default_charset();
|
||||
virtual CHARSET_INFO *compare_collation() { return NULL; }
|
||||
virtual CHARSET_INFO *compare_collation() const { return NULL; }
|
||||
|
||||
/*
|
||||
For backward compatibility, to make numeric
|
||||
|
@@ -470,8 +470,7 @@ static bool convert_const_to_int(THD *thd, Item_field *field_item,
|
||||
my_bitmap_map *old_maps[2];
|
||||
ulonglong UNINIT_VAR(orig_field_val); /* original field value if valid */
|
||||
|
||||
LINT_INIT(old_maps[0]);
|
||||
LINT_INIT(old_maps[1]);
|
||||
LINT_INIT_STRUCT(old_maps);
|
||||
|
||||
/* table->read_set may not be set if we come here from a CREATE TABLE */
|
||||
if (table && table->read_set)
|
||||
@@ -6279,9 +6278,9 @@ void Item_equal::print(String *str, enum_query_type query_type)
|
||||
}
|
||||
|
||||
|
||||
CHARSET_INFO *Item_equal::compare_collation()
|
||||
CHARSET_INFO *Item_equal::compare_collation() const
|
||||
{
|
||||
Item_equal_fields_iterator it(*this);
|
||||
Item_equal_fields_iterator it(*((Item_equal*) this));
|
||||
Item *item= it++;
|
||||
return item->collation.collation;
|
||||
}
|
||||
|
@@ -399,7 +399,8 @@ public:
|
||||
}
|
||||
|
||||
bool is_null() { return MY_TEST(args[0]->is_null() || args[1]->is_null()); }
|
||||
CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const
|
||||
{ return cmp.cmp_collation.collation; }
|
||||
void top_level_item() { abort_on_null= TRUE; }
|
||||
Arg_comparator *get_comparator() { return &cmp; }
|
||||
void cleanup()
|
||||
@@ -700,7 +701,7 @@ public:
|
||||
bool fix_fields(THD *, Item **);
|
||||
void fix_length_and_dec();
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const { return cmp_collation.collation; }
|
||||
bool eval_not_null_tables(uchar *opt_arg);
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref);
|
||||
bool count_sargable_conds(uchar *arg);
|
||||
@@ -1319,7 +1320,7 @@ public:
|
||||
const char *func_name() const { return "case"; }
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item *find_item(String *str);
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const { return cmp_collation.collation; }
|
||||
void cleanup();
|
||||
void agg_str_lengths(Item *arg);
|
||||
void agg_num_lengths(Item *arg);
|
||||
@@ -1388,7 +1389,7 @@ public:
|
||||
enum Functype functype() const { return IN_FUNC; }
|
||||
const char *func_name() const { return " IN "; }
|
||||
bool nulls_in_row();
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const { return cmp_collation.collation; }
|
||||
bool eval_not_null_tables(uchar *opt_arg);
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref);
|
||||
};
|
||||
@@ -1428,7 +1429,8 @@ class Item_func_null_predicate :public Item_bool_func
|
||||
public:
|
||||
Item_func_null_predicate(Item *a) :Item_bool_func(a) { sargable= true; }
|
||||
optimize_type select_optimize() const { return OPTIMIZE_NULL; }
|
||||
CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const
|
||||
{ return args[0]->collation.collation; }
|
||||
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=0; }
|
||||
};
|
||||
|
||||
@@ -1574,8 +1576,7 @@ public:
|
||||
in case of a "PAD SPACE" collation, but only if "expr2" has '%'
|
||||
at the end.
|
||||
*/
|
||||
return ((Item_func_like *)this)->compare_collation() == &my_charset_bin ?
|
||||
COND_TRUE : COND_OK;
|
||||
return compare_collation() == &my_charset_bin ? COND_TRUE : COND_OK;
|
||||
}
|
||||
const char *func_name() const { return "like"; }
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
@@ -1689,7 +1690,7 @@ public:
|
||||
print_op(str, query_type);
|
||||
}
|
||||
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
CHARSET_INFO *compare_collation() const { return cmp_collation.collation; }
|
||||
};
|
||||
|
||||
|
||||
@@ -1952,7 +1953,7 @@ public:
|
||||
bool walk(Item_processor processor, bool walk_subquery, uchar *arg);
|
||||
Item *transform(Item_transformer transformer, uchar *arg);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
CHARSET_INFO *compare_collation();
|
||||
CHARSET_INFO *compare_collation() const;
|
||||
|
||||
void set_context_field(Item_field *ctx_field) { context_field= ctx_field; }
|
||||
void set_link_equal_fields(bool flag) { link_equal_fields= flag; }
|
||||
|
@@ -5992,6 +5992,18 @@ static Native_func_registry func_array[] =
|
||||
{ { C_STRING_WITH_LEN("ST_LINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_LINESTRINGFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_LINESTRINGFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MLINEFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MLINEFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MPOINTFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MPOINTFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MPOLYFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MPOLYFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTILINESTRINGFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTILINESTRINGFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTIPOINTFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTIPOINTFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTIPOLYGONFROMTEXT") }, GEOM_BUILDER(Create_func_geometry_from_text)},
|
||||
{ { C_STRING_WITH_LEN("ST_MULTIPOLYGONFROMWKB") }, GEOM_BUILDER(Create_func_geometry_from_wkb)},
|
||||
{ { C_STRING_WITH_LEN("ST_NUMGEOMETRIES") }, GEOM_BUILDER(Create_func_numgeometries)},
|
||||
{ { C_STRING_WITH_LEN("ST_NUMINTERIORRINGS") }, GEOM_BUILDER(Create_func_numinteriorring)},
|
||||
{ { C_STRING_WITH_LEN("ST_NUMPOINTS") }, GEOM_BUILDER(Create_func_numpoints)},
|
||||
|
@@ -1081,9 +1081,9 @@ static Gcalc_function::op_type op_matrix(int n)
|
||||
switch (n)
|
||||
{
|
||||
case 0:
|
||||
return Gcalc_function::op_border;
|
||||
case 1:
|
||||
return Gcalc_function::op_internals;
|
||||
case 1:
|
||||
return Gcalc_function::op_border;
|
||||
case 2:
|
||||
return (Gcalc_function::op_type)
|
||||
((int) Gcalc_function::op_not | (int) Gcalc_function::op_union);
|
||||
@@ -1103,6 +1103,8 @@ static int setup_relate_func(Geometry *g1, Geometry *g2,
|
||||
int last_shape_pos;
|
||||
|
||||
last_shape_pos= func->get_next_expression_pos();
|
||||
if (func->reserve_op_buffer(1))
|
||||
return 1;
|
||||
func->add_operation(Gcalc_function::op_intersection, 0);
|
||||
for (int nc=0; nc<9; nc++)
|
||||
{
|
||||
@@ -1120,11 +1122,11 @@ static int setup_relate_func(Geometry *g1, Geometry *g2,
|
||||
cur_op|= Gcalc_function::v_find_t;
|
||||
break;
|
||||
case 'F':
|
||||
cur_op|= Gcalc_function::v_find_f;
|
||||
cur_op|= (Gcalc_function::op_not | Gcalc_function::v_find_t);
|
||||
break;
|
||||
};
|
||||
++n_operands;
|
||||
if (func->reserve_op_buffer(1))
|
||||
if (func->reserve_op_buffer(3))
|
||||
return 1;
|
||||
func->add_operation(cur_op, 2);
|
||||
|
||||
@@ -1867,7 +1869,6 @@ longlong Item_func_issimple::val_int()
|
||||
Gcalc_operation_transporter trn(&func, &collector);
|
||||
Geometry *g;
|
||||
int result= 1;
|
||||
const Gcalc_scan_iterator::event_point *ev;
|
||||
MBR mbr;
|
||||
const char *c_end;
|
||||
|
||||
@@ -1892,6 +1893,8 @@ longlong Item_func_issimple::val_int()
|
||||
|
||||
while (scan_it.more_points())
|
||||
{
|
||||
const Gcalc_scan_iterator::event_point *ev, *next_ev;
|
||||
|
||||
if (scan_it.step())
|
||||
goto mem_error;
|
||||
|
||||
@@ -1899,11 +1902,18 @@ longlong Item_func_issimple::val_int()
|
||||
if (ev->simple_event())
|
||||
continue;
|
||||
|
||||
if ((ev->event == scev_thread || ev->event == scev_single_point) &&
|
||||
!ev->get_next())
|
||||
next_ev= ev->get_next();
|
||||
if ((ev->event & (scev_thread | scev_single_point)) && !next_ev)
|
||||
continue;
|
||||
|
||||
if (ev->event == scev_two_threads && !ev->get_next()->get_next())
|
||||
if ((ev->event == scev_two_threads) && !next_ev->get_next())
|
||||
continue;
|
||||
|
||||
/* If the first and last points of a curve coincide - that is */
|
||||
/* an exception to the rule and the line is considered as simple. */
|
||||
if ((next_ev && !next_ev->get_next()) &&
|
||||
(ev->event & (scev_thread | scev_end)) &&
|
||||
(next_ev->event & (scev_thread | scev_end)))
|
||||
continue;
|
||||
|
||||
result= 0;
|
||||
|
@@ -1948,8 +1948,7 @@ String *Item_func_ltrim::val_str(String *str)
|
||||
char buff[MAX_FIELD_WIDTH], *ptr, *end;
|
||||
String tmp(buff,sizeof(buff),system_charset_info);
|
||||
String *res, *remove_str;
|
||||
uint remove_length;
|
||||
LINT_INIT(remove_length);
|
||||
uint UNINIT_VAR(remove_length);
|
||||
|
||||
res= args[0]->val_str(str);
|
||||
if ((null_value=args[0]->null_value))
|
||||
@@ -1994,8 +1993,7 @@ String *Item_func_rtrim::val_str(String *str)
|
||||
char buff[MAX_FIELD_WIDTH], *ptr, *end;
|
||||
String tmp(buff, sizeof(buff), system_charset_info);
|
||||
String *res, *remove_str;
|
||||
uint remove_length;
|
||||
LINT_INIT(remove_length);
|
||||
uint UNINIT_VAR(remove_length);
|
||||
|
||||
res= args[0]->val_str(str);
|
||||
if ((null_value=args[0]->null_value))
|
||||
@@ -2075,8 +2073,7 @@ String *Item_func_trim::val_str(String *str)
|
||||
const char *r_ptr;
|
||||
String tmp(buff, sizeof(buff), system_charset_info);
|
||||
String *res, *remove_str;
|
||||
uint remove_length;
|
||||
LINT_INIT(remove_length);
|
||||
uint UNINIT_VAR(remove_length);
|
||||
|
||||
res= args[0]->val_str(str);
|
||||
if ((null_value=args[0]->null_value))
|
||||
|
18
sql/key.cc
18
sql/key.cc
@@ -656,9 +656,8 @@ int key_tuple_cmp(KEY_PART_INFO *part, uchar *key1, uchar *key2,
|
||||
uint tuple_length)
|
||||
{
|
||||
uchar *key1_end= key1 + tuple_length;
|
||||
int len;
|
||||
int UNINIT_VAR(len);
|
||||
int res;
|
||||
LINT_INIT(len);
|
||||
for (;key1 < key1_end; key1 += len, key2 += len, part++)
|
||||
{
|
||||
len= part->store_length;
|
||||
@@ -709,12 +708,9 @@ ulong key_hashnr(KEY *key_info, uint used_key_parts, const uchar *key)
|
||||
for (; key_part < end_key_part; key_part++)
|
||||
{
|
||||
uchar *pos= (uchar*)key;
|
||||
CHARSET_INFO *cs;
|
||||
uint length, pack_length;
|
||||
CHARSET_INFO *UNINIT_VAR(cs);
|
||||
uint UNINIT_VAR(length), UNINIT_VAR(pack_length);
|
||||
bool is_string= TRUE;
|
||||
LINT_INIT(cs);
|
||||
LINT_INIT(length);
|
||||
LINT_INIT(pack_length);
|
||||
|
||||
key+= key_part->length;
|
||||
if (key_part->null_bit)
|
||||
@@ -816,13 +812,9 @@ bool key_buf_cmp(KEY *key_info, uint used_key_parts,
|
||||
{
|
||||
uchar *pos1= (uchar*)key1;
|
||||
uchar *pos2= (uchar*)key2;
|
||||
CHARSET_INFO *cs;
|
||||
uint length1, length2, pack_length;
|
||||
CHARSET_INFO *UNINIT_VAR(cs);
|
||||
uint UNINIT_VAR(length1), UNINIT_VAR(length2), UNINIT_VAR(pack_length);
|
||||
bool is_string= TRUE;
|
||||
LINT_INIT(cs);
|
||||
LINT_INIT(length1);
|
||||
LINT_INIT(length2);
|
||||
LINT_INIT(pack_length);
|
||||
|
||||
key1+= key_part->length;
|
||||
key2+= key_part->length;
|
||||
|
18
sql/log.cc
18
sql/log.cc
@@ -1502,8 +1502,7 @@ bool LOGGER::activate_log_handler(THD* thd, uint log_type)
|
||||
void LOGGER::deactivate_log_handler(THD *thd, uint log_type)
|
||||
{
|
||||
my_bool *tmp_opt= 0;
|
||||
MYSQL_LOG *file_log;
|
||||
LINT_INIT(file_log);
|
||||
MYSQL_LOG *UNINIT_VAR(file_log);
|
||||
|
||||
switch (log_type) {
|
||||
case QUERY_LOG_SLOW:
|
||||
@@ -4878,8 +4877,7 @@ int MYSQL_BIN_LOG::new_file_impl(bool need_lock)
|
||||
char new_name[FN_REFLEN], *new_name_ptr, *old_name, *file_to_open;
|
||||
uint close_flag;
|
||||
bool delay_close= false;
|
||||
File old_file;
|
||||
LINT_INIT(old_file);
|
||||
File UNINIT_VAR(old_file);
|
||||
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::new_file_impl");
|
||||
if (!is_open())
|
||||
@@ -5873,9 +5871,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
||||
bool is_trans_cache= FALSE;
|
||||
bool using_trans= event_info->use_trans_cache();
|
||||
bool direct= event_info->use_direct_logging();
|
||||
ulong prev_binlog_id;
|
||||
ulong UNINIT_VAR(prev_binlog_id);
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::write(Log_event *)");
|
||||
LINT_INIT(prev_binlog_id);
|
||||
|
||||
if (thd->variables.option_bits & OPTION_GTID_BEGIN)
|
||||
{
|
||||
@@ -7316,10 +7313,9 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
|
||||
group_commit_entry *current, *last_in_queue;
|
||||
group_commit_entry *queue= NULL;
|
||||
bool check_purge= false;
|
||||
ulong binlog_id;
|
||||
ulong UNINIT_VAR(binlog_id);
|
||||
uint64 commit_id;
|
||||
DBUG_ENTER("MYSQL_BIN_LOG::trx_group_commit_leader");
|
||||
LINT_INIT(binlog_id);
|
||||
|
||||
{
|
||||
DBUG_EXECUTE_IF("inject_binlog_commit_before_get_LOCK_log",
|
||||
@@ -8297,8 +8293,7 @@ int TC_LOG_MMAP::log_and_order(THD *thd, my_xid xid, bool all,
|
||||
{
|
||||
int cookie;
|
||||
struct commit_entry entry;
|
||||
bool is_group_commit_leader;
|
||||
LINT_INIT(is_group_commit_leader);
|
||||
bool UNINIT_VAR(is_group_commit_leader);
|
||||
|
||||
if (need_prepare_ordered)
|
||||
{
|
||||
@@ -9794,8 +9789,7 @@ binlog_checksum_update(MYSQL_THD thd, struct st_mysql_sys_var *var,
|
||||
{
|
||||
ulong value= *((ulong *)save);
|
||||
bool check_purge= false;
|
||||
ulong prev_binlog_id;
|
||||
LINT_INIT(prev_binlog_id);
|
||||
ulong UNINIT_VAR(prev_binlog_id);
|
||||
|
||||
mysql_mutex_lock(mysql_bin_log.get_log_lock());
|
||||
if(mysql_bin_log.is_open())
|
||||
|
@@ -7063,8 +7063,7 @@ bool Intvar_log_event::write(IO_CACHE* file)
|
||||
void Intvar_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
||||
{
|
||||
char llbuff[22];
|
||||
const char *msg;
|
||||
LINT_INIT(msg);
|
||||
const char *UNINIT_VAR(msg);
|
||||
Write_on_release_cache cache(&print_event_info->head_cache, file,
|
||||
Write_on_release_cache::FLUSH_F);
|
||||
|
||||
@@ -11709,14 +11708,12 @@ record_compare_exit:
|
||||
int Rows_log_event::find_key()
|
||||
{
|
||||
uint i, best_key_nr, last_part;
|
||||
KEY *key, *best_key;
|
||||
ulong best_rec_per_key, tmp;
|
||||
KEY *key, *UNINIT_VAR(best_key);
|
||||
ulong UNINIT_VAR(best_rec_per_key), tmp;
|
||||
DBUG_ENTER("Rows_log_event::find_key");
|
||||
DBUG_ASSERT(m_table);
|
||||
|
||||
best_key_nr= MAX_KEY;
|
||||
LINT_INIT(best_key);
|
||||
LINT_INIT(best_rec_per_key);
|
||||
|
||||
/*
|
||||
Keys are sorted so that any primary key is first, followed by unique keys,
|
||||
|
@@ -817,12 +817,11 @@ int DsMrr_impl::dsmrr_init(handler *h_arg, RANGE_SEQ_IF *seq_funcs,
|
||||
THD *thd= current_thd;
|
||||
int res;
|
||||
Key_parameters keypar;
|
||||
uint key_buff_elem_size;
|
||||
uint UNINIT_VAR(key_buff_elem_size); /* set/used when do_sort_keys==TRUE */
|
||||
handler *h_idx;
|
||||
Mrr_ordered_rndpos_reader *disk_strategy= NULL;
|
||||
bool do_sort_keys= FALSE;
|
||||
DBUG_ENTER("DsMrr_impl::dsmrr_init");
|
||||
LINT_INIT(key_buff_elem_size); /* set/used when do_sort_keys==TRUE */
|
||||
/*
|
||||
index_merge may invoke a scan on an object for which dsmrr_info[_const]
|
||||
has not been called, so set the owner handler here as well.
|
||||
|
@@ -1540,8 +1540,7 @@ static void close_connections(void)
|
||||
while (select_thread_in_use)
|
||||
{
|
||||
struct timespec abstime;
|
||||
int error;
|
||||
LINT_INIT(error);
|
||||
int UNINIT_VAR(error);
|
||||
DBUG_PRINT("info",("Waiting for select thread"));
|
||||
|
||||
#ifndef DONT_USE_THR_ALARM
|
||||
@@ -4890,11 +4889,7 @@ static int init_server_components()
|
||||
my_charset_error_reporter= charset_error_reporter;
|
||||
#endif
|
||||
|
||||
if (xid_cache_init())
|
||||
{
|
||||
sql_print_error("Out of memory");
|
||||
unireg_abort(1);
|
||||
}
|
||||
xid_cache_init();
|
||||
|
||||
/*
|
||||
initialize delegates for extension observers, errors have already
|
||||
@@ -7533,8 +7528,7 @@ static int show_slave_running(THD *thd, SHOW_VAR *var, char *buff,
|
||||
enum enum_var_type scope)
|
||||
{
|
||||
Master_info *mi= NULL;
|
||||
bool tmp;
|
||||
LINT_INIT(tmp);
|
||||
bool UNINIT_VAR(tmp);
|
||||
|
||||
var->type= SHOW_MY_BOOL;
|
||||
var->value= buff;
|
||||
@@ -7561,8 +7555,7 @@ static int show_slave_received_heartbeats(THD *thd, SHOW_VAR *var, char *buff,
|
||||
enum enum_var_type scope)
|
||||
{
|
||||
Master_info *mi= NULL;
|
||||
longlong tmp;
|
||||
LINT_INIT(tmp);
|
||||
longlong UNINIT_VAR(tmp);
|
||||
|
||||
var->type= SHOW_LONGLONG;
|
||||
var->value= buff;
|
||||
@@ -7588,8 +7581,7 @@ static int show_heartbeat_period(THD *thd, SHOW_VAR *var, char *buff,
|
||||
enum enum_var_type scope)
|
||||
{
|
||||
Master_info *mi= NULL;
|
||||
float tmp;
|
||||
LINT_INIT(tmp);
|
||||
float UNINIT_VAR(tmp);
|
||||
|
||||
var->type= SHOW_CHAR;
|
||||
var->value= buff;
|
||||
|
@@ -3235,8 +3235,8 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
{
|
||||
/* Try creating index_merge/ROR-union scan. */
|
||||
SEL_IMERGE *imerge;
|
||||
TABLE_READ_PLAN *best_conj_trp= NULL, *new_conj_trp;
|
||||
LINT_INIT(new_conj_trp); /* no empty index_merge lists possible */
|
||||
TABLE_READ_PLAN *best_conj_trp= NULL,
|
||||
*UNINIT_VAR(new_conj_trp); /* no empty index_merge lists possible */
|
||||
DBUG_PRINT("info",("No range reads possible,"
|
||||
" trying to construct index_merge"));
|
||||
List_iterator_fast<SEL_IMERGE> it(tree->merges);
|
||||
|
@@ -3288,8 +3288,7 @@ void fix_semijoin_strategies_for_picked_join_order(JOIN *join)
|
||||
{
|
||||
POSITION *pos= join->best_positions + tablenr;
|
||||
JOIN_TAB *s= pos->table;
|
||||
uint first;
|
||||
LINT_INIT(first); // Set by every branch except SJ_OPT_NONE which doesn't use it
|
||||
uint UNINIT_VAR(first); // Set by every branch except SJ_OPT_NONE which doesn't use it
|
||||
|
||||
if ((handled_tabs & s->table->map) || pos->sj_strategy == SJ_OPT_NONE)
|
||||
{
|
||||
|
@@ -1486,28 +1486,8 @@ void check_equality(Dep_analysis_context *ctx, Dep_module_expr **eq_mod,
|
||||
left->real_item()->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
Field *field= ((Item_field*)left->real_item())->field;
|
||||
if (right->cmp_type() == TIME_RESULT && field->cmp_type() != TIME_RESULT)
|
||||
if (!field->can_optimize_outer_join_table_elimination(cond, right))
|
||||
return;
|
||||
if (field->result_type() == STRING_RESULT)
|
||||
{
|
||||
if (right->result_type() != STRING_RESULT)
|
||||
{
|
||||
if (field->cmp_type() != right->result_type())
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
We can't assume there's a functional dependency if the effective
|
||||
collation of the operation differ from the field collation.
|
||||
*/
|
||||
if ((field->cmp_type() == STRING_RESULT ||
|
||||
field->real_type() == MYSQL_TYPE_ENUM ||
|
||||
field->real_type() == MYSQL_TYPE_SET) &&
|
||||
field->charset() != cond->compare_collation())
|
||||
return;
|
||||
}
|
||||
}
|
||||
Dep_value_field *field_val;
|
||||
if ((field_val= ctx->get_field_value(field)))
|
||||
add_module_expr(ctx, eq_mod, and_level, field_val, right, NULL);
|
||||
|
@@ -2047,8 +2047,7 @@ bool partition_info::set_up_charset_field_preps()
|
||||
i= 0;
|
||||
while ((field= *(ptr++)))
|
||||
{
|
||||
uchar *field_buf;
|
||||
LINT_INIT(field_buf);
|
||||
uchar *UNINIT_VAR(field_buf);
|
||||
|
||||
if (!field_is_partition_charset(field))
|
||||
continue;
|
||||
|
@@ -3570,8 +3570,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
||||
|
||||
if (slave_trans_retries)
|
||||
{
|
||||
int temp_err;
|
||||
LINT_INIT(temp_err);
|
||||
int UNINIT_VAR(temp_err);
|
||||
if (exec_res && (temp_err= has_temporary_error(thd)))
|
||||
{
|
||||
const char *errmsg;
|
||||
|
@@ -1695,7 +1695,7 @@ bool
|
||||
sp_head::execute_function(THD *thd, Item **argp, uint argcount,
|
||||
Field *return_value_fld)
|
||||
{
|
||||
ulonglong binlog_save_options;
|
||||
ulonglong UNINIT_VAR(binlog_save_options);
|
||||
bool need_binlog_call= FALSE;
|
||||
uint arg_no;
|
||||
sp_rcontext *octx = thd->spcont;
|
||||
@@ -1709,8 +1709,6 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
|
||||
DBUG_ENTER("sp_head::execute_function");
|
||||
DBUG_PRINT("info", ("function %s", m_name.str));
|
||||
|
||||
LINT_INIT(binlog_save_options);
|
||||
|
||||
/*
|
||||
Check that the function is called with all specified arguments.
|
||||
|
||||
|
@@ -11701,7 +11701,6 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
|
||||
char *passwd= strend(user)+1;
|
||||
uint user_len= passwd - user - 1, db_len;
|
||||
char *db= passwd;
|
||||
char db_buff[SAFE_NAME_LEN + 1]; // buffer to store db in utf8
|
||||
char user_buff[USERNAME_LENGTH + 1]; // buffer to store user in utf8
|
||||
uint dummy_errors;
|
||||
|
||||
@@ -11738,12 +11737,9 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
|
||||
char *client_plugin= next_field= passwd + passwd_len + (db ? db_len + 1 : 0);
|
||||
|
||||
/* Since 4.1 all database names are stored in utf8 */
|
||||
if (db)
|
||||
{
|
||||
db_len= copy_and_convert(db_buff, sizeof(db_buff) - 1, system_charset_info,
|
||||
db, db_len, thd->charset(), &dummy_errors);
|
||||
db= db_buff;
|
||||
}
|
||||
if (thd->copy_with_error(system_charset_info, &mpvio->db,
|
||||
thd->charset(), db, db_len))
|
||||
return packet_error;
|
||||
|
||||
user_len= copy_and_convert(user_buff, sizeof(user_buff) - 1,
|
||||
system_charset_info, user, user_len,
|
||||
@@ -11773,8 +11769,6 @@ static ulong parse_client_handshake_packet(MPVIO_EXT *mpvio,
|
||||
|
||||
Security_context *sctx= thd->security_ctx;
|
||||
|
||||
if (thd->make_lex_string(&mpvio->db, db, db_len) == 0)
|
||||
return packet_error; /* The error is set by make_lex_string(). */
|
||||
my_free(sctx->user);
|
||||
if (!(sctx->user= my_strndup(user, user_len, MYF(MY_WME))))
|
||||
return packet_error; /* The error is set by my_strdup(). */
|
||||
|
@@ -6071,17 +6071,14 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
|
||||
List_iterator_fast<Natural_join_column>
|
||||
field_it(*(table_ref->join_columns));
|
||||
Natural_join_column *nj_col, *curr_nj_col;
|
||||
Field *found_field;
|
||||
Query_arena *arena, backup;
|
||||
Field *UNINIT_VAR(found_field);
|
||||
Query_arena *UNINIT_VAR(arena), backup;
|
||||
DBUG_ENTER("find_field_in_natural_join");
|
||||
DBUG_PRINT("enter", ("field name: '%s', ref 0x%lx",
|
||||
name, (ulong) ref));
|
||||
DBUG_ASSERT(table_ref->is_natural_join && table_ref->join_columns);
|
||||
DBUG_ASSERT(*actual_table == NULL);
|
||||
|
||||
LINT_INIT(arena);
|
||||
LINT_INIT(found_field);
|
||||
|
||||
for (nj_col= NULL, curr_nj_col= field_it++; curr_nj_col;
|
||||
curr_nj_col= field_it++)
|
||||
{
|
||||
@@ -6101,7 +6098,6 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
|
||||
if (nj_col->view_field)
|
||||
{
|
||||
Item *item;
|
||||
LINT_INIT(arena);
|
||||
if (register_tree_change)
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
/*
|
||||
|
348
sql/sql_class.cc
348
sql/sql_class.cc
@@ -914,7 +914,8 @@ THD::THD(bool is_wsrep_applier)
|
||||
wait_for_commit_ptr(0),
|
||||
main_da(0, false, false),
|
||||
m_stmt_da(&main_da),
|
||||
tdc_hash_pins(0)
|
||||
tdc_hash_pins(0),
|
||||
xid_hash_pins(0)
|
||||
#ifdef WITH_WSREP
|
||||
,
|
||||
wsrep_applier(is_wsrep_applier),
|
||||
@@ -1593,7 +1594,7 @@ void THD::cleanup(void)
|
||||
|
||||
transaction.xid_state.xa_state= XA_NOTR;
|
||||
trans_rollback(this);
|
||||
xid_cache_delete(&transaction.xid_state);
|
||||
xid_cache_delete(this, &transaction.xid_state);
|
||||
|
||||
DBUG_ASSERT(open_tables == NULL);
|
||||
/*
|
||||
@@ -1704,6 +1705,8 @@ THD::~THD()
|
||||
main_da.free_memory();
|
||||
if (tdc_hash_pins)
|
||||
lf_hash_put_pins(tdc_hash_pins);
|
||||
if (xid_hash_pins)
|
||||
lf_hash_put_pins(xid_hash_pins);
|
||||
/* Ensure everything is freed */
|
||||
if (status_var.local_memory_used != 0)
|
||||
{
|
||||
@@ -2228,18 +2231,88 @@ bool THD::convert_string(LEX_STRING *to, CHARSET_INFO *to_cs,
|
||||
const char *from, uint from_length,
|
||||
CHARSET_INFO *from_cs)
|
||||
{
|
||||
DBUG_ENTER("convert_string");
|
||||
DBUG_ENTER("THD::convert_string");
|
||||
size_t new_length= to_cs->mbmaxlen * from_length;
|
||||
uint dummy_errors;
|
||||
if (!(to->str= (char*) alloc(new_length+1)))
|
||||
{
|
||||
to->length= 0; // Safety fix
|
||||
DBUG_RETURN(1); // EOM
|
||||
}
|
||||
if (alloc_lex_string(to, new_length + 1))
|
||||
DBUG_RETURN(true); // EOM
|
||||
to->length= copy_and_convert((char*) to->str, new_length, to_cs,
|
||||
from, from_length, from_cs, &dummy_errors);
|
||||
to->str[to->length]=0; // Safety
|
||||
DBUG_RETURN(0);
|
||||
to->str[to->length]= 0; // Safety
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Convert a string between two character sets.
|
||||
dstcs and srccs cannot be &my_charset_bin.
|
||||
*/
|
||||
bool THD::convert_fix(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs, const char *src, uint src_length,
|
||||
String_copier *status)
|
||||
{
|
||||
DBUG_ENTER("THD::convert_fix");
|
||||
size_t dst_length= dstcs->mbmaxlen * src_length;
|
||||
if (alloc_lex_string(dst, dst_length + 1))
|
||||
DBUG_RETURN(true); // EOM
|
||||
dst->length= status->convert_fix(dstcs, (char*) dst->str, dst_length,
|
||||
srccs, src, src_length, src_length);
|
||||
dst->str[dst->length]= 0; // Safety
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Copy or convert a string.
|
||||
*/
|
||||
bool THD::copy_fix(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs, const char *src, uint src_length,
|
||||
String_copier *status)
|
||||
{
|
||||
DBUG_ENTER("THD::copy_fix");
|
||||
size_t dst_length= dstcs->mbmaxlen * src_length;
|
||||
if (alloc_lex_string(dst, dst_length + 1))
|
||||
DBUG_RETURN(true); // EOM
|
||||
dst->length= status->well_formed_copy(dstcs, dst->str, dst_length,
|
||||
srccs, src, src_length, src_length);
|
||||
dst->str[dst->length]= '\0';
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
||||
|
||||
class String_copier_with_error: public String_copier
|
||||
{
|
||||
public:
|
||||
bool check_errors(CHARSET_INFO *srccs, const char *src, uint src_length)
|
||||
{
|
||||
if (most_important_error_pos())
|
||||
{
|
||||
ErrConvString err(src, src_length, &my_charset_bin);
|
||||
my_error(ER_INVALID_CHARACTER_STRING, MYF(0), srccs->csname, err.ptr());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
bool THD::convert_with_error(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs,
|
||||
const char *src, uint src_length)
|
||||
{
|
||||
String_copier_with_error status;
|
||||
return convert_fix(dstcs, dst, srccs, src, src_length, &status) ||
|
||||
status.check_errors(srccs, src, src_length);
|
||||
}
|
||||
|
||||
|
||||
bool THD::copy_with_error(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs,
|
||||
const char *src, uint src_length)
|
||||
{
|
||||
String_copier_with_error status;
|
||||
return copy_fix(dstcs, dst, srccs, src, src_length, &status) ||
|
||||
status.check_errors(srccs, src, src_length);
|
||||
}
|
||||
|
||||
|
||||
@@ -5106,120 +5179,233 @@ void mark_transaction_to_rollback(THD *thd, bool all)
|
||||
/***************************************************************************
|
||||
Handling of XA id cacheing
|
||||
***************************************************************************/
|
||||
|
||||
mysql_mutex_t LOCK_xid_cache;
|
||||
HASH xid_cache;
|
||||
|
||||
extern "C" uchar *xid_get_hash_key(const uchar *, size_t *, my_bool);
|
||||
extern "C" void xid_free_hash(void *);
|
||||
|
||||
uchar *xid_get_hash_key(const uchar *ptr, size_t *length,
|
||||
my_bool not_used __attribute__((unused)))
|
||||
class XID_cache_element
|
||||
{
|
||||
*length=((XID_STATE*)ptr)->xid.key_length();
|
||||
return ((XID_STATE*)ptr)->xid.key();
|
||||
}
|
||||
/*
|
||||
bits 1..30 are reference counter
|
||||
bit 31 is UNINITIALIZED flag
|
||||
bit 32 is unused
|
||||
|
||||
void xid_free_hash(void *ptr)
|
||||
{
|
||||
if (!((XID_STATE*)ptr)->in_thd)
|
||||
my_free(ptr);
|
||||
}
|
||||
Newly allocated and deleted elements have UNINITIALIZED flag set.
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
static PSI_mutex_key key_LOCK_xid_cache;
|
||||
On lock() m_state is atomically incremented. It also creates load-ACQUIRE
|
||||
memory barrier to make sure m_state is actually updated before furhter
|
||||
memory accesses. Attempting to lock UNINITIALIED element returns failure
|
||||
and further accesses to element memory are forbidden.
|
||||
|
||||
static PSI_mutex_info all_xid_mutexes[]=
|
||||
{
|
||||
{ &key_LOCK_xid_cache, "LOCK_xid_cache", PSI_FLAG_GLOBAL}
|
||||
On unlock() m_state is decremented. It also creates store-RELEASE memory
|
||||
barrier to make sure m_state is actually updated after preceding memory
|
||||
accesses.
|
||||
|
||||
UNINITIALIZED flag is cleared upon successful insert.
|
||||
|
||||
UNINITIALIZED flag is set before delete in a spin loop, after last reference
|
||||
is released.
|
||||
|
||||
Currently m_state is only used to prevent elements from being deleted while
|
||||
XA RECOVER iterates xid cache.
|
||||
*/
|
||||
int32 m_state;
|
||||
static const int32 UNINITIALIZED= 1 << 30;
|
||||
public:
|
||||
XID_STATE *m_xid_state;
|
||||
bool lock()
|
||||
{
|
||||
if (my_atomic_add32_explicit(&m_state, 1,
|
||||
MY_MEMORY_ORDER_ACQUIRE) & UNINITIALIZED)
|
||||
{
|
||||
unlock();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void unlock()
|
||||
{
|
||||
my_atomic_add32_explicit(&m_state, -1, MY_MEMORY_ORDER_RELEASE);
|
||||
}
|
||||
void mark_uninitialized()
|
||||
{
|
||||
int32 old= 0;
|
||||
while (!my_atomic_cas32_weak_explicit(&m_state, &old, UNINITIALIZED,
|
||||
MY_MEMORY_ORDER_RELAXED,
|
||||
MY_MEMORY_ORDER_RELAXED))
|
||||
{
|
||||
old= 0;
|
||||
(void) LF_BACKOFF;
|
||||
}
|
||||
}
|
||||
void mark_initialized()
|
||||
{
|
||||
DBUG_ASSERT(m_state & UNINITIALIZED);
|
||||
my_atomic_add32_explicit(&m_state, -UNINITIALIZED, MY_MEMORY_ORDER_RELAXED);
|
||||
}
|
||||
static void lf_hash_initializer(LF_HASH *hash __attribute__((unused)),
|
||||
XID_cache_element *element,
|
||||
XID_STATE *xid_state)
|
||||
{
|
||||
element->m_xid_state= xid_state;
|
||||
xid_state->xid_cache_element= element;
|
||||
}
|
||||
static void lf_alloc_constructor(uchar *ptr)
|
||||
{
|
||||
XID_cache_element *element= (XID_cache_element*) (ptr + LF_HASH_OVERHEAD);
|
||||
element->m_state= UNINITIALIZED;
|
||||
}
|
||||
static void lf_alloc_destructor(uchar *ptr)
|
||||
{
|
||||
XID_cache_element *element= (XID_cache_element*) (ptr + LF_HASH_OVERHEAD);
|
||||
if (element->m_state != UNINITIALIZED)
|
||||
{
|
||||
DBUG_ASSERT(!element->m_xid_state->in_thd);
|
||||
my_free(element->m_xid_state);
|
||||
}
|
||||
}
|
||||
static uchar *key(const XID_cache_element *element, size_t *length,
|
||||
my_bool not_used __attribute__((unused)))
|
||||
{
|
||||
*length= element->m_xid_state->xid.key_length();
|
||||
return element->m_xid_state->xid.key();
|
||||
}
|
||||
};
|
||||
|
||||
static void init_xid_psi_keys(void)
|
||||
|
||||
static LF_HASH xid_cache;
|
||||
static bool xid_cache_inited;
|
||||
|
||||
|
||||
bool THD::fix_xid_hash_pins()
|
||||
{
|
||||
const char* category= "sql";
|
||||
int count;
|
||||
|
||||
if (PSI_server == NULL)
|
||||
return;
|
||||
|
||||
count= array_elements(all_xid_mutexes);
|
||||
PSI_server->register_mutex(category, all_xid_mutexes, count);
|
||||
if (!xid_hash_pins)
|
||||
xid_hash_pins= lf_hash_get_pins(&xid_cache);
|
||||
return !xid_hash_pins;
|
||||
}
|
||||
#endif /* HAVE_PSI_INTERFACE */
|
||||
|
||||
bool xid_cache_init()
|
||||
|
||||
void xid_cache_init()
|
||||
{
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
init_xid_psi_keys();
|
||||
#endif
|
||||
|
||||
mysql_mutex_init(key_LOCK_xid_cache, &LOCK_xid_cache, MY_MUTEX_INIT_FAST);
|
||||
return my_hash_init(&xid_cache, &my_charset_bin, 100, 0, 0,
|
||||
xid_get_hash_key, xid_free_hash, 0) != 0;
|
||||
xid_cache_inited= true;
|
||||
lf_hash_init(&xid_cache, sizeof(XID_cache_element), LF_HASH_UNIQUE, 0, 0,
|
||||
(my_hash_get_key) XID_cache_element::key, &my_charset_bin);
|
||||
xid_cache.alloc.constructor= XID_cache_element::lf_alloc_constructor;
|
||||
xid_cache.alloc.destructor= XID_cache_element::lf_alloc_destructor;
|
||||
xid_cache.initializer=
|
||||
(lf_hash_initializer) XID_cache_element::lf_hash_initializer;
|
||||
}
|
||||
|
||||
|
||||
void xid_cache_free()
|
||||
{
|
||||
if (my_hash_inited(&xid_cache))
|
||||
if (xid_cache_inited)
|
||||
{
|
||||
my_hash_free(&xid_cache);
|
||||
mysql_mutex_destroy(&LOCK_xid_cache);
|
||||
lf_hash_destroy(&xid_cache);
|
||||
xid_cache_inited= false;
|
||||
}
|
||||
}
|
||||
|
||||
XID_STATE *xid_cache_search(XID *xid)
|
||||
|
||||
XID_STATE *xid_cache_search(THD *thd, XID *xid)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_xid_cache);
|
||||
XID_STATE *res=(XID_STATE *)my_hash_search(&xid_cache, xid->key(),
|
||||
xid->key_length());
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
return res;
|
||||
DBUG_ASSERT(thd->xid_hash_pins);
|
||||
XID_cache_element *element=
|
||||
(XID_cache_element*) lf_hash_search(&xid_cache, thd->xid_hash_pins,
|
||||
xid->key(), xid->key_length());
|
||||
if (element)
|
||||
{
|
||||
lf_hash_search_unpin(thd->xid_hash_pins);
|
||||
return element->m_xid_state;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool xid_cache_insert(XID *xid, enum xa_states xa_state)
|
||||
{
|
||||
XID_STATE *xs;
|
||||
my_bool res;
|
||||
mysql_mutex_lock(&LOCK_xid_cache);
|
||||
if (my_hash_search(&xid_cache, xid->key(), xid->key_length()))
|
||||
res=0;
|
||||
else if (!(xs=(XID_STATE *)my_malloc(sizeof(*xs), MYF(MY_WME))))
|
||||
res=1;
|
||||
else
|
||||
LF_PINS *pins;
|
||||
int res= 1;
|
||||
|
||||
if (!(pins= lf_hash_get_pins(&xid_cache)))
|
||||
return true;
|
||||
|
||||
if ((xs= (XID_STATE*) my_malloc(sizeof(*xs), MYF(MY_WME))))
|
||||
{
|
||||
xs->xa_state=xa_state;
|
||||
xs->xid.set(xid);
|
||||
xs->in_thd=0;
|
||||
xs->rm_error=0;
|
||||
res=my_hash_insert(&xid_cache, (uchar*)xs);
|
||||
|
||||
if ((res= lf_hash_insert(&xid_cache, pins, xs)))
|
||||
my_free(xs);
|
||||
else
|
||||
xs->xid_cache_element->mark_initialized();
|
||||
if (res == 1)
|
||||
res= 0;
|
||||
}
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
lf_hash_put_pins(pins);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
bool xid_cache_insert(XID_STATE *xid_state)
|
||||
bool xid_cache_insert(THD *thd, XID_STATE *xid_state)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_xid_cache);
|
||||
if (my_hash_search(&xid_cache, xid_state->xid.key(),
|
||||
xid_state->xid.key_length()))
|
||||
{
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
my_error(ER_XAER_DUPID, MYF(0));
|
||||
if (thd->fix_xid_hash_pins())
|
||||
return true;
|
||||
|
||||
int res= lf_hash_insert(&xid_cache, thd->xid_hash_pins, xid_state);
|
||||
switch (res)
|
||||
{
|
||||
case 0:
|
||||
xid_state->xid_cache_element->mark_initialized();
|
||||
break;
|
||||
case 1:
|
||||
my_error(ER_XAER_DUPID, MYF(0));
|
||||
default:
|
||||
xid_state->xid_cache_element= 0;
|
||||
}
|
||||
bool res= my_hash_insert(&xid_cache, (uchar*)xid_state);
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
void xid_cache_delete(XID_STATE *xid_state)
|
||||
void xid_cache_delete(THD *thd, XID_STATE *xid_state)
|
||||
{
|
||||
mysql_mutex_lock(&LOCK_xid_cache);
|
||||
my_hash_delete(&xid_cache, (uchar *)xid_state);
|
||||
mysql_mutex_unlock(&LOCK_xid_cache);
|
||||
if (xid_state->xid_cache_element)
|
||||
{
|
||||
DBUG_ASSERT(thd->xid_hash_pins);
|
||||
xid_state->xid_cache_element->mark_uninitialized();
|
||||
lf_hash_delete(&xid_cache, thd->xid_hash_pins,
|
||||
xid_state->xid.key(), xid_state->xid.key_length());
|
||||
xid_state->xid_cache_element= 0;
|
||||
if (!xid_state->in_thd)
|
||||
my_free(xid_state);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct xid_cache_iterate_arg
|
||||
{
|
||||
my_hash_walk_action action;
|
||||
void *argument;
|
||||
};
|
||||
|
||||
static my_bool xid_cache_iterate_callback(XID_cache_element *element,
|
||||
xid_cache_iterate_arg *arg)
|
||||
{
|
||||
my_bool res= FALSE;
|
||||
if (element->lock())
|
||||
{
|
||||
res= arg->action(element->m_xid_state, arg->argument);
|
||||
element->unlock();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int xid_cache_iterate(THD *thd, my_hash_walk_action action, void *arg)
|
||||
{
|
||||
xid_cache_iterate_arg argument= { action, arg };
|
||||
return thd->fix_xid_hash_pins() ? -1 :
|
||||
lf_hash_iterate(&xid_cache, thd->xid_hash_pins,
|
||||
(my_hash_walk_action) xid_cache_iterate_callback,
|
||||
&argument);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1119,6 +1119,7 @@ struct st_savepoint {
|
||||
|
||||
enum xa_states {XA_NOTR=0, XA_ACTIVE, XA_IDLE, XA_PREPARED, XA_ROLLBACK_ONLY};
|
||||
extern const char *xa_state_names[];
|
||||
class XID_cache_element;
|
||||
|
||||
typedef struct st_xid_state {
|
||||
/* For now, this is only used to catch duplicated external xids */
|
||||
@@ -1127,16 +1128,16 @@ typedef struct st_xid_state {
|
||||
bool in_thd;
|
||||
/* Error reported by the Resource Manager (RM) to the Transaction Manager. */
|
||||
uint rm_error;
|
||||
XID_cache_element *xid_cache_element;
|
||||
} XID_STATE;
|
||||
|
||||
extern mysql_mutex_t LOCK_xid_cache;
|
||||
extern HASH xid_cache;
|
||||
bool xid_cache_init(void);
|
||||
void xid_cache_init(void);
|
||||
void xid_cache_free(void);
|
||||
XID_STATE *xid_cache_search(XID *xid);
|
||||
XID_STATE *xid_cache_search(THD *thd, XID *xid);
|
||||
bool xid_cache_insert(XID *xid, enum xa_states xa_state);
|
||||
bool xid_cache_insert(XID_STATE *xid_state);
|
||||
void xid_cache_delete(XID_STATE *xid_state);
|
||||
bool xid_cache_insert(THD *thd, XID_STATE *xid_state);
|
||||
void xid_cache_delete(THD *thd, XID_STATE *xid_state);
|
||||
int xid_cache_iterate(THD *thd, my_hash_walk_action action, void *argument);
|
||||
|
||||
/**
|
||||
@class Security_context
|
||||
@@ -3105,9 +3106,49 @@ public:
|
||||
return make_lex_string(lex_str, str, length);
|
||||
}
|
||||
|
||||
// Allocate LEX_STRING for character set conversion
|
||||
bool alloc_lex_string(LEX_STRING *dst, uint length)
|
||||
{
|
||||
if ((dst->str= (char*) alloc(length)))
|
||||
return false;
|
||||
dst->length= 0; // Safety
|
||||
return true; // EOM
|
||||
}
|
||||
bool convert_string(LEX_STRING *to, CHARSET_INFO *to_cs,
|
||||
const char *from, uint from_length,
|
||||
CHARSET_INFO *from_cs);
|
||||
/*
|
||||
Convert a strings between character sets.
|
||||
Uses my_convert_fix(), which uses an mb_wc .. mc_mb loop internally.
|
||||
dstcs and srccs cannot be &my_charset_bin.
|
||||
*/
|
||||
bool convert_fix(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs, const char *src, uint src_length,
|
||||
String_copier *status);
|
||||
|
||||
/*
|
||||
Same as above, but additionally sends ER_INVALID_CHARACTER_STRING
|
||||
in case of bad byte sequences or Unicode conversion problems.
|
||||
*/
|
||||
bool convert_with_error(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs,
|
||||
const char *src, uint src_length);
|
||||
|
||||
/*
|
||||
If either "dstcs" or "srccs" is &my_charset_bin,
|
||||
then performs native copying using cs->cset->copy_fix().
|
||||
Otherwise, performs Unicode conversion using convert_fix().
|
||||
*/
|
||||
bool copy_fix(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs, const char *src, uint src_length,
|
||||
String_copier *status);
|
||||
|
||||
/*
|
||||
Same as above, but additionally sends ER_INVALID_CHARACTER_STRING
|
||||
in case of bad byte sequences or Unicode conversion problems.
|
||||
*/
|
||||
bool copy_with_error(CHARSET_INFO *dstcs, LEX_STRING *dst,
|
||||
CHARSET_INFO *srccs, const char *src, uint src_length);
|
||||
|
||||
bool convert_string(String *s, CHARSET_INFO *from_cs, CHARSET_INFO *to_cs);
|
||||
|
||||
@@ -3800,6 +3841,8 @@ public:
|
||||
}
|
||||
|
||||
LF_PINS *tdc_hash_pins;
|
||||
LF_PINS *xid_hash_pins;
|
||||
bool fix_xid_hash_pins();
|
||||
|
||||
inline ulong wsrep_binlog_format() const
|
||||
{
|
||||
|
@@ -331,8 +331,7 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
|
||||
table_map *map)
|
||||
{
|
||||
TABLE *table= insert_table_list->table;
|
||||
my_bool autoinc_mark;
|
||||
LINT_INIT(autoinc_mark);
|
||||
my_bool UNINIT_VAR(autoinc_mark);
|
||||
|
||||
table->next_number_field_updated= FALSE;
|
||||
|
||||
|
@@ -1028,7 +1028,7 @@ int MYSQLlex(YYSTYPE *yylval, THD *thd)
|
||||
|
||||
static int lex_one_token(YYSTYPE *yylval, THD *thd)
|
||||
{
|
||||
reg1 uchar c;
|
||||
reg1 uchar UNINIT_VAR(c);
|
||||
bool comment_closed;
|
||||
int tokval, result_state;
|
||||
uint length;
|
||||
@@ -1039,7 +1039,6 @@ static int lex_one_token(YYSTYPE *yylval, THD *thd)
|
||||
const uchar *const state_map= cs->state_map;
|
||||
const uchar *const ident_map= cs->ident_map;
|
||||
|
||||
LINT_INIT(c);
|
||||
lip->yylval=yylval; // The global state
|
||||
|
||||
lip->start_token();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user