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
d7b7e092
Commit
d7b7e092
authored
Apr 15, 2002
by
sasha@mysql.sashanet.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reckless slave option
bison 1.34 yacc rule compliance more robust handling of relay log corruption
parent
d1962011
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
320 additions
and
282 deletions
+320
-282
mysql-test/r/rpl000014.result
mysql-test/r/rpl000014.result
+1
-1
mysql-test/r/rpl_log.result
mysql-test/r/rpl_log.result
+1
-1
sql/mysqld.cc
sql/mysqld.cc
+11
-0
sql/slave.cc
sql/slave.cc
+26
-6
sql/slave.h
sql/slave.h
+1
-1
sql/sql_yacc.yy
sql/sql_yacc.yy
+280
-273
No files found.
mysql-test/r/rpl000014.result
View file @
d7b7e092
...
@@ -8,7 +8,7 @@ File Position Binlog_do_db Binlog_ignore_db
...
@@ -8,7 +8,7 @@ File Position Binlog_do_db Binlog_ignore_db
master-bin.001 79
master-bin.001 79
show slave status;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root MASTER_PORT 1 master-bin.001 79 slave-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 12
4
127.0.0.1 root MASTER_PORT 1 master-bin.001 79 slave-relay-bin.002 120 master-bin.001 Yes Yes 0 0 79 12
8
change master to master_log_pos=73;
change master to master_log_pos=73;
slave stop;
slave stop;
change master to master_log_pos=73;
change master to master_log_pos=73;
...
...
mysql-test/r/rpl_log.result
View file @
d7b7e092
...
@@ -75,7 +75,7 @@ slave-bin.002 115 Query 1 62 use test; insert into t1 values (1)
...
@@ -75,7 +75,7 @@ slave-bin.002 115 Query 1 62 use test; insert into t1 values (1)
slave-bin.002 175 Query 1 122 use test; drop table t1
slave-bin.002 175 Query 1 122 use test; drop table t1
show slave status;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
127.0.0.1 root MASTER_PORT 1 master-bin.002 170 slave-relay-bin.002 916 master-bin.002 Yes Yes 0 0 170 92
0
127.0.0.1 root MASTER_PORT 1 master-bin.002 170 slave-relay-bin.002 916 master-bin.002 Yes Yes 0 0 170 92
4
show new master for slave with master_log_file='master-bin.001' and
show new master for slave with master_log_file='master-bin.001' and
master_log_pos=4 and master_server_id=1;
master_log_pos=4 and master_server_id=1;
Log_name Log_pos
Log_name Log_pos
...
...
sql/mysqld.cc
View file @
d7b7e092
...
@@ -227,6 +227,11 @@ SHOW_COMP_OPTION have_query_cache=SHOW_OPTION_NO;
...
@@ -227,6 +227,11 @@ SHOW_COMP_OPTION have_query_cache=SHOW_OPTION_NO;
#endif
#endif
bool
opt_skip_slave_start
=
0
;
// If set, slave is not autostarted
bool
opt_skip_slave_start
=
0
;
// If set, slave is not autostarted
/* if set, some standard measures to enforce
slave data intergity will not be performed
*/
bool
opt_reckless_slave
=
0
;
static
bool
opt_do_pstack
=
0
;
static
bool
opt_do_pstack
=
0
;
static
ulong
opt_specialflag
=
SPECIAL_ENGLISH
;
static
ulong
opt_specialflag
=
SPECIAL_ENGLISH
;
static
ulong
back_log
,
connect_timeout
,
concurrency
;
static
ulong
back_log
,
connect_timeout
,
concurrency
;
...
@@ -2740,6 +2745,7 @@ enum options {
...
@@ -2740,6 +2745,7 @@ enum options {
OPT_RPL_RECOVERY_RANK
,
OPT_INIT_RPL_ROLE
,
OPT_RPL_RECOVERY_RANK
,
OPT_INIT_RPL_ROLE
,
OPT_RELAY_LOG
,
OPT_RELAY_LOG_INDEX
,
OPT_RELAY_LOG_INFO_FILE
,
OPT_RELAY_LOG
,
OPT_RELAY_LOG_INDEX
,
OPT_RELAY_LOG_INFO_FILE
,
OPT_SLAVE_SKIP_ERRORS
,
OPT_DES_KEY_FILE
,
OPT_LOCAL_INFILE
,
OPT_SLAVE_SKIP_ERRORS
,
OPT_DES_KEY_FILE
,
OPT_LOCAL_INFILE
,
OPT_RECKLESS_SLAVE
,
OPT_SSL_SSL
,
OPT_SSL_KEY
,
OPT_SSL_CERT
,
OPT_SSL_CA
,
OPT_SSL_SSL
,
OPT_SSL_KEY
,
OPT_SSL_CERT
,
OPT_SSL_CA
,
OPT_SSL_CAPATH
,
OPT_SSL_CIPHER
OPT_SSL_CAPATH
,
OPT_SSL_CIPHER
};
};
...
@@ -2850,6 +2856,7 @@ static struct option long_options[] = {
...
@@ -2850,6 +2856,7 @@ static struct option long_options[] = {
#endif
#endif
{
"pid-file"
,
required_argument
,
0
,
(
int
)
OPT_PID_FILE
},
{
"pid-file"
,
required_argument
,
0
,
(
int
)
OPT_PID_FILE
},
{
"port"
,
required_argument
,
0
,
'P'
},
{
"port"
,
required_argument
,
0
,
'P'
},
{
"reckless-slave"
,
no_argument
,
0
,
(
int
)
OPT_RECKLESS_SLAVE
},
{
"replicate-do-db"
,
required_argument
,
0
,
(
int
)
OPT_REPLICATE_DO_DB
},
{
"replicate-do-db"
,
required_argument
,
0
,
(
int
)
OPT_REPLICATE_DO_DB
},
{
"replicate-do-table"
,
required_argument
,
0
,
{
"replicate-do-table"
,
required_argument
,
0
,
(
int
)
OPT_REPLICATE_DO_TABLE
},
(
int
)
OPT_REPLICATE_DO_TABLE
},
...
@@ -3938,6 +3945,10 @@ static void get_options(int argc,char **argv)
...
@@ -3938,6 +3945,10 @@ static void get_options(int argc,char **argv)
opt_slow_log
=
1
;
opt_slow_log
=
1
;
opt_slow_logname
=
optarg
;
opt_slow_logname
=
optarg
;
break
;
break
;
case
(
int
)
OPT_RECKLESS_SLAVE
:
opt_reckless_slave
=
1
;
init_slave_skip_errors
(
"all"
);
break
;
case
(
int
)
OPT_SKIP_SLAVE_START
:
case
(
int
)
OPT_SKIP_SLAVE_START
:
opt_skip_slave_start
=
1
;
opt_skip_slave_start
=
1
;
break
;
break
;
...
...
sql/slave.cc
View file @
d7b7e092
...
@@ -191,11 +191,22 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,
...
@@ -191,11 +191,22 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,
pos
=
rli
->
relay_log_pos
;
// already inited
pos
=
rli
->
relay_log_pos
;
// already inited
else
else
rli
->
relay_log_pos
=
pos
;
rli
->
relay_log_pos
=
pos
;
if
(
rli
->
relay_log
.
find_first_log
(
&
rli
->
linfo
,
log
))
// test to see if the previous run was with the skip of purging
// if yes, we do not purge when we restart
if
(
rli
->
relay_log
.
find_first_log
(
&
rli
->
linfo
,
""
))
{
{
*
errmsg
=
"Could not find first log during relay log initialization"
;
*
errmsg
=
"Could not find first log during relay log initialization"
;
goto
err
;
goto
err
;
}
}
if
(
strcmp
(
log
,
rli
->
linfo
.
log_file_name
))
rli
->
skip_log_purge
=
1
;
if
(
rli
->
relay_log
.
find_first_log
(
&
rli
->
linfo
,
log
))
{
*
errmsg
=
"Could not find target log during relay log initialization"
;
goto
err
;
}
strnmov
(
rli
->
relay_log_name
,
rli
->
linfo
.
log_file_name
,
strnmov
(
rli
->
relay_log_name
,
rli
->
linfo
.
log_file_name
,
sizeof
(
rli
->
relay_log_name
));
sizeof
(
rli
->
relay_log_name
));
// to make end_io_cache(&rli->cache_buf) safe in all cases
// to make end_io_cache(&rli->cache_buf) safe in all cases
...
@@ -2497,6 +2508,15 @@ Log_event* next_event(RELAY_LOG_INFO* rli)
...
@@ -2497,6 +2508,15 @@ Log_event* next_event(RELAY_LOG_INFO* rli)
return
ev
;
return
ev
;
}
}
DBUG_ASSERT
(
thd
==
rli
->
sql_thd
);
DBUG_ASSERT
(
thd
==
rli
->
sql_thd
);
if
(
opt_reckless_slave
)
cur_log
->
error
=
0
;
if
(
cur_log
->
error
<
0
)
{
errmsg
=
"slave SQL thread aborted because of I/O error"
;
goto
err
;
}
if
(
!
cur_log
->
error
)
/* EOF */
if
(
!
cur_log
->
error
)
/* EOF */
{
{
/*
/*
...
@@ -2605,12 +2625,12 @@ event(errno=%d,cur_log->error=%d)",
...
@@ -2605,12 +2625,12 @@ event(errno=%d,cur_log->error=%d)",
my_errno
,
cur_log
->
error
);
my_errno
,
cur_log
->
error
);
// set read position to the beginning of the event
// set read position to the beginning of the event
my_b_seek
(
cur_log
,
rli
->
relay_log_pos
+
rli
->
pending
);
my_b_seek
(
cur_log
,
rli
->
relay_log_pos
+
rli
->
pending
);
// no need to hog the mutex while we sleep
/* otherwise, we have had a partial read */
pthread_mutex_unlock
(
&
rli
->
data_lock
);
/* TODO; see if there is a way to do this without this goto */
safe_sleep
(
rli
->
sql_thd
,
1
,(
CHECK_KILLED_FUNC
)
sql_slave_killed
,
errmsg
=
"Aborting slave SQL thread because of partial event read"
;
(
void
*
)
rli
);
goto
err
;
pthread_mutex_lock
(
&
rli
->
data_lock
);
}
}
}
}
if
(
!
errmsg
&&
was_killed
)
if
(
!
errmsg
&&
was_killed
)
errmsg
=
"slave SQL thread was killed"
;
errmsg
=
"slave SQL thread was killed"
;
...
...
sql/slave.h
View file @
d7b7e092
...
@@ -30,7 +30,7 @@ extern bool use_slave_mask;
...
@@ -30,7 +30,7 @@ extern bool use_slave_mask;
extern
char
*
slave_load_tmpdir
;
extern
char
*
slave_load_tmpdir
;
extern
my_string
master_info_file
,
relay_log_info_file
;
extern
my_string
master_info_file
,
relay_log_info_file
;
extern
my_string
opt_relay_logname
,
opt_relaylog_index_name
;
extern
my_string
opt_relay_logname
,
opt_relaylog_index_name
;
extern
bool
opt_skip_slave_start
;
extern
bool
opt_skip_slave_start
,
opt_reckless_slave
;
extern
ulong
relay_log_space_limit
;
extern
ulong
relay_log_space_limit
;
struct
st_master_info
;
struct
st_master_info
;
...
...
sql/sql_yacc.yy
View file @
d7b7e092
...
@@ -613,7 +613,7 @@ query:
...
@@ -613,7 +613,7 @@ query:
thd->lex.sql_command = SQLCOM_EMPTY_QUERY;
thd->lex.sql_command = SQLCOM_EMPTY_QUERY;
}
}
}
}
| verb_clause END_OF_INPUT {}
| verb_clause END_OF_INPUT {}
;
verb_clause:
verb_clause:
alter
alter
...
@@ -651,7 +651,7 @@ verb_clause:
...
@@ -651,7 +651,7 @@ verb_clause:
| handler
| handler
| unlock
| unlock
| update
| update
| use
| use
;
/* change master */
/* change master */
...
@@ -661,12 +661,12 @@ change:
...
@@ -661,12 +661,12 @@ change:
LEX *lex = Lex;
LEX *lex = Lex;
lex->sql_command = SQLCOM_CHANGE_MASTER;
lex->sql_command = SQLCOM_CHANGE_MASTER;
memset(&lex->mi, 0, sizeof(lex->mi));
memset(&lex->mi, 0, sizeof(lex->mi));
} master_defs
} master_defs
;
master_defs:
master_defs:
master_def
master_def
|
|
master_defs ',' master_def
master_defs ',' master_def
;
master_def:
master_def:
MASTER_HOST_SYM EQ TEXT_STRING
MASTER_HOST_SYM EQ TEXT_STRING
...
@@ -712,7 +712,7 @@ master_def:
...
@@ -712,7 +712,7 @@ master_def:
RELAY_LOG_POS_SYM EQ ULONG_NUM
RELAY_LOG_POS_SYM EQ ULONG_NUM
{
{
Lex->mi.relay_log_pos = $3;
Lex->mi.relay_log_pos = $3;
}
}
;
/* create a table */
/* create a table */
...
@@ -773,11 +773,11 @@ create:
...
@@ -773,11 +773,11 @@ create:
LEX *lex=Lex;
LEX *lex=Lex;
lex->udf.returns=(Item_result) $7;
lex->udf.returns=(Item_result) $7;
lex->udf.dl=$9.str;
lex->udf.dl=$9.str;
}
}
;
create2:
create2:
'(' field_list ')' opt_create_table_options create3 {}
'(' field_list ')' opt_create_table_options create3 {}
| opt_create_table_options create3 {}
| opt_create_table_options create3 {}
;
create3:
create3:
/* empty */ {}
/* empty */ {}
...
@@ -787,34 +787,34 @@ create3:
...
@@ -787,34 +787,34 @@ create3:
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
mysql_init_select(lex);
mysql_init_select(lex);
}
}
select_options select_item_list opt_select_from union {}
select_options select_item_list opt_select_from union {}
;
opt_as:
opt_as:
/* empty */ {}
/* empty */ {}
| AS {}
| AS {}
;
opt_table_options:
opt_table_options:
/* empty */ { $$= 0; }
/* empty */ { $$= 0; }
| table_options { $$= $1;}
| table_options { $$= $1;}
;
table_options:
table_options:
table_option { $$=$1; }
table_option { $$=$1; }
| table_option table_options { $$= $1 | $2; }
| table_option table_options { $$= $1 | $2; }
;
table_option:
table_option:
TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; }
TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; }
;
opt_if_not_exists:
opt_if_not_exists:
/* empty */ { $$= 0; }
/* empty */ { $$= 0; }
| IF NOT EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; }
| IF NOT EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; }
;
opt_create_table_options:
opt_create_table_options:
/* empty */
/* empty */
| create_table_options
| create_table_options
;
create_table_options:
create_table_options:
create_table_option
create_table_option
| create_table_option create_table_options
| create_table_option create_table_options
;
create_table_option:
create_table_option:
TYPE_SYM EQ table_types { Lex->create_info.db_type= $3; }
TYPE_SYM EQ table_types { Lex->create_info.db_type= $3; }
...
@@ -847,7 +847,7 @@ create_table_option:
...
@@ -847,7 +847,7 @@ create_table_option:
}
}
| INSERT_METHOD EQ merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;}
| INSERT_METHOD EQ merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;}
| DATA_SYM DIRECTORY_SYM EQ TEXT_STRING { Lex->create_info.data_file_name= $4.str; }
| DATA_SYM DIRECTORY_SYM EQ TEXT_STRING { Lex->create_info.data_file_name= $4.str; }
| INDEX DIRECTORY_SYM EQ TEXT_STRING { Lex->create_info.index_file_name= $4.str; }
| INDEX DIRECTORY_SYM EQ TEXT_STRING { Lex->create_info.index_file_name= $4.str; }
;
table_types:
table_types:
ISAM_SYM { $$= DB_TYPE_ISAM; }
ISAM_SYM { $$= DB_TYPE_ISAM; }
...
@@ -855,40 +855,40 @@ table_types:
...
@@ -855,40 +855,40 @@ table_types:
| MERGE_SYM { $$= DB_TYPE_MRG_MYISAM; }
| MERGE_SYM { $$= DB_TYPE_MRG_MYISAM; }
| HEAP_SYM { $$= DB_TYPE_HEAP; }
| HEAP_SYM { $$= DB_TYPE_HEAP; }
| BERKELEY_DB_SYM { $$= DB_TYPE_BERKELEY_DB; }
| BERKELEY_DB_SYM { $$= DB_TYPE_BERKELEY_DB; }
| INNOBASE_SYM { $$= DB_TYPE_INNODB; }
| INNOBASE_SYM { $$= DB_TYPE_INNODB; }
;
row_types:
row_types:
DEFAULT { $$= ROW_TYPE_DEFAULT; }
DEFAULT { $$= ROW_TYPE_DEFAULT; }
| FIXED_SYM { $$= ROW_TYPE_FIXED; }
| FIXED_SYM { $$= ROW_TYPE_FIXED; }
| DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; }
| DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; }
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; }
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; }
;
raid_types:
raid_types:
RAID_STRIPED_SYM { $$= RAID_TYPE_0; }
RAID_STRIPED_SYM { $$= RAID_TYPE_0; }
| RAID_0_SYM { $$= RAID_TYPE_0; }
| RAID_0_SYM { $$= RAID_TYPE_0; }
| ULONG_NUM { $$=$1;}
| ULONG_NUM { $$=$1;}
;
merge_insert_types:
merge_insert_types:
NO_SYM { $$= MERGE_INSERT_DISABLED; }
NO_SYM { $$= MERGE_INSERT_DISABLED; }
| FIRST_SYM { $$= MERGE_INSERT_TO_FIRST; }
| FIRST_SYM { $$= MERGE_INSERT_TO_FIRST; }
| LAST_SYM { $$= MERGE_INSERT_TO_LAST; }
| LAST_SYM { $$= MERGE_INSERT_TO_LAST; }
;
opt_select_from:
opt_select_from:
/* empty */
/* empty */
| select_from select_lock_type
| select_from select_lock_type
;
udf_func_type:
udf_func_type:
/* empty */ { $$ = UDFTYPE_FUNCTION; }
/* empty */ { $$ = UDFTYPE_FUNCTION; }
| AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; }
| AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; }
;
udf_type:
udf_type:
STRING_SYM {$$ = (int) STRING_RESULT; }
STRING_SYM {$$ = (int) STRING_RESULT; }
| REAL {$$ = (int) REAL_RESULT; }
| REAL {$$ = (int) REAL_RESULT; }
| INT_SYM {$$ = (int) INT_RESULT; }
| INT_SYM {$$ = (int) INT_RESULT; }
;
field_list:
field_list:
field_list_item
field_list_item
| field_list ',' field_list_item
| field_list ',' field_list_item
;
field_list_item:
field_list_item:
...
@@ -910,11 +910,11 @@ field_list_item:
...
@@ -910,11 +910,11 @@ field_list_item:
| opt_constraint CHECK_SYM '(' expr ')'
| opt_constraint CHECK_SYM '(' expr ')'
{
{
Lex->col_list.empty(); /* Alloced by sql_alloc */
Lex->col_list.empty(); /* Alloced by sql_alloc */
}
}
;
opt_constraint:
opt_constraint:
/* empty */
/* empty */
| CONSTRAINT opt_ident
| CONSTRAINT opt_ident
;
field_spec:
field_spec:
field_ident
field_ident
...
@@ -932,7 +932,7 @@ field_spec:
...
@@ -932,7 +932,7 @@ field_spec:
lex->default_value,lex->change,
lex->default_value,lex->change,
lex->interval))
lex->interval))
YYABORT;
YYABORT;
}
}
;
type:
type:
int_type opt_len field_options { Lex->length=$2; $$=$1; }
int_type opt_len field_options { Lex->length=$2; $$=$1; }
...
@@ -991,73 +991,73 @@ type:
...
@@ -991,73 +991,73 @@ type:
LEX *lex=Lex;
LEX *lex=Lex;
lex->interval=typelib(lex->interval_list);
lex->interval=typelib(lex->interval_list);
$$=FIELD_TYPE_SET;
$$=FIELD_TYPE_SET;
}
}
;
char:
char:
CHAR_SYM {}
CHAR_SYM {}
| NCHAR_SYM {}
| NCHAR_SYM {}
| NATIONAL_SYM CHAR_SYM {}
| NATIONAL_SYM CHAR_SYM {}
;
varchar:
varchar:
char VARYING {}
char VARYING {}
| VARCHAR {}
| VARCHAR {}
| NATIONAL_SYM VARCHAR {}
| NATIONAL_SYM VARCHAR {}
| NCHAR_SYM VARCHAR {}
| NCHAR_SYM VARCHAR {}
;
int_type:
int_type:
INT_SYM { $$=FIELD_TYPE_LONG; }
INT_SYM { $$=FIELD_TYPE_LONG; }
| TINYINT { $$=FIELD_TYPE_TINY; }
| TINYINT { $$=FIELD_TYPE_TINY; }
| SMALLINT { $$=FIELD_TYPE_SHORT; }
| SMALLINT { $$=FIELD_TYPE_SHORT; }
| MEDIUMINT { $$=FIELD_TYPE_INT24; }
| MEDIUMINT { $$=FIELD_TYPE_INT24; }
| BIGINT { $$=FIELD_TYPE_LONGLONG; }
| BIGINT { $$=FIELD_TYPE_LONGLONG; }
;
real_type:
real_type:
REAL { $$= current_thd->sql_mode & MODE_REAL_AS_FLOAT ?
REAL { $$= current_thd->sql_mode & MODE_REAL_AS_FLOAT ?
FIELD_TYPE_FLOAT : FIELD_TYPE_DOUBLE; }
FIELD_TYPE_FLOAT : FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM { $$=FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM { $$=FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; }
;
float_options:
float_options:
/* empty */ {}
/* empty */ {}
| '(' NUM ')' { Lex->length=$2.str; }
| '(' NUM ')' { Lex->length=$2.str; }
| precision {}
| precision {}
;
precision:
precision:
'(' NUM ',' NUM ')'
'(' NUM ',' NUM ')'
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->length=$2.str; lex->dec=$4.str;
lex->length=$2.str; lex->dec=$4.str;
}
}
;
field_options:
field_options:
/* empty */ {}
/* empty */ {}
| field_opt_list {}
| field_opt_list {}
;
field_opt_list:
field_opt_list:
field_opt_list field_option {}
field_opt_list field_option {}
| field_option {}
| field_option {}
;
field_option:
field_option:
SIGNED_SYM {}
SIGNED_SYM {}
| UNSIGNED { Lex->type|= UNSIGNED_FLAG;}
| UNSIGNED { Lex->type|= UNSIGNED_FLAG;}
| ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; }
| ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; }
;
opt_len:
opt_len:
/* empty */ { $$=(char*) 0; } /* use default length */
/* empty */ { $$=(char*) 0; } /* use default length */
| '(' NUM ')' { $$=$2.str; }
| '(' NUM ')' { $$=$2.str; }
;
opt_precision:
opt_precision:
/* empty */ {}
/* empty */ {}
| precision {}
| precision {}
;
opt_attribute:
opt_attribute:
/* empty */ {}
/* empty */ {}
| opt_attribute_list {}
| opt_attribute_list {}
;
opt_attribute_list:
opt_attribute_list:
opt_attribute_list attribute {}
opt_attribute_list attribute {}
| attribute
| attribute
;
attribute:
attribute:
NULL_SYM { Lex->type&= ~ NOT_NULL_FLAG; }
NULL_SYM { Lex->type&= ~ NOT_NULL_FLAG; }
...
@@ -1066,40 +1066,40 @@ attribute:
...
@@ -1066,40 +1066,40 @@ attribute:
| AUTO_INC { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; }
| AUTO_INC { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; }
| PRIMARY_SYM KEY_SYM { Lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; }
| PRIMARY_SYM KEY_SYM { Lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; }
| UNIQUE_SYM { Lex->type|= UNIQUE_FLAG; }
| UNIQUE_SYM { Lex->type|= UNIQUE_FLAG; }
| UNIQUE_SYM KEY_SYM { Lex->type|= UNIQUE_KEY_FLAG; }
| UNIQUE_SYM KEY_SYM { Lex->type|= UNIQUE_KEY_FLAG; }
;
opt_binary:
opt_binary:
/* empty */ {}
/* empty */ {}
| BINARY { Lex->type|=BINARY_FLAG; }
| BINARY { Lex->type|=BINARY_FLAG; }
;
references:
references:
REFERENCES table_ident opt_on_delete {}
REFERENCES table_ident opt_on_delete {}
| REFERENCES table_ident '(' key_list ')' opt_on_delete
| REFERENCES table_ident '(' key_list ')' opt_on_delete
{
{
Lex->col_list.empty(); /* Alloced by sql_alloc */
Lex->col_list.empty(); /* Alloced by sql_alloc */
}
}
;
opt_on_delete:
opt_on_delete:
/* empty */ {}
/* empty */ {}
| opt_on_delete_list {}
| opt_on_delete_list {}
;
opt_on_delete_list:
opt_on_delete_list:
opt_on_delete_list opt_on_delete_item {}
opt_on_delete_list opt_on_delete_item {}
| opt_on_delete_item {}
| opt_on_delete_item {}
;
opt_on_delete_item:
opt_on_delete_item:
ON DELETE_SYM delete_option {}
ON DELETE_SYM delete_option {}
| ON UPDATE_SYM delete_option {}
| ON UPDATE_SYM delete_option {}
| MATCH FULL {}
| MATCH FULL {}
| MATCH PARTIAL {}
| MATCH PARTIAL {}
;
delete_option:
delete_option:
RESTRICT {}
RESTRICT {}
| CASCADE {}
| CASCADE {}
| SET NULL_SYM {}
| SET NULL_SYM {}
| NO_SYM ACTION {}
| NO_SYM ACTION {}
| SET DEFAULT {}
| SET DEFAULT {}
;
key_type:
key_type:
opt_constraint PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; }
opt_constraint PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; }
...
@@ -1107,37 +1107,37 @@ key_type:
...
@@ -1107,37 +1107,37 @@ key_type:
| FULLTEXT_SYM { $$= Key::FULLTEXT; }
| FULLTEXT_SYM { $$= Key::FULLTEXT; }
| FULLTEXT_SYM key_or_index { $$= Key::FULLTEXT; }
| FULLTEXT_SYM key_or_index { $$= Key::FULLTEXT; }
| opt_constraint UNIQUE_SYM { $$= Key::UNIQUE; }
| opt_constraint UNIQUE_SYM { $$= Key::UNIQUE; }
| opt_constraint UNIQUE_SYM key_or_index { $$= Key::UNIQUE; }
| opt_constraint UNIQUE_SYM key_or_index { $$= Key::UNIQUE; }
;
key_or_index:
key_or_index:
KEY_SYM {}
KEY_SYM {}
| INDEX {}
| INDEX {}
;
keys_or_index:
keys_or_index:
KEYS {}
KEYS {}
| INDEX {}
| INDEX {}
| INDEXES {}
| INDEXES {}
;
opt_unique_or_fulltext:
opt_unique_or_fulltext:
/* empty */ { $$= Key::MULTIPLE; }
/* empty */ { $$= Key::MULTIPLE; }
| UNIQUE_SYM { $$= Key::UNIQUE; }
| UNIQUE_SYM { $$= Key::UNIQUE; }
| FULLTEXT_SYM { $$= Key::FULLTEXT; }
| FULLTEXT_SYM { $$= Key::FULLTEXT; }
;
key_list:
key_list:
key_list ',' key_part order_dir { Lex->col_list.push_back($3); }
key_list ',' key_part order_dir { Lex->col_list.push_back($3); }
| key_part order_dir { Lex->col_list.push_back($1); }
| key_part order_dir { Lex->col_list.push_back($1); }
;
key_part:
key_part:
ident { $$=new key_part_spec($1.str); }
ident { $$=new key_part_spec($1.str); }
| ident '(' NUM ')' { $$=new key_part_spec($1.str,(uint) atoi($3.str)); }
| ident '(' NUM ')' { $$=new key_part_spec($1.str,(uint) atoi($3.str)); }
;
opt_ident:
opt_ident:
/* empty */ { $$=(char*) 0; } /* Defaultlength */
/* empty */ { $$=(char*) 0; } /* Defaultlength */
| field_ident { $$=$1.str; }
| field_ident { $$=$1.str; }
;
string_list:
string_list:
text_string { Lex->interval_list.push_back($1); }
text_string { Lex->interval_list.push_back($1); }
| string_list ',' text_string { Lex->interval_list.push_back($3); }
| string_list ',' text_string { Lex->interval_list.push_back($3); }
;
/*
/*
** Alter table
** Alter table
...
@@ -1167,14 +1167,14 @@ alter:
...
@@ -1167,14 +1167,14 @@ alter:
lex->alter_keys_onoff=LEAVE_AS_IS;
lex->alter_keys_onoff=LEAVE_AS_IS;
lex->simple_alter=1;
lex->simple_alter=1;
}
}
alter_list
alter_list
;
alter_list:
alter_list:
| alter_list_item
| alter_list_item
| alter_list ',' alter_list_item
| alter_list ',' alter_list_item
;
add_column:
add_column:
ADD opt_column { Lex->change=0; }
ADD opt_column { Lex->change=0; }
;
alter_list_item:
alter_list_item:
add_column field_list_item opt_place { Lex->simple_alter=0; }
add_column field_list_item opt_place { Lex->simple_alter=0; }
...
@@ -1245,30 +1245,30 @@ alter_list_item:
...
@@ -1245,30 +1245,30 @@ alter_list_item:
lex->simple_alter=0;
lex->simple_alter=0;
}
}
| create_table_options { Lex->simple_alter=0; }
| create_table_options { Lex->simple_alter=0; }
| order_clause { Lex->simple_alter=0; }
| order_clause { Lex->simple_alter=0; }
;
opt_column:
opt_column:
/* empty */ {}
/* empty */ {}
| COLUMN_SYM {}
| COLUMN_SYM {}
;
opt_ignore:
opt_ignore:
/* empty */ { Lex->duplicates=DUP_ERROR; }
/* empty */ { Lex->duplicates=DUP_ERROR; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
;
opt_restrict:
opt_restrict:
/* empty */ {}
/* empty */ {}
| RESTRICT {}
| RESTRICT {}
| CASCADE {}
| CASCADE {}
;
opt_place:
opt_place:
/* empty */ {}
/* empty */ {}
| AFTER_SYM ident { store_position_for_column($2.str); }
| AFTER_SYM ident { store_position_for_column($2.str); }
| FIRST_SYM { store_position_for_column(first_keyword); }
| FIRST_SYM { store_position_for_column(first_keyword); }
;
opt_to:
opt_to:
/* empty */ {}
/* empty */ {}
| TO_SYM {}
| TO_SYM {}
| AS {}
| AS {}
;
slave:
slave:
SLAVE START_SYM slave_thread_opts
SLAVE START_SYM slave_thread_opts
...
@@ -1286,7 +1286,7 @@ slave:
...
@@ -1286,7 +1286,7 @@ slave:
};
};
slave_thread_opts: slave_thread_opt
slave_thread_opts: slave_thread_opt
| slave_thread_opts ',' slave_thread_opt
| slave_thread_opts ',' slave_thread_opt
;
slave_thread_opt:
slave_thread_opt:
/*empty*/ {}
/*empty*/ {}
...
@@ -1297,7 +1297,7 @@ slave_thread_opt:
...
@@ -1297,7 +1297,7 @@ slave_thread_opt:
| IO_THREAD
| IO_THREAD
{
{
Lex->slave_thd_opt|=SLAVE_IO;
Lex->slave_thd_opt|=SLAVE_IO;
}
}
;
restore:
restore:
RESTORE_SYM table_or_tables
RESTORE_SYM table_or_tables
...
@@ -1307,7 +1307,7 @@ restore:
...
@@ -1307,7 +1307,7 @@ restore:
table_list FROM TEXT_STRING
table_list FROM TEXT_STRING
{
{
Lex->backup_dir = $6.str;
Lex->backup_dir = $6.str;
}
}
;
backup:
backup:
BACKUP_SYM table_or_tables
BACKUP_SYM table_or_tables
{
{
...
@@ -1316,7 +1316,7 @@ backup:
...
@@ -1316,7 +1316,7 @@ backup:
table_list TO_SYM TEXT_STRING
table_list TO_SYM TEXT_STRING
{
{
Lex->backup_dir = $6.str;
Lex->backup_dir = $6.str;
}
}
;
repair:
repair:
REPAIR table_or_tables
REPAIR table_or_tables
...
@@ -1325,20 +1325,20 @@ repair:
...
@@ -1325,20 +1325,20 @@ repair:
lex->sql_command = SQLCOM_REPAIR;
lex->sql_command = SQLCOM_REPAIR;
lex->check_opt.init();
lex->check_opt.init();
}
}
table_list opt_mi_repair_type
table_list opt_mi_repair_type
;
opt_mi_repair_type:
opt_mi_repair_type:
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
| mi_repair_types {}
| mi_repair_types {}
;
mi_repair_types:
mi_repair_types:
mi_repair_type {}
mi_repair_type {}
| mi_repair_type mi_repair_types {}
| mi_repair_type mi_repair_types {}
;
mi_repair_type:
mi_repair_type:
QUICK { Lex->check_opt.flags|= T_QUICK; }
QUICK { Lex->check_opt.flags|= T_QUICK; }
| EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; }
| EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; }
| USE_FRM { Lex->check_opt.sql_flags|= TT_USEFRM; }
| USE_FRM { Lex->check_opt.sql_flags|= TT_USEFRM; }
;
analyze:
analyze:
ANALYZE_SYM table_or_tables
ANALYZE_SYM table_or_tables
...
@@ -1347,7 +1347,7 @@ analyze:
...
@@ -1347,7 +1347,7 @@ analyze:
lex->sql_command = SQLCOM_ANALYZE;
lex->sql_command = SQLCOM_ANALYZE;
lex->check_opt.init();
lex->check_opt.init();
}
}
table_list opt_mi_check_type
table_list opt_mi_check_type
;
check:
check:
CHECK_SYM table_or_tables
CHECK_SYM table_or_tables
...
@@ -1356,22 +1356,22 @@ check:
...
@@ -1356,22 +1356,22 @@ check:
lex->sql_command = SQLCOM_CHECK;
lex->sql_command = SQLCOM_CHECK;
lex->check_opt.init();
lex->check_opt.init();
}
}
table_list opt_mi_check_type
table_list opt_mi_check_type
;
opt_mi_check_type:
opt_mi_check_type:
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
| mi_check_types {}
| mi_check_types {}
;
mi_check_types:
mi_check_types:
mi_check_type {}
mi_check_type {}
| mi_check_type mi_check_types {}
| mi_check_type mi_check_types {}
;
mi_check_type:
mi_check_type:
QUICK { Lex->check_opt.flags|= T_QUICK; }
QUICK { Lex->check_opt.flags|= T_QUICK; }
| FAST_SYM { Lex->check_opt.flags|= T_FAST; }
| FAST_SYM { Lex->check_opt.flags|= T_FAST; }
| MEDIUM_SYM { Lex->check_opt.flags|= T_MEDIUM; }
| MEDIUM_SYM { Lex->check_opt.flags|= T_MEDIUM; }
| EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; }
| EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; }
| CHANGED { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; }
| CHANGED { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; }
;
optimize:
optimize:
OPTIMIZE table_or_tables
OPTIMIZE table_or_tables
...
@@ -1380,25 +1380,25 @@ optimize:
...
@@ -1380,25 +1380,25 @@ optimize:
lex->sql_command = SQLCOM_OPTIMIZE;
lex->sql_command = SQLCOM_OPTIMIZE;
lex->check_opt.init();
lex->check_opt.init();
}
}
table_list opt_mi_check_type
table_list opt_mi_check_type
;
rename:
rename:
RENAME table_or_tables
RENAME table_or_tables
{
{
Lex->sql_command=SQLCOM_RENAME_TABLE;
Lex->sql_command=SQLCOM_RENAME_TABLE;
}
}
table_to_table_list
table_to_table_list
;
table_to_table_list:
table_to_table_list:
table_to_table
table_to_table
| table_to_table_list ',' table_to_table
| table_to_table_list ',' table_to_table
;
table_to_table:
table_to_table:
table_ident TO_SYM table_ident
table_ident TO_SYM table_ident
{ if (!add_table_to_list($1,NULL,1,TL_IGNORE) ||
{ if (!add_table_to_list($1,NULL,1,TL_IGNORE) ||
!add_table_to_list($3,NULL,1,TL_IGNORE))
!add_table_to_list($3,NULL,1,TL_IGNORE))
YYABORT;
YYABORT;
}
}
;
/*
/*
Select : retrieve data from table
Select : retrieve data from table
...
@@ -1406,12 +1406,12 @@ table_to_table:
...
@@ -1406,12 +1406,12 @@ table_to_table:
select:
select:
select_init { Lex->sql_command=SQLCOM_SELECT; }
select_init { Lex->sql_command=SQLCOM_SELECT; }
;
select_init:
select_init:
SELECT_SYM select_part2 { Select->braces=false; } union
SELECT_SYM select_part2 { Select->braces=false; } union
|
|
'(' SELECT_SYM select_part2 ')' { Select->braces=true;} union_opt
'(' SELECT_SYM select_part2 ')' { Select->braces=true;} union_opt
;
select_part2:
select_part2:
...
@@ -1420,25 +1420,25 @@ select_part2:
...
@@ -1420,25 +1420,25 @@ select_part2:
lex->lock_option=TL_READ;
lex->lock_option=TL_READ;
mysql_init_select(lex);
mysql_init_select(lex);
}
}
select_options select_item_list select_into select_lock_type
select_options select_item_list select_into select_lock_type
;
select_into:
select_into:
limit_clause {}
limit_clause {}
| select_from
| select_from
| opt_into select_from
| opt_into select_from
| select_from opt_into
| select_from opt_into
;
select_from:
select_from:
FROM join_table_list where_clause group_clause having_clause opt_order_clause limit_clause procedure_clause
FROM join_table_list where_clause group_clause having_clause opt_order_clause limit_clause procedure_clause
;
select_options:
select_options:
/* empty*/
/* empty*/
| select_option_list
| select_option_list
;
select_option_list:
select_option_list:
select_option_list select_option
select_option_list select_option
| select_option
| select_option
;
select_option:
select_option:
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
...
@@ -1450,14 +1450,14 @@ select_option:
...
@@ -1450,14 +1450,14 @@ select_option:
| SQL_CALC_FOUND_ROWS { if (Select != &Lex->select_lex) YYABORT; Select->options|= OPTION_FOUND_ROWS; }
| SQL_CALC_FOUND_ROWS { if (Select != &Lex->select_lex) YYABORT; Select->options|= OPTION_FOUND_ROWS; }
| SQL_NO_CACHE_SYM { if (Select != &Lex->select_lex) YYABORT; current_thd->safe_to_cache_query=0; }
| SQL_NO_CACHE_SYM { if (Select != &Lex->select_lex) YYABORT; current_thd->safe_to_cache_query=0; }
| SQL_CACHE_SYM { if (Select != &Lex->select_lex) YYABORT; Select->options |= OPTION_TO_QUERY_CACHE; }
| SQL_CACHE_SYM { if (Select != &Lex->select_lex) YYABORT; Select->options |= OPTION_TO_QUERY_CACHE; }
| ALL {}
| ALL {}
;
select_lock_type:
select_lock_type:
/* empty */
/* empty */
| FOR_SYM UPDATE_SYM
| FOR_SYM UPDATE_SYM
{ if (Select != &Lex->select_lex) YYABORT; Lex->lock_option= TL_WRITE; current_thd->safe_to_cache_query=0; }
{ if (Select != &Lex->select_lex) YYABORT; Lex->lock_option= TL_WRITE; current_thd->safe_to_cache_query=0; }
| LOCK_SYM IN_SYM SHARE_SYM MODE_SYM
| LOCK_SYM IN_SYM SHARE_SYM MODE_SYM
{ if (Select != &Lex->select_lex) YYABORT; Lex->lock_option= TL_READ_WITH_SHARED_LOCKS; current_thd->safe_to_cache_query=0; }
{ if (Select != &Lex->select_lex) YYABORT; Lex->lock_option= TL_READ_WITH_SHARED_LOCKS; current_thd->safe_to_cache_query=0; }
;
select_item_list:
select_item_list:
select_item_list ',' select_item
select_item_list ',' select_item
...
@@ -1466,7 +1466,7 @@ select_item_list:
...
@@ -1466,7 +1466,7 @@ select_item_list:
{
{
if (add_item_to_list(new Item_field(NULL,NULL,"*")))
if (add_item_to_list(new Item_field(NULL,NULL,"*")))
YYABORT;
YYABORT;
}
}
;
select_item:
select_item:
...
@@ -1478,32 +1478,32 @@ select_item:
...
@@ -1478,32 +1478,32 @@ select_item:
$2->set_name($4.str);
$2->set_name($4.str);
else if (!$2->name)
else if (!$2->name)
$2->set_name($1,(uint) ($3 - $1));
$2->set_name($1,(uint) ($3 - $1));
}
}
;
remember_name:
remember_name:
{ $$=(char*) Lex->tok_start; }
{ $$=(char*) Lex->tok_start; }
;
remember_end:
remember_end:
{ $$=(char*) Lex->tok_end; }
{ $$=(char*) Lex->tok_end; }
;
select_item2:
select_item2:
table_wild { $$=$1; } /* table.* */
table_wild { $$=$1; } /* table.* */
| expr { $$=$1; }
| expr { $$=$1; }
;
select_alias:
select_alias:
{ $$.str=0;}
{ $$.str=0;}
| AS ident { $$=$2; }
| AS ident { $$=$2; }
| AS TEXT_STRING { $$=$2; }
| AS TEXT_STRING { $$=$2; }
| ident { $$=$1; }
| ident { $$=$1; }
| TEXT_STRING { $$=$1; }
| TEXT_STRING { $$=$1; }
;
optional_braces:
optional_braces:
/* empty */ {}
/* empty */ {}
| '(' ')' {}
| '(' ')' {}
;
/* all possible expressions */
/* all possible expressions */
expr: expr_expr {$$ = $1; }
expr: expr_expr {$$ = $1; }
| simple_expr {$$ = $1; }
| simple_expr {$$ = $1; }
;
/* expressions that begin with 'expr' */
/* expressions that begin with 'expr' */
expr_expr:
expr_expr:
...
@@ -1543,7 +1543,7 @@ expr_expr:
...
@@ -1543,7 +1543,7 @@ expr_expr:
| expr '+' INTERVAL_SYM expr interval
| expr '+' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,0); }
{ $$= new Item_date_add_interval($1,$4,$5,0); }
| expr '-' INTERVAL_SYM expr interval
| expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
{ $$= new Item_date_add_interval($1,$4,$5,1); }
;
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
no_in_expr:
no_in_expr:
...
@@ -1580,7 +1580,7 @@ no_in_expr:
...
@@ -1580,7 +1580,7 @@ no_in_expr:
{ $$= new Item_date_add_interval($1,$4,$5,0); }
{ $$= new Item_date_add_interval($1,$4,$5,0); }
| no_in_expr '-' INTERVAL_SYM expr interval
| no_in_expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
{ $$= new Item_date_add_interval($1,$4,$5,1); }
| simple_expr
| simple_expr
;
/* expressions that begin with 'expr' that does NOT follow AND */
/* expressions that begin with 'expr' that does NOT follow AND */
no_and_expr:
no_and_expr:
...
@@ -1620,7 +1620,7 @@ no_and_expr:
...
@@ -1620,7 +1620,7 @@ no_and_expr:
{ $$= new Item_date_add_interval($1,$4,$5,0); }
{ $$= new Item_date_add_interval($1,$4,$5,0); }
| no_and_expr '-' INTERVAL_SYM expr interval
| no_and_expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
{ $$= new Item_date_add_interval($1,$4,$5,1); }
| simple_expr
| simple_expr
;
simple_expr:
simple_expr:
simple_ident
simple_ident
...
@@ -1888,11 +1888,11 @@ simple_expr:
...
@@ -1888,11 +1888,11 @@ simple_expr:
current_thd->safe_to_cache_query=0;
current_thd->safe_to_cache_query=0;
}
}
| EXTRACT_SYM '(' interval FROM expr ')'
| EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new Item_extract( $3, $5); }
{ $$=new Item_extract( $3, $5); }
;
udf_expr_list:
udf_expr_list:
/* empty */ { $$= NULL; }
/* empty */ { $$= NULL; }
| expr_list { $$= $1;}
| expr_list { $$= $1;}
;
sum_expr:
sum_expr:
AVG_SYM '(' in_sum_expr ')'
AVG_SYM '(' in_sum_expr ')'
...
@@ -1916,7 +1916,7 @@ sum_expr:
...
@@ -1916,7 +1916,7 @@ sum_expr:
| STD_SYM '(' in_sum_expr ')'
| STD_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_std($3); }
{ $$=new Item_sum_std($3); }
| SUM_SYM '(' in_sum_expr ')'
| SUM_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_sum($3); }
{ $$=new Item_sum_sum($3); }
;
in_sum_expr:
in_sum_expr:
{ Select->in_sum_expr++; }
{ Select->in_sum_expr++; }
...
@@ -1924,7 +1924,7 @@ in_sum_expr:
...
@@ -1924,7 +1924,7 @@ in_sum_expr:
{
{
Select->in_sum_expr--;
Select->in_sum_expr--;
$$=$2;
$$=$2;
}
}
;
cast_type:
cast_type:
BINARY { $$=ITEM_CAST_BINARY; }
BINARY { $$=ITEM_CAST_BINARY; }
...
@@ -1934,42 +1934,42 @@ cast_type:
...
@@ -1934,42 +1934,42 @@ cast_type:
| UNSIGNED INT_SYM { $$=ITEM_CAST_UNSIGNED_INT; }
| UNSIGNED INT_SYM { $$=ITEM_CAST_UNSIGNED_INT; }
| DATE_SYM { $$=ITEM_CAST_DATE; }
| DATE_SYM { $$=ITEM_CAST_DATE; }
| TIME_SYM { $$=ITEM_CAST_TIME; }
| TIME_SYM { $$=ITEM_CAST_TIME; }
| DATETIME { $$=ITEM_CAST_DATETIME; }
| DATETIME { $$=ITEM_CAST_DATETIME; }
;
expr_list:
expr_list:
{ Select->expr_list.push_front(new List<Item>); }
{ Select->expr_list.push_front(new List<Item>); }
expr_list2
expr_list2
{ $$= Select->expr_list.pop(); }
{ $$= Select->expr_list.pop(); }
;
expr_list2:
expr_list2:
expr { Select->expr_list.head()->push_back($1); }
expr { Select->expr_list.head()->push_back($1); }
| expr_list2 ',' expr { Select->expr_list.head()->push_back($3); }
| expr_list2 ',' expr { Select->expr_list.head()->push_back($3); }
;
ident_list_arg:
ident_list_arg:
ident_list { $$= $1; }
ident_list { $$= $1; }
| '(' ident_list ')' { $$= $2; }
| '(' ident_list ')' { $$= $2; }
;
ident_list:
ident_list:
{ Select->expr_list.push_front(new List<Item>); }
{ Select->expr_list.push_front(new List<Item>); }
ident_list2
ident_list2
{ $$= Select->expr_list.pop(); }
{ $$= Select->expr_list.pop(); }
;
ident_list2:
ident_list2:
simple_ident { Select->expr_list.head()->push_back($1); }
simple_ident { Select->expr_list.head()->push_back($1); }
| ident_list2 ',' simple_ident { Select->expr_list.head()->push_back($3); }
| ident_list2 ',' simple_ident { Select->expr_list.head()->push_back($3); }
;
opt_expr:
opt_expr:
/* empty */ { $$= NULL; }
/* empty */ { $$= NULL; }
| expr { $$= $1; }
| expr { $$= $1; }
;
opt_else:
opt_else:
/* empty */ { $$= NULL; }
/* empty */ { $$= NULL; }
| ELSE expr { $$= $2; }
| ELSE expr { $$= $2; }
;
when_list:
when_list:
{ Select->when_list.push_front(new List<Item>); }
{ Select->when_list.push_front(new List<Item>); }
when_list2
when_list2
{ $$= Select->when_list.pop(); }
{ $$= Select->when_list.pop(); }
;
when_list2:
when_list2:
expr THEN_SYM expr
expr THEN_SYM expr
...
@@ -1983,11 +1983,11 @@ when_list2:
...
@@ -1983,11 +1983,11 @@ when_list2:
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
sel->when_list.head()->push_back($3);
sel->when_list.head()->push_back($3);
sel->when_list.head()->push_back($5);
sel->when_list.head()->push_back($5);
}
}
;
opt_pad:
opt_pad:
/* empty */ { $$=new Item_string(" ",1); }
/* empty */ { $$=new Item_string(" ",1); }
| expr { $$=$1; }
| expr { $$=$1; }
;
join_table_list:
join_table_list:
'(' join_table_list ')' { $$=$2; }
'(' join_table_list ')' { $$=$2; }
...
@@ -2029,12 +2029,12 @@ join_table_list:
...
@@ -2029,12 +2029,12 @@ join_table_list:
| join_table_list NATURAL RIGHT opt_outer JOIN_SYM join_table
| join_table_list NATURAL RIGHT opt_outer JOIN_SYM join_table
{ add_join_natural($6,$1); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
{ add_join_natural($6,$1); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
| join_table_list NATURAL JOIN_SYM join_table
| join_table_list NATURAL JOIN_SYM join_table
{ add_join_natural($1,$4); $$=$4; }
{ add_join_natural($1,$4); $$=$4; }
;
normal_join:
normal_join:
',' {}
',' {}
| JOIN_SYM {}
| JOIN_SYM {}
| CROSS JOIN_SYM {}
| CROSS JOIN_SYM {}
;
join_table:
join_table:
{
{
...
@@ -2048,11 +2048,11 @@ join_table:
...
@@ -2048,11 +2048,11 @@ join_table:
sel->ignore_index_ptr))) YYABORT;
sel->ignore_index_ptr))) YYABORT;
}
}
| '{' ident join_table LEFT OUTER JOIN_SYM join_table ON expr '}'
| '{' ident join_table LEFT OUTER JOIN_SYM join_table ON expr '}'
{ add_join_on($7,$9); $7->outer_join|=JOIN_TYPE_LEFT; $$=$7; }
{ add_join_on($7,$9); $7->outer_join|=JOIN_TYPE_LEFT; $$=$7; }
;
opt_outer:
opt_outer:
/* empty */ {}
/* empty */ {}
| OUTER {}
| OUTER {}
;
opt_key_definition:
opt_key_definition:
/* empty */ {}
/* empty */ {}
...
@@ -2067,11 +2067,11 @@ opt_key_definition:
...
@@ -2067,11 +2067,11 @@ opt_key_definition:
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
sel->ignore_index= *$2;
sel->ignore_index= *$2;
sel->ignore_index_ptr= &sel->ignore_index;
sel->ignore_index_ptr= &sel->ignore_index;
}
}
;
key_usage_list:
key_usage_list:
key_or_index { Select->interval_list.empty(); } '(' key_usage_list2 ')'
key_or_index { Select->interval_list.empty(); } '(' key_usage_list2 ')'
{ $$= &Select->interval_list; }
{ $$= &Select->interval_list; }
;
key_usage_list2:
key_usage_list2:
key_usage_list2 ',' ident
key_usage_list2 ',' ident
...
@@ -2079,7 +2079,7 @@ key_usage_list2:
...
@@ -2079,7 +2079,7 @@ key_usage_list2:
| ident
| ident
{ Select->interval_list.push_back(new String((const char*) $1.str,$1.length)); }
{ Select->interval_list.push_back(new String((const char*) $1.str,$1.length)); }
| PRIMARY_SYM
| PRIMARY_SYM
{ Select->interval_list.push_back(new String("PRIMARY",7)); }
{ Select->interval_list.push_back(new String("PRIMARY",7)); }
;
using_list:
using_list:
ident
ident
...
@@ -2093,7 +2093,7 @@ using_list:
...
@@ -2093,7 +2093,7 @@ using_list:
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
if (!($$= new Item_cond_and(new Item_func_eq(new Item_field(sel->db1,sel->table1,$3.str), new Item_field(sel->db2,sel->table2,$3.str)), $1)))
if (!($$= new Item_cond_and(new Item_func_eq(new Item_field(sel->db1,sel->table1,$3.str), new Item_field(sel->db2,sel->table2,$3.str)), $1)))
YYABORT;
YYABORT;
}
}
;
interval:
interval:
DAY_HOUR_SYM { $$=INTERVAL_DAY_HOUR; }
DAY_HOUR_SYM { $$=INTERVAL_DAY_HOUR; }
...
@@ -2108,22 +2108,22 @@ interval:
...
@@ -2108,22 +2108,22 @@ interval:
| MONTH_SYM { $$=INTERVAL_MONTH; }
| MONTH_SYM { $$=INTERVAL_MONTH; }
| SECOND_SYM { $$=INTERVAL_SECOND; }
| SECOND_SYM { $$=INTERVAL_SECOND; }
| YEAR_MONTH_SYM { $$=INTERVAL_YEAR_MONTH; }
| YEAR_MONTH_SYM { $$=INTERVAL_YEAR_MONTH; }
| YEAR_SYM { $$=INTERVAL_YEAR; }
| YEAR_SYM { $$=INTERVAL_YEAR; }
;
table_alias:
table_alias:
/* empty */
/* empty */
| AS
| AS
| EQ
| EQ
;
opt_table_alias:
opt_table_alias:
/* empty */ { $$=0; }
/* empty */ { $$=0; }
| table_alias ident
| table_alias ident
{ $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); }
{ $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); }
;
where_clause:
where_clause:
/* empty */ { Select->where= 0; }
/* empty */ { Select->where= 0; }
| WHERE expr { Select->where= $2; }
| WHERE expr { Select->where= $2; }
;
having_clause:
having_clause:
/* empty */
/* empty */
...
@@ -2131,11 +2131,11 @@ having_clause:
...
@@ -2131,11 +2131,11 @@ having_clause:
{
{
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
sel->having= $3; sel->create_refs=0;
sel->having= $3; sel->create_refs=0;
}
}
;
opt_escape:
opt_escape:
ESCAPE_SYM TEXT_STRING { $$= $2.str; }
ESCAPE_SYM TEXT_STRING { $$= $2.str; }
| /* empty */ { $$= (char*) "\\"; }
| /* empty */ { $$= (char*) "\\"; }
;
/*
/*
...
@@ -2144,13 +2144,13 @@ opt_escape:
...
@@ -2144,13 +2144,13 @@ opt_escape:
group_clause:
group_clause:
/* empty */
/* empty */
| GROUP BY group_list
| GROUP BY group_list
;
group_list:
group_list:
group_list ',' order_ident order_dir
group_list ',' order_ident order_dir
{ if (add_group_to_list($3,(bool) $4)) YYABORT; }
{ if (add_group_to_list($3,(bool) $4)) YYABORT; }
| order_ident order_dir
| order_ident order_dir
{ if (add_group_to_list($1,(bool) $2)) YYABORT; }
{ if (add_group_to_list($1,(bool) $2)) YYABORT; }
;
/*
/*
Order by statement in select
Order by statement in select
...
@@ -2158,7 +2158,7 @@ group_list:
...
@@ -2158,7 +2158,7 @@ group_list:
opt_order_clause:
opt_order_clause:
/* empty */
/* empty */
| order_clause
| order_clause
;
order_clause:
order_clause:
ORDER_SYM BY
ORDER_SYM BY
...
@@ -2167,18 +2167,18 @@ order_clause:
...
@@ -2167,18 +2167,18 @@ order_clause:
if (lex->sql_command == SQLCOM_MULTI_UPDATE)
if (lex->sql_command == SQLCOM_MULTI_UPDATE)
YYABORT;
YYABORT;
lex->select->sort_default=1;
lex->select->sort_default=1;
} order_list
} order_list
;
order_list:
order_list:
order_list ',' order_ident order_dir
order_list ',' order_ident order_dir
{ if (add_order_to_list($3,(bool) $4)) YYABORT; }
{ if (add_order_to_list($3,(bool) $4)) YYABORT; }
| order_ident order_dir
| order_ident order_dir
{ if (add_order_to_list($1,(bool) $2)) YYABORT; }
{ if (add_order_to_list($1,(bool) $2)) YYABORT; }
;
order_dir:
order_dir:
/* empty */ { $$ = 1; }
/* empty */ { $$ = 1; }
| ASC { $$ =1; }
| ASC { $$ =1; }
| DESC { $$ =0; }
| DESC { $$ =0; }
;
limit_clause:
limit_clause:
...
@@ -2193,7 +2193,7 @@ limit_clause:
...
@@ -2193,7 +2193,7 @@ limit_clause:
{
{
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
sel->select_limit= $4; sel->offset_limit=$2;
sel->select_limit= $4; sel->offset_limit=$2;
}
}
;
delete_limit_clause:
delete_limit_clause:
/* empty */
/* empty */
...
@@ -2204,20 +2204,20 @@ delete_limit_clause:
...
@@ -2204,20 +2204,20 @@ delete_limit_clause:
lex->select->select_limit= HA_POS_ERROR;
lex->select->select_limit= HA_POS_ERROR;
}
}
| LIMIT ulonglong_num
| LIMIT ulonglong_num
{ Select->select_limit= (ha_rows) $2; }
{ Select->select_limit= (ha_rows) $2; }
;
ULONG_NUM:
ULONG_NUM:
NUM { $$= strtoul($1.str,NULL,10); }
NUM { $$= strtoul($1.str,NULL,10); }
| ULONGLONG_NUM { $$= (ulong) strtoull($1.str,NULL,10); }
| ULONGLONG_NUM { $$= (ulong) strtoull($1.str,NULL,10); }
| REAL_NUM { $$= strtoul($1.str,NULL,10); }
| REAL_NUM { $$= strtoul($1.str,NULL,10); }
| FLOAT_NUM { $$= strtoul($1.str,NULL,10); }
| FLOAT_NUM { $$= strtoul($1.str,NULL,10); }
;
ulonglong_num:
ulonglong_num:
NUM { $$= (ulonglong) strtoul($1.str,NULL,10); }
NUM { $$= (ulonglong) strtoul($1.str,NULL,10); }
| ULONGLONG_NUM { $$= strtoull($1.str,NULL,10); }
| ULONGLONG_NUM { $$= strtoull($1.str,NULL,10); }
| LONG_NUM { $$= (ulonglong) strtoul($1.str,NULL,10); }
| LONG_NUM { $$= (ulonglong) strtoul($1.str,NULL,10); }
| REAL_NUM { $$= strtoull($1.str,NULL,10); }
| REAL_NUM { $$= strtoull($1.str,NULL,10); }
| FLOAT_NUM { $$= strtoull($1.str,NULL,10); }
| FLOAT_NUM { $$= strtoull($1.str,NULL,10); }
;
procedure_clause:
procedure_clause:
/* empty */
/* empty */
...
@@ -2231,16 +2231,16 @@ procedure_clause:
...
@@ -2231,16 +2231,16 @@ procedure_clause:
YYABORT;
YYABORT;
current_thd->safe_to_cache_query=0;
current_thd->safe_to_cache_query=0;
}
}
'(' procedure_list ')'
'(' procedure_list ')'
;
procedure_list:
procedure_list:
/* empty */ {}
/* empty */ {}
| procedure_list2 {}
| procedure_list2 {}
;
procedure_list2:
procedure_list2:
procedure_list2 ',' procedure_item
procedure_list2 ',' procedure_item
| procedure_item
| procedure_item
;
procedure_item:
procedure_item:
remember_name expr
remember_name expr
...
@@ -2249,7 +2249,7 @@ procedure_item:
...
@@ -2249,7 +2249,7 @@ procedure_item:
YYABORT;
YYABORT;
if (!$2->name)
if (!$2->name)
$2->set_name($1,(uint) ((char*) Lex->tok_end - $1));
$2->set_name($1,(uint) ((char*) Lex->tok_end - $1));
}
}
;
opt_into:
opt_into:
INTO OUTFILE TEXT_STRING
INTO OUTFILE TEXT_STRING
...
@@ -2262,7 +2262,7 @@ opt_into:
...
@@ -2262,7 +2262,7 @@ opt_into:
{
{
if (!(Lex->exchange= new sql_exchange($3.str,1)))
if (!(Lex->exchange= new sql_exchange($3.str,1)))
YYABORT;
YYABORT;
}
}
;
/*
/*
DO statement
DO statement
...
@@ -2275,7 +2275,7 @@ do: DO_SYM
...
@@ -2275,7 +2275,7 @@ do: DO_SYM
if (!(lex->insert_list = new List_item))
if (!(lex->insert_list = new List_item))
YYABORT;
YYABORT;
}
}
values
values
;
/*
/*
Drop : delete tables or index
Drop : delete tables or index
*/
*/
...
@@ -2309,27 +2309,27 @@ drop:
...
@@ -2309,27 +2309,27 @@ drop:
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->udf.name=$3.str;
lex->udf.name=$3.str;
}
}
;
table_list:
table_list:
table_name
table_name
| table_list ',' table_name
| table_list ',' table_name
;
table_name:
table_name:
table_ident
table_ident
{ if (!add_table_to_list($1,NULL,1)) YYABORT; }
{ if (!add_table_to_list($1,NULL,1)) YYABORT; }
;
if_exists:
if_exists:
/* empty */ { $$=0; }
/* empty */ { $$=0; }
| IF EXISTS { $$= 1; }
| IF EXISTS { $$= 1; }
;
/*
/*
** Insert : add new data to table
** Insert : add new data to table
*/
*/
insert:
insert:
INSERT { Lex->sql_command = SQLCOM_INSERT; } insert_lock_option opt_ignore insert2 insert_field_spec
INSERT { Lex->sql_command = SQLCOM_INSERT; } insert_lock_option opt_ignore insert2 insert_field_spec
;
replace:
replace:
REPLACE
REPLACE
...
@@ -2338,21 +2338,21 @@ replace:
...
@@ -2338,21 +2338,21 @@ replace:
lex->sql_command = SQLCOM_REPLACE;
lex->sql_command = SQLCOM_REPLACE;
lex->duplicates= DUP_REPLACE;
lex->duplicates= DUP_REPLACE;
}
}
replace_lock_option insert2 insert_field_spec
replace_lock_option insert2 insert_field_spec
;
insert_lock_option:
insert_lock_option:
/* empty */ { Lex->lock_option= TL_WRITE_CONCURRENT_INSERT; }
/* empty */ { Lex->lock_option= TL_WRITE_CONCURRENT_INSERT; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
| DELAYED_SYM { Lex->lock_option= TL_WRITE_DELAYED; }
| DELAYED_SYM { Lex->lock_option= TL_WRITE_DELAYED; }
| HIGH_PRIORITY { Lex->lock_option= TL_WRITE; }
| HIGH_PRIORITY { Lex->lock_option= TL_WRITE; }
;
replace_lock_option:
replace_lock_option:
opt_low_priority {}
opt_low_priority {}
| DELAYED_SYM { Lex->lock_option= TL_WRITE_DELAYED; }
| DELAYED_SYM { Lex->lock_option= TL_WRITE_DELAYED; }
;
insert2:
insert2:
INTO insert_table {}
INTO insert_table {}
| insert_table {}
| insert_table {}
;
insert_table:
insert_table:
table_name
table_name
...
@@ -2361,7 +2361,7 @@ insert_table:
...
@@ -2361,7 +2361,7 @@ insert_table:
lex->field_list.empty();
lex->field_list.empty();
lex->many_values.empty();
lex->many_values.empty();
lex->insert_list=0;
lex->insert_list=0;
}
}
;
insert_field_spec:
insert_field_spec:
opt_field_spec insert_values {}
opt_field_spec insert_values {}
...
@@ -2372,16 +2372,16 @@ insert_field_spec:
...
@@ -2372,16 +2372,16 @@ insert_field_spec:
lex->many_values.push_back(lex->insert_list))
lex->many_values.push_back(lex->insert_list))
YYABORT;
YYABORT;
}
}
ident_eq_list
ident_eq_list
;
opt_field_spec:
opt_field_spec:
/* empty */ { }
/* empty */ { }
| '(' fields ')' { }
| '(' fields ')' { }
| '(' ')' { }
| '(' ')' { }
;
fields:
fields:
fields ',' insert_ident { Lex->field_list.push_back($3); }
fields ',' insert_ident { Lex->field_list.push_back($3); }
| insert_ident { Lex->field_list.push_back($1); }
| insert_ident { Lex->field_list.push_back($1); }
;
insert_values:
insert_values:
VALUES values_list {}
VALUES values_list {}
...
@@ -2393,16 +2393,17 @@ insert_values:
...
@@ -2393,16 +2393,17 @@ insert_values:
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
mysql_init_select(lex);
mysql_init_select(lex);
}
}
select_options select_item_list select_from select_lock_type union {}
select_options select_item_list select_from select_lock_type
union {};
values_list:
values_list:
values_list ',' no_braces
values_list ',' no_braces
| no_braces
| no_braces
;
ident_eq_list:
ident_eq_list:
ident_eq_list ',' ident_eq_value
ident_eq_list ',' ident_eq_value
|
|
ident_eq_value
ident_eq_value
;
ident_eq_value:
ident_eq_value:
simple_ident equal expr
simple_ident equal expr
...
@@ -2411,10 +2412,10 @@ ident_eq_value:
...
@@ -2411,10 +2412,10 @@ ident_eq_value:
if (lex->field_list.push_back($1) ||
if (lex->field_list.push_back($1) ||
lex->insert_list->push_back($3))
lex->insert_list->push_back($3))
YYABORT;
YYABORT;
}
}
;
equal: EQ {}
equal: EQ {}
| SET_VAR {}
| SET_VAR {}
;
no_braces:
no_braces:
'('
'('
...
@@ -2427,11 +2428,11 @@ no_braces:
...
@@ -2427,11 +2428,11 @@ no_braces:
LEX *lex=Lex;
LEX *lex=Lex;
if (lex->many_values.push_back(lex->insert_list))
if (lex->many_values.push_back(lex->insert_list))
YYABORT;
YYABORT;
}
}
;
opt_values:
opt_values:
/* empty */ {}
/* empty */ {}
| values
| values
;
values:
values:
values ',' expr
values ',' expr
...
@@ -2443,7 +2444,7 @@ values:
...
@@ -2443,7 +2444,7 @@ values:
{
{
if (Lex->insert_list->push_back($1))
if (Lex->insert_list->push_back($1))
YYABORT;
YYABORT;
}
}
;
/* Update rows in a table */
/* Update rows in a table */
...
@@ -2456,7 +2457,7 @@ update:
...
@@ -2456,7 +2457,7 @@ update:
lex->select->order_list.first=0;
lex->select->order_list.first=0;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
}
}
opt_low_priority opt_ignore join_table_list SET update_list where_clause opt_order_clause delete_limit_clause
opt_low_priority opt_ignore join_table_list SET update_list where_clause opt_order_clause delete_limit_clause
;
update_list:
update_list:
update_list ',' simple_ident equal expr
update_list ',' simple_ident equal expr
...
@@ -2468,11 +2469,11 @@ update_list:
...
@@ -2468,11 +2469,11 @@ update_list:
{
{
if (add_item_to_list($1) || add_value_to_list($3))
if (add_item_to_list($1) || add_value_to_list($3))
YYABORT;
YYABORT;
}
}
;
opt_low_priority:
opt_low_priority:
/* empty */ { Lex->lock_option= current_thd->update_lock_default; }
/* empty */ { Lex->lock_option= current_thd->update_lock_default; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
;
/* Delete rows from a table */
/* Delete rows from a table */
...
@@ -2486,7 +2487,7 @@ delete:
...
@@ -2486,7 +2487,7 @@ delete:
lex->select->order_list.first=0;
lex->select->order_list.first=0;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
}
}
opt_delete_options single_multi {}
opt_delete_options single_multi {}
;
single_multi:
single_multi:
FROM table_name where_clause opt_order_clause delete_limit_clause {}
FROM table_name where_clause opt_order_clause delete_limit_clause {}
...
@@ -2495,11 +2496,11 @@ single_multi:
...
@@ -2495,11 +2496,11 @@ single_multi:
FROM join_table_list where_clause
FROM join_table_list where_clause
| FROM table_wild_list
| FROM table_wild_list
{ mysql_init_multi_delete(Lex); }
{ mysql_init_multi_delete(Lex); }
USING join_table_list where_clause
USING join_table_list where_clause
;
table_wild_list:
table_wild_list:
table_wild_one {}
table_wild_one {}
| table_wild_list ',' table_wild_one {}
| table_wild_list ',' table_wild_one {}
;
table_wild_one:
table_wild_one:
ident opt_wild
ident opt_wild
...
@@ -2511,20 +2512,20 @@ table_wild_one:
...
@@ -2511,20 +2512,20 @@ table_wild_one:
{
{
if (!add_table_to_list(new Table_ident($1,$3,0),NULL,1,TL_WRITE))
if (!add_table_to_list(new Table_ident($1,$3,0),NULL,1,TL_WRITE))
YYABORT;
YYABORT;
}
}
;
opt_wild:
opt_wild:
/* empty */ {}
/* empty */ {}
| '.' '*' {}
| '.' '*' {}
;
opt_delete_options:
opt_delete_options:
/* empty */ {}
/* empty */ {}
| opt_delete_option opt_delete_options {}
| opt_delete_option opt_delete_options {}
;
opt_delete_option:
opt_delete_option:
QUICK { Select->options|= OPTION_QUICK; }
QUICK { Select->options|= OPTION_QUICK; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
;
truncate:
truncate:
TRUNCATE_SYM opt_table_sym table_name
TRUNCATE_SYM opt_table_sym table_name
...
@@ -2535,15 +2536,15 @@ truncate:
...
@@ -2535,15 +2536,15 @@ truncate:
lex->select->order_list.elements=0;
lex->select->order_list.elements=0;
lex->select->order_list.first=0;
lex->select->order_list.first=0;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
lex->select->order_list.next= (byte**) &lex->select->order_list.first;
lex->lock_option= current_thd->update_lock_default; }
lex->lock_option= current_thd->update_lock_default; }
;
opt_table_sym:
opt_table_sym:
/* empty */
/* empty */
| TABLE_SYM
| TABLE_SYM
;
/* Show things */
/* Show things */
show: SHOW { Lex->wild=0;} show_param
show: SHOW { Lex->wild=0;} show_param
;
show_param:
show_param:
DATABASES wild
DATABASES wild
...
@@ -2637,31 +2638,31 @@ show_param:
...
@@ -2637,31 +2638,31 @@ show_param:
| SLAVE STATUS_SYM
| SLAVE STATUS_SYM
{
{
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
}
}
;
opt_db:
opt_db:
/* empty */ { $$= 0; }
/* empty */ { $$= 0; }
| from_or_in ident { $$= $2.str; }
| from_or_in ident { $$= $2.str; }
;
wild:
wild:
/* empty */
/* empty */
| LIKE text_string { Lex->wild= $2; }
| LIKE text_string { Lex->wild= $2; }
;
opt_full:
opt_full:
/* empty */ { Lex->verbose=0; }
/* empty */ { Lex->verbose=0; }
| FULL { Lex->verbose=1; }
| FULL { Lex->verbose=1; }
;
from_or_in:
from_or_in:
FROM
FROM
| IN_SYM
| IN_SYM
;
binlog_in:
binlog_in:
/* empty */ { Lex->mi.log_file_name = 0; }
/* empty */ { Lex->mi.log_file_name = 0; }
| IN_SYM TEXT_STRING { Lex->mi.log_file_name = $2.str; }
| IN_SYM TEXT_STRING { Lex->mi.log_file_name = $2.str; }
;
binlog_from:
binlog_from:
/* empty */ { Lex->mi.pos = 4; /* skip magic number */ }
/* empty */ { Lex->mi.pos = 4; /* skip magic number */ }
| FROM ulonglong_num { Lex->mi.pos = $2; }
| FROM ulonglong_num { Lex->mi.pos = $2; }
;
/* A Oracle compatible synonym for show */
/* A Oracle compatible synonym for show */
...
@@ -2676,17 +2677,19 @@ describe:
...
@@ -2676,17 +2677,19 @@ describe:
YYABORT;
YYABORT;
}
}
opt_describe_column
opt_describe_column
| describe_command select { Lex->select_lex.options|= SELECT_DESCRIBE; }
| describe_command select
{ Lex->select_lex.options|= SELECT_DESCRIBE; };
describe_command:
describe_command:
DESC
DESC
| DESCRIBE
| DESCRIBE
;
opt_describe_column:
opt_describe_column:
/* empty */ {}
/* empty */ {}
| text_string { Lex->wild= $1; }
| text_string { Lex->wild= $1; }
| ident { Lex->wild= new String((const char*) $1.str,$1.length); }
| ident
{ Lex->wild= new String((const char*) $1.str,$1.length); };
/* flush things */
/* flush things */
...
@@ -2697,11 +2700,11 @@ flush:
...
@@ -2697,11 +2700,11 @@ flush:
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command= SQLCOM_FLUSH; lex->type=0;
lex->sql_command= SQLCOM_FLUSH; lex->type=0;
}
}
flush_options
flush_options
;
flush_options:
flush_options:
flush_options ',' flush_option
flush_options ',' flush_option
| flush_option
| flush_option
;
flush_option:
flush_option:
table_or_tables { Lex->type|= REFRESH_TABLES; } opt_table_list
table_or_tables { Lex->type|= REFRESH_TABLES; } opt_table_list
...
@@ -2713,26 +2716,26 @@ flush_option:
...
@@ -2713,26 +2716,26 @@ flush_option:
| STATUS_SYM { Lex->type|= REFRESH_STATUS; }
| STATUS_SYM { Lex->type|= REFRESH_STATUS; }
| SLAVE { Lex->type|= REFRESH_SLAVE; }
| SLAVE { Lex->type|= REFRESH_SLAVE; }
| MASTER_SYM { Lex->type|= REFRESH_MASTER; }
| MASTER_SYM { Lex->type|= REFRESH_MASTER; }
| DES_KEY_FILE { Lex->type|= REFRESH_DES_KEY_FILE; }
| DES_KEY_FILE { Lex->type|= REFRESH_DES_KEY_FILE; }
;
opt_table_list:
opt_table_list:
/* empty */ {}
/* empty */ {}
| table_list {}
| table_list {}
;
reset:
reset:
RESET_SYM
RESET_SYM
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command= SQLCOM_RESET; lex->type=0;
lex->sql_command= SQLCOM_RESET; lex->type=0;
} reset_options
} reset_options
;
reset_options:
reset_options:
reset_options ',' reset_option
reset_options ',' reset_option
| reset_option
| reset_option
;
reset_option:
reset_option:
SLAVE { Lex->type|= REFRESH_SLAVE; }
SLAVE { Lex->type|= REFRESH_SLAVE; }
| MASTER_SYM { Lex->type|= REFRESH_MASTER; }
| MASTER_SYM { Lex->type|= REFRESH_MASTER; }
| QUERY_SYM CACHE_SYM { Lex->type|= REFRESH_QUERY_CACHE;}
| QUERY_SYM CACHE_SYM { Lex->type|= REFRESH_QUERY_CACHE;}
;
purge:
purge:
PURGE
PURGE
...
@@ -2744,7 +2747,7 @@ purge:
...
@@ -2744,7 +2747,7 @@ purge:
MASTER_SYM LOGS_SYM TO_SYM TEXT_STRING
MASTER_SYM LOGS_SYM TO_SYM TEXT_STRING
{
{
Lex->to_log = $6.str;
Lex->to_log = $6.str;
}
}
;
/* kill threads */
/* kill threads */
...
@@ -2759,7 +2762,7 @@ kill:
...
@@ -2759,7 +2762,7 @@ kill:
}
}
lex->sql_command=SQLCOM_KILL;
lex->sql_command=SQLCOM_KILL;
lex->thread_id= (ulong) $2->val_int();
lex->thread_id= (ulong) $2->val_int();
}
}
;
/* change database */
/* change database */
...
@@ -2767,7 +2770,7 @@ use: USE_SYM ident
...
@@ -2767,7 +2770,7 @@ use: USE_SYM ident
{
{
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command=SQLCOM_CHANGE_DB; lex->select->db= $2.str;
lex->sql_command=SQLCOM_CHANGE_DB; lex->select->db= $2.str;
}
}
;
/* import, export of files */
/* import, export of files */
...
@@ -2798,30 +2801,30 @@ load: LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING
...
@@ -2798,30 +2801,30 @@ load: LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING
LOAD DATA_SYM FROM MASTER_SYM
LOAD DATA_SYM FROM MASTER_SYM
{
{
Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
}
}
;
opt_local:
opt_local:
/* empty */ { $$=0;}
/* empty */ { $$=0;}
| LOCAL_SYM { $$=1;}
| LOCAL_SYM { $$=1;}
;
load_data_lock:
load_data_lock:
/* empty */ { Lex->lock_option= current_thd->update_lock_default; }
/* empty */ { Lex->lock_option= current_thd->update_lock_default; }
| CONCURRENT { Lex->lock_option= TL_WRITE_CONCURRENT_INSERT ; }
| CONCURRENT { Lex->lock_option= TL_WRITE_CONCURRENT_INSERT ; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
| LOW_PRIORITY { Lex->lock_option= TL_WRITE_LOW_PRIORITY; }
;
opt_duplicate:
opt_duplicate:
/* empty */ { Lex->duplicates=DUP_ERROR; }
/* empty */ { Lex->duplicates=DUP_ERROR; }
| REPLACE { Lex->duplicates=DUP_REPLACE; }
| REPLACE { Lex->duplicates=DUP_REPLACE; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
;
opt_field_term:
opt_field_term:
/* empty */
/* empty */
| COLUMNS field_term_list
| COLUMNS field_term_list
;
field_term_list:
field_term_list:
field_term_list field_term
field_term_list field_term
| field_term
| field_term
;
field_term:
field_term:
TERMINATED BY text_string { Lex->exchange->field_term= $3;}
TERMINATED BY text_string { Lex->exchange->field_term= $3;}
...
@@ -2832,31 +2835,31 @@ field_term:
...
@@ -2832,31 +2835,31 @@ field_term:
lex->exchange->opt_enclosed=1;
lex->exchange->opt_enclosed=1;
}
}
| ENCLOSED BY text_string { Lex->exchange->enclosed= $3;}
| ENCLOSED BY text_string { Lex->exchange->enclosed= $3;}
| ESCAPED BY text_string { Lex->exchange->escaped= $3;}
| ESCAPED BY text_string { Lex->exchange->escaped= $3;}
;
opt_line_term:
opt_line_term:
/* empty */
/* empty */
| LINES line_term_list
| LINES line_term_list
;
line_term_list:
line_term_list:
line_term_list line_term
line_term_list line_term
| line_term
| line_term
;
line_term:
line_term:
TERMINATED BY text_string { Lex->exchange->line_term= $3;}
TERMINATED BY text_string { Lex->exchange->line_term= $3;}
| STARTING BY text_string { Lex->exchange->line_start= $3;}
| STARTING BY text_string { Lex->exchange->line_start= $3;}
;
opt_ignore_lines:
opt_ignore_lines:
/* empty */
/* empty */
| IGNORE_SYM NUM LINES
| IGNORE_SYM NUM LINES
{ Lex->exchange->skip_lines=atol($2.str); }
{ Lex->exchange->skip_lines=atol($2.str); }
;
/* Common definitions */
/* Common definitions */
text_literal:
text_literal:
TEXT_STRING { $$ = new Item_string($1.str,$1.length); }
TEXT_STRING { $$ = new Item_string($1.str,$1.length); }
| text_literal TEXT_STRING
| text_literal TEXT_STRING
{ ((Item_string*) $1)->append($2.str,$2.length); }
{ ((Item_string*) $1)->append($2.str,$2.length); }
;
text_string:
text_string:
TEXT_STRING { $$= new String($1.str,$1.length); }
TEXT_STRING { $$= new String($1.str,$1.length); }
...
@@ -2864,7 +2867,7 @@ text_string:
...
@@ -2864,7 +2867,7 @@ text_string:
{
{
Item *tmp = new Item_varbinary($1.str,$1.length);
Item *tmp = new Item_varbinary($1.str,$1.length);
$$= tmp ? tmp->val_str((String*) 0) : (String*) 0;
$$= tmp ? tmp->val_str((String*) 0) : (String*) 0;
}
}
;
literal:
literal:
text_literal { $$ = $1; }
text_literal { $$ = $1; }
...
@@ -2878,7 +2881,7 @@ literal:
...
@@ -2878,7 +2881,7 @@ literal:
| HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);}
| HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);}
| DATE_SYM text_literal { $$ = $2; }
| DATE_SYM text_literal { $$ = $2; }
| TIME_SYM text_literal { $$ = $2; }
| TIME_SYM text_literal { $$ = $2; }
| TIMESTAMP text_literal { $$ = $2; }
| TIMESTAMP text_literal { $$ = $2; }
;
/**********************************************************************
/**********************************************************************
** Createing different items.
** Createing different items.
...
@@ -2886,15 +2889,16 @@ literal:
...
@@ -2886,15 +2889,16 @@ literal:
insert_ident:
insert_ident:
simple_ident { $$=$1; }
simple_ident { $$=$1; }
| table_wild { $$=$1; }
| table_wild { $$=$1; }
;
table_wild:
table_wild:
ident '.' '*' { $$ = new Item_field(NullS,$1.str,"*"); }
ident '.' '*' { $$ = new Item_field(NullS,$1.str,"*"); }
| ident '.' ident '.' '*'
| ident '.' ident '.' '*'
{ $$ = new Item_field((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); }
{ $$ = new Item_field((current_thd->client_capabilities &
CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); };
order_ident:
order_ident:
expr { $$=$1; }
expr { $$=$1; }
;
simple_ident:
simple_ident:
ident
ident
...
@@ -2916,18 +2920,19 @@ simple_ident:
...
@@ -2916,18 +2920,19 @@ simple_ident:
{
{
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
$$ = !sel->create_refs || sel->in_sum_expr > 0 ? (Item*) new Item_field((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
$$ = !sel->create_refs || sel->in_sum_expr > 0 ? (Item*) new Item_field((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
}
}
;
field_ident:
field_ident:
ident { $$=$1;}
ident { $$=$1;}
| ident '.' ident { $$=$3;} /* Skipp schema name in create*/
| ident '.' ident { $$=$3;} /* Skipp schema name in create*/
| '.' ident { $$=$2;} /* For Delphi */
| '.' ident { $$=$2;} /* For Delphi */
;
table_ident:
table_ident:
ident { $$=new Table_ident($1); }
ident { $$=new Table_ident($1); }
| ident '.' ident { $$=new Table_ident($1,$3,0);}
| ident '.' ident { $$=new Table_ident($1,$3,0);}
| '.' ident { $$=new Table_ident($2);} /* For Delphi */
| '.' ident { $$=new Table_ident($2);}
/* For Delphi */;
ident:
ident:
IDENT { $$=$1; }
IDENT { $$=$1; }
...
@@ -2938,12 +2943,12 @@ ident:
...
@@ -2938,12 +2943,12 @@ ident:
$$.length=$1.length;
$$.length=$1.length;
if ((lex=Lex)->next_state != STATE_END)
if ((lex=Lex)->next_state != STATE_END)
lex->next_state=STATE_OPERATOR_OR_IDENT;
lex->next_state=STATE_OPERATOR_OR_IDENT;
}
}
;
ident_or_text:
ident_or_text:
ident { $$=$1;}
ident { $$=$1;}
| TEXT_STRING { $$=$1;}
| TEXT_STRING { $$=$1;}
| LEX_HOSTNAME { $$=$1;}
| LEX_HOSTNAME { $$=$1;}
;
user:
user:
ident_or_text
ident_or_text
...
@@ -2957,7 +2962,7 @@ user:
...
@@ -2957,7 +2962,7 @@ user:
if (!($$=(LEX_USER*) sql_alloc(sizeof(st_lex_user))))
if (!($$=(LEX_USER*) sql_alloc(sizeof(st_lex_user))))
YYABORT;
YYABORT;
$$->user = $1; $$->host=$3;
$$->user = $1; $$->host=$3;
}
}
;
/* Keyword that we allow for identifiers */
/* Keyword that we allow for identifiers */
...
@@ -3107,7 +3112,7 @@ keyword:
...
@@ -3107,7 +3112,7 @@ keyword:
| USE_FRM {}
| USE_FRM {}
| VARIABLES {}
| VARIABLES {}
| WORK_SYM {}
| WORK_SYM {}
| YEAR_SYM {}
| YEAR_SYM {}
;
/* Option functions */
/* Option functions */
...
@@ -3122,17 +3127,17 @@ set:
...
@@ -3122,17 +3127,17 @@ set:
lex->option_type=0;
lex->option_type=0;
lex->option_list.empty();
lex->option_list.empty();
}
}
option_value_list
option_value_list
;
opt_option:
opt_option:
/* empty */ {}
/* empty */ {}
| OPTION {}
| OPTION {}
;
option_value_list:
option_value_list:
option_value
option_value
| GLOBAL_SYM { Lex->option_type=1; } option_value
| GLOBAL_SYM { Lex->option_type=1; } option_value
| LOCAL_SYM { Lex->option_type=0; } option_value
| LOCAL_SYM { Lex->option_type=0; } option_value
| option_value_list ',' option_value
| option_value_list ',' option_value
;
option_value:
option_value:
set_option equal NUM
set_option equal NUM
...
@@ -3258,13 +3263,13 @@ option_value:
...
@@ -3258,13 +3263,13 @@ option_value:
push_back(new Set_option(thd->lex.option_type,
push_back(new Set_option(thd->lex.option_type,
$1.str,$1.length,
$1.str,$1.length,
item));
item));
}
}
;
query_cache_type:
query_cache_type:
NUM { current_thd->query_cache_type = set_zone(atoi($1.str),0,3); }
NUM { current_thd->query_cache_type = set_zone(atoi($1.str),0,3); }
| OFF { current_thd->query_cache_type = 0; }
| OFF { current_thd->query_cache_type = 0; }
| ON { current_thd->query_cache_type = 1; }
| ON { current_thd->query_cache_type = 1; }
| DEMAND_SYM { current_thd->query_cache_type = 2; }
| DEMAND_SYM { current_thd->query_cache_type = 2; }
;
text_or_password:
text_or_password:
TEXT_STRING { $$=$1.str;}
TEXT_STRING { $$=$1.str;}
...
@@ -3278,7 +3283,7 @@ text_or_password:
...
@@ -3278,7 +3283,7 @@ text_or_password:
make_scrambled_password(buff,$3.str);
make_scrambled_password(buff,$3.str);
$$=buff;
$$=buff;
}
}
}
}
;
set_option:
set_option:
SQL_BIG_TABLES { $$= OPTION_BIG_TABLES; }
SQL_BIG_TABLES { $$= OPTION_BIG_TABLES; }
...
@@ -3301,7 +3306,7 @@ set_option:
...
@@ -3301,7 +3306,7 @@ set_option:
| SQL_AUTO_IS_NULL { $$= OPTION_AUTO_IS_NULL; }
| SQL_AUTO_IS_NULL { $$= OPTION_AUTO_IS_NULL; }
| SQL_SAFE_UPDATES { $$= OPTION_SAFE_UPDATES; }
| SQL_SAFE_UPDATES { $$= OPTION_SAFE_UPDATES; }
| SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; }
| SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; }
| SQL_QUOTE_SHOW_CREATE { $$= OPTION_QUOTE_SHOW_CREATE; }
| SQL_QUOTE_SHOW_CREATE { $$= OPTION_QUOTE_SHOW_CREATE; }
;
set_isolation:
set_isolation:
...
@@ -3318,16 +3323,16 @@ set_isolation:
...
@@ -3318,16 +3323,16 @@ set_isolation:
lex->thd->session_tx_isolation= lex->tx_isolation= $2;
lex->thd->session_tx_isolation= lex->tx_isolation= $2;
}
}
| tx_isolation
| tx_isolation
{ Lex->tx_isolation= $1; }
{ Lex->tx_isolation= $1; }
;
tx_isolation:
tx_isolation:
TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types { $$=$4; }
TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types { $$=$4; }
;
isolation_types:
isolation_types:
READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; }
READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; }
| READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; }
| READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; }
| REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; }
| REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; }
| SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; }
| SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; }
;
/* Lock function */
/* Lock function */
...
@@ -3336,28 +3341,28 @@ lock:
...
@@ -3336,28 +3341,28 @@ lock:
{
{
Lex->sql_command=SQLCOM_LOCK_TABLES;
Lex->sql_command=SQLCOM_LOCK_TABLES;
}
}
table_lock_list
table_lock_list
;
table_or_tables:
table_or_tables:
TABLE_SYM
TABLE_SYM
| TABLES
| TABLES
;
table_lock_list:
table_lock_list:
table_lock
table_lock
| table_lock_list ',' table_lock
| table_lock_list ',' table_lock
;
table_lock:
table_lock:
table_ident opt_table_alias lock_option
table_ident opt_table_alias lock_option
{ if (!add_table_to_list($1,$2,0,(thr_lock_type) $3)) YYABORT; }
{ if (!add_table_to_list($1,$2,0,(thr_lock_type) $3)) YYABORT; }
;
lock_option:
lock_option:
READ_SYM { $$=TL_READ_NO_INSERT; }
READ_SYM { $$=TL_READ_NO_INSERT; }
| WRITE_SYM { $$=current_thd->update_lock_default; }
| WRITE_SYM { $$=current_thd->update_lock_default; }
| LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; }
| LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; }
| READ_SYM LOCAL_SYM { $$= TL_READ; }
| READ_SYM LOCAL_SYM { $$= TL_READ; }
;
unlock:
unlock:
UNLOCK_SYM table_or_tables { Lex->sql_command=SQLCOM_UNLOCK_TABLES; }
UNLOCK_SYM table_or_tables { Lex->sql_command=SQLCOM_UNLOCK_TABLES; }
;
/*
/*
...
@@ -3387,15 +3392,15 @@ handler:
...
@@ -3387,15 +3392,15 @@ handler:
if (!add_table_to_list($2,0,0))
if (!add_table_to_list($2,0,0))
YYABORT;
YYABORT;
}
}
handler_read_or_scan where_clause limit_clause { }
handler_read_or_scan where_clause limit_clause { }
;
handler_read_or_scan:
handler_read_or_scan:
handler_scan_function { Lex->backup_dir= 0; }
handler_scan_function { Lex->backup_dir= 0; }
| ident handler_rkey_function { Lex->backup_dir= $1.str; }
| ident handler_rkey_function { Lex->backup_dir= $1.str; }
;
handler_scan_function:
handler_scan_function:
FIRST_SYM { Lex->ha_read_mode = RFIRST; }
FIRST_SYM { Lex->ha_read_mode = RFIRST; }
| NEXT_SYM { Lex->ha_read_mode = RNEXT; }
| NEXT_SYM { Lex->ha_read_mode = RNEXT; }
;
handler_rkey_function:
handler_rkey_function:
FIRST_SYM { Lex->ha_read_mode = RFIRST; }
FIRST_SYM { Lex->ha_read_mode = RFIRST; }
...
@@ -3409,14 +3414,14 @@ handler_rkey_function:
...
@@ -3409,14 +3414,14 @@ handler_rkey_function:
lex->ha_rkey_mode=$1;
lex->ha_rkey_mode=$1;
if (!(lex->insert_list = new List_item))
if (!(lex->insert_list = new List_item))
YYABORT;
YYABORT;
} '(' values ')' { }
} '(' values ')' { }
;
handler_rkey_mode:
handler_rkey_mode:
EQ { $$=HA_READ_KEY_EXACT; }
EQ { $$=HA_READ_KEY_EXACT; }
| GE { $$=HA_READ_KEY_OR_NEXT; }
| GE { $$=HA_READ_KEY_OR_NEXT; }
| LE { $$=HA_READ_KEY_OR_PREV; }
| LE { $$=HA_READ_KEY_OR_PREV; }
| GT_SYM { $$=HA_READ_AFTER_KEY; }
| GT_SYM { $$=HA_READ_AFTER_KEY; }
| LT { $$=HA_READ_BEFORE_KEY; }
| LT { $$=HA_READ_BEFORE_KEY; }
;
/* GRANT / REVOKE */
/* GRANT / REVOKE */
...
@@ -3430,7 +3435,7 @@ revoke:
...
@@ -3430,7 +3435,7 @@ revoke:
lex->grant= lex->grant_tot_col=0;
lex->grant= lex->grant_tot_col=0;
lex->select->db=0;
lex->select->db=0;
}
}
grant_privileges ON opt_table FROM user_list
grant_privileges ON opt_table FROM user_list
;
grant:
grant:
GRANT
GRANT
...
@@ -3446,16 +3451,16 @@ grant:
...
@@ -3446,16 +3451,16 @@ grant:
lex->mqh=0;
lex->mqh=0;
}
}
grant_privileges ON opt_table TO_SYM user_list
grant_privileges ON opt_table TO_SYM user_list
require_clause grant_options
require_clause grant_options
;
grant_privileges:
grant_privileges:
grant_privilege_list {}
grant_privilege_list {}
| ALL PRIVILEGES { Lex->grant = UINT_MAX;}
| ALL PRIVILEGES { Lex->grant = UINT_MAX;}
| ALL { Lex->grant = UINT_MAX;}
| ALL { Lex->grant = UINT_MAX;}
;
grant_privilege_list:
grant_privilege_list:
grant_privilege
grant_privilege
| grant_privilege_list ',' grant_privilege
| grant_privilege_list ',' grant_privilege
;
grant_privilege:
grant_privilege:
SELECT_SYM
SELECT_SYM
...
@@ -3478,10 +3483,10 @@ grant_privilege:
...
@@ -3478,10 +3483,10 @@ grant_privilege:
| SHUTDOWN { Lex->grant |= SHUTDOWN_ACL;}
| SHUTDOWN { Lex->grant |= SHUTDOWN_ACL;}
| PROCESS { Lex->grant |= PROCESS_ACL;}
| PROCESS { Lex->grant |= PROCESS_ACL;}
| FILE_SYM { Lex->grant |= FILE_ACL;}
| FILE_SYM { Lex->grant |= FILE_ACL;}
| GRANT OPTION { Lex->grant |= GRANT_ACL;}
| GRANT OPTION { Lex->grant |= GRANT_ACL;}
;
require_list: require_list_element AND require_list
require_list: require_list_element AND require_list
| require_list_element
| require_list_element
;
require_list_element: SUBJECT_SYM TEXT_STRING
require_list_element: SUBJECT_SYM TEXT_STRING
{
{
...
@@ -3512,7 +3517,7 @@ require_list_element: SUBJECT_SYM TEXT_STRING
...
@@ -3512,7 +3517,7 @@ require_list_element: SUBJECT_SYM TEXT_STRING
YYABORT;
YYABORT;
}
}
lex->ssl_cipher=$2.str;
lex->ssl_cipher=$2.str;
}
}
;
opt_table:
opt_table:
'*'
'*'
...
@@ -3558,12 +3563,12 @@ opt_table:
...
@@ -3558,12 +3563,12 @@ opt_table:
YYABORT;
YYABORT;
if (lex->grant == UINT_MAX)
if (lex->grant == UINT_MAX)
lex->grant = TABLE_ACLS & ~GRANT_ACL;
lex->grant = TABLE_ACLS & ~GRANT_ACL;
}
}
;
user_list:
user_list:
grant_user { if (Lex->users_list.push_back($1)) YYABORT;}
grant_user { if (Lex->users_list.push_back($1)) YYABORT;}
| user_list ',' grant_user { if (Lex->users_list.push_back($3)) YYABORT;}
| user_list ',' grant_user { if (Lex->users_list.push_back($3)) YYABORT;}
;
grant_user:
grant_user:
...
@@ -3584,7 +3589,7 @@ grant_user:
...
@@ -3584,7 +3589,7 @@ grant_user:
| user IDENTIFIED_SYM BY PASSWORD TEXT_STRING
| user IDENTIFIED_SYM BY PASSWORD TEXT_STRING
{ $$=$1; $1->password=$5 ; }
{ $$=$1; $1->password=$5 ; }
| user
| user
{ $$=$1; $1->password.str=NullS; }
{ $$=$1; $1->password.str=NullS; }
;
opt_column_list:
opt_column_list:
...
@@ -3593,11 +3598,11 @@ opt_column_list:
...
@@ -3593,11 +3598,11 @@ opt_column_list:
LEX *lex=Lex;
LEX *lex=Lex;
lex->grant |= lex->which_columns;
lex->grant |= lex->which_columns;
}
}
| '(' column_list ')'
| '(' column_list ')'
;
column_list:
column_list:
column_list ',' column_list_id
column_list ',' column_list_id
| column_list_id
| column_list_id
;
column_list_id:
column_list_id:
ident
ident
...
@@ -3616,7 +3621,7 @@ column_list_id:
...
@@ -3616,7 +3621,7 @@ column_list_id:
point->rights |= lex->which_columns;
point->rights |= lex->which_columns;
else
else
lex->columns.push_back(new LEX_COLUMN (*new_str,lex->which_columns));
lex->columns.push_back(new LEX_COLUMN (*new_str,lex->which_columns));
}
}
;
require_clause: /* empty */
require_clause: /* empty */
...
@@ -3631,35 +3636,35 @@ require_clause: /* empty */
...
@@ -3631,35 +3636,35 @@ require_clause: /* empty */
| REQUIRE_SYM X509_SYM
| REQUIRE_SYM X509_SYM
{
{
Lex->ssl_type=SSL_TYPE_X509;
Lex->ssl_type=SSL_TYPE_X509;
}
}
;
grant_options:
grant_options:
/* empty */ {}
/* empty */ {}
| WITH grant_option_list
| WITH grant_option_list
;
grant_option_list:
grant_option_list:
grant_option_list grant_option {}
grant_option_list grant_option {}
| grant_option {}
| grant_option {}
;
grant_option:
grant_option:
GRANT OPTION { Lex->grant |= GRANT_ACL;}
GRANT OPTION { Lex->grant |= GRANT_ACL;}
| MAX_QUERIES_PER_HOUR EQ NUM
| MAX_QUERIES_PER_HOUR EQ NUM
{
{
Lex->mqh=atoi($3.str);
Lex->mqh=atoi($3.str);
}
}
;
begin:
begin:
BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN;} opt_work
BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN;} opt_work
;
opt_work:
opt_work:
/* empty */ {}
/* empty */ {}
| WORK_SYM {}
| WORK_SYM {}
;
commit:
commit:
COMMIT_SYM { Lex->sql_command = SQLCOM_COMMIT;}
COMMIT_SYM { Lex->sql_command = SQLCOM_COMMIT;}
;
rollback:
rollback:
ROLLBACK_SYM { Lex->sql_command = SQLCOM_ROLLBACK;}
ROLLBACK_SYM { Lex->sql_command = SQLCOM_ROLLBACK;}
;
/*
/*
...
@@ -3669,7 +3674,7 @@ rollback:
...
@@ -3669,7 +3674,7 @@ rollback:
union:
union:
/* empty */ {}
/* empty */ {}
| union_list
| union_list
;
union_list:
union_list:
UNION_SYM union_option
UNION_SYM union_option
...
@@ -3685,14 +3690,14 @@ union_list:
...
@@ -3685,14 +3690,14 @@ union_list:
YYABORT;
YYABORT;
lex->select->linkage=UNION_TYPE;
lex->select->linkage=UNION_TYPE;
}
}
select_init
select_init
;
union_opt:
union_opt:
union {}
union {}
| optional_order_or_limit {}
| optional_order_or_limit {}
;
optional_order_or_limit:
optional_order_or_limit:
/* emty */ {}
/* em
p
ty */ {}
|
|
{
{
LEX *lex=Lex;
LEX *lex=Lex;
...
@@ -3702,8 +3707,10 @@ optional_order_or_limit:
...
@@ -3702,8 +3707,10 @@ optional_order_or_limit:
lex->select->linkage=NOT_A_SELECT;
lex->select->linkage=NOT_A_SELECT;
lex->select->select_limit=lex->thd->default_select_limit;
lex->select->select_limit=lex->thd->default_select_limit;
}
}
opt_order_clause limit_clause
opt_order_clause limit_clause
;
union_option:
union_option:
/* empty */ {}
/* empty */ {}
| ALL {Lex->union_option=1;}
| ALL {Lex->union_option=1;};
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