summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorunknown <pem@mysql.com>2004-05-07 18:52:06 +0200
committerunknown <pem@mysql.com>2004-05-07 18:52:06 +0200
commite9c1e75b48e5d2c0047a3e88b35667a33d6395e4 (patch)
tree2f7b236a8721d14f1b398964b898d922fd133131 /sql/sql_yacc.yy
parentf3d691a970627f34ed825a9cf7b84520dcdd43b3 (diff)
parente3211fbd6a59c3dc6a97066c97ab86bfc67d382f (diff)
downloadmariadb-git-e9c1e75b48e5d2c0047a3e88b35667a33d6395e4.tar.gz
Merge 4.1 -> 5.0
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union VC++Files/sql/mysqld.dsp: Auto merged configure.in: Auto merged include/my_global.h: Auto merged include/mysql_com.h: Auto merged libmysql/libmysql.c: Auto merged libmysqld/Makefile.am: Auto merged myisam/myisamchk.c: Auto merged myisam/myisamdef.h: Auto merged mysql-test/install_test_db.sh: Auto merged mysql-test/r/func_time.result: Auto merged mysql-test/r/mysqldump.result: Auto merged mysql-test/r/show_check.result: Auto merged mysql-test/r/subselect.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/t/func_time.test: Auto merged mysql-test/t/subselect.test: Auto merged scripts/make_binary_distribution.sh: Auto merged scripts/mysql_install_db.sh: Auto merged sql/ha_berkeley.cc: Auto merged mysql-test/t/rpl_error_ignored_table.test: Auto merged sql/ha_berkeley.h: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_innodb.h: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_subselect.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/lex.h: Auto merged sql/log.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/protocol.cc: Auto merged sql/records.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_acl.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_db.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_load.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_show.cc: Auto merged sql/sql_string.cc: Auto merged sql/sql_test.cc: Auto merged sql/sql_update.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/table.h: Auto merged tests/client_test.c: Auto merged
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy146
1 files changed, 108 insertions, 38 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index f72d43ad298..0874abaca9c 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -193,7 +193,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token ACTION
%token AGGREGATE_SYM
%token ALL
-%token AND
+%token AND_SYM
%token AS
%token ASC
%token AUTO_INC
@@ -329,6 +329,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token NAME_SYM
%token NATIONAL_SYM
%token NATURAL
+%token NDBCLUSTER_SYM
%token NEW_SYM
%token NCHAR_SYM
%token NCHAR_STRING
@@ -342,7 +343,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token OPEN_SYM
%token OPTION
%token OPTIONALLY
-%token OR
+%token OR_SYM
%token OR_OR_CONCAT
%token ORDER_SYM
%token OUT_SYM
@@ -617,8 +618,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token BEFORE_SYM
%left SET_VAR
-%left OR_OR_CONCAT OR XOR
-%left AND
+%left OR_OR_CONCAT OR_SYM XOR
+%left AND_SYM
%left BETWEEN_SYM CASE_SYM WHEN_SYM THEN_SYM ELSE
%left EQ EQUAL_SYM GE GT_SYM LE LT NE IS LIKE REGEXP IN_SYM
%left '|'
@@ -646,7 +647,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <simple_string>
remember_name remember_end opt_ident opt_db text_or_password
- opt_escape opt_constraint
+ opt_escape opt_constraint constraint
%type <string>
text_string opt_gconcat_separator
@@ -781,7 +782,7 @@ END_OF_INPUT
%type <NONE>
'-' '+' '*' '/' '%' '(' ')'
- ',' '!' '{' '}' '&' '|' AND OR OR_OR_CONCAT BETWEEN_SYM CASE_SYM
+ ',' '!' '{' '}' '&' '|' AND_SYM OR_SYM OR_OR_CONCAT BETWEEN_SYM CASE_SYM
THEN_SYM WHEN_SYM DIV_SYM MOD_SYM
%%
@@ -2240,7 +2241,7 @@ field_list_item:
;
column_def:
- field_spec check_constraint
+ field_spec opt_check_constraint
| field_spec references
{
Lex->col_list.empty(); /* Alloced by sql_alloc */
@@ -2272,20 +2273,33 @@ key_def:
lex->fk_match_option));
lex->col_list.empty(); /* Alloced by sql_alloc */
}
+ | constraint opt_check_constraint
+ {
+ Lex->col_list.empty(); /* Alloced by sql_alloc */
+ }
| opt_constraint check_constraint
{
Lex->col_list.empty(); /* Alloced by sql_alloc */
}
;
-check_constraint:
+opt_check_constraint:
/* empty */
- | CHECK_SYM expr
+ | check_constraint
+ ;
+
+check_constraint:
+ CHECK_SYM expr
;
opt_constraint:
/* empty */ { $$=(char*) 0; }
- | CONSTRAINT opt_ident { $$=$2; };
+ | constraint { $$= $1; }
+ ;
+
+constraint:
+ CONSTRAINT opt_ident { $$=$2; }
+ ;
field_spec:
field_ident
@@ -2504,10 +2518,29 @@ attribute:
{ Lex->on_update_value= new Item_func_now_local(); }
| AUTO_INC { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG; }
| SERIAL_SYM DEFAULT VALUE_SYM
- { Lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG; }
- | opt_primary KEY_SYM { Lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG; }
- | UNIQUE_SYM { Lex->type|= UNIQUE_FLAG; }
- | UNIQUE_SYM KEY_SYM { Lex->type|= UNIQUE_KEY_FLAG; }
+ {
+ LEX *lex=Lex;
+ lex->type|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_FLAG;
+ lex->alter_flags|= ALTER_ADD_INDEX;
+ }
+ | opt_primary KEY_SYM
+ {
+ LEX *lex=Lex;
+ lex->type|= PRI_KEY_FLAG | NOT_NULL_FLAG;
+ lex->alter_flags|= ALTER_ADD_INDEX;
+ }
+ | UNIQUE_SYM
+ {
+ LEX *lex=Lex;
+ lex->type|= UNIQUE_FLAG;
+ lex->alter_flags|= ALTER_ADD_INDEX;
+ }
+ | UNIQUE_SYM KEY_SYM
+ {
+ LEX *lex=Lex;
+ lex->type|= UNIQUE_KEY_FLAG;
+ lex->alter_flags|= ALTER_ADD_INDEX;
+ }
| COMMENT_SYM TEXT_STRING_sys { Lex->comment= &$2; }
| BINARY { Lex->type|= BINCMP_FLAG; }
| COLLATE_SYM collation_name
@@ -2765,6 +2798,7 @@ alter:
lex->alter_keys_onoff=LEAVE_AS_IS;
lex->tablespace_op=NO_TABLESPACE_OP;
lex->simple_alter=1;
+ lex->alter_flags=0;
}
alter_list
{}
@@ -2813,16 +2847,28 @@ alter_list:
| alter_list ',' alter_list_item;
add_column:
- ADD opt_column { Lex->change=0; };
+ ADD opt_column
+ {
+ LEX *lex=Lex;
+ lex->change=0;
+ lex->alter_flags|= ALTER_ADD_COLUMN;
+ };
alter_list_item:
add_column column_def opt_place { Lex->simple_alter=0; }
- | ADD key_def { Lex->simple_alter=0; }
+ | ADD key_def
+ {
+ LEX *lex=Lex;
+ lex->simple_alter=0;
+ lex->alter_flags|= ALTER_ADD_INDEX;
+ }
| add_column '(' field_list ')' { Lex->simple_alter=0; }
| CHANGE opt_column field_ident
{
LEX *lex=Lex;
- lex->change= $3.str; lex->simple_alter=0;
+ lex->change= $3.str;
+ lex->simple_alter=0;
+ lex->alter_flags|= ALTER_CHANGE_COLUMN;
}
field_spec opt_place
| MODIFY_SYM opt_column field_ident
@@ -2833,6 +2879,7 @@ alter_list_item:
lex->comment=0;
lex->charset= NULL;
lex->simple_alter=0;
+ lex->alter_flags|= ALTER_CHANGE_COLUMN;
}
type opt_attribute
{
@@ -2851,7 +2898,9 @@ alter_list_item:
{
LEX *lex=Lex;
lex->drop_list.push_back(new Alter_drop(Alter_drop::COLUMN,
- $3.str)); lex->simple_alter=0;
+ $3.str));
+ lex->simple_alter=0;
+ lex->alter_flags|= ALTER_DROP_COLUMN;
}
| DROP FOREIGN KEY_SYM opt_ident { Lex->simple_alter=0; }
| DROP PRIMARY_SYM KEY_SYM
@@ -2860,6 +2909,7 @@ alter_list_item:
lex->drop_list.push_back(new Alter_drop(Alter_drop::KEY,
primary_key_name));
lex->simple_alter=0;
+ lex->alter_flags|= ALTER_DROP_INDEX;
}
| DROP key_or_index field_ident
{
@@ -2867,6 +2917,7 @@ alter_list_item:
lex->drop_list.push_back(new Alter_drop(Alter_drop::KEY,
$3.str));
lex->simple_alter=0;
+ lex->alter_flags|= ALTER_DROP_INDEX;
}
| DISABLE_SYM KEYS { Lex->alter_keys_onoff=DISABLE; }
| ENABLE_SYM KEYS { Lex->alter_keys_onoff=ENABLE; }
@@ -2875,18 +2926,21 @@ alter_list_item:
LEX *lex=Lex;
lex->alter_list.push_back(new Alter_column($3.str,$6));
lex->simple_alter=0;
+ lex->alter_flags|= ALTER_CHANGE_COLUMN;
}
| ALTER opt_column field_ident DROP DEFAULT
{
LEX *lex=Lex;
lex->alter_list.push_back(new Alter_column($3.str,(Item*) 0));
lex->simple_alter=0;
+ lex->alter_flags|= ALTER_CHANGE_COLUMN;
}
| RENAME opt_to table_ident
{
LEX *lex=Lex;
lex->select_lex.db=$3->db.str;
lex->name= $3->table.str;
+ lex->alter_flags|= ALTER_RENAME;
}
| CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate
{
@@ -2909,8 +2963,18 @@ alter_list_item:
HA_CREATE_USED_DEFAULT_CHARSET);
lex->simple_alter= 0;
}
- | create_table_options_space_separated { Lex->simple_alter=0; }
- | order_clause { Lex->simple_alter=0; };
+ | create_table_options_space_separated
+ {
+ LEX *lex=Lex;
+ lex->simple_alter=0;
+ lex->alter_flags|= ALTER_OPTIONS;
+ }
+ | order_clause
+ {
+ LEX *lex=Lex;
+ lex->simple_alter=0;
+ lex->alter_flags|= ALTER_ORDER;
+ };
opt_column:
/* empty */ {}
@@ -3466,14 +3530,14 @@ expr_expr:
{
$$= new Item_func_not(new Item_in_subselect($1, $4));
}
- | expr BETWEEN_SYM no_and_expr AND expr
+ | expr BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_between($1,$3,$5); }
- | expr NOT BETWEEN_SYM no_and_expr AND expr
+ | expr NOT BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
- | expr OR expr { $$= new Item_cond_or($1,$3); }
+ | expr OR_SYM expr { $$= new Item_cond_or($1,$3); }
| expr XOR expr { $$= new Item_cond_xor($1,$3); }
- | expr AND expr { $$= new Item_cond_and($1,$3); }
+ | expr AND_SYM expr { $$= new Item_cond_and($1,$3); }
| expr SOUNDS_SYM LIKE expr
{
$$= new Item_func_eq(new Item_func_soundex($1),
@@ -3514,14 +3578,14 @@ expr_expr:
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
no_in_expr:
- no_in_expr BETWEEN_SYM no_and_expr AND expr
+ no_in_expr BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_between($1,$3,$5); }
- | no_in_expr NOT BETWEEN_SYM no_and_expr AND expr
+ | no_in_expr NOT BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_in_expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
- | no_in_expr OR expr { $$= new Item_cond_or($1,$3); }
+ | no_in_expr OR_SYM expr { $$= new Item_cond_or($1,$3); }
| no_in_expr XOR expr { $$= new Item_cond_xor($1,$3); }
- | no_in_expr AND expr { $$= new Item_cond_and($1,$3); }
+ | no_in_expr AND_SYM expr { $$= new Item_cond_and($1,$3); }
| no_in_expr SOUNDS_SYM LIKE expr
{
$$= new Item_func_eq(new Item_func_soundex($1),
@@ -3572,12 +3636,12 @@ no_and_expr:
{
$$= new Item_func_not(new Item_in_subselect($1, $4));
}
- | no_and_expr BETWEEN_SYM no_and_expr AND expr
+ | no_and_expr BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_between($1,$3,$5); }
- | no_and_expr NOT BETWEEN_SYM no_and_expr AND expr
+ | no_and_expr NOT BETWEEN_SYM no_and_expr AND_SYM expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_and_expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
- | no_and_expr OR expr { $$= new Item_cond_or($1,$3); }
+ | no_and_expr OR_SYM expr { $$= new Item_cond_or($1,$3); }
| no_and_expr XOR expr { $$= new Item_cond_xor($1,$3); }
| no_and_expr SOUNDS_SYM LIKE expr
{
@@ -4711,9 +4775,7 @@ opt_limit_clause_init:
LEX *lex= Lex;
SELECT_LEX *sel= lex->current_select;
sel->offset_limit= 0L;
- sel->select_limit= (&lex->select_lex == sel) ?
- Lex->thd->variables.select_limit : /* primary SELECT */
- HA_POS_ERROR; /* subquery */
+ sel->select_limit= HA_POS_ERROR;
}
| limit_clause {}
;
@@ -4733,18 +4795,21 @@ limit_options:
SELECT_LEX *sel= Select;
sel->select_limit= $1;
sel->offset_limit= 0L;
+ sel->explicit_limit= 1;
}
| ULONG_NUM ',' ULONG_NUM
{
SELECT_LEX *sel= Select;
sel->select_limit= $3;
sel->offset_limit= $1;
+ sel->explicit_limit= 1;
}
| ULONG_NUM OFFSET_SYM ULONG_NUM
{
SELECT_LEX *sel= Select;
sel->select_limit= $1;
sel->offset_limit= $3;
+ sel->explicit_limit= 1;
}
;
@@ -4756,7 +4821,11 @@ delete_limit_clause:
lex->current_select->select_limit= HA_POS_ERROR;
}
| LIMIT ulonglong_num
- { Select->select_limit= (ha_rows) $2; };
+ {
+ SELECT_LEX *sel= Select;
+ sel->select_limit= (ha_rows) $2;
+ sel->explicit_limit= 1;
+ };
ULONG_NUM:
NUM { $$= strtoul($1.str,NULL,10); }
@@ -5320,8 +5389,8 @@ show_param:
YYABORT;
}
| NEW_SYM MASTER_SYM FOR_SYM SLAVE WITH MASTER_LOG_FILE_SYM EQ
- TEXT_STRING_sys AND MASTER_LOG_POS_SYM EQ ulonglong_num
- AND MASTER_SERVER_ID_SYM EQ
+ TEXT_STRING_sys AND_SYM MASTER_LOG_POS_SYM EQ ulonglong_num
+ AND_SYM MASTER_SERVER_ID_SYM EQ
ULONG_NUM
{
Lex->sql_command = SQLCOM_SHOW_NEW_MASTER;
@@ -6220,6 +6289,7 @@ keyword:
| NAMES_SYM {}
| NATIONAL_SYM {}
| NCHAR_SYM {}
+ | NDBCLUSTER_SYM {}
| NEXT_SYM {}
| NEW_SYM {}
| NO_SYM {}
@@ -6718,7 +6788,7 @@ grant_privilege:
opt_and:
/* empty */ {}
- | AND {}
+ | AND_SYM {}
;
require_list: