mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge msdesk.(none):/home/msvensson/mysql-4.1
into msdesk.(none):/home/msvensson/mysql-5.0
This commit is contained in:
commit
5da6a6c8a1
31 changed files with 572 additions and 118 deletions
|
@ -631,7 +631,21 @@ os_fast_mutex_free(
|
|||
|
||||
DeleteCriticalSection((LPCRITICAL_SECTION) fast_mutex);
|
||||
#else
|
||||
ut_a(0 == pthread_mutex_destroy(fast_mutex));
|
||||
int ret;
|
||||
|
||||
ret = pthread_mutex_destroy(fast_mutex);
|
||||
|
||||
if (ret != 0) {
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: error: return value %lu when calling\n"
|
||||
"InnoDB: pthread_mutex_destroy().\n", (ulint)ret);
|
||||
fprintf(stderr,
|
||||
"InnoDB: Byte contents of the pthread mutex at %p:\n", fast_mutex);
|
||||
ut_print_buf(stderr, (const byte*)fast_mutex,
|
||||
sizeof(os_fast_mutex_t));
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
#endif
|
||||
if (os_sync_mutex_inited) {
|
||||
/* When freeing the last mutexes, we have
|
||||
|
|
18
mysql-test/include/ctype_like_escape.inc
Normal file
18
mysql-test/include/ctype_like_escape.inc
Normal file
|
@ -0,0 +1,18 @@
|
|||
#
|
||||
# Bugs: #13046:
|
||||
# LIKE pattern matching using prefix index doesn't return correct result
|
||||
#
|
||||
select @@collation_connection;
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
-- should return ab_def
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
-- should return ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
drop table t1;
|
|
@ -89,6 +89,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
big5_chinese_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='big5_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -121,6 +139,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
big5_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES big5;
|
||||
CREATE TABLE t1 (a text) character set big5;
|
||||
INSERT INTO t1 VALUES ('ùØ');
|
||||
|
|
|
@ -89,6 +89,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
gbk_chinese_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='gbk_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -121,6 +139,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
gbk_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES gbk;
|
||||
CREATE TABLE t1 (a text) character set gbk;
|
||||
INSERT INTO t1 VALUES (0xA3A0),(0xA1A1);
|
||||
|
|
|
@ -315,6 +315,24 @@ latin1_swedish_ci 6109
|
|||
latin1_swedish_ci 61
|
||||
latin1_swedish_ci 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
latin1_swedish_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='latin1_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -325,6 +343,24 @@ latin1_bin 6109
|
|||
latin1_bin 61
|
||||
latin1_bin 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
latin1_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
CREATE TABLE „a (a int);
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '„a (a int)' at line 1
|
||||
SELECT '„a' as str;
|
||||
|
|
|
@ -103,6 +103,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
sjis_japanese_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='sjis_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -135,6 +153,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
sjis_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES sjis;
|
||||
SELECT HEX('佐淘 \圭') FROM DUAL;
|
||||
HEX('佐淘 \圭')
|
||||
|
|
|
@ -2947,6 +2947,24 @@ tis620_thai_ci 6109
|
|||
tis620_thai_ci 61
|
||||
tis620_thai_ci 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
tis620_thai_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='tis620_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -2957,3 +2975,21 @@ tis620_bin 6109
|
|||
tis620_bin 61
|
||||
tis620_bin 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
tis620_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
|
|
|
@ -2506,6 +2506,24 @@ utf8_unicode_ci 6109
|
|||
utf8_unicode_ci 61
|
||||
utf8_unicode_ci 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf8_unicode_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id int, a varchar(30) character set utf8);
|
||||
INSERT INTO t1 VALUES (1, _ucs2 0x01310069), (2, _ucs2 0x01310131);
|
||||
INSERT INTO t1 VALUES (3, _ucs2 0x00690069), (4, _ucs2 0x01300049);
|
||||
|
|
|
@ -595,6 +595,24 @@ ucs2_general_ci 00610009
|
|||
ucs2_general_ci 0061
|
||||
ucs2_general_ci 00610020
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
ucs2_general_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES latin1;
|
||||
SET collation_connection='ucs2_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
|
@ -606,6 +624,24 @@ ucs2_bin 00610009
|
|||
ucs2_bin 0061
|
||||
ucs2_bin 00610020
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
ucs2_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
select hex(substr(_ucs2 0x00e400e50068,1));
|
||||
hex(substr(_ucs2 0x00e400e50068,1))
|
||||
00E400E50068
|
||||
|
|
|
@ -2239,6 +2239,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
ujis_japanese_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='ujis_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -2271,6 +2289,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
|
|||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
ujis_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP PROCEDURE IF EXISTS sp1;
|
||||
set names ujis;
|
||||
|
|
|
@ -842,6 +842,24 @@ utf8_general_ci 6109
|
|||
utf8_general_ci 61
|
||||
utf8_general_ci 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf8_general_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='utf8_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
@ -852,6 +870,24 @@ utf8_bin 6109
|
|||
utf8_bin 61
|
||||
utf8_bin 6120
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf8_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
user varchar(255) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
|
|
@ -15,9 +15,11 @@ SET NAMES big5;
|
|||
SET collation_connection='big5_chinese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='big5_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
#
|
||||
# Bugs#9357: TEXT columns break string with special word in BIG5 charset.
|
||||
|
|
|
@ -15,9 +15,11 @@ SET NAMES gbk;
|
|||
SET collation_connection='gbk_chinese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='gbk_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
#
|
||||
# Bug#11987 mysql will truncate the text when
|
||||
|
|
|
@ -64,8 +64,10 @@ select 'a' regexp 'A' collate latin1_bin;
|
|||
|
||||
SET collation_connection='latin1_swedish_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='latin1_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
#
|
||||
# Bug#8041
|
||||
|
|
|
@ -67,9 +67,11 @@ drop table t1;
|
|||
SET collation_connection='sjis_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='sjis_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
# Check parsing of string literals in SJIS with multibyte characters that
|
||||
# have an embedded \ in them. (Bug #8303)
|
||||
|
|
|
@ -155,7 +155,9 @@ DROP TABLE t1;
|
|||
|
||||
SET collation_connection='tis620_thai_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='tis620_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -456,6 +456,7 @@ drop table t1;
|
|||
|
||||
SET collation_connection='utf8_unicode_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
|
|
|
@ -372,9 +372,11 @@ drop table t1;
|
|||
|
||||
SET collation_connection='ucs2_general_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET NAMES latin1;
|
||||
SET collation_connection='ucs2_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
#
|
||||
# Bug#10344 Some string functions fail for UCS2
|
||||
|
|
|
@ -1146,9 +1146,11 @@ DROP TABLE t1;
|
|||
SET collation_connection='ujis_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='ujis_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_innodb_like.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
# End of 4.1 tests
|
||||
--disable_warnings
|
||||
|
|
|
@ -685,8 +685,10 @@ drop table t1;
|
|||
|
||||
SET collation_connection='utf8_general_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
SET collation_connection='utf8_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
-- source include/ctype_like_escape.inc
|
||||
|
||||
#
|
||||
# Bug #7874 CONCAT() gives wrong results mixing
|
||||
|
|
179
ndb/test/sql/test_create_drop.pl
Normal file
179
ndb/test/sql/test_create_drop.pl
Normal file
|
@ -0,0 +1,179 @@
|
|||
use strict;
|
||||
use IO::Socket;
|
||||
use DBI;
|
||||
|
||||
# mgm info
|
||||
my $mgmhost = "localhost";
|
||||
my $mgmport = 38101;
|
||||
|
||||
# location of ndb_x_fs
|
||||
my $datadir = "c2";
|
||||
my @schemafiles = <$datadir/ndb_*_fs/D[12]/DBDICT/P0.SchemaLog>;
|
||||
@schemafiles or die "no schemafiles in $datadir";
|
||||
|
||||
my $dsn;
|
||||
$dsn = "dbi:mysql:test:localhost;port=38100";
|
||||
|
||||
# this works better for me
|
||||
my $cnf = $ENV{MYSQL_HOME} . "/var/my.cnf";
|
||||
$dsn = "dbi:mysql:database=test;host=localhost;mysql_read_default_file=$cnf";
|
||||
|
||||
my $dbh;
|
||||
$dbh = DBI->connect($dsn, 'root', undef, { RaiseError => 0, PrintError => 0 });
|
||||
$dbh or die $DBI::errstr;
|
||||
|
||||
# mgm commands
|
||||
|
||||
my $mgm = undef;
|
||||
|
||||
sub mgmconnect {
|
||||
$mgm = IO::Socket::INET->new(
|
||||
Proto => "tcp",
|
||||
PeerHost => $mgmhost,
|
||||
PeerPort => $mgmport);
|
||||
$mgm or die "connect to mgm failed: $!";
|
||||
$mgm->autoflush(1);
|
||||
};
|
||||
|
||||
mgmconnect();
|
||||
warn "connected to mgm $mgmhost $mgmport\n";
|
||||
|
||||
my $nodeinfo = {};
|
||||
|
||||
sub getnodeinfo {
|
||||
$nodeinfo = {};
|
||||
$mgm->print("get status\n");
|
||||
$mgm->print("\n");
|
||||
while (defined($_ = $mgm->getline)) {
|
||||
/^node\s+status/ && last;
|
||||
}
|
||||
while (defined($_ = $mgm->getline)) {
|
||||
/^\s*$/ && last;
|
||||
/^node\.(\d+)\.(\w+):\s*(\S+)/ && ($nodeinfo->{$1}{$2} = $3);
|
||||
}
|
||||
}
|
||||
|
||||
getnodeinfo();
|
||||
|
||||
my @dbnode = ();
|
||||
for my $n (keys %$nodeinfo) {
|
||||
my $p = $nodeinfo->{$n};
|
||||
($p->{type} eq 'NDB') && push(@dbnode, $n);
|
||||
}
|
||||
@dbnode = sort { $a <=> $b } @dbnode;
|
||||
@dbnode or die "mgm error, found no db nodes";
|
||||
warn "db nodes: @dbnode\n";
|
||||
|
||||
sub restartnode {
|
||||
my($n, $initialstart) = @_;
|
||||
warn "restart node $n initialstart=$initialstart\n";
|
||||
$mgm->print("restart node\n");
|
||||
$mgm->print("node: $n\n");
|
||||
$mgm->print("initialstart: $initialstart\n");
|
||||
$mgm->print("\n");
|
||||
while (1) {
|
||||
sleep 5;
|
||||
getnodeinfo();
|
||||
my $status = $nodeinfo->{$n}{status};
|
||||
my $sp = $nodeinfo->{$n}{startphase};
|
||||
warn "node $n status: $status sp: $sp\n";
|
||||
last if $status eq 'STARTED';
|
||||
}
|
||||
}
|
||||
|
||||
sub restartall {
|
||||
warn "restart all\n";
|
||||
$mgm->print("restart all\n");
|
||||
$mgm->print("\n");
|
||||
while (1) {
|
||||
sleep 5;
|
||||
getnodeinfo();
|
||||
my $ok = 1;
|
||||
for my $n (@dbnode) {
|
||||
my $status = $nodeinfo->{$n}{status};
|
||||
my $sp = $nodeinfo->{$n}{startphase};
|
||||
warn "node $n status: $status sp: $sp\n";
|
||||
$ok = 0 if $status ne 'STARTED';
|
||||
}
|
||||
last if $ok;
|
||||
}
|
||||
}
|
||||
|
||||
# the sql stuff
|
||||
|
||||
my $maxtab = 300;
|
||||
my @tab = ();
|
||||
|
||||
sub create {
|
||||
my($n) = @_;
|
||||
my $sql = "create table t$n (a int primary key, b varchar(20), key (b)) engine=ndb";
|
||||
warn "create t$n\n";
|
||||
$dbh->do($sql) or die "$sql\n$DBI::errstr";
|
||||
}
|
||||
|
||||
sub drop {
|
||||
my($n) = @_;
|
||||
my $sql = "drop table t$n";
|
||||
warn "drop t$n\n";
|
||||
$dbh->do($sql) or die "$sql\n$DBI::errstr";
|
||||
}
|
||||
|
||||
sub dropall {
|
||||
for my $n (0..($maxtab-1)) {
|
||||
my $sql = "drop table if exists t$n";
|
||||
$dbh->do($sql) or die "$sql\n$DBI::errstr";
|
||||
}
|
||||
}
|
||||
|
||||
sub createdrop {
|
||||
my $n = int(rand($maxtab));
|
||||
if (! $tab[$n]) {
|
||||
create($n);
|
||||
$tab[$n] = 1;
|
||||
} else {
|
||||
drop($n);
|
||||
$tab[$n] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub checkschemafiles {
|
||||
system("printSchemaFile -ce @schemafiles");
|
||||
$? == 0 or die "schemafiles check failed";
|
||||
}
|
||||
|
||||
sub randomrestart {
|
||||
my($k) = @_;
|
||||
my $s = int(rand(500));
|
||||
if ($s < 2) {
|
||||
my $i = $k % scalar(@dbnode);
|
||||
my $n = $dbnode[$i];
|
||||
my $initialstart = ($s < 1 ? 0 : 1);
|
||||
restartnode($n, $initialstart);
|
||||
return 1;
|
||||
}
|
||||
if ($s < 3) {
|
||||
restartall();
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
# deterministic
|
||||
srand(1);
|
||||
|
||||
warn "drop any old tables\n";
|
||||
dropall();
|
||||
|
||||
my $loop = 1000000;
|
||||
for my $k (0..($loop-1)) {
|
||||
warn "$k\n";
|
||||
createdrop();
|
||||
checkschemafiles();
|
||||
if (randomrestart($k)) {
|
||||
checkschemafiles();
|
||||
}
|
||||
}
|
||||
|
||||
$dbh->disconnect or die $DBI::errstr;
|
||||
|
||||
# vim: set sw=2:
|
|
@ -5770,7 +5770,8 @@ ha_innobase::get_foreign_key_create_info(void)
|
|||
fclose(file);
|
||||
} else {
|
||||
/* unable to create temporary file */
|
||||
str = my_malloc(1, MYF(MY_ZEROFILL));
|
||||
str = my_strdup(
|
||||
"/* Error: cannot display foreign key constraints */", MYF(0));
|
||||
}
|
||||
|
||||
return(str);
|
||||
|
|
|
@ -2958,9 +2958,9 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
|
|||
String *escape_str= escape_item->val_str(&tmp_value1);
|
||||
if (escape_str)
|
||||
{
|
||||
CHARSET_INFO *cs= cmp.cmp_collation.collation;
|
||||
if (use_mb(cs))
|
||||
if (use_mb(cmp.cmp_collation.collation))
|
||||
{
|
||||
CHARSET_INFO *cs= escape_str->charset();
|
||||
my_wc_t wc;
|
||||
int rc= cs->cset->mb_wc(cs, &wc,
|
||||
(const uchar*) escape_str->ptr(),
|
||||
|
@ -2975,6 +2975,7 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
|
|||
code instead of Unicode code as "escape" argument.
|
||||
Convert to "cs" if charset of escape differs.
|
||||
*/
|
||||
CHARSET_INFO *cs= cmp.cmp_collation.collation;
|
||||
uint32 unused;
|
||||
if (escape_str->needs_conversion(escape_str->length(),
|
||||
escape_str->charset(), cs, &unused))
|
||||
|
|
|
@ -401,16 +401,12 @@ static my_bool my_like_range_big5(CHARSET_INFO *cs __attribute__((unused)),
|
|||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
|
||||
{
|
||||
if (ptr+1 != end && isbig5code(ptr[0],ptr[1]))
|
||||
{
|
||||
|
@ -421,7 +417,10 @@ static my_bool my_like_range_big5(CHARSET_INFO *cs __attribute__((unused)),
|
|||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (isbig5code(ptr[0], ptr[1]))
|
||||
*min_str++= *max_str++ = *ptr++;
|
||||
if (min_str < min_end)
|
||||
*min_str++= *max_str++= *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
|
|
|
@ -2714,16 +2714,12 @@ static my_bool my_like_range_gbk(CHARSET_INFO *cs __attribute__((unused)),
|
|||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
|
||||
{
|
||||
if (ptr+1 != end && isgbkcode(ptr[0],ptr[1]))
|
||||
{
|
||||
|
@ -2734,7 +2730,10 @@ static my_bool my_like_range_gbk(CHARSET_INFO *cs __attribute__((unused)),
|
|||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (isgbkcode(ptr[0], ptr[1]))
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (min_str < min_end)
|
||||
*min_str++= *max_str++= *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
|
|
|
@ -523,17 +523,13 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
|||
char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org= min_str;
|
||||
char *min_end= min_str + res_length;
|
||||
char *max_end= max_str + res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
|
@ -567,6 +563,7 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
|||
representation of the max_sort_char character,
|
||||
and copy it into max_str in a loop.
|
||||
*/
|
||||
*max_length= res_length;
|
||||
pad_max_char(cs, max_str, max_end);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1034,17 +1034,12 @@ my_bool my_like_range_simple(CHARSET_INFO *cs,
|
|||
char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
#ifdef USE_MB
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
#endif
|
||||
end= ptr + ptr_length;
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
|
|
|
@ -330,16 +330,13 @@ static my_bool my_like_range_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
|||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
while (ptr < end && min_str < min_end) {
|
||||
for ( ; ptr < end && min_str < min_end && charlen > 0 ; charlen--)
|
||||
{
|
||||
if (ismbchar_sjis(cs, ptr, end)) {
|
||||
*min_str++ = *max_str++ = *ptr++;
|
||||
if (min_str < min_end)
|
||||
|
|
|
@ -648,77 +648,6 @@ int my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Convert SQL LIKE string to C string
|
||||
|
||||
Arg: String, its length, escape character, resource length,
|
||||
minimal string and maximum string
|
||||
Ret: Always 0
|
||||
|
||||
IMPLEMENTATION
|
||||
We just copy this function from opt_range.cc. No need to convert to
|
||||
thai2sortable string. min_str and max_str will be use for comparison and
|
||||
converted there.
|
||||
|
||||
RETURN VALUES
|
||||
0
|
||||
*/
|
||||
|
||||
#define max_sort_chr ((char) 255)
|
||||
|
||||
static
|
||||
my_bool my_like_range_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
||||
const char *ptr, uint ptr_length,
|
||||
pbool escape, pbool w_one, pbool w_many,
|
||||
uint res_length, char *min_str, char *max_str,
|
||||
uint *min_length, uint *max_length)
|
||||
{
|
||||
const char *end=ptr+ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++ = *max_str++ = *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
{
|
||||
*min_str++='\0'; /* This should be min char */
|
||||
*max_str++=max_sort_chr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_many) /* '%' in SQL */
|
||||
{
|
||||
/*
|
||||
Calculate length of keys:
|
||||
'a\0\0... is the smallest possible string when we have space expand
|
||||
a\ff\ff... is the biggest possible string
|
||||
*/
|
||||
*min_length= ((cs->state & MY_CS_BINSORT) ? (uint) (min_str - min_org) :
|
||||
res_length);
|
||||
*max_length= res_length;
|
||||
do
|
||||
{
|
||||
*min_str++ = 0;
|
||||
*max_str++ = max_sort_chr;
|
||||
} while (min_str != min_end);
|
||||
return 0;
|
||||
}
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
}
|
||||
|
||||
*min_length= *max_length = (uint) (min_str - min_org);
|
||||
while (min_str != min_end)
|
||||
*min_str++= *max_str++ = ' '; /* Because of key compression */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static unsigned short cs_to_uni[256]={
|
||||
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
|
||||
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
|
||||
|
@ -928,7 +857,7 @@ static MY_COLLATION_HANDLER my_collation_ci_handler =
|
|||
my_strnncollsp_tis620,
|
||||
my_strnxfrm_tis620,
|
||||
my_strnxfrmlen_simple,
|
||||
my_like_range_tis620,
|
||||
my_like_range_simple,
|
||||
my_wildcmp_8bit, /* wildcmp */
|
||||
my_strcasecmp_8bit,
|
||||
my_instr_simple, /* QQ: To be fixed */
|
||||
|
@ -992,7 +921,7 @@ CHARSET_INFO my_charset_tis620_thai_ci=
|
|||
1, /* mbminlen */
|
||||
1, /* mbmaxlen */
|
||||
0, /* min_sort_char */
|
||||
0, /* max_sort_char */
|
||||
255, /* max_sort_char */
|
||||
0, /* escape_with_backslash_is_dangerous */
|
||||
&my_charset_handler,
|
||||
&my_collation_ci_handler
|
||||
|
@ -1023,7 +952,7 @@ CHARSET_INFO my_charset_tis620_bin=
|
|||
1, /* mbminlen */
|
||||
1, /* mbmaxlen */
|
||||
0, /* min_sort_char */
|
||||
0, /* max_sort_char */
|
||||
255, /* max_sort_char */
|
||||
0, /* escape_with_backslash_is_dangerous */
|
||||
&my_charset_handler,
|
||||
&my_collation_8bit_bin_handler
|
||||
|
|
|
@ -1450,10 +1450,12 @@ my_bool my_like_range_ucs2(CHARSET_INFO *cs,
|
|||
const char *end=ptr+ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
for (; ptr + 1 < end && min_str + 1 < min_end ; ptr+=2)
|
||||
for ( ; ptr + 1 < end && min_str + 1 < min_end && charlen > 0
|
||||
; ptr+=2, charlen--)
|
||||
{
|
||||
if (ptr[0] == '\0' && ptr[1] == escape && ptr+2 < end)
|
||||
if (ptr[0] == '\0' && ptr[1] == escape && ptr + 1 < end)
|
||||
{
|
||||
ptr+=2; /* Skip escape */
|
||||
*min_str++= *max_str++ = ptr[0];
|
||||
|
|
Loading…
Reference in a new issue