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
1b61cb6d
Commit
1b61cb6d
authored
May 24, 2004
by
vva@eagle.mysql.r18.ru
Browse files
Options
Browse Files
Download
Plain Diff
Merge vvagin@bk-internal.mysql.com:/home/bk/mysql-4.1
into eagle.mysql.r18.ru:/home/vva/work/TASK_ALTER_INFO/mysql-4.1
parents
1acbfeaf
e2488c03
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
104 additions
and
103 deletions
+104
-103
sql/mysql_priv.h
sql/mysql_priv.h
+4
-7
sql/sql_lex.h
sql/sql_lex.h
+16
-6
sql/sql_parse.cc
sql/sql_parse.cc
+17
-20
sql/sql_table.cc
sql/sql_table.cc
+18
-19
sql/sql_yacc.yy
sql/sql_yacc.yy
+49
-51
No files found.
sql/mysql_priv.h
View file @
1b61cb6d
...
@@ -519,13 +519,10 @@ int mysql_alter_table(THD *thd, char *new_db, char *new_name,
...
@@ -519,13 +519,10 @@ int mysql_alter_table(THD *thd, char *new_db, char *new_name,
HA_CREATE_INFO
*
create_info
,
HA_CREATE_INFO
*
create_info
,
TABLE_LIST
*
table_list
,
TABLE_LIST
*
table_list
,
List
<
create_field
>
&
fields
,
List
<
create_field
>
&
fields
,
List
<
Key
>
&
keys
,
List
<
Alter_drop
>
&
drop_list
,
List
<
Key
>
&
keys
,
List
<
Alter_column
>
&
alter_list
,
uint
order_num
,
ORDER
*
order
,
uint
order_num
,
ORDER
*
order
,
uint
alter_flags
,
enum
enum_duplicates
handle_duplicates
,
enum
enum_duplicates
handle_duplicates
,
enum
enum_enable_or_disable
keys_onoff
=
LEAVE_AS_IS
,
ALTER_INFO
*
alter_info
);
enum
tablespace_op_type
tablespace_op
=
NO_TABLESPACE_OP
,
bool
simple_alter
=
0
);
int
mysql_create_like_table
(
THD
*
thd
,
TABLE_LIST
*
table
,
int
mysql_create_like_table
(
THD
*
thd
,
TABLE_LIST
*
table
,
HA_CREATE_INFO
*
create_info
,
HA_CREATE_INFO
*
create_info
,
Table_ident
*
src_table
);
Table_ident
*
src_table
);
...
@@ -536,7 +533,7 @@ bool mysql_rename_table(enum db_type base,
...
@@ -536,7 +533,7 @@ bool mysql_rename_table(enum db_type base,
const
char
*
new_name
);
const
char
*
new_name
);
int
mysql_create_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Key
>
&
keys
);
int
mysql_create_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Key
>
&
keys
);
int
mysql_drop_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
int
mysql_drop_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Alter_drop
>
&
drop_list
);
ALTER_INFO
*
alter_info
);
int
mysql_prepare_update
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
int
mysql_prepare_update
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
TABLE_LIST
*
update_table_list
,
TABLE_LIST
*
update_table_list
,
Item
**
conds
,
uint
order_num
,
ORDER
*
order
);
Item
**
conds
,
uint
order_num
,
ORDER
*
order
);
...
...
sql/sql_lex.h
View file @
1b61cb6d
...
@@ -532,6 +532,20 @@ typedef class st_select_lex SELECT_LEX;
...
@@ -532,6 +532,20 @@ typedef class st_select_lex SELECT_LEX;
#define ALTER_ORDER 64
#define ALTER_ORDER 64
#define ALTER_OPTIONS 128
#define ALTER_OPTIONS 128
typedef
struct
st_alter_info
{
List
<
Alter_drop
>
drop_list
;
List
<
Alter_column
>
alter_list
;
uint
flags
;
enum
enum_enable_or_disable
keys_onoff
;
enum
tablespace_op_type
tablespace_op
;
bool
is_simple
;
st_alter_info
(){
clear
();}
void
clear
(){
keys_onoff
=
LEAVE_AS_IS
;
tablespace_op
=
NO_TABLESPACE_OP
;}
void
reset
(){
drop_list
.
empty
();
alter_list
.
empty
();
clear
();}
}
ALTER_INFO
;
/* The state of the lex parsing. This is saved in the THD struct */
/* The state of the lex parsing. This is saved in the THD struct */
typedef
struct
st_lex
typedef
struct
st_lex
...
@@ -564,8 +578,6 @@ typedef struct st_lex
...
@@ -564,8 +578,6 @@ typedef struct st_lex
List
<
key_part_spec
>
col_list
;
List
<
key_part_spec
>
col_list
;
List
<
key_part_spec
>
ref_list
;
List
<
key_part_spec
>
ref_list
;
List
<
Alter_drop
>
drop_list
;
List
<
Alter_column
>
alter_list
;
List
<
String
>
interval_list
;
List
<
String
>
interval_list
;
List
<
LEX_USER
>
users_list
;
List
<
LEX_USER
>
users_list
;
List
<
LEX_COLUMN
>
columns
;
List
<
LEX_COLUMN
>
columns
;
...
@@ -593,19 +605,17 @@ typedef struct st_lex
...
@@ -593,19 +605,17 @@ typedef struct st_lex
enum
enum_tx_isolation
tx_isolation
;
enum
enum_tx_isolation
tx_isolation
;
enum
enum_ha_read_modes
ha_read_mode
;
enum
enum_ha_read_modes
ha_read_mode
;
enum
ha_rkey_function
ha_rkey_mode
;
enum
ha_rkey_function
ha_rkey_mode
;
enum
enum_enable_or_disable
alter_keys_onoff
;
enum
enum_var_type
option_type
;
enum
enum_var_type
option_type
;
enum
tablespace_op_type
tablespace_op
;
uint
uint_geom_type
;
uint
uint_geom_type
;
uint
grant
,
grant_tot_col
,
which_columns
;
uint
grant
,
grant_tot_col
,
which_columns
;
uint
fk_delete_opt
,
fk_update_opt
,
fk_match_option
;
uint
fk_delete_opt
,
fk_update_opt
,
fk_match_option
;
uint
slave_thd_opt
;
uint
slave_thd_opt
;
uint
alter_flags
;
uint8
describe
;
uint8
describe
;
bool
drop_if_exists
,
drop_temporary
,
local_file
;
bool
drop_if_exists
,
drop_temporary
,
local_file
;
bool
in_comment
,
ignore_space
,
verbose
,
simple_alter
,
no_write_to_binlog
;
bool
in_comment
,
ignore_space
,
verbose
,
no_write_to_binlog
;
bool
derived_tables
;
bool
derived_tables
;
bool
safe_to_cache_query
;
bool
safe_to_cache_query
;
ALTER_INFO
alter_info
;
st_lex
()
{}
st_lex
()
{}
inline
void
uncacheable
(
uint8
cause
)
inline
void
uncacheable
(
uint8
cause
)
{
{
...
...
sql/sql_parse.cc
View file @
1b61cb6d
...
@@ -2368,14 +2368,10 @@ unsent_create_error:
...
@@ -2368,14 +2368,10 @@ unsent_create_error:
res
=
mysql_alter_table
(
thd
,
select_lex
->
db
,
lex
->
name
,
res
=
mysql_alter_table
(
thd
,
select_lex
->
db
,
lex
->
name
,
&
lex
->
create_info
,
&
lex
->
create_info
,
tables
,
lex
->
create_list
,
tables
,
lex
->
create_list
,
lex
->
key_list
,
lex
->
drop_list
,
lex
->
alter_list
,
lex
->
key_list
,
select_lex
->
order_list
.
elements
,
select_lex
->
order_list
.
elements
,
(
ORDER
*
)
select_lex
->
order_list
.
first
,
(
ORDER
*
)
select_lex
->
order_list
.
first
,
lex
->
alter_flags
,
lex
->
duplicates
,
&
lex
->
alter_info
);
lex
->
duplicates
,
lex
->
alter_keys_onoff
,
lex
->
tablespace_op
,
lex
->
simple_alter
);
}
}
break
;
break
;
}
}
...
@@ -2514,17 +2510,15 @@ unsent_create_error:
...
@@ -2514,17 +2510,15 @@ unsent_create_error:
lex
->
create_list
.
empty
();
lex
->
create_list
.
empty
();
lex
->
key_list
.
empty
();
lex
->
key_list
.
empty
();
lex
->
col_list
.
empty
();
lex
->
col_list
.
empty
();
lex
->
drop_list
.
empty
();
lex
->
alter_info
.
reset
();
lex
->
alter_list
.
empty
();
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
create_info
.
db_type
=
DB_TYPE_DEFAULT
;
create_info
.
db_type
=
DB_TYPE_DEFAULT
;
create_info
.
row_type
=
ROW_TYPE_DEFAULT
;
create_info
.
row_type
=
ROW_TYPE_DEFAULT
;
create_info
.
default_table_charset
=
default_charset_info
;
create_info
.
default_table_charset
=
default_charset_info
;
res
=
mysql_alter_table
(
thd
,
NullS
,
NullS
,
&
create_info
,
res
=
mysql_alter_table
(
thd
,
NullS
,
NullS
,
&
create_info
,
tables
,
lex
->
create_list
,
tables
,
lex
->
create_list
,
lex
->
key_list
,
lex
->
drop_list
,
lex
->
alter_list
,
lex
->
key_list
,
0
,
(
ORDER
*
)
0
,
0
,
(
ORDER
*
)
0
,
0
,
DUP_ERROR
,
&
lex
->
alter_info
);
DUP_ERROR
);
}
}
else
else
res
=
mysql_optimize_table
(
thd
,
tables
,
&
lex
->
check_opt
);
res
=
mysql_optimize_table
(
thd
,
tables
,
&
lex
->
check_opt
);
...
@@ -2754,7 +2748,7 @@ unsent_create_error:
...
@@ -2754,7 +2748,7 @@ unsent_create_error:
if
(
end_active_trans
(
thd
))
if
(
end_active_trans
(
thd
))
res
=
-
1
;
res
=
-
1
;
else
else
res
=
mysql_drop_index
(
thd
,
tables
,
lex
->
drop_list
);
res
=
mysql_drop_index
(
thd
,
tables
,
&
lex
->
alter_info
);
break
;
break
;
case
SQLCOM_SHOW_DATABASES
:
case
SQLCOM_SHOW_DATABASES
:
#if defined(DONT_ALLOW_SHOW_COMMANDS)
#if defined(DONT_ALLOW_SHOW_COMMANDS)
...
@@ -4903,8 +4897,9 @@ Item * all_any_subquery_creator(Item *left_expr,
...
@@ -4903,8 +4897,9 @@ Item * all_any_subquery_creator(Item *left_expr,
int
mysql_create_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Key
>
&
keys
)
int
mysql_create_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Key
>
&
keys
)
{
{
List
<
create_field
>
fields
;
List
<
create_field
>
fields
;
List
<
Alter_drop
>
drop
;
ALTER_INFO
alter_info
;
List
<
Alter_column
>
alter
;
alter_info
.
flags
=
ALTER_ADD_INDEX
;
alter_info
.
is_simple
=
0
;
HA_CREATE_INFO
create_info
;
HA_CREATE_INFO
create_info
;
DBUG_ENTER
(
"mysql_create_index"
);
DBUG_ENTER
(
"mysql_create_index"
);
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
...
@@ -4912,25 +4907,27 @@ int mysql_create_index(THD *thd, TABLE_LIST *table_list, List<Key> &keys)
...
@@ -4912,25 +4907,27 @@ int mysql_create_index(THD *thd, TABLE_LIST *table_list, List<Key> &keys)
create_info
.
default_table_charset
=
thd
->
variables
.
collation_database
;
create_info
.
default_table_charset
=
thd
->
variables
.
collation_database
;
DBUG_RETURN
(
mysql_alter_table
(
thd
,
table_list
->
db
,
table_list
->
real_name
,
DBUG_RETURN
(
mysql_alter_table
(
thd
,
table_list
->
db
,
table_list
->
real_name
,
&
create_info
,
table_list
,
&
create_info
,
table_list
,
fields
,
keys
,
drop
,
alter
,
0
,
(
ORDER
*
)
0
,
fields
,
keys
,
0
,
(
ORDER
*
)
0
,
ALTER_ADD_INDEX
,
DUP_ERROR
));
DUP_ERROR
,
&
alter_info
));
}
}
int
mysql_drop_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
List
<
Alter_drop
>
&
drop
)
int
mysql_drop_index
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
ALTER_INFO
*
alter_info
)
{
{
List
<
create_field
>
fields
;
List
<
create_field
>
fields
;
List
<
Key
>
keys
;
List
<
Key
>
keys
;
List
<
Alter_column
>
alter
;
HA_CREATE_INFO
create_info
;
HA_CREATE_INFO
create_info
;
DBUG_ENTER
(
"mysql_drop_index"
);
DBUG_ENTER
(
"mysql_drop_index"
);
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
bzero
((
char
*
)
&
create_info
,
sizeof
(
create_info
));
create_info
.
db_type
=
DB_TYPE_DEFAULT
;
create_info
.
db_type
=
DB_TYPE_DEFAULT
;
create_info
.
default_table_charset
=
thd
->
variables
.
collation_database
;
create_info
.
default_table_charset
=
thd
->
variables
.
collation_database
;
alter_info
->
clear
();
alter_info
->
flags
=
ALTER_DROP_INDEX
;
alter_info
->
is_simple
=
0
;
DBUG_RETURN
(
mysql_alter_table
(
thd
,
table_list
->
db
,
table_list
->
real_name
,
DBUG_RETURN
(
mysql_alter_table
(
thd
,
table_list
->
db
,
table_list
->
real_name
,
&
create_info
,
table_list
,
&
create_info
,
table_list
,
fields
,
keys
,
drop
,
alter
,
0
,
(
ORDER
*
)
0
,
fields
,
keys
,
0
,
(
ORDER
*
)
0
,
ALTER_DROP_INDEX
,
DUP_ERROR
));
DUP_ERROR
,
alter_info
));
}
}
...
...
sql/sql_table.cc
View file @
1b61cb6d
...
@@ -2467,14 +2467,10 @@ int mysql_drop_indexes(THD *thd, TABLE_LIST *table_list,
...
@@ -2467,14 +2467,10 @@ int mysql_drop_indexes(THD *thd, TABLE_LIST *table_list,
int
mysql_alter_table
(
THD
*
thd
,
char
*
new_db
,
char
*
new_name
,
int
mysql_alter_table
(
THD
*
thd
,
char
*
new_db
,
char
*
new_name
,
HA_CREATE_INFO
*
create_info
,
HA_CREATE_INFO
*
create_info
,
TABLE_LIST
*
table_list
,
TABLE_LIST
*
table_list
,
List
<
create_field
>
&
fields
,
List
<
create_field
>
&
fields
,
List
<
Key
>
&
keys
,
List
<
Key
>
&
keys
,
List
<
Alter_drop
>
&
drop_list
,
uint
order_num
,
ORDER
*
order
,
List
<
Alter_column
>
&
alter_list
,
uint
order_num
,
ORDER
*
order
,
uint
alter_flags
,
enum
enum_duplicates
handle_duplicates
,
enum
enum_duplicates
handle_duplicates
,
enum
enum_enable_or_disable
keys_onoff
,
ALTER_INFO
*
alter_info
)
enum
tablespace_op_type
tablespace_op
,
bool
simple_alter
)
{
{
TABLE
*
table
,
*
new_table
;
TABLE
*
table
,
*
new_table
;
int
error
;
int
error
;
...
@@ -2499,9 +2495,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2499,9 +2495,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
mysql_ha_closeall
(
thd
,
table_list
);
mysql_ha_closeall
(
thd
,
table_list
);
/* DISCARD/IMPORT TABLESPACE is always alone in an ALTER TABLE */
/* DISCARD/IMPORT TABLESPACE is always alone in an ALTER TABLE */
if
(
tablespace_op
!=
NO_TABLESPACE_OP
)
if
(
alter_info
->
tablespace_op
!=
NO_TABLESPACE_OP
)
DBUG_RETURN
(
mysql_discard_or_import_tablespace
(
thd
,
table_list
,
DBUG_RETURN
(
mysql_discard_or_import_tablespace
(
thd
,
table_list
,
tablespace_op
));
alter_info
->
tablespace_op
));
if
(
!
(
table
=
open_ltable
(
thd
,
table_list
,
TL_WRITE_ALLOW_READ
)))
if
(
!
(
table
=
open_ltable
(
thd
,
table_list
,
TL_WRITE_ALLOW_READ
)))
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
...
@@ -2570,7 +2566,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2570,7 +2566,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
create_info
->
row_type
=
table
->
row_type
;
create_info
->
row_type
=
table
->
row_type
;
thd
->
proc_info
=
"setup"
;
thd
->
proc_info
=
"setup"
;
if
(
simple_alter
&&
!
table
->
tmp_table
)
if
(
alter_info
->
is_simple
&&
!
table
->
tmp_table
)
{
{
error
=
0
;
error
=
0
;
if
(
new_name
!=
table_name
||
new_db
!=
db
)
if
(
new_name
!=
table_name
||
new_db
!=
db
)
...
@@ -2596,7 +2592,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2596,7 +2592,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
if
(
!
error
)
if
(
!
error
)
{
{
switch
(
keys_onoff
)
{
switch
(
alter_info
->
keys_onoff
)
{
case
LEAVE_AS_IS
:
case
LEAVE_AS_IS
:
break
;
break
;
case
ENABLE
:
case
ENABLE
:
...
@@ -2656,9 +2652,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2656,9 +2652,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
create_info
->
default_table_charset
=
table
->
table_charset
;
create_info
->
default_table_charset
=
table
->
table_charset
;
restore_record
(
table
,
default_values
);
// Empty record for DEFAULT
restore_record
(
table
,
default_values
);
// Empty record for DEFAULT
List_iterator
<
Alter_drop
>
drop_it
(
drop_list
);
List_iterator
<
Alter_drop
>
drop_it
(
alter_info
->
drop_list
);
List_iterator
<
create_field
>
def_it
(
fields
);
List_iterator
<
create_field
>
def_it
(
fields
);
List_iterator
<
Alter_column
>
alter_it
(
alter_list
);
List_iterator
<
Alter_column
>
alter_it
(
alter_
info
->
alter_
list
);
List
<
create_field
>
create_list
;
// Add new fields here
List
<
create_field
>
create_list
;
// Add new fields here
List
<
Key
>
key_list
;
// Add new keys here
List
<
Key
>
key_list
;
// Add new keys here
create_field
*
def
;
create_field
*
def
;
...
@@ -2762,9 +2758,10 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2762,9 +2758,10 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
find_it
.
after
(
def
);
// Put element after this
find_it
.
after
(
def
);
// Put element after this
}
}
}
}
if
(
alter_list
.
elements
)
if
(
alter_
info
->
alter_
list
.
elements
)
{
{
my_error
(
ER_BAD_FIELD_ERROR
,
MYF
(
0
),
alter_list
.
head
()
->
name
,
table_name
);
my_error
(
ER_BAD_FIELD_ERROR
,
MYF
(
0
),
alter_info
->
alter_list
.
head
()
->
name
,
table_name
);
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
}
}
if
(
!
create_list
.
elements
)
if
(
!
create_list
.
elements
)
...
@@ -2864,14 +2861,16 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2864,14 +2861,16 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
}
}
}
}
if
(
drop_list
.
elements
)
if
(
alter_info
->
drop_list
.
elements
)
{
{
my_error
(
ER_CANT_DROP_FIELD_OR_KEY
,
MYF
(
0
),
drop_list
.
head
()
->
name
);
my_error
(
ER_CANT_DROP_FIELD_OR_KEY
,
MYF
(
0
),
alter_info
->
drop_list
.
head
()
->
name
);
goto
err
;
goto
err
;
}
}
if
(
alter_list
.
elements
)
if
(
alter_
info
->
alter_
list
.
elements
)
{
{
my_error
(
ER_CANT_DROP_FIELD_OR_KEY
,
MYF
(
0
),
alter_list
.
head
()
->
name
);
my_error
(
ER_CANT_DROP_FIELD_OR_KEY
,
MYF
(
0
),
alter_info
->
alter_list
.
head
()
->
name
);
goto
err
;
goto
err
;
}
}
...
...
sql/sql_yacc.yy
View file @
1b61cb6d
...
@@ -1455,25 +1455,25 @@ attribute:
...
@@ -1455,25 +1455,25 @@ attribute:
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG;
lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG;
lex->alter_flags|= ALTER_ADD_INDEX;
lex->alter_
info.
flags|= ALTER_ADD_INDEX;
}
}
| opt_primary KEY_SYM
| opt_primary KEY_SYM
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG;
lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG;
lex->alter_flags|= ALTER_ADD_INDEX;
lex->alter_
info.
flags|= ALTER_ADD_INDEX;
}
}
| UNIQUE_SYM
| UNIQUE_SYM
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->type|= UNIQUE_FLAG;
lex->type|= UNIQUE_FLAG;
lex->alter_flags|= ALTER_ADD_INDEX;
lex->alter_
info.
flags|= ALTER_ADD_INDEX;
}
}
| UNIQUE_SYM KEY_SYM
| UNIQUE_SYM KEY_SYM
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->type|= UNIQUE_KEY_FLAG;
lex->type|= UNIQUE_KEY_FLAG;
lex->alter_flags|= ALTER_ADD_INDEX;
lex->alter_
info.
flags|= ALTER_ADD_INDEX;
}
}
| COMMENT_SYM TEXT_STRING_sys { Lex->comment= &$2; }
| COMMENT_SYM TEXT_STRING_sys { Lex->comment= &$2; }
| BINARY { Lex->type|= BINCMP_FLAG; }
| BINARY { Lex->type|= BINCMP_FLAG; }
...
@@ -1721,18 +1721,15 @@ alter:
...
@@ -1721,18 +1721,15 @@ alter:
lex->create_list.empty();
lex->create_list.empty();
lex->key_list.empty();
lex->key_list.empty();
lex->col_list.empty();
lex->col_list.empty();
lex->drop_list.empty();
lex->alter_list.empty();
lex->select_lex.init_order();
lex->select_lex.init_order();
lex->select_lex.db=lex->name=0;
lex->select_lex.db=lex->name=0;
bzero((char*) &lex->create_info,sizeof(lex->create_info));
bzero((char*) &lex->create_info,sizeof(lex->create_info));
lex->create_info.db_type= DB_TYPE_DEFAULT;
lex->create_info.db_type= DB_TYPE_DEFAULT;
lex->create_info.default_table_charset= thd->variables.collation_database;
lex->create_info.default_table_charset= thd->variables.collation_database;
lex->create_info.row_type= ROW_TYPE_NOT_USED;
lex->create_info.row_type= ROW_TYPE_NOT_USED;
lex->alter_keys_onoff=LEAVE_AS_IS;
lex->alter_info.clear();
lex->tablespace_op=NO_TABLESPACE_OP;
lex->alter_info.is_simple= 1;
lex->simple_alter=1;
lex->alter_info.flags= 0;
lex->alter_flags=0;
}
}
alter_list
alter_list
{}
{}
...
@@ -1745,8 +1742,8 @@ alter:
...
@@ -1745,8 +1742,8 @@ alter:
alter_list:
alter_list:
| DISCARD TABLESPACE { Lex->
tablespace_op=
DISCARD_TABLESPACE; }
| DISCARD TABLESPACE { Lex->
alter_info.tablespace_op=
DISCARD_TABLESPACE; }
| IMPORT TABLESPACE { Lex->
tablespace_op=
IMPORT_TABLESPACE; }
| IMPORT TABLESPACE { Lex->
alter_info.tablespace_op=
IMPORT_TABLESPACE; }
| alter_list_item
| alter_list_item
| alter_list ',' alter_list_item;
| alter_list ',' alter_list_item;
...
@@ -1755,24 +1752,24 @@ add_column:
...
@@ -1755,24 +1752,24 @@ add_column:
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->change=0;
lex->change=0;
lex->alter_flags|= ALTER_ADD_COLUMN;
lex->alter_
info.
flags|= ALTER_ADD_COLUMN;
};
};
alter_list_item:
alter_list_item:
add_column column_def opt_place { Lex->
simple_alter=
0; }
add_column column_def opt_place { Lex->
alter_info.is_simple=
0; }
| ADD key_def
| ADD key_def
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_ADD_INDEX;
lex->alter_
info.
flags|= ALTER_ADD_INDEX;
}
}
| add_column '(' field_list ')' { Lex->
simple_alter=
0; }
| add_column '(' field_list ')' { Lex->
alter_info.is_simple=
0; }
| CHANGE opt_column field_ident
| CHANGE opt_column field_ident
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->change= $3.str;
lex->change= $3.str;
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_CHANGE_COLUMN;
lex->alter_
info.
flags|= ALTER_CHANGE_COLUMN;
}
}
field_spec opt_place
field_spec opt_place
| MODIFY_SYM opt_column field_ident
| MODIFY_SYM opt_column field_ident
...
@@ -1782,8 +1779,8 @@ alter_list_item:
...
@@ -1782,8 +1779,8 @@ alter_list_item:
lex->default_value= lex->on_update_value= 0;
lex->default_value= lex->on_update_value= 0;
lex->comment=0;
lex->comment=0;
lex->charset= NULL;
lex->charset= NULL;
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_CHANGE_COLUMN;
lex->alter_
info.
flags|= ALTER_CHANGE_COLUMN;
}
}
type opt_attribute
type opt_attribute
{
{
...
@@ -1801,50 +1798,51 @@ alter_list_item:
...
@@ -1801,50 +1798,51 @@ alter_list_item:
| DROP opt_column field_ident opt_restrict
| DROP opt_column field_ident opt_restrict
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->drop_list.push_back(new Alter_drop(Alter_drop::COLUMN,
lex->
alter_info.
drop_list.push_back(new Alter_drop(Alter_drop::COLUMN,
$3.str));
$3.str));
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_DROP_COLUMN;
lex->alter_
info.
flags|= ALTER_DROP_COLUMN;
}
}
| DROP FOREIGN KEY_SYM opt_ident { Lex->
simple_alter=
0; }
| DROP FOREIGN KEY_SYM opt_ident { Lex->
alter_info.is_simple=
0; }
| DROP PRIMARY_SYM KEY_SYM
| DROP PRIMARY_SYM KEY_SYM
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->drop_list.push_back(new Alter_drop(Alter_drop::KEY,
lex->
alter_info.
drop_list.push_back(new Alter_drop(Alter_drop::KEY,
primary_key_name));
primary_key_name));
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_DROP_INDEX;
lex->alter_
info.
flags|= ALTER_DROP_INDEX;
}
}
| DROP key_or_index field_ident
| DROP key_or_index field_ident
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->drop_list.push_back(new Alter_drop(Alter_drop::KEY,
lex->
alter_info.
drop_list.push_back(new Alter_drop(Alter_drop::KEY,
$3.str));
$3.str));
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_DROP_INDEX;
lex->alter_
info.
flags|= ALTER_DROP_INDEX;
}
}
| DISABLE_SYM KEYS { Lex->alter_
keys_onoff=
DISABLE; }
| DISABLE_SYM KEYS { Lex->alter_
info.keys_onoff=
DISABLE; }
| ENABLE_SYM KEYS { Lex->alter_
keys_onoff=
ENABLE; }
| ENABLE_SYM KEYS { Lex->alter_
info.keys_onoff=
ENABLE; }
| ALTER opt_column field_ident SET DEFAULT signed_literal
| ALTER opt_column field_ident SET DEFAULT signed_literal
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->alter_list.push_back(new Alter_column($3.str,$6));
lex->alter_
info.alter_
list.push_back(new Alter_column($3.str,$6));
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_CHANGE_COLUMN;
lex->alter_
info.
flags|= ALTER_CHANGE_COLUMN;
}
}
| ALTER opt_column field_ident DROP DEFAULT
| ALTER opt_column field_ident DROP DEFAULT
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->alter_list.push_back(new Alter_column($3.str,(Item*) 0));
lex->alter_info.alter_list.push_back(new Alter_column($3.str,
lex->simple_alter=0;
(Item*) 0));
lex->alter_flags|= ALTER_CHANGE_COLUMN;
lex->alter_info.is_simple= 0;
lex->alter_info.flags|= ALTER_CHANGE_COLUMN;
}
}
| RENAME opt_to table_ident
| RENAME opt_to table_ident
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->select_lex.db=$3->db.str;
lex->select_lex.db=$3->db.str;
lex->name= $3->table.str;
lex->name= $3->table.str;
lex->alter_flags|= ALTER_RENAME;
lex->alter_
info.
flags|= ALTER_RENAME;
}
}
| CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate
| CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate
{
{
...
@@ -1865,19 +1863,19 @@ alter_list_item:
...
@@ -1865,19 +1863,19 @@ alter_list_item:
lex->create_info.default_table_charset= $5;
lex->create_info.default_table_charset= $5;
lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET |
lex->create_info.used_fields|= (HA_CREATE_USED_CHARSET |
HA_CREATE_USED_DEFAULT_CHARSET);
HA_CREATE_USED_DEFAULT_CHARSET);
lex->
simple_alter
= 0;
lex->
alter_info.is_simple
= 0;
}
}
| create_table_options_space_separated
| create_table_options_space_separated
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_OPTIONS;
lex->alter_
info.
flags|= ALTER_OPTIONS;
}
}
| order_clause
| order_clause
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->
simple_alter=
0;
lex->
alter_info.is_simple=
0;
lex->alter_flags|= ALTER_ORDER;
lex->alter_
info.
flags|= ALTER_ORDER;
};
};
opt_column:
opt_column:
...
@@ -3776,8 +3774,8 @@ drop:
...
@@ -3776,8 +3774,8 @@ drop:
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command= SQLCOM_DROP_INDEX;
lex->sql_command= SQLCOM_DROP_INDEX;
lex->drop_list.empty();
lex->
alter_info.
drop_list.empty();
lex->drop_list.push_back(new Alter_drop(Alter_drop::KEY,
lex->
alter_info.
drop_list.push_back(new Alter_drop(Alter_drop::KEY,
$3.str));
$3.str));
if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL,
if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL,
TL_OPTION_UPDATING))
TL_OPTION_UPDATING))
...
...
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