Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
a36d2056
Commit
a36d2056
authored
Nov 11, 2007
by
istruewing@stella.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge stella.local:/home2/mydev/mysql-5.0-amain
into stella.local:/home2/mydev/mysql-5.0-axmrg
parents
00f1af47
0c9c041f
Changes
17
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
407 additions
and
70 deletions
+407
-70
include/my_sys.h
include/my_sys.h
+2
-0
myisam/ft_parser.c
myisam/ft_parser.c
+1
-1
myisam/mi_check.c
myisam/mi_check.c
+167
-57
mysql-test/include/gis_keys.inc
mysql-test/include/gis_keys.inc
+8
-8
mysql-test/r/csv.result
mysql-test/r/csv.result
+42
-0
mysql-test/r/ctype_ucs.result
mysql-test/r/ctype_ucs.result
+6
-0
mysql-test/r/fulltext.result
mysql-test/r/fulltext.result
+6
-0
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+25
-0
mysql-test/t/csv.test
mysql-test/t/csv.test
+33
-0
mysql-test/t/ctype_uca.test
mysql-test/t/ctype_uca.test
+1
-1
mysql-test/t/ctype_ucs.test
mysql-test/t/ctype_ucs.test
+8
-0
mysql-test/t/fulltext.test
mysql-test/t/fulltext.test
+8
-0
mysql-test/t/myisam.test
mysql-test/t/myisam.test
+26
-0
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+1
-1
mysql-test/t/variables.test
mysql-test/t/variables.test
+1
-1
mysys/charset.c
mysys/charset.c
+40
-0
sql/item_func.cc
sql/item_func.cc
+32
-1
No files found.
include/my_sys.h
View file @
a36d2056
...
...
@@ -879,6 +879,8 @@ extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
extern
CHARSET_INFO
*
get_charset_by_name
(
const
char
*
cs_name
,
myf
flags
);
extern
CHARSET_INFO
*
get_charset_by_csname
(
const
char
*
cs_name
,
uint
cs_flags
,
myf
my_flags
);
extern
CHARSET_INFO
*
get_compatible_charset_with_ctype
(
CHARSET_INFO
*
original_cs
);
extern
void
free_charsets
(
void
);
extern
char
*
get_charsets_dir
(
char
*
buf
);
extern
my_bool
my_charset_same
(
CHARSET_INFO
*
cs1
,
CHARSET_INFO
*
cs2
);
...
...
myisam/ft_parser.c
View file @
a36d2056
...
...
@@ -188,7 +188,7 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, const byte *end,
do
{
for
(;;
doc
+=
mbl
)
for
(;;
doc
+=
(
mbl
?
mbl
:
1
)
)
{
if
(
doc
>=
end
)
DBUG_RETURN
(
0
);
if
(
true_word_char
(
cs
,
*
doc
))
break
;
...
...
myisam/mi_check.c
View file @
a36d2056
This diff is collapsed.
Click to expand it.
mysql-test/include/gis_keys.inc
View file @
a36d2056
...
...
@@ -13,20 +13,20 @@ CREATE TABLE t2 (p POINT, INDEX(p));
INSERT
INTO
t1
VALUES
(
POINTFROMTEXT
(
'POINT(1 2)'
));
INSERT
INTO
t2
VALUES
(
POINTFROMTEXT
(
'POINT(1 2)'
));
--
no
index
,
returns
1
as
expected
#
no index, returns 1 as expected
SELECT
COUNT
(
*
)
FROM
t1
WHERE
p
=
POINTFROMTEXT
(
'POINT(1 2)'
);
--
with
index
,
returns
1
as
expected
--
EXPLAIN
shows
that
the
index
is
not
used
though
--
due
to
the
"most rows covered anyway, so a scan is more effective"
rule
#
with index, returns 1 as expected
#
EXPLAIN shows that the index is not used though
#
due to the "most rows covered anyway, so a scan is more effective" rule
EXPLAIN
SELECT
COUNT
(
*
)
FROM
t2
WHERE
p
=
POINTFROMTEXT
(
'POINT(1 2)'
);
SELECT
COUNT
(
*
)
FROM
t2
WHERE
p
=
POINTFROMTEXT
(
'POINT(1 2)'
);
--
adding
another
row
to
the
table
so
that
--
the
"most rows covered"
rule
doesn
't kick in anymore
-- now EXPLAIN shows the index used on the table
# adding another row to the table so that
# the "most rows covered" rule doesn't kick in anymore
# now EXPLAIN shows the index used on the table
# and we're getting the wrong result again
INSERT
INTO
t1
VALUES
(
POINTFROMTEXT
(
'POINT(1 2)'
));
INSERT
INTO
t2
VALUES
(
POINTFROMTEXT
(
'POINT(1 2)'
));
EXPLAIN
...
...
mysql-test/r/csv.result
View file @
a36d2056
...
...
@@ -5029,4 +5029,46 @@ F7
FE LATIN SMALL LETTER THORN
FF LATIN SMALL LETTER Y WITH DIAERESIS
drop table t1;
create table t1(a datetime) engine=csv;
insert into t1 values();
select * from t1;
a
0000-00-00 00:00:00
drop table t1;
create table t1(a set('foo','bar')) engine=csv;
insert into t1 values();
select * from t1;
a
drop table t1;
create table t1(a varchar(32)) engine=csv;
insert into t1 values();
select * from t1;
a
drop table t1;
create table t1(a int) engine=csv;
insert into t1 values();
select * from t1;
a
0
drop table t1;
create table t1(a blob) engine=csv;
insert into t1 values();
select * from t1;
a
drop table t1;
create table t1(a bit(1)) engine=csv;
insert into t1 values();
select BIN(a) from t1;
BIN(a)
0
drop table t1;
create table t1(a enum('foo','bar') default 'foo') engine=csv;
insert into t1 values();
select * from t1;
a
foo
drop table t1;
End of 5.0 tests
mysql-test/r/ctype_ucs.result
View file @
a36d2056
...
...
@@ -811,6 +811,12 @@ quote(name)
????????
????????????????
drop table bug20536;
CREATE TABLE t1(a TEXT CHARSET ucs2 COLLATE ucs2_unicode_ci);
INSERT INTO t1 VALUES('abcd');
SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abcd' IN BOOLEAN MODE);
a
abcd
DROP TABLE t1;
End of 4.1 tests
CREATE TABLE t1 (a varchar(64) character set ucs2, b decimal(10,3));
INSERT INTO t1 VALUES ("1.1", 0), ("2.1", 0);
...
...
mysql-test/r/fulltext.result
View file @
a36d2056
...
...
@@ -463,3 +463,9 @@ ALTER TABLE t1 DISABLE KEYS;
SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
ERROR HY000: Can't find FULLTEXT index matching the column list
DROP TABLE t1;
CREATE TABLE t1(a TEXT);
INSERT INTO t1 VALUES(' aaaaa aaaa');
SELECT * FROM t1 WHERE MATCH(a) AGAINST ('"aaaa"' IN BOOLEAN MODE);
a
aaaaa aaaa
DROP TABLE t1;
mysql-test/r/myisam.result
View file @
a36d2056
...
...
@@ -1806,4 +1806,29 @@ SELECT a FROM t1 FORCE INDEX (inx) WHERE a=1;
a
1
DROP TABLE t1;
CREATE TABLE t1 (c1 INT, c2 INT, UNIQUE INDEX (c1), INDEX (c2)) ENGINE=MYISAM;
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 0 # # # 1024 # # # # # # #
INSERT INTO t1 VALUES (1,1);
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
ALTER TABLE t1 DISABLE KEYS;
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
ALTER TABLE t1 ENABLE KEYS;
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
ALTER TABLE t1 DISABLE KEYS;
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
ALTER TABLE t1 ENABLE KEYS;
SHOW TABLE STATUS LIKE 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
DROP TABLE t1;
End of 5.0 tests
mysql-test/t/csv.test
View file @
a36d2056
...
...
@@ -1427,4 +1427,37 @@ insert into t1 values (0xFF,'LATIN SMALL LETTER Y WITH DIAERESIS');
select
hex
(
c
),
c
,
name
from
t1
order
by
1
;
drop
table
t1
;
#
# Bug #31473: does not work with NULL value in datetime field
# This bug is a 5.1 but is here to prevent 5.0 regression.
#
create
table
t1
(
a
datetime
)
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
set
(
'foo'
,
'bar'
))
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
varchar
(
32
))
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
int
)
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
blob
)
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
bit
(
1
))
engine
=
csv
;
insert
into
t1
values
();
select
BIN
(
a
)
from
t1
;
drop
table
t1
;
create
table
t1
(
a
enum
(
'foo'
,
'bar'
)
default
'foo'
)
engine
=
csv
;
insert
into
t1
values
();
select
*
from
t1
;
drop
table
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/ctype_uca.test
View file @
a36d2056
...
...
@@ -530,7 +530,7 @@ create table t1 (
a
varchar
(
255
),
key
a
(
a
)
)
character
set
utf8
collate
utf8_czech_ci
;
--
In
Czech
'ch'
is
a
single
letter
between
'h'
and
'i'
#
In Czech 'ch' is a single letter between 'h' and 'i'
insert
into
t1
values
(
'b'
),(
'c'
),(
'd'
),(
'e'
),(
'f'
),(
'g'
),(
'h'
),(
'ch'
),(
'i'
),(
'j'
);
select
*
from
t1
where
a
like
'c%'
;
...
...
mysql-test/t/ctype_ucs.test
View file @
a36d2056
...
...
@@ -547,6 +547,14 @@ select quote(name) from bug20536;
drop
table
bug20536
;
#
# BUG#31159 - fulltext search on ucs2 column crashes server
#
CREATE
TABLE
t1
(
a
TEXT
CHARSET
ucs2
COLLATE
ucs2_unicode_ci
);
INSERT
INTO
t1
VALUES
(
'abcd'
);
SELECT
*
FROM
t1
WHERE
MATCH
(
a
)
AGAINST
(
'+abcd'
IN
BOOLEAN
MODE
);
DROP
TABLE
t1
;
--
echo
End
of
4.1
tests
#
...
...
mysql-test/t/fulltext.test
View file @
a36d2056
...
...
@@ -387,4 +387,12 @@ ALTER TABLE t1 DISABLE KEYS;
SELECT
*
FROM
t1
WHERE
MATCH
(
a
)
AGAINST
(
'test'
);
DROP
TABLE
t1
;
#
# BUG#11392 - fulltext search bug
#
CREATE
TABLE
t1
(
a
TEXT
);
INSERT
INTO
t1
VALUES
(
' aaaaa aaaa'
);
SELECT
*
FROM
t1
WHERE
MATCH
(
a
)
AGAINST
(
'"aaaa"'
IN
BOOLEAN
MODE
);
DROP
TABLE
t1
;
# End of 4.1 tests
mysql-test/t/myisam.test
View file @
a36d2056
...
...
@@ -1161,4 +1161,30 @@ ALTER TABLE t1 ENABLE KEYS;
SELECT
a
FROM
t1
FORCE
INDEX
(
inx
)
WHERE
a
=
1
;
DROP
TABLE
t1
;
#
# Bug#4692 - DISABLE/ENABLE KEYS waste a space
#
CREATE
TABLE
t1
(
c1
INT
,
c2
INT
,
UNIQUE
INDEX
(
c1
),
INDEX
(
c2
))
ENGINE
=
MYISAM
;
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
INSERT
INTO
t1
VALUES
(
1
,
1
);
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
ALTER
TABLE
t1
DISABLE
KEYS
;
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
ALTER
TABLE
t1
ENABLE
KEYS
;
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
ALTER
TABLE
t1
DISABLE
KEYS
;
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
ALTER
TABLE
t1
ENABLE
KEYS
;
--
replace_column
6
# 7 # 8 # 10 # 11 # 12 # 13 # 14 # 15 # 16 #
SHOW
TABLE
STATUS
LIKE
't1'
;
#--exec ls -log var/master-data/test/t1.MYI
#--exec myisamchk -dvv var/master-data/test/t1.MYI
#--exec myisamchk -iev var/master-data/test/t1.MYI
DROP
TABLE
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/subselect.test
View file @
a36d2056
...
...
@@ -2970,7 +2970,7 @@ DROP TABLE t1,t2;
CREATE
TABLE
t1
(
a
INT
,
b
INT
);
INSERT
INTO
t1
VALUES
(
1
,
2
),
(
1
,
3
),
(
1
,
4
),
(
2
,
1
),
(
2
,
2
);
--
returns
no
rows
,
when
it
should
#
returns no rows, when it should
SELECT
a1
.
a
,
COUNT
(
*
)
FROM
t1
a1
WHERE
a1
.
a
=
1
AND
EXISTS
(
SELECT
a2
.
a
FROM
t1
a2
WHERE
a2
.
a
=
a1
.
a
)
GROUP
BY
a1
.
a
;
...
...
mysql-test/t/variables.test
View file @
a36d2056
...
...
@@ -139,7 +139,7 @@ show global variables like 'net_%';
show
session
variables
like
'net_%'
;
set
net_buffer_length
=
1
;
show
variables
like
'net_buffer_length'
;
--
warning
1292
#
warning 1292
set
net_buffer_length
=
2000000000
;
show
variables
like
'net_buffer_length'
;
...
...
mysys/charset.c
View file @
a36d2056
...
...
@@ -810,3 +810,43 @@ ulong escape_quotes_for_mysql(CHARSET_INFO *charset_info,
*
to
=
0
;
return
overflow
?
(
ulong
)
~
0
:
(
ulong
)
(
to
-
to_start
);
}
/**
@brief Find compatible character set with ctype.
@param[in] original_cs Original character set
@note
128 my_charset_ucs2_general_uca ->192 my_charset_utf8_general_uca_ci
129 my_charset_ucs2_icelandic_uca_ci ->193 my_charset_utf8_icelandic_uca_ci
130 my_charset_ucs2_latvian_uca_ci ->194 my_charset_utf8_latvian_uca_ci
131 my_charset_ucs2_romanian_uca_ci ->195 my_charset_utf8_romanian_uca_ci
132 my_charset_ucs2_slovenian_uca_ci ->196 my_charset_utf8_slovenian_uca_ci
133 my_charset_ucs2_polish_uca_ci ->197 my_charset_utf8_polish_uca_ci
134 my_charset_ucs2_estonian_uca_ci ->198 my_charset_utf8_estonian_uca_ci
135 my_charset_ucs2_spanish_uca_ci ->199 my_charset_utf8_spanish_uca_ci
136 my_charset_ucs2_swedish_uca_ci ->200 my_charset_utf8_swedish_uca_ci
137 my_charset_ucs2_turkish_uca_ci ->201 my_charset_utf8_turkish_uca_ci
138 my_charset_ucs2_czech_uca_ci ->202 my_charset_utf8_czech_uca_ci
139 my_charset_ucs2_danish_uca_ci ->203 my_charset_utf8_danish_uca_ci
140 my_charset_ucs2_lithuanian_uca_ci->204 my_charset_utf8_lithuanian_uca_ci
141 my_charset_ucs2_slovak_uca_ci ->205 my_charset_utf8_slovak_uca_ci
142 my_charset_ucs2_spanish2_uca_ci ->206 my_charset_utf8_spanish2_uca_ci
143 my_charset_ucs2_roman_uca_ci ->207 my_charset_utf8_roman_uca_ci
144 my_charset_ucs2_persian_uca_ci ->208 my_charset_utf8_persian_uca_ci
@return Compatible character set or NULL.
*/
CHARSET_INFO
*
get_compatible_charset_with_ctype
(
CHARSET_INFO
*
original_cs
)
{
CHARSET_INFO
*
compatible_cs
=
0
;
DBUG_ENTER
(
"get_compatible_charset_with_ctype"
);
if
(
!
strcmp
(
original_cs
->
csname
,
"ucs2"
)
&&
(
compatible_cs
=
get_charset
(
original_cs
->
number
+
64
,
MYF
(
0
)))
&&
(
!
compatible_cs
->
ctype
||
strcmp
(
original_cs
->
name
+
4
,
compatible_cs
->
name
+
4
)))
compatible_cs
=
0
;
DBUG_RETURN
(
compatible_cs
);
}
sql/item_func.cc
View file @
a36d2056
...
...
@@ -4944,13 +4944,44 @@ bool Item_func_match::fix_fields(THD *thd, Item **ref)
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"MATCH"
);
return
TRUE
;
}
table
=
((
Item_field
*
)
item
)
->
field
->
table
;
/*
With prepared statements Item_func_match::fix_fields is called twice.
When it is called first time we have original item tree here and add
conversion layer for character sets that do not have ctype array a few
lines below. When it is called second time, we already have conversion
layer in item tree.
*/
table
=
(
item
->
type
()
==
Item
::
FIELD_ITEM
)
?
((
Item_field
*
)
item
)
->
field
->
table
:
((
Item_field
*
)((
Item_func_conv
*
)
item
)
->
key_item
())
->
field
->
table
;
if
(
!
(
table
->
file
->
table_flags
()
&
HA_CAN_FULLTEXT
))
{
my_error
(
ER_TABLE_CANT_HANDLE_FT
,
MYF
(
0
));
return
1
;
}
table
->
fulltext_searched
=
1
;
/* A workaround for ucs2 character set */
if
(
!
args
[
1
]
->
collation
.
collation
->
ctype
)
{
CHARSET_INFO
*
compatible_cs
=
get_compatible_charset_with_ctype
(
args
[
1
]
->
collation
.
collation
);
bool
rc
=
1
;
if
(
compatible_cs
)
{
Item_string
*
conv_item
=
new
Item_string
(
""
,
0
,
compatible_cs
,
DERIVATION_EXPLICIT
);
item
=
args
[
0
];
args
[
0
]
=
conv_item
;
rc
=
agg_item_charsets
(
cmp_collation
,
func_name
(),
args
,
arg_count
,
MY_COLL_ALLOW_SUPERSET_CONV
|
MY_COLL_ALLOW_COERCIBLE_CONV
|
MY_COLL_DISALLOW_NONE
,
1
);
args
[
0
]
=
item
;
}
else
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"MATCH"
);
return
rc
;
}
return
agg_arg_collations_for_comparison
(
cmp_collation
,
args
+
1
,
arg_count
-
1
,
0
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment