1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge msdesk.(none):/home/msvensson/mysql-4.1

into  msdesk.(none):/home/msvensson/mysql-5.0
This commit is contained in:
msvensson@msdesk.(none)
2005-10-06 14:40:18 +02:00
31 changed files with 572 additions and 118 deletions

View File

@ -631,7 +631,21 @@ os_fast_mutex_free(
DeleteCriticalSection((LPCRITICAL_SECTION) fast_mutex); DeleteCriticalSection((LPCRITICAL_SECTION) fast_mutex);
#else #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 #endif
if (os_sync_mutex_inited) { if (os_sync_mutex_inited) {
/* When freeing the last mutexes, we have /* When freeing the last mutexes, we have

View 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;

View File

@ -89,6 +89,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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'; SET collation_connection='big5_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -121,6 +139,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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; SET NAMES big5;
CREATE TABLE t1 (a text) character set big5; CREATE TABLE t1 (a text) character set big5;
INSERT INTO t1 VALUES ('<27><>'); INSERT INTO t1 VALUES ('<27><>');

View File

@ -89,6 +89,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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'; SET collation_connection='gbk_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -121,6 +139,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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; SET NAMES gbk;
CREATE TABLE t1 (a text) character set gbk; CREATE TABLE t1 (a text) character set gbk;
INSERT INTO t1 VALUES (0xA3A0),(0xA1A1); INSERT INTO t1 VALUES (0xA3A0),(0xA1A1);

View File

@ -315,6 +315,24 @@ latin1_swedish_ci 6109
latin1_swedish_ci 61 latin1_swedish_ci 61
latin1_swedish_ci 6120 latin1_swedish_ci 6120
drop table t1; 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'; SET collation_connection='latin1_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -325,6 +343,24 @@ latin1_bin 6109
latin1_bin 61 latin1_bin 61
latin1_bin 6120 latin1_bin 6120
drop table t1; 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 <20>a (a int); CREATE TABLE <20>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 '<27>a (a int)' at line 1 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 '<27>a (a int)' at line 1
SELECT '<27>a' as str; SELECT '<27>a' as str;

View File

@ -103,6 +103,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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'; SET collation_connection='sjis_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -135,6 +153,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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; SET NAMES sjis;
SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@\<5C>\') FROM DUAL; SELECT HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@\<5C>\') FROM DUAL;
HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>_<EFBFBD>\') HEX('<27><><EFBFBD><EFBFBD><EFBFBD>@<40>_<EFBFBD>\')

View File

@ -2947,6 +2947,24 @@ tis620_thai_ci 6109
tis620_thai_ci 61 tis620_thai_ci 61
tis620_thai_ci 6120 tis620_thai_ci 6120
drop table t1; 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'; SET collation_connection='tis620_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -2957,3 +2975,21 @@ tis620_bin 6109
tis620_bin 61 tis620_bin 61
tis620_bin 6120 tis620_bin 6120
drop table t1; 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;

View File

@ -2506,6 +2506,24 @@ utf8_unicode_ci 6109
utf8_unicode_ci 61 utf8_unicode_ci 61
utf8_unicode_ci 6120 utf8_unicode_ci 6120
drop table t1; 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); 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 (1, _ucs2 0x01310069), (2, _ucs2 0x01310131);
INSERT INTO t1 VALUES (3, _ucs2 0x00690069), (4, _ucs2 0x01300049); INSERT INTO t1 VALUES (3, _ucs2 0x00690069), (4, _ucs2 0x01300049);

View File

@ -595,6 +595,24 @@ ucs2_general_ci 00610009
ucs2_general_ci 0061 ucs2_general_ci 0061
ucs2_general_ci 00610020 ucs2_general_ci 00610020
drop table t1; 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 NAMES latin1;
SET collation_connection='ucs2_bin'; SET collation_connection='ucs2_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
@ -606,6 +624,24 @@ ucs2_bin 00610009
ucs2_bin 0061 ucs2_bin 0061
ucs2_bin 00610020 ucs2_bin 00610020
drop table t1; 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)); select hex(substr(_ucs2 0x00e400e50068,1));
hex(substr(_ucs2 0x00e400e50068,1)) hex(substr(_ucs2 0x00e400e50068,1))
00E400E50068 00E400E50068

View File

@ -2239,6 +2239,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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'; SET collation_connection='ujis_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -2271,6 +2289,24 @@ select c1 from t1 where c1 like 'abcde111%' order by c1;
c1 c1
abcde111 abcde111
drop table t1; 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 TABLE IF EXISTS t1, t2;
DROP PROCEDURE IF EXISTS sp1; DROP PROCEDURE IF EXISTS sp1;
set names ujis; set names ujis;

View File

@ -842,6 +842,24 @@ utf8_general_ci 6109
utf8_general_ci 61 utf8_general_ci 61
utf8_general_ci 6120 utf8_general_ci 6120
drop table t1; 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'; SET collation_connection='utf8_bin';
create table t1 select repeat('a',4000) a; create table t1 select repeat('a',4000) a;
delete from t1; delete from t1;
@ -852,6 +870,24 @@ utf8_bin 6109
utf8_bin 61 utf8_bin 61
utf8_bin 6120 utf8_bin 6120
drop table t1; 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 ( CREATE TABLE t1 (
user varchar(255) NOT NULL default '' user varchar(255) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1; ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

View File

@ -15,9 +15,11 @@ SET NAMES big5;
SET collation_connection='big5_chinese_ci'; SET collation_connection='big5_chinese_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
SET collation_connection='big5_bin'; SET collation_connection='big5_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.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. # Bugs#9357: TEXT columns break string with special word in BIG5 charset.

View File

@ -15,9 +15,11 @@ SET NAMES gbk;
SET collation_connection='gbk_chinese_ci'; SET collation_connection='gbk_chinese_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
SET collation_connection='gbk_bin'; SET collation_connection='gbk_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
# #
# Bug#11987 mysql will truncate the text when # Bug#11987 mysql will truncate the text when

View File

@ -64,8 +64,10 @@ select 'a' regexp 'A' collate latin1_bin;
SET collation_connection='latin1_swedish_ci'; SET collation_connection='latin1_swedish_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
SET collation_connection='latin1_bin'; SET collation_connection='latin1_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
# #
# Bug#8041 # Bug#8041

View File

@ -67,9 +67,11 @@ drop table t1;
SET collation_connection='sjis_japanese_ci'; SET collation_connection='sjis_japanese_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
SET collation_connection='sjis_bin'; SET collation_connection='sjis_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
# Check parsing of string literals in SJIS with multibyte characters that # Check parsing of string literals in SJIS with multibyte characters that
# have an embedded \ in them. (Bug #8303) # have an embedded \ in them. (Bug #8303)

View File

@ -155,7 +155,9 @@ DROP TABLE t1;
SET collation_connection='tis620_thai_ci'; SET collation_connection='tis620_thai_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
SET collation_connection='tis620_bin'; SET collation_connection='tis620_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
# End of 4.1 tests # End of 4.1 tests

View File

@ -456,6 +456,7 @@ drop table t1;
SET collation_connection='utf8_unicode_ci'; SET collation_connection='utf8_unicode_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
# End of 4.1 tests # End of 4.1 tests

View File

@ -372,9 +372,11 @@ drop table t1;
SET collation_connection='ucs2_general_ci'; SET collation_connection='ucs2_general_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
SET NAMES latin1; SET NAMES latin1;
SET collation_connection='ucs2_bin'; SET collation_connection='ucs2_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
# #
# Bug#10344 Some string functions fail for UCS2 # Bug#10344 Some string functions fail for UCS2

View File

@ -1146,9 +1146,11 @@ DROP TABLE t1;
SET collation_connection='ujis_japanese_ci'; SET collation_connection='ujis_japanese_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
SET collation_connection='ujis_bin'; SET collation_connection='ujis_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc -- source include/ctype_innodb_like.inc
-- source include/ctype_like_escape.inc
# End of 4.1 tests # End of 4.1 tests
--disable_warnings --disable_warnings

View File

@ -685,8 +685,10 @@ drop table t1;
SET collation_connection='utf8_general_ci'; SET collation_connection='utf8_general_ci';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
SET collation_connection='utf8_bin'; SET collation_connection='utf8_bin';
-- source include/ctype_filesort.inc -- source include/ctype_filesort.inc
-- source include/ctype_like_escape.inc
# #
# Bug #7874 CONCAT() gives wrong results mixing # Bug #7874 CONCAT() gives wrong results mixing

View 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:

View File

@ -5770,7 +5770,8 @@ ha_innobase::get_foreign_key_create_info(void)
fclose(file); fclose(file);
} else { } else {
/* unable to create temporary file */ /* 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); return(str);

View File

@ -2958,9 +2958,9 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
String *escape_str= escape_item->val_str(&tmp_value1); String *escape_str= escape_item->val_str(&tmp_value1);
if (escape_str) if (escape_str)
{ {
CHARSET_INFO *cs= cmp.cmp_collation.collation; if (use_mb(cmp.cmp_collation.collation))
if (use_mb(cs))
{ {
CHARSET_INFO *cs= escape_str->charset();
my_wc_t wc; my_wc_t wc;
int rc= cs->cset->mb_wc(cs, &wc, int rc= cs->cset->mb_wc(cs, &wc,
(const uchar*) escape_str->ptr(), (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. code instead of Unicode code as "escape" argument.
Convert to "cs" if charset of escape differs. Convert to "cs" if charset of escape differs.
*/ */
CHARSET_INFO *cs= cmp.cmp_collation.collation;
uint32 unused; uint32 unused;
if (escape_str->needs_conversion(escape_str->length(), if (escape_str->needs_conversion(escape_str->length(),
escape_str->charset(), cs, &unused)) escape_str->charset(), cs, &unused))

View File

@ -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 res_length, char *min_str,char *max_str,
uint *min_length,uint *max_length) uint *min_length,uint *max_length)
{ {
const char *end; const char *end= ptr + ptr_length;
char *min_org=min_str; char *min_org=min_str;
char *min_end=min_str+res_length; 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) for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
ptr_length= charlen;
end= ptr + ptr_length;
for (; ptr != end && min_str != min_end ; ptr++)
{ {
if (ptr+1 != end && isbig5code(ptr[0],ptr[1])) 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) if (*ptr == escape && ptr+1 != end)
{ {
ptr++; /* Skip escape */ 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; continue;
} }
if (*ptr == w_one) /* '_' in SQL */ if (*ptr == w_one) /* '_' in SQL */

View File

@ -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 res_length, char *min_str,char *max_str,
uint *min_length,uint *max_length) uint *min_length,uint *max_length)
{ {
const char *end; const char *end= ptr + ptr_length;
char *min_org=min_str; char *min_org=min_str;
char *min_end=min_str+res_length; 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) for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
ptr_length= charlen;
end= ptr + ptr_length;
for (; ptr != end && min_str != min_end ; ptr++)
{ {
if (ptr+1 != end && isgbkcode(ptr[0],ptr[1])) 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) if (*ptr == escape && ptr+1 != end)
{ {
ptr++; /* Skip escape */ 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; continue;
} }
if (*ptr == w_one) /* '_' in SQL */ if (*ptr == w_one) /* '_' in SQL */

View File

@ -523,17 +523,13 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
char *min_str,char *max_str, char *min_str,char *max_str,
uint *min_length,uint *max_length) uint *min_length,uint *max_length)
{ {
const char *end; const char *end= ptr + ptr_length;
char *min_org= min_str; char *min_org= min_str;
char *min_end= min_str + res_length; char *min_end= min_str + res_length;
char *max_end= max_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) for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
ptr_length= charlen;
end= ptr + ptr_length;
for (; ptr != end && min_str != min_end ; ptr++)
{ {
if (*ptr == escape && ptr+1 != end) 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, representation of the max_sort_char character,
and copy it into max_str in a loop. and copy it into max_str in a loop.
*/ */
*max_length= res_length;
pad_max_char(cs, max_str, max_end); pad_max_char(cs, max_str, max_end);
return 0; return 0;
} }

View File

@ -1034,17 +1034,12 @@ my_bool my_like_range_simple(CHARSET_INFO *cs,
char *min_str,char *max_str, char *min_str,char *max_str,
uint *min_length,uint *max_length) uint *min_length,uint *max_length)
{ {
const char *end; const char *end= ptr + ptr_length;
char *min_org=min_str; char *min_org=min_str;
char *min_end=min_str+res_length; char *min_end=min_str+res_length;
#ifdef USE_MB uint charlen= res_length / cs->mbmaxlen;
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;
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) if (*ptr == escape && ptr+1 != end)
{ {

View File

@ -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 res_length, char *min_str,char *max_str,
uint *min_length,uint *max_length) uint *min_length,uint *max_length)
{ {
const char *end; const char *end= ptr + ptr_length;
char *min_org=min_str; char *min_org=min_str;
char *min_end=min_str+res_length; 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) for ( ; ptr < end && min_str < min_end && charlen > 0 ; charlen--)
ptr_length= charlen; {
end= ptr + ptr_length;
while (ptr < end && min_str < min_end) {
if (ismbchar_sjis(cs, ptr, end)) { if (ismbchar_sjis(cs, ptr, end)) {
*min_str++ = *max_str++ = *ptr++; *min_str++ = *max_str++ = *ptr++;
if (min_str < min_end) if (min_str < min_end)

View File

@ -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]={ static unsigned short cs_to_uni[256]={
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
@ -928,7 +857,7 @@ static MY_COLLATION_HANDLER my_collation_ci_handler =
my_strnncollsp_tis620, my_strnncollsp_tis620,
my_strnxfrm_tis620, my_strnxfrm_tis620,
my_strnxfrmlen_simple, my_strnxfrmlen_simple,
my_like_range_tis620, my_like_range_simple,
my_wildcmp_8bit, /* wildcmp */ my_wildcmp_8bit, /* wildcmp */
my_strcasecmp_8bit, my_strcasecmp_8bit,
my_instr_simple, /* QQ: To be fixed */ my_instr_simple, /* QQ: To be fixed */
@ -992,7 +921,7 @@ CHARSET_INFO my_charset_tis620_thai_ci=
1, /* mbminlen */ 1, /* mbminlen */
1, /* mbmaxlen */ 1, /* mbmaxlen */
0, /* min_sort_char */ 0, /* min_sort_char */
0, /* max_sort_char */ 255, /* max_sort_char */
0, /* escape_with_backslash_is_dangerous */ 0, /* escape_with_backslash_is_dangerous */
&my_charset_handler, &my_charset_handler,
&my_collation_ci_handler &my_collation_ci_handler
@ -1023,7 +952,7 @@ CHARSET_INFO my_charset_tis620_bin=
1, /* mbminlen */ 1, /* mbminlen */
1, /* mbmaxlen */ 1, /* mbmaxlen */
0, /* min_sort_char */ 0, /* min_sort_char */
0, /* max_sort_char */ 255, /* max_sort_char */
0, /* escape_with_backslash_is_dangerous */ 0, /* escape_with_backslash_is_dangerous */
&my_charset_handler, &my_charset_handler,
&my_collation_8bit_bin_handler &my_collation_8bit_bin_handler

View File

@ -1450,10 +1450,12 @@ my_bool my_like_range_ucs2(CHARSET_INFO *cs,
const char *end=ptr+ptr_length; const char *end=ptr+ptr_length;
char *min_org=min_str; char *min_org=min_str;
char *min_end=min_str+res_length; 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 */ ptr+=2; /* Skip escape */
*min_str++= *max_str++ = ptr[0]; *min_str++= *max_str++ = ptr[0];