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
c98fbc03
Commit
c98fbc03
authored
Dec 02, 2005
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-merge1-5.0
parents
ac26e14e
3d223afb
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
231 additions
and
39 deletions
+231
-39
client/mysqldump.c
client/mysqldump.c
+6
-5
myisam/mi_check.c
myisam/mi_check.c
+2
-1
mysql-test/r/analyze.result
mysql-test/r/analyze.result
+9
-0
mysql-test/r/bdb.result
mysql-test/r/bdb.result
+14
-0
mysql-test/r/func_equal.result
mysql-test/r/func_equal.result
+9
-0
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+14
-0
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+69
-0
mysql-test/t/analyze.test
mysql-test/t/analyze.test
+14
-0
mysql-test/t/bdb.test
mysql-test/t/bdb.test
+19
-0
mysql-test/t/func_equal.test
mysql-test/t/func_equal.test
+9
-0
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+19
-0
mysql-test/t/mysqldump.test
mysql-test/t/mysqldump.test
+14
-1
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+32
-27
sql/unireg.h
sql/unireg.h
+1
-5
No files found.
client/mysqldump.c
View file @
c98fbc03
...
...
@@ -2152,6 +2152,8 @@ static void dump_table(char *table, char *db)
for
(
i
=
0
;
i
<
mysql_num_fields
(
res
);
i
++
)
{
int
is_blob
;
ulong
length
=
lengths
[
i
];
if
(
!
(
field
=
mysql_fetch_field
(
res
)))
{
my_snprintf
(
query
,
QUERY_LENGTH
,
...
...
@@ -2178,7 +2180,6 @@ static void dump_table(char *table, char *db)
field
->
type
==
MYSQL_TYPE_TINY_BLOB
))
?
1
:
0
;
if
(
extended_insert
)
{
ulong
length
=
lengths
[
i
];
if
(
i
==
0
)
dynstr_set
(
&
extended_row
,
"("
);
else
...
...
@@ -2268,19 +2269,19 @@ static void dump_table(char *table, char *db)
{
print_xml_tag1
(
md_result_file
,
"
\t\t
"
,
"field name="
,
field
->
name
,
""
);
print_quoted_xml
(
md_result_file
,
row
[
i
],
length
s
[
i
]
);
print_quoted_xml
(
md_result_file
,
row
[
i
],
length
);
fputs
(
"</field>
\n
"
,
md_result_file
);
}
else
if
(
opt_hex_blob
&&
is_blob
)
else
if
(
opt_hex_blob
&&
is_blob
&&
length
)
{
/* sakaik got the idea to to provide blob's in hex notation. */
char
*
ptr
=
row
[
i
],
*
end
=
ptr
+
lengths
[
i
]
;
char
*
ptr
=
row
[
i
],
*
end
=
ptr
+
length
;
fputs
(
"0x"
,
md_result_file
);
for
(;
ptr
<
end
;
ptr
++
)
fprintf
(
md_result_file
,
"%02X"
,
*
((
uchar
*
)
ptr
));
}
else
unescape
(
md_result_file
,
row
[
i
],
length
s
[
i
]
);
unescape
(
md_result_file
,
row
[
i
],
length
);
}
else
{
...
...
myisam/mi_check.c
View file @
c98fbc03
...
...
@@ -402,7 +402,7 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
full_text_keys
++
;
if
(
share
->
state
.
key_root
[
key
]
==
HA_OFFSET_ERROR
&&
(
info
->
state
->
records
==
0
||
keyinfo
->
flag
&
HA_FULLTEXT
))
continue
;
goto
do_stat
;
if
(
!
_mi_fetch_keypage
(
info
,
keyinfo
,
share
->
state
.
key_root
[
key
],
DFLT_INIT_HITS
,
info
->
buff
,
0
))
{
...
...
@@ -498,6 +498,7 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
param
->
max_level
);
all_keydata
+=
param
->
keydata
;
all_totaldata
+=
param
->
totaldata
;
key_totlength
+=
length
;
do_stat:
if
(
param
->
testflag
&
T_STATISTICS
)
update_key_parts
(
keyinfo
,
rec_per_key_part
,
param
->
unique_count
,
param
->
stats_method
==
MI_STATS_METHOD_IGNORE_NULLS
?
...
...
mysql-test/r/analyze.result
View file @
c98fbc03
...
...
@@ -30,6 +30,15 @@ check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
create table t1 (a mediumtext, fulltext key key1(a)) charset utf8 collate utf8_general_ci engine myisam;
insert into t1 values ('hello');
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status Table is already up to date
drop table t1;
CREATE TABLE t1 (a int);
prepare stmt1 from "SELECT * FROM t1 PROCEDURE ANALYSE()";
execute stmt1;
...
...
mysql-test/r/bdb.result
View file @
c98fbc03
...
...
@@ -1891,3 +1891,17 @@ t1 CREATE TABLE `t1` (
)
ENGINE=BerkeleyDB DEFAULT CHARSET=latin1
drop table t1;
set storage_engine=MyISAM;
create table t1 (a varchar(255) character set utf8,
b varchar(255) character set utf8,
c varchar(255) character set utf8,
d varchar(255) character set utf8,
key (a,b,c,d)) engine=bdb;
drop table t1;
create table t1 (a varchar(255) character set utf8,
b varchar(255) character set utf8,
c varchar(255) character set utf8,
d varchar(255) character set utf8,
e varchar(255) character set utf8,
key (a,b,c,d,e)) engine=bdb;
ERROR 42000: Specified key was too long; max key length is 3072 bytes
End of 5.0 tests
mysql-test/r/func_equal.result
View file @
c98fbc03
...
...
@@ -33,3 +33,12 @@ id value
select * from t1 where id <=> value or value<=>id;
id value
drop table t1,t2;
create table t1 (a bigint unsigned);
insert into t1 values (4828532208463511553);
select * from t1 where a = '4828532208463511553';
a
4828532208463511553
select * from t1 where a in ('4828532208463511553');
a
4828532208463511553
drop table t1;
mysql-test/r/innodb.result
View file @
c98fbc03
...
...
@@ -2772,3 +2772,17 @@ insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop table t1;
drop table t2;
commit;
create table t1 (a varchar(255) character set utf8,
b varchar(255) character set utf8,
c varchar(255) character set utf8,
d varchar(255) character set utf8,
key (a,b,c,d)) engine=innodb;
drop table t1;
create table t1 (a varchar(255) character set utf8,
b varchar(255) character set utf8,
c varchar(255) character set utf8,
d varchar(255) character set utf8,
e varchar(255) character set utf8,
key (a,b,c,d,e)) engine=innodb;
ERROR 42000: Specified key was too long; max key length is 3072 bytes
End of 5.0 tests
mysql-test/r/mysqldump.result
View file @
c98fbc03
...
...
@@ -2550,3 +2550,72 @@ DELIMITER ;
DROP TRIGGER tr1;
DROP TABLE t1;
create table t1 (a binary(1), b blob);
insert into t1 values ('','');
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` binary(1) default NULL,
`b` blob
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (0x00,'');
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` binary(1) default NULL,
`b` blob
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (0x00,'');
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
drop table t1;
mysql-test/t/analyze.test
View file @
c98fbc03
...
...
@@ -39,6 +39,20 @@ check table t1;
drop
table
t1
;
# Bug #14902 ANALYZE TABLE fails to recognize up-to-date tables
# minimal test case to get an error.
# The problem is happening when analysing table with FT index that
# contains stopwords only. The first execution of analyze table should
# mark index statistics as up to date so that next execution of this
# statement will end up with Table is up to date status.
create
table
t1
(
a
mediumtext
,
fulltext
key
key1
(
a
))
charset
utf8
collate
utf8_general_ci
engine
myisam
;
insert
into
t1
values
(
'hello'
);
analyze
table
t1
;
analyze
table
t1
;
drop
table
t1
;
#
# procedure in PS BUG#13673
#
...
...
mysql-test/t/bdb.test
View file @
c98fbc03
...
...
@@ -974,3 +974,22 @@ drop table t1;
# End varchar test
eval
set
storage_engine
=
$default
;
#
# Test that we can create a large key
#
create
table
t1
(
a
varchar
(
255
)
character
set
utf8
,
b
varchar
(
255
)
character
set
utf8
,
c
varchar
(
255
)
character
set
utf8
,
d
varchar
(
255
)
character
set
utf8
,
key
(
a
,
b
,
c
,
d
))
engine
=
bdb
;
drop
table
t1
;
--
error
ER_TOO_LONG_KEY
create
table
t1
(
a
varchar
(
255
)
character
set
utf8
,
b
varchar
(
255
)
character
set
utf8
,
c
varchar
(
255
)
character
set
utf8
,
d
varchar
(
255
)
character
set
utf8
,
e
varchar
(
255
)
character
set
utf8
,
key
(
a
,
b
,
c
,
d
,
e
))
engine
=
bdb
;
--
echo
End
of
5.0
tests
mysql-test/t/func_equal.test
View file @
c98fbc03
...
...
@@ -34,4 +34,13 @@ select * from t1 where value <=> value;
select
*
from
t1
where
id
<=>
value
or
value
<=>
id
;
drop
table
t1
,
t2
;
#
# Bug #12612: quoted bigint unsigned value and the use of "in" in where clause
#
create
table
t1
(
a
bigint
unsigned
);
insert
into
t1
values
(
4828532208463511553
);
select
*
from
t1
where
a
=
'4828532208463511553'
;
select
*
from
t1
where
a
in
(
'4828532208463511553'
);
drop
table
t1
;
# End of 4.1 tests
mysql-test/t/innodb.test
View file @
c98fbc03
...
...
@@ -1751,3 +1751,22 @@ insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
drop
table
t1
;
drop
table
t2
;
commit
;
#
# Test that we can create a large (>1K) key
#
create
table
t1
(
a
varchar
(
255
)
character
set
utf8
,
b
varchar
(
255
)
character
set
utf8
,
c
varchar
(
255
)
character
set
utf8
,
d
varchar
(
255
)
character
set
utf8
,
key
(
a
,
b
,
c
,
d
))
engine
=
innodb
;
drop
table
t1
;
--
error
ER_TOO_LONG_KEY
create
table
t1
(
a
varchar
(
255
)
character
set
utf8
,
b
varchar
(
255
)
character
set
utf8
,
c
varchar
(
255
)
character
set
utf8
,
d
varchar
(
255
)
character
set
utf8
,
e
varchar
(
255
)
character
set
utf8
,
key
(
a
,
b
,
c
,
d
,
e
))
engine
=
innodb
;
--
echo
End
of
5.0
tests
mysql-test/t/mysqldump.test
View file @
c98fbc03
...
...
@@ -605,6 +605,7 @@ select * from t2 order by a;
drop
table
t1
,
t2
;
drop
database
db1
;
#
# Bug #9558 mysqldump --no-data db t1 t2 format still dumps data
#
...
...
@@ -685,6 +686,7 @@ drop table t1, t2, t3;
drop
database
mysqldump_test_db
;
use
test
;
#
# Bug #9657 mysqldump xml ( -x ) does not format NULL fields correctly
#
...
...
@@ -1023,3 +1025,14 @@ SET SQL_MODE = @old_sql_mode;
DROP
TRIGGER
tr1
;
DROP
TABLE
t1
;
#
# Bug #13318: Bad result with empty field and --hex-blob
#
create
table
t1
(
a
binary
(
1
),
b
blob
);
insert
into
t1
values
(
''
,
''
);
--
exec
$MYSQL_DUMP
--
skip
-
comments
--
skip
-
extended
-
insert
--
hex
-
blob
test
t1
--
exec
$MYSQL_DUMP
--
skip
-
comments
--
hex
-
blob
test
t1
drop
table
t1
;
# End of 4.1 tests
sql/item_cmpfunc.cc
View file @
c98fbc03
...
...
@@ -25,6 +25,8 @@
#include <m_ctype.h>
#include "sql_select.h"
static
bool
convert_constant_item
(
THD
*
thd
,
Field
*
field
,
Item
**
item
);
static
Item_result
item_store_type
(
Item_result
a
,
Item_result
b
)
{
if
(
a
==
STRING_RESULT
||
b
==
STRING_RESULT
)
...
...
@@ -45,14 +47,37 @@ static void agg_result_type(Item_result *type, Item **items, uint nitems)
type
[
0
]
=
item_store_type
(
type
[
0
],
items
[
i
]
->
result_type
());
}
static
void
agg_cmp_type
(
Item_result
*
type
,
Item
**
items
,
uint
nitems
)
static
void
agg_cmp_type
(
THD
*
thd
,
Item_result
*
type
,
Item
**
items
,
uint
nitems
)
{
uint
i
;
Field
*
field
=
NULL
;
bool
all_constant
=
TRUE
;
/* If the first argument is a FIELD_ITEM, pull out the field. */
if
(
items
[
0
]
->
type
()
==
Item
::
FIELD_ITEM
)
field
=
((
Item_field
*
)
items
[
0
])
->
field
;
/* But if it can't be compared as a longlong, we don't really care. */
if
(
field
&&
!
field
->
can_be_compared_as_longlong
())
field
=
NULL
;
type
[
0
]
=
items
[
0
]
->
result_type
();
for
(
i
=
1
;
i
<
nitems
;
i
++
)
for
(
i
=
1
;
i
<
nitems
;
i
++
)
{
type
[
0
]
=
item_cmp_type
(
type
[
0
],
items
[
i
]
->
result_type
());
if
(
field
&&
!
convert_constant_item
(
thd
,
field
,
&
items
[
i
]))
all_constant
=
FALSE
;
}
/*
If we had a field that can be compared as a longlong, and all constant
items, then the aggregate result will be an INT_RESULT.
*/
if
(
field
&&
all_constant
)
type
[
0
]
=
INT_RESULT
;
}
static
void
my_coll_agg_error
(
DTCollation
&
c1
,
DTCollation
&
c2
,
const
char
*
fname
)
{
...
...
@@ -1051,32 +1076,11 @@ void Item_func_between::fix_length_and_dec()
*/
if
(
!
args
[
0
]
||
!
args
[
1
]
||
!
args
[
2
])
return
;
agg_cmp_type
(
&
cmp_type
,
args
,
3
);
agg_cmp_type
(
thd
,
&
cmp_type
,
args
,
3
);
if
(
cmp_type
==
STRING_RESULT
&&
agg_arg_charsets
(
cmp_collation
,
args
,
3
,
MY_COLL_CMP_CONV
))
return
;
/*
Make a special ease of compare with date/time and longlong fields.
They are compared as integers, so for const item this time-consuming
conversion can be done only once, not for every single comparison
*/
if
(
args
[
0
]
->
type
()
==
FIELD_ITEM
)
{
Field
*
field
=
((
Item_field
*
)
args
[
0
])
->
field
;
if
(
!
thd
->
is_context_analysis_only
()
&&
field
->
can_be_compared_as_longlong
())
{
/*
The following can't be recoded with || as convert_constant_item
changes the argument
*/
if
(
convert_constant_item
(
thd
,
field
,
&
args
[
1
]))
cmp_type
=
INT_RESULT
;
// Works for all types.
if
(
convert_constant_item
(
thd
,
field
,
&
args
[
2
]))
cmp_type
=
INT_RESULT
;
// Works for all types.
}
}
}
...
...
@@ -1722,6 +1726,7 @@ void Item_func_case::fix_length_and_dec()
{
Item
**
agg
;
uint
nagg
;
THD
*
thd
=
current_thd
;
if
(
!
(
agg
=
(
Item
**
)
sql_alloc
(
sizeof
(
Item
*
)
*
(
ncases
+
1
))))
return
;
...
...
@@ -1753,7 +1758,7 @@ void Item_func_case::fix_length_and_dec()
for
(
nagg
=
0
;
nagg
<
ncases
/
2
;
nagg
++
)
agg
[
nagg
+
1
]
=
args
[
nagg
*
2
];
nagg
++
;
agg_cmp_type
(
&
cmp_type
,
agg
,
nagg
);
agg_cmp_type
(
thd
,
&
cmp_type
,
agg
,
nagg
);
if
((
cmp_type
==
STRING_RESULT
)
&&
agg_arg_charsets
(
cmp_collation
,
agg
,
nagg
,
MY_COLL_CMP_CONV
))
return
;
...
...
@@ -2346,7 +2351,7 @@ void Item_func_in::fix_length_and_dec()
uint
const_itm
=
1
;
THD
*
thd
=
current_thd
;
agg_cmp_type
(
&
cmp_type
,
args
,
arg_count
);
agg_cmp_type
(
thd
,
&
cmp_type
,
args
,
arg_count
);
if
(
cmp_type
==
STRING_RESULT
&&
agg_arg_charsets
(
cmp_collation
,
args
,
arg_count
,
MY_COLL_CMP_CONV
))
...
...
sql/unireg.h
View file @
c98fbc03
...
...
@@ -50,11 +50,7 @@
#define MAX_SYS_VAR_LENGTH 32
#define MAX_KEY 64
/* Max used keys */
#define MAX_REF_PARTS 16
/* Max parts used as ref */
#if SIZEOF_CHARP > 4
#define MAX_KEY_LENGTH 3072
/* max possible key, if 64 bits */
#else
#define MAX_KEY_LENGTH 1024
/* max possible key, if 32 bits */
#endif
#define MAX_KEY_LENGTH 3072
/* max possible key */
#if SIZEOF_OFF_T > 4
#define MAX_REFLENGTH 8
/* Max length for record ref */
#else
...
...
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