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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
1055c360
Commit
1055c360
authored
Jun 09, 2005
by
jimw@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/jimw/my/mysql-5.0-10543
into mysql.com:/home/jimw/my/mysql-5.0-clean
parents
153f2336
d147e69b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
126 additions
and
6 deletions
+126
-6
mysql-test/r/key.result
mysql-test/r/key.result
+25
-0
mysql-test/r/type_varchar.result
mysql-test/r/type_varchar.result
+23
-0
mysql-test/t/key.test
mysql-test/t/key.test
+13
-0
mysql-test/t/type_varchar.test
mysql-test/t/type_varchar.test
+12
-0
sql/field.cc
sql/field.cc
+33
-0
sql/field.h
sql/field.h
+1
-0
sql/sql_table.cc
sql/sql_table.cc
+19
-6
No files found.
mysql-test/r/key.result
View file @
1055c360
...
...
@@ -329,3 +329,28 @@ ERROR 42S21: Duplicate column name 'c1'
alter table t1 add key (c1,c1,c2);
ERROR 42S21: Duplicate column name 'c1'
drop table t1;
create table t1 (a varchar(10), b varchar(10), key(a(10),b(10)));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(10) default NULL,
`b` varchar(10) default NULL,
KEY `a` (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 modify b varchar(20);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(10) default NULL,
`b` varchar(20) default NULL,
KEY `a` (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 modify a varchar(20);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(20) default NULL,
`b` varchar(20) default NULL,
KEY `a` (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
mysql-test/r/type_varchar.result
View file @
1055c360
...
...
@@ -392,3 +392,26 @@ group by t1.b, t1.a;
a b min(t1.b)
22 NULL NULL
drop table t1, t2;
create table t1 (f1 varchar(65500));
create index index1 on t1(f1(10));
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` varchar(65500) default NULL,
KEY `index1` (`f1`(10))
) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 modify f1 varchar(255);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` varchar(255) default NULL,
KEY `index1` (`f1`(10))
) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 modify f1 tinytext;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` tinytext,
KEY `index1` (`f1`(10))
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
mysql-test/t/key.test
View file @
1055c360
...
...
@@ -324,3 +324,16 @@ alter table t1 add key (c1,c2,c1);
--
error
1060
alter
table
t1
add
key
(
c1
,
c1
,
c2
);
drop
table
t1
;
#
# If we use a partial field for a key that is actually the length of the
# field, and we extend the field, we end up with a key that includes the
# whole new length of the field.
#
create
table
t1
(
a
varchar
(
10
),
b
varchar
(
10
),
key
(
a
(
10
),
b
(
10
)));
show
create
table
t1
;
alter
table
t1
modify
b
varchar
(
20
);
show
create
table
t1
;
alter
table
t1
modify
a
varchar
(
20
);
show
create
table
t1
;
drop
table
t1
;
mysql-test/t/type_varchar.test
View file @
1055c360
...
...
@@ -118,3 +118,15 @@ insert into t2 values (22), (22);
select
t1
.
a
,
t1
.
b
,
min
(
t1
.
b
)
from
t1
inner
join
t2
ON
t2
.
a
=
t1
.
a
group
by
t1
.
b
,
t1
.
a
;
drop
table
t1
,
t2
;
#
# Bug #10543: convert varchar with index to text
#
create
table
t1
(
f1
varchar
(
65500
));
create
index
index1
on
t1
(
f1
(
10
));
show
create
table
t1
;
alter
table
t1
modify
f1
varchar
(
255
);
show
create
table
t1
;
alter
table
t1
modify
f1
tinytext
;
show
create
table
t1
;
drop
table
t1
;
sql/field.cc
View file @
1055c360
...
...
@@ -982,6 +982,39 @@ Item_result Field::result_merge_type(enum_field_types field_type)
Static help functions
*****************************************************************************/
/*
Check whether a field type can be partially indexed by a key
This is a static method, rather than a virtual function, because we need
to check the type of a non-Field in mysql_alter_table().
SYNOPSIS
type_can_have_key_part()
type field type
RETURN
TRUE Type can have a prefixed key
FALSE Type can not have a prefixed key
*/
bool
Field
::
type_can_have_key_part
(
enum
enum_field_types
type
)
{
switch
(
type
)
{
case
MYSQL_TYPE_VARCHAR
:
case
MYSQL_TYPE_TINY_BLOB
:
case
MYSQL_TYPE_MEDIUM_BLOB
:
case
MYSQL_TYPE_LONG_BLOB
:
case
MYSQL_TYPE_BLOB
:
case
MYSQL_TYPE_VAR_STRING
:
case
MYSQL_TYPE_STRING
:
return
TRUE
;
default:
return
FALSE
;
}
}
/*
Numeric fields base class constructor
*/
...
...
sql/field.h
View file @
1055c360
...
...
@@ -119,6 +119,7 @@ class Field
virtual
Item_result
result_type
()
const
=
0
;
virtual
Item_result
cmp_type
()
const
{
return
result_type
();
}
virtual
Item_result
cast_to_int_type
()
const
{
return
result_type
();
}
static
bool
type_can_have_key_part
(
enum_field_types
);
static
enum_field_types
field_type_merge
(
enum_field_types
,
enum_field_types
);
static
Item_result
result_merge_type
(
enum_field_types
);
bool
eq
(
Field
*
field
)
...
...
sql/sql_table.cc
View file @
1055c360
...
...
@@ -3398,12 +3398,25 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
continue
;
// Field is removed
uint
key_part_length
=
key_part
->
length
;
if
(
cfield
->
field
)
// Not new field
{
// Check if sub key
if
(
cfield
->
field
->
type
()
!=
FIELD_TYPE_BLOB
&&
(
cfield
->
field
->
pack_length
()
==
key_part_length
||
cfield
->
length
<=
key_part_length
/
key_part
->
field
->
charset
()
->
mbmaxlen
))
key_part_length
=
0
;
// Use whole field
{
/*
If the field can't have only a part used in a key according to its
new type, or should not be used partially according to its
previous type, or the field length is less than the key part
length, unset the key part length.
We also unset the key part length if it is the same as the
old field's length, so the whole new field will be used.
BLOBs may have cfield->length == 0, which is why we test it before
checking whether cfield->length < key_part_length (in chars).
*/
if
(
!
Field
::
type_can_have_key_part
(
cfield
->
field
->
type
())
||
!
Field
::
type_can_have_key_part
(
cfield
->
sql_type
)
||
cfield
->
field
->
field_length
==
key_part_length
||
(
cfield
->
length
&&
(
cfield
->
length
<
key_part_length
/
key_part
->
field
->
charset
()
->
mbmaxlen
)))
key_part_length
=
0
;
// Use whole field
}
key_part_length
/=
key_part
->
field
->
charset
()
->
mbmaxlen
;
key_parts
.
push_back
(
new
key_part_spec
(
cfield
->
field_name
,
...
...
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