Commit 3a49b1ab authored by unknown's avatar unknown

Undid earlier attempt to clean up this code, as it made merging from 4.1

a really painful exprience.

parent e8884704
......@@ -688,8 +688,7 @@ query:
thd->lex.sql_command = SQLCOM_EMPTY_QUERY;
}
}
| verb_clause END_OF_INPUT {}
;
| verb_clause END_OF_INPUT {};
verb_clause:
alter
......@@ -728,8 +727,7 @@ verb_clause:
| unlock
| update
| use
| help
;
| help;
/* help */
......@@ -739,8 +737,7 @@ help:
LEX *lex= Lex;
lex->sql_command= SQLCOM_HELP;
lex->help_arg= $2.str;
}
;
};
/* change master */
......@@ -750,13 +747,11 @@ change:
LEX *lex = Lex;
lex->sql_command = SQLCOM_CHANGE_MASTER;
bzero((char*) &lex->mi, sizeof(lex->mi));
} master_defs
;
} master_defs;
master_defs:
master_def
| master_defs ',' master_def
;
| master_defs ',' master_def;
master_def:
MASTER_HOST_SYM EQ TEXT_STRING
......@@ -805,6 +800,7 @@ master_def:
}
;
/* create a table */
create:
......@@ -893,32 +889,26 @@ create3:
opt_as:
/* empty */ {}
| AS {}
;
| AS {};
opt_table_options:
/* empty */ { $$= 0; }
| table_options { $$= $1;}
;
| table_options { $$= $1;};
table_options:
table_option { $$=$1; }
| table_option table_options { $$= $1 | $2; }
;
| table_option table_options { $$= $1 | $2; };
table_option:
TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; }
;
TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; };
opt_if_not_exists:
/* empty */ { $$= 0; }
| IF NOT EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; }
;
| IF NOT EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; };
opt_create_table_options:
/* empty */
| create_table_options
;
| create_table_options;
create_table_options_space_separated:
create_table_option
......@@ -926,9 +916,8 @@ create_table_options_space_separated:
create_table_options:
create_table_option
| create_table_option create_table_options
| create_table_option ',' create_table_options
;
| create_table_option create_table_options;
| create_table_option ',' create_table_options;
create_table_option:
TYPE_SYM opt_equal table_types { Lex->create_info.db_type= $3; }
......@@ -979,48 +968,41 @@ table_types:
| MERGE_SYM { $$= DB_TYPE_MRG_MYISAM; }
| HEAP_SYM { $$= DB_TYPE_HEAP; }
| BERKELEY_DB_SYM { $$= DB_TYPE_BERKELEY_DB; }
| INNOBASE_SYM { $$= DB_TYPE_INNODB; }
;
| INNOBASE_SYM { $$= DB_TYPE_INNODB; };
row_types:
DEFAULT { $$= ROW_TYPE_DEFAULT; }
| FIXED_SYM { $$= ROW_TYPE_FIXED; }
| DYNAMIC_SYM { $$= ROW_TYPE_DYNAMIC; }
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; }
;
| COMPRESSED_SYM { $$= ROW_TYPE_COMPRESSED; };
raid_types:
RAID_STRIPED_SYM { $$= RAID_TYPE_0; }
| RAID_0_SYM { $$= RAID_TYPE_0; }
| ULONG_NUM { $$=$1; }
;
| ULONG_NUM { $$=$1;};
merge_insert_types:
NO_SYM { $$= MERGE_INSERT_DISABLED; }
| FIRST_SYM { $$= MERGE_INSERT_TO_FIRST; }
| LAST_SYM { $$= MERGE_INSERT_TO_LAST; }
;
| LAST_SYM { $$= MERGE_INSERT_TO_LAST; };
opt_select_from:
opt_limit_clause {}
| select_from select_lock_type
;
| select_from select_lock_type;
udf_func_type:
/* empty */ { $$ = UDFTYPE_FUNCTION; }
| AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; }
;
| AGGREGATE_SYM { $$ = UDFTYPE_AGGREGATE; };
udf_type:
STRING_SYM {$$ = (int) STRING_RESULT; }
| REAL {$$ = (int) REAL_RESULT; }
| INT_SYM {$$ = (int) INT_RESULT; }
;
| INT_SYM {$$ = (int) INT_RESULT; };
field_list:
field_list_item
| field_list ',' field_list_item
;
| field_list ',' field_list_item;
field_list_item:
field_spec check_constraint
......@@ -1058,8 +1040,7 @@ check_constraint:
opt_constraint:
/* empty */
| CONSTRAINT opt_ident
;
| CONSTRAINT opt_ident;
field_spec:
field_ident
......@@ -1078,8 +1059,7 @@ field_spec:
lex->default_value, lex->comment,
lex->change,lex->interval,lex->charset))
YYABORT;
}
;
};
type:
int_type opt_len field_options { $$=$1; }
......@@ -1161,76 +1141,64 @@ type:
char:
CHAR_SYM {}
| NCHAR_SYM {}
| NATIONAL_SYM CHAR_SYM {}
;
| NATIONAL_SYM CHAR_SYM {};
varchar:
char VARYING {}
| VARCHAR {}
| NATIONAL_SYM VARCHAR {}
| NCHAR_SYM VARCHAR {}
;
| NCHAR_SYM VARCHAR {};
int_type:
INT_SYM { $$=FIELD_TYPE_LONG; }
| TINYINT { $$=FIELD_TYPE_TINY; }
| SMALLINT { $$=FIELD_TYPE_SHORT; }
| MEDIUMINT { $$=FIELD_TYPE_INT24; }
| BIGINT { $$=FIELD_TYPE_LONGLONG; }
;
| BIGINT { $$=FIELD_TYPE_LONGLONG; };
real_type:
REAL { $$= YYTHD->sql_mode & MODE_REAL_AS_FLOAT ?
FIELD_TYPE_FLOAT : FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM { $$=FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; }
;
| DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; };
float_options:
/* empty */ {}
| '(' NUM ')' { Lex->length=$2.str; }
| precision {}
;
| precision {};
precision:
'(' NUM ',' NUM ')'
{
LEX *lex=Lex;
lex->length=$2.str; lex->dec=$4.str;
}
;
};
field_options:
/* empty */ {}
| field_opt_list {}
;
| field_opt_list {};
field_opt_list:
field_opt_list field_option {}
| field_option {}
;
| field_option {};
field_option:
SIGNED_SYM {}
| UNSIGNED { Lex->type|= UNSIGNED_FLAG;}
| ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; }
;
| ZEROFILL { Lex->type|= UNSIGNED_FLAG | ZEROFILL_FLAG; };
opt_len:
/* empty */ { Lex->length=(char*) 0; } /* use default length */
| '(' NUM ')' { Lex->length= $2.str; }
;
| '(' NUM ')' { Lex->length= $2.str; };
opt_precision:
/* empty */ {}
| precision {}
;
| precision {};
opt_attribute:
/* empty */ {}
| opt_attribute_list {}
;
| opt_attribute_list {};
opt_attribute_list:
opt_attribute_list attribute {}
......@@ -1246,8 +1214,8 @@ attribute:
| 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; }
| COMMENT_SYM text_literal { Lex->comment= $2; }
;
| COMMENT_SYM text_literal { Lex->comment= $2; };
charset_name:
BINARY
......@@ -1265,31 +1233,27 @@ charset_name:
net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str);
YYABORT;
}
}
;
};
charset_name_or_default:
charset_name { $$=$1; }
| DEFAULT { $$=NULL; }
;
| DEFAULT { $$=NULL; } ;
opt_default:
/* empty */ {}
| DEFAULT {}
;
| DEFAULT {};
opt_db_default_character_set:
/* empty */ { $$=default_charset_info; }
| opt_default CHAR_SYM SET charset_name_or_default { $$=$4; }
| opt_default CHARSET charset_name_or_default { $$=$3; }
;
| opt_default CHARSET charset_name_or_default { $$=$3; };
opt_binary:
/* empty */ { Lex->charset=NULL; }
| BYTE_SYM { Lex->charset=my_charset_bin; }
| BINARY { Lex->charset=my_charset_bin; }
| CHAR_SYM SET charset_name { Lex->charset=$3; }
;
| CHAR_SYM SET charset_name { Lex->charset=$3; } ;
opt_primary:
/* empty */
......@@ -1306,45 +1270,38 @@ references:
opt_ref_list
{
$$=$2;
}
;
};
opt_ref_list:
/* empty */ opt_on_delete {}
| '(' ref_list ')' opt_on_delete {}
;
| '(' ref_list ')' opt_on_delete {};
ref_list:
ref_list ',' ident { Lex->ref_list.push_back(new key_part_spec($3.str)); }
| ident { Lex->ref_list.push_back(new key_part_spec($1.str)); }
;
| ident { Lex->ref_list.push_back(new key_part_spec($1.str)); };
opt_on_delete:
/* empty */ {}
| opt_on_delete_list {}
;
| opt_on_delete_list {};
opt_on_delete_list:
opt_on_delete_list opt_on_delete_item {}
| opt_on_delete_item {}
;
| opt_on_delete_item {};
opt_on_delete_item:
ON DELETE_SYM delete_option { Lex->fk_delete_opt= $3; }
| ON UPDATE_SYM delete_option { Lex->fk_update_opt= $3; }
| MATCH FULL { Lex->fk_match_option= foreign_key::FK_MATCH_FULL; }
| MATCH PARTIAL { Lex->fk_match_option= foreign_key::FK_MATCH_PARTIAL; }
| MATCH SIMPLE_SYM { Lex->fk_match_option= foreign_key::FK_MATCH_SIMPLE; }
;
| MATCH SIMPLE_SYM { Lex->fk_match_option= foreign_key::FK_MATCH_SIMPLE; };
delete_option:
RESTRICT { $$= (int) foreign_key::FK_OPTION_RESTRICT; }
| CASCADE { $$= (int) foreign_key::FK_OPTION_CASCADE; }
| SET NULL_SYM { $$= (int) foreign_key::FK_OPTION_SET_NULL; }
| NO_SYM ACTION { $$= (int) foreign_key::FK_OPTION_NO_ACTION; }
| SET DEFAULT { $$= (int) foreign_key::FK_OPTION_DEFAULT; }
;
| SET DEFAULT { $$= (int) foreign_key::FK_OPTION_DEFAULT; };
key_type:
opt_constraint PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; }
......@@ -1354,56 +1311,46 @@ key_type:
| SPATIAL_SYM { $$= Key::SPATIAL; }
| SPATIAL_SYM key_or_index { $$= Key::SPATIAL; }
| 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_SYM {}
| INDEX {}
;
| INDEX {};
keys_or_index:
KEYS {}
| INDEX {}
| INDEXES {}
;
| INDEXES {};
opt_unique_or_fulltext:
/* empty */ { $$= Key::MULTIPLE; }
| UNIQUE_SYM { $$= Key::UNIQUE; }
| SPATIAL_SYM { $$= Key::SPATIAL; }
;
| SPATIAL_SYM { $$= Key::SPATIAL; };
key_alg:
/* empty */ { $$= HA_KEY_ALG_UNDEF; }
| USING opt_btree_or_rtree { $$= $2; }
;
| USING opt_btree_or_rtree { $$= $2; };
opt_btree_or_rtree:
BTREE_SYM { $$= HA_KEY_ALG_BTREE; }
| RTREE_SYM { $$= HA_KEY_ALG_RTREE; }
| HASH_SYM { $$= HA_KEY_ALG_HASH; }
;
| HASH_SYM { $$= HA_KEY_ALG_HASH; };
key_list:
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:
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:
/* empty */ { $$=(char*) 0; } /* Defaultlength */
| field_ident { $$=$1.str; }
;
| field_ident { $$=$1.str; };
string_list:
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
......@@ -1433,24 +1380,23 @@ alter:
lex->alter_keys_onoff=LEAVE_AS_IS;
lex->simple_alter=1;
}
alter_list
alter_list;
| ALTER DATABASE ident opt_db_default_character_set
{
LEX *lex=Lex;
lex->sql_command=SQLCOM_ALTER_DB;
lex->name=$3.str;
lex->create_info.table_charset=$4;
}
;
};
alter_list:
| alter_list_item
| alter_list ',' alter_list_item
;
| alter_list ',' alter_list_item;
add_column:
ADD opt_column { Lex->change=0; }
;
ADD opt_column { Lex->change=0; };
alter_list_item:
add_column field_list_item opt_place { Lex->simple_alter=0; }
......@@ -1519,37 +1465,32 @@ alter_list_item:
lex->name= $3->table.str;
}
| create_table_options_space_separated { Lex->simple_alter=0; }
| order_clause { Lex->simple_alter=0; }
;
| order_clause { Lex->simple_alter=0; };
opt_column:
/* empty */ {}
| COLUMN_SYM {}
;
| COLUMN_SYM {};
opt_ignore:
/* empty */ { Lex->duplicates=DUP_ERROR; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
;
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; };
opt_restrict:
/* empty */ {}
| RESTRICT {}
| CASCADE {}
;
| CASCADE {};
opt_place:
/* empty */ {}
| 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:
/* empty */ {}
| TO_SYM {}
| EQ {}
| AS {}
;
| AS {};
/*
The first two deprecate the last two--delete the last two for 4.1 release
*/
......@@ -1571,8 +1512,7 @@ slave:
slave_thread_opts:
slave_thread_opt
| slave_thread_opts ',' slave_thread_opt
;
| slave_thread_opts ',' slave_thread_opt;
slave_thread_opt:
/*empty*/ {}
......@@ -1588,8 +1528,7 @@ restore:
table_list FROM TEXT_STRING
{
Lex->backup_dir = $6.str;
}
;
};
backup:
BACKUP_SYM table_or_tables
......@@ -1599,8 +1538,7 @@ backup:
table_list TO_SYM TEXT_STRING
{
Lex->backup_dir = $6.str;
}
;
};
repair:
REPAIR table_or_tables
......@@ -1609,24 +1547,20 @@ repair:
lex->sql_command = SQLCOM_REPAIR;
lex->check_opt.init();
}
table_list opt_mi_repair_type
;
table_list opt_mi_repair_type;
opt_mi_repair_type:
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
| mi_repair_types {}
;
| mi_repair_types {};
mi_repair_types:
mi_repair_type {}
| mi_repair_type mi_repair_types {}
;
| mi_repair_type mi_repair_types {};
mi_repair_type:
QUICK { Lex->check_opt.flags|= T_QUICK; }
| 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_SYM table_or_tables
......@@ -1635,8 +1569,7 @@ analyze:
lex->sql_command = SQLCOM_ANALYZE;
lex->check_opt.init();
}
table_list opt_mi_check_type
;
table_list opt_mi_check_type;
check:
CHECK_SYM table_or_tables
......@@ -1645,26 +1578,22 @@ check:
lex->sql_command = SQLCOM_CHECK;
lex->check_opt.init();
}
table_list opt_mi_check_type
;
table_list opt_mi_check_type;
opt_mi_check_type:
/* empty */ { Lex->check_opt.flags = T_MEDIUM; }
| mi_check_types {}
;
| mi_check_types {};
mi_check_types:
mi_check_type {}
| mi_check_type mi_check_types {}
;
| mi_check_type mi_check_types {};
mi_check_type:
QUICK { Lex->check_opt.flags|= T_QUICK; }
| FAST_SYM { Lex->check_opt.flags|= T_FAST; }
| MEDIUM_SYM { Lex->check_opt.flags|= T_MEDIUM; }
| 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 table_or_tables
......@@ -1673,21 +1602,18 @@ optimize:
lex->sql_command = SQLCOM_OPTIMIZE;
lex->check_opt.init();
}
table_list opt_mi_check_type
;
table_list opt_mi_check_type;
rename:
RENAME table_or_tables
{
Lex->sql_command=SQLCOM_RENAME_TABLE;
}
table_to_table_list
;
table_to_table_list;
table_to_table_list:
table_to_table
| table_to_table_list ',' table_to_table
;
| table_to_table_list ',' table_to_table;
table_to_table:
table_ident TO_SYM table_ident
......@@ -1696,8 +1622,7 @@ table_to_table:
if (!sl->add_table_to_list($1,NULL,1,TL_IGNORE) ||
!sl->add_table_to_list($3,NULL,1,TL_IGNORE))
YYABORT;
}
;
};
/*
Select : retrieve data from table
......@@ -1705,8 +1630,7 @@ table_to_table:
select:
select_init { Lex->sql_command=SQLCOM_SELECT; }
;
select_init { Lex->sql_command=SQLCOM_SELECT; };
/* Need select_init2 for subselects. */
select_init:
......@@ -1746,8 +1670,7 @@ select_part2:
lex->lock_option= TL_READ; /* Only for global SELECT */
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:
opt_limit_clause {}
......@@ -1758,22 +1681,18 @@ select_into:
| into
| select_from
| into select_from
| select_from into
;
| select_from into;
select_from:
FROM join_table_list where_clause group_clause having_clause opt_order_clause opt_limit_clause procedure_clause
;
FROM join_table_list where_clause group_clause having_clause opt_order_clause opt_limit_clause procedure_clause;
select_options:
/* empty*/
| select_option_list
;
| select_option_list;
select_option_list:
select_option_list select_option
| select_option
;
| select_option;
select_option:
STRAIGHT_JOIN { Select->options|= SELECT_STRAIGHT_JOIN; }
......@@ -1827,8 +1746,8 @@ select_item_list:
{
if (add_item_to_list(new Item_field(NULL,NULL,"*")))
YYABORT;
}
;
};
select_item:
remember_name select_item2 remember_end select_alias
......@@ -1839,39 +1758,32 @@ select_item:
$2->set_name($4.str);
else if (!$2->name)
$2->set_name($1,(uint) ($3 - $1));
}
;
};
remember_name:
{ $$=(char*) Lex->tok_start; }
;
{ $$=(char*) Lex->tok_start; };
remember_end:
{ $$=(char*) Lex->tok_end; }
;
{ $$=(char*) Lex->tok_end; };
select_item2:
table_wild { $$=$1; } /* table.* */
| expr { $$=$1; }
;
| expr { $$=$1; };
select_alias:
{ $$.str=0;}
| AS ident { $$=$2; }
| AS TEXT_STRING { $$=$2; }
| ident { $$=$1; }
| TEXT_STRING { $$=$1; }
;
| TEXT_STRING { $$=$1; };
optional_braces:
/* empty */ {}
| '(' ')' {}
;
| '(' ')' {};
/* all possible expressions */
expr: expr_expr { $$= $1; }
| simple_expr { $$= $1; }
;
| simple_expr { $$= $1; };
comp_op: EQ { $$ = &comp_eq_creator; }
| GE { $$ = &comp_ge_creator; }
......@@ -1939,8 +1851,7 @@ expr_expr:
| expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
| expr COLLATE_SYM charset_name
{ $$= new Item_func_set_collation($1,$3); }
;
{ $$= new Item_func_set_collation($1,$3); };
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
no_in_expr:
......@@ -1985,8 +1896,7 @@ no_in_expr:
{ $$= new Item_date_add_interval($1,$4,$5,0); }
| no_in_expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
| simple_expr
;
| simple_expr;
/* expressions that begin with 'expr' that does NOT follow AND */
no_and_expr:
......@@ -2040,8 +1950,7 @@ no_and_expr:
{ $$= new Item_date_add_interval($1,$4,$5,0); }
| no_and_expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); }
| simple_expr
;
| simple_expr;
simple_expr:
simple_ident
......@@ -2381,13 +2290,11 @@ simple_expr:
Lex->safe_to_cache_query=0;
}
| EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new Item_extract( $3, $5); }
;
{ $$=new Item_extract( $3, $5); };
udf_expr_list:
/* empty */ { $$= NULL; }
| expr_list { $$= $1; }
;
| expr_list { $$= $1;};
sum_expr:
AVG_SYM '(' in_sum_expr ')'
......@@ -2411,8 +2318,7 @@ sum_expr:
| STD_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_std($3); }
| SUM_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_sum($3); }
;
{ $$=new Item_sum_sum($3); };
in_sum_expr:
{
......@@ -2427,8 +2333,7 @@ in_sum_expr:
{
Select->select_lex()->in_sum_expr--;
$$=$2;
}
;
};
cast_type:
BINARY { $$=ITEM_CAST_BINARY; }
......@@ -2445,45 +2350,37 @@ cast_type:
expr_list:
{ Select->expr_list.push_front(new List<Item>); }
expr_list2
{ $$= Select->expr_list.pop(); }
;
{ $$= Select->expr_list.pop(); };
expr_list2:
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 { $$= $1; }
| '(' ident_list ')' { $$= $2; }
;
| '(' ident_list ')' { $$= $2; };
ident_list:
{ Select->expr_list.push_front(new List<Item>); }
ident_list2
{ $$= Select->expr_list.pop(); }
;
{ $$= Select->expr_list.pop(); };
ident_list2:
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:
/* empty */ { $$= NULL; }
| expr { $$= $1; }
;
| expr { $$= $1; };
opt_else:
/* empty */ { $$= NULL; }
| ELSE expr { $$= $2; }
;
| ELSE expr { $$= $2; };
when_list:
{ Select->when_list.push_front(new List<Item>); }
when_list2
{ $$= Select->when_list.pop(); }
;
{ $$= Select->when_list.pop(); };
when_list2:
expr THEN_SYM expr
......@@ -2497,13 +2394,11 @@ when_list2:
SELECT_LEX_NODE *sel=Select;
sel->when_list.head()->push_back($3);
sel->when_list.head()->push_back($5);
}
;
};
opt_pad:
/* empty */ { $$=new Item_string(" ",1,default_charset_info); }
| expr { $$=$1; }
;
| expr { $$=$1; };
join_table_list:
'(' join_table_list ')' { $$=$2; }
......@@ -2546,14 +2441,12 @@ join_table_list:
| join_table_list NATURAL RIGHT opt_outer JOIN_SYM join_table_list
{ add_join_natural($6,$1); $1->outer_join|=JOIN_TYPE_RIGHT; $$=$1; }
| join_table_list NATURAL JOIN_SYM join_table_list
{ add_join_natural($1,$4); $$=$4; }
;
{ add_join_natural($1,$4); $$=$4; };
normal_join:
',' {}
| JOIN_SYM {}
| CROSS JOIN_SYM {}
;
| CROSS JOIN_SYM {};
join_table:
{
......@@ -2580,8 +2473,7 @@ join_table:
add_table_to_list(new Table_ident(unit), $5, 0,
lex->lock_option)))
YYABORT;
}
;
};
select_derived:
{
......@@ -2598,8 +2490,7 @@ select_derived:
opt_outer:
/* empty */ {}
| OUTER {}
;
| OUTER {};
opt_key_definition:
/* empty */ {}
......@@ -2614,14 +2505,12 @@ opt_key_definition:
SELECT_LEX *sel= Select->select_lex();
sel->ignore_index= *$2;
sel->ignore_index_ptr= &sel->ignore_index;
}
;
};
key_usage_list:
key_or_index { Select->select_lex()->interval_list.empty(); }
'(' key_usage_list2 ')'
{ $$= &Select->select_lex()->interval_list; }
;
{ $$= &Select->select_lex()->interval_list; };
key_usage_list2:
key_usage_list2 ',' ident
......@@ -2635,8 +2524,7 @@ key_usage_list2:
| PRIMARY_SYM
{ Select->select_lex()->
interval_list.push_back(new String("PRIMARY", 7,
default_charset_info)); }
;
default_charset_info)); };
using_list:
ident
......@@ -2653,8 +2541,7 @@ using_list:
SELECT_LEX *sel= Select->select_lex();
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;
}
;
};
interval:
DAY_HOUR_SYM { $$=INTERVAL_DAY_HOUR; }
......@@ -2669,20 +2556,18 @@ interval:
| MONTH_SYM { $$=INTERVAL_MONTH; }
| SECOND_SYM { $$=INTERVAL_SECOND; }
| YEAR_MONTH_SYM { $$=INTERVAL_YEAR_MONTH; }
| YEAR_SYM { $$=INTERVAL_YEAR; }
;
| YEAR_SYM { $$=INTERVAL_YEAR; };
table_alias:
/* empty */
| AS
| EQ
;
| EQ;
opt_table_alias:
/* empty */ { $$=0; }
| table_alias ident
{ $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); }
;
{ $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); };
where_clause:
/* empty */ { Select->select_lex()->where= 0; }
......@@ -2707,8 +2592,7 @@ having_clause:
opt_escape:
ESCAPE_SYM TEXT_STRING { $$= $2.str; }
| /* empty */ { $$= (char*) "\\"; }
;
| /* empty */ { $$= (char*) "\\"; };
/*
......@@ -2717,15 +2601,13 @@ opt_escape:
group_clause:
/* empty */
| GROUP BY group_list olap_opt
;
| GROUP BY group_list olap_opt;
group_list:
group_list ',' order_ident order_dir
{ if (add_group_to_list($3,(bool) $4)) YYABORT; }
| order_ident order_dir
{ if (add_group_to_list($1,(bool) $2)) YYABORT; }
;
{ if (add_group_to_list($1,(bool) $2)) YYABORT; };
olap_opt:
/* empty */ {}
......@@ -2765,8 +2647,7 @@ olap_opt:
opt_order_clause:
/* empty */
| order_clause
;
| order_clause;
order_clause:
ORDER_SYM BY
......@@ -2781,21 +2662,19 @@ order_clause:
"ORDER BY");
YYABORT;
}
} order_list
;
} order_list;
order_list:
order_list ',' order_ident order_dir
{ if (add_order_to_list($3,(bool) $4)) YYABORT; }
| order_ident order_dir
{ if (add_order_to_list($1,(bool) $2)) YYABORT; }
;
{ if (add_order_to_list($1,(bool) $2)) YYABORT; };
order_dir:
/* empty */ { $$ = 1; }
| ASC { $$ =1; }
| DESC { $$ =0; }
;
| DESC { $$ =0; };
opt_limit_clause:
/* empty */ {}
......@@ -2835,6 +2714,7 @@ limit_options:
}
;
delete_limit_clause:
/* empty */
{
......@@ -2842,23 +2722,20 @@ delete_limit_clause:
lex->current_select->select_limit= HA_POS_ERROR;
}
| LIMIT ulonglong_num
{ Select->select_limit= (ha_rows) $2; }
;
{ Select->select_limit= (ha_rows) $2; };
ULONG_NUM:
NUM { $$= strtoul($1.str,NULL,10); }
| ULONGLONG_NUM { $$= (ulong) strtoull($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:
NUM { $$= (ulonglong) strtoul($1.str,NULL,10); }
| ULONGLONG_NUM { $$= strtoull($1.str,NULL,10); }
| LONG_NUM { $$= (ulonglong) strtoul($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:
/* empty */
......@@ -2872,18 +2749,16 @@ procedure_clause:
YYABORT;
Lex->safe_to_cache_query=0;
}
'(' procedure_list ')'
;
'(' procedure_list ')';
procedure_list:
/* empty */ {}
| procedure_list2 {}
;
| procedure_list2 {};
procedure_list2:
procedure_list2 ',' procedure_item
| procedure_item
;
| procedure_item;
procedure_item:
remember_name expr
......@@ -2959,9 +2834,7 @@ do: DO_SYM
if (!(lex->insert_list = new List_item))
YYABORT;
}
values
;
values;
/*
Drop : delete tables or index
*/
......@@ -2996,19 +2869,16 @@ drop:
LEX *lex=Lex;
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->udf.name=$3.str;
}
;
};
table_list:
table_name
| table_list ',' table_name
;
| table_list ',' table_name;
table_name:
table_ident
{ if (!Select->add_table_to_list($1, NULL, 1)) YYABORT; }
;
{ if (!Select->add_table_to_list($1, NULL, 1)) YYABORT; };
if_exists:
/* empty */ { $$= 0; }
......@@ -3065,8 +2935,7 @@ replace_lock_option:
insert2:
INTO insert_table {}
| insert_table {}
;
| insert_table {};
insert_table:
table_name
......@@ -3075,8 +2944,7 @@ insert_table:
lex->field_list.empty();
lex->many_values.empty();
lex->insert_list=0;
}
;
};
insert_field_spec:
opt_field_spec insert_values {}
......@@ -3087,19 +2955,16 @@ insert_field_spec:
lex->many_values.push_back(lex->insert_list))
YYABORT;
}
ident_eq_list
;
ident_eq_list;
opt_field_spec:
/* empty */ { }
| '(' fields ')' { }
| '(' ')' { }
;
| '(' ')' { };
fields:
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:
VALUES values_list {}
......@@ -3118,14 +2983,12 @@ insert_values:
values_list:
values_list ',' no_braces
| no_braces
;
| no_braces;
ident_eq_list:
ident_eq_list ',' ident_eq_value
|
ident_eq_value
;
ident_eq_value;
ident_eq_value:
simple_ident equal expr_or_default
......@@ -3134,8 +2997,7 @@ ident_eq_value:
if (lex->field_list.push_back($1) ||
lex->insert_list->push_back($3))
YYABORT;
}
;
};
equal: EQ {}
| SET_VAR {}
......@@ -3157,13 +3019,11 @@ no_braces:
LEX *lex=Lex;
if (lex->many_values.push_back(lex->insert_list))
YYABORT;
}
;
};
opt_values:
/* empty */ {}
| values
;
| values;
values:
values ',' expr_or_default
......@@ -3226,8 +3086,7 @@ update_list:
{
if (add_item_to_list($1) || add_value_to_list($3))
YYABORT;
}
;
};
opt_low_priority:
/* empty */ { $$= YYTHD->update_lock_default; }
......@@ -3260,13 +3119,11 @@ single_multi:
FROM join_table_list where_clause
| FROM table_wild_list
{ mysql_init_multi_delete(Lex); }
USING join_table_list where_clause
;
USING join_table_list where_clause;
table_wild_list:
table_wild_one {}
| table_wild_list ',' table_wild_one {}
;
| table_wild_list ',' table_wild_one {};
table_wild_one:
ident opt_wild
......@@ -3285,19 +3142,16 @@ table_wild_one:
opt_wild:
/* empty */ {}
| '.' '*' {}
;
| '.' '*' {};
opt_delete_options:
/* empty */ {}
| opt_delete_option opt_delete_options {}
;
| opt_delete_option opt_delete_options {};
opt_delete_option:
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_SYM opt_table_sym table_name
......@@ -3311,8 +3165,7 @@ truncate:
opt_table_sym:
/* empty */
| TABLE_SYM
;
| TABLE_SYM;
/* Show things */
......@@ -3322,9 +3175,7 @@ show: SHOW
lex->wild=0;
bzero((char*) &lex->create_info,sizeof(lex->create_info));
}
show_param
;
show_param;
show_param:
DATABASES wild
......@@ -3456,38 +3307,31 @@ show_param:
| SLAVE STATUS_SYM
{
Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
}
;
};
opt_db:
/* empty */ { $$= 0; }
| from_or_in ident { $$= $2.str; }
;
| from_or_in ident { $$= $2.str; };
wild:
/* empty */
| LIKE text_string { Lex->wild= $2; }
;
| LIKE text_string { Lex->wild= $2; };
opt_full:
/* empty */ { Lex->verbose=0; }
| FULL { Lex->verbose=1; }
;
| FULL { Lex->verbose=1; };
from_or_in:
FROM
| IN_SYM
;
| IN_SYM;
binlog_in:
/* 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:
/* 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 */
......@@ -3506,21 +3350,18 @@ describe:
{
LEX *lex=Lex;
lex->select_lex.options|= SELECT_DESCRIBE;
}
;
};
describe_command:
DESC
| DESCRIBE
;
| DESCRIBE;
opt_describe_column:
/* empty */ {}
| text_string { Lex->wild= $1; }
| ident
{ Lex->wild= new String((const char*) $1.str,$1.length,default_charset_info); }
;
{ Lex->wild= new String((const char*) $1.str,$1.length,default_charset_info); };
/* flush things */
......@@ -3531,13 +3372,11 @@ flush:
LEX *lex=Lex;
lex->sql_command= SQLCOM_FLUSH; lex->type=0;
}
flush_options
;
flush_options;
flush_options:
flush_options ',' flush_option
| flush_option
;
| flush_option;
flush_option:
table_or_tables { Lex->type|= REFRESH_TABLES; } opt_table_list
......@@ -3550,32 +3389,26 @@ flush_option:
| SLAVE { Lex->type|= REFRESH_SLAVE; }
| MASTER_SYM { Lex->type|= REFRESH_MASTER; }
| DES_KEY_FILE { Lex->type|= REFRESH_DES_KEY_FILE; }
| RESOURCES { Lex->type|= REFRESH_USER_RESOURCES; }
;
| RESOURCES { Lex->type|= REFRESH_USER_RESOURCES; };
opt_table_list:
/* empty */ {}
| table_list {}
;
/* empty */ {;}
| table_list {;};
reset:
RESET_SYM
{
LEX *lex=Lex;
lex->sql_command= SQLCOM_RESET; lex->type=0;
} reset_options
;
} reset_options;
reset_options:
reset_options ',' reset_option
| reset_option
;
| reset_option;
reset_option:
SLAVE { Lex->type|= REFRESH_SLAVE; }
| 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
......@@ -3587,8 +3420,7 @@ purge:
MASTER_SYM LOGS_SYM TO_SYM TEXT_STRING
{
Lex->to_log = $6.str;
}
;
} ;
/* kill threads */
......@@ -3603,8 +3435,7 @@ kill:
}
lex->sql_command=SQLCOM_KILL;
lex->thread_id= (ulong) $2->val_int();
}
;
};
/* change database */
......@@ -3613,8 +3444,7 @@ use: USE_SYM ident
LEX *lex=Lex;
lex->sql_command=SQLCOM_CHANGE_DB;
lex->select_lex.db= $2.str;
}
;
};
/* import, export of files */
......@@ -3646,13 +3476,11 @@ load: LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING
LOAD DATA_SYM FROM MASTER_SYM
{
Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
}
;
};
opt_local:
/* empty */ { $$=0; }
| LOCAL_SYM { $$=1; }
;
/* empty */ { $$=0;}
| LOCAL_SYM { $$=1;};
load_data_lock:
/* empty */ { $$= YYTHD->update_lock_default; }
......@@ -3663,18 +3491,15 @@ load_data_lock:
opt_duplicate:
/* empty */ { Lex->duplicates=DUP_ERROR; }
| REPLACE { Lex->duplicates=DUP_REPLACE; }
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; }
;
| IGNORE_SYM { Lex->duplicates=DUP_IGNORE; };
opt_field_term:
/* empty */
| COLUMNS field_term_list
;
| COLUMNS field_term_list;
field_term_list:
field_term_list field_term
| field_term
;
| field_term;
field_term:
TERMINATED BY text_string { Lex->exchange->field_term= $3;}
......@@ -3684,30 +3509,25 @@ field_term:
lex->exchange->enclosed= $4;
lex->exchange->opt_enclosed=1;
}
| ENCLOSED BY text_string { Lex->exchange->enclosed= $3; }
| ESCAPED BY text_string { Lex->exchange->escaped= $3; }
;
| ENCLOSED BY text_string { Lex->exchange->enclosed= $3;}
| ESCAPED BY text_string { Lex->exchange->escaped= $3;};
opt_line_term:
/* empty */
| LINES line_term_list
;
| LINES line_term_list;
line_term_list:
line_term_list line_term
| line_term
;
| line_term;
line_term:
TERMINATED BY text_string { Lex->exchange->line_term= $3; }
| STARTING BY text_string { Lex->exchange->line_start= $3; }
;
TERMINATED BY text_string { Lex->exchange->line_term= $3;}
| STARTING BY text_string { Lex->exchange->line_start= $3;};
opt_ignore_lines:
/* empty */
| IGNORE_SYM NUM LINES
{ Lex->exchange->skip_lines=atol($2.str); }
;
{ Lex->exchange->skip_lines=atol($2.str); };
/* Common definitions */
......@@ -3715,8 +3535,7 @@ text_literal:
TEXT_STRING { $$ = new Item_string($1.str,$1.length,YYTHD->thd_charset); }
| UNDERSCORE_CHARSET TEXT_STRING { $$ = new Item_string($2.str,$2.length,Lex->charset); }
| text_literal TEXT_STRING
{ ((Item_string*) $1)->append($2.str,$2.length); }
;
{ ((Item_string*) $1)->append($2.str,$2.length); };
text_string:
TEXT_STRING { $$= new String($1.str,$1.length,YYTHD->thd_charset); }
......@@ -3724,9 +3543,7 @@ text_string:
{
Item *tmp = new Item_varbinary($1.str,$1.length);
$$= tmp ? tmp->val_str((String*) 0) : (String*) 0;
}
;
};
param_marker:
'?'
{
......@@ -3741,9 +3558,7 @@ param_marker:
yyerror("You have an error in your SQL syntax");
YYABORT;
}
}
;
};
literal:
text_literal { $$ = $1; }
| NUM { $$ = new Item_int($1.str, (longlong) atol($1.str),$1.length); }
......@@ -3756,8 +3571,7 @@ literal:
| HEX_NUM { $$ = new Item_varbinary($1.str,$1.length);}
| DATE_SYM text_literal { $$ = $2; }
| TIME_SYM text_literal { $$ = $2; }
| TIMESTAMP text_literal { $$ = $2; }
;
| TIMESTAMP text_literal { $$ = $2; };
/**********************************************************************
** Createing different items.
......@@ -3765,19 +3579,16 @@ literal:
insert_ident:
simple_ident { $$=$1; }
| table_wild { $$=$1; }
;
| table_wild { $$=$1; };
table_wild:
ident '.' '*' { $$ = new Item_field(NullS,$1.str,"*"); }
| ident '.' ident '.' '*'
{ $$ = new Item_field((YYTHD->client_capabilities &
CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); }
;
CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); };
order_ident:
expr { $$=$1; }
;
expr { $$=$1; };
simple_ident:
ident
......@@ -3799,20 +3610,19 @@ simple_ident:
{
SELECT_LEX_NODE *sel=Select;
$$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
}
;
};
field_ident:
ident { $$=$1;}
| ident '.' ident { $$=$3;} /* Skipp schema name in create*/
| '.' ident { $$=$2;} /* For Delphi */
;
| '.' ident { $$=$2;} /* For Delphi */;
table_ident:
ident { $$=new Table_ident($1); }
| ident '.' ident { $$=new Table_ident($1,$3,0);}
| '.' ident { $$=new Table_ident($2);} /* For Delphi */
;
| '.' ident { $$=new Table_ident($2);}
/* For Delphi */;
ident:
IDENT { $$=$1; }
......@@ -3829,8 +3639,7 @@ ident:
ident_or_text:
ident { $$=$1;}
| TEXT_STRING { $$=$1;}
| LEX_HOSTNAME { $$=$1;}
;
| LEX_HOSTNAME { $$=$1;};
user:
ident_or_text
......@@ -3844,8 +3653,7 @@ user:
if (!($$=(LEX_USER*) sql_alloc(sizeof(st_lex_user))))
YYABORT;
$$->user = $1; $$->host=$3;
}
;
};
/* Keyword that we allow for identifiers */
......@@ -4023,18 +3831,15 @@ set:
lex->option_type=OPT_DEFAULT;
lex->var_list.empty();
}
option_value_list
;
option_value_list;
opt_option:
/* empty */ {}
| OPTION {}
;
| OPTION {};
option_value_list:
option_type option_value
| option_value_list ',' option_type option_value
;
| option_value_list ',' option_type option_value;
option_type:
/* empty */ {}
......@@ -4112,7 +3917,6 @@ internal_variable_name:
}
;
isolation_types:
READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; }
| READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; }
......@@ -4135,6 +3939,7 @@ text_or_password:
}
;
set_expr_or_default:
expr { $$=$1; }
| DEFAULT { $$=0; }
......@@ -4150,18 +3955,15 @@ lock:
{
Lex->sql_command=SQLCOM_LOCK_TABLES;
}
table_lock_list
;
table_lock_list;
table_or_tables:
TABLE_SYM
| TABLES
;
| TABLES;
table_lock_list:
table_lock
| table_lock_list ',' table_lock
;
| table_lock_list ',' table_lock;
table_lock:
table_ident opt_table_alias lock_option
......@@ -4263,8 +4065,7 @@ revoke:
lex->ssl_cipher= lex->x509_subject= lex->x509_issuer= 0;
bzero((char*) &lex->mqh, sizeof(lex->mqh));
}
grant_privileges ON opt_table FROM user_list
;
grant_privileges ON opt_table FROM user_list;
grant:
GRANT
......@@ -4280,8 +4081,7 @@ grant:
bzero(&(lex->mqh),sizeof(lex->mqh));
}
grant_privileges ON opt_table TO_SYM user_list
require_clause grant_options
;
require_clause grant_options;
grant_privileges:
grant_privilege_list {}
......@@ -4291,8 +4091,7 @@ grant_privileges:
grant_privilege_list:
grant_privilege
| grant_privilege_list ',' grant_privilege
;
| grant_privilege_list ',' grant_privilege;
grant_privilege:
SELECT_SYM { Lex->which_columns = SELECT_ACL;} opt_column_list
......@@ -4319,6 +4118,7 @@ grant_privilege:
| REPLICATION CLIENT_SYM { Lex->grant |= REPL_CLIENT_ACL;}
;
opt_and:
/* empty */ {}
| AND {}
......@@ -4409,6 +4209,7 @@ opt_table:
}
;
user_list:
grant_user { if (Lex->users_list.push_back($1)) YYABORT;}
| user_list ',' grant_user
......@@ -4418,6 +4219,7 @@ user_list:
}
;
grant_user:
user IDENTIFIED_SYM BY TEXT_STRING
{
......@@ -4446,13 +4248,11 @@ opt_column_list:
LEX *lex=Lex;
lex->grant |= lex->which_columns;
}
| '(' column_list ')'
;
| '(' column_list ')';
column_list:
column_list ',' column_list_id
| column_list_id
;
| column_list_id;
column_list_id:
ident
......@@ -4495,11 +4295,9 @@ require_clause: /* empty */
}
;
grant_options:
/* empty */ {}
| WITH grant_option_list
;
| WITH grant_option_list;
grant_option_list:
grant_option_list grant_option {}
......@@ -4526,8 +4324,7 @@ grant_option:
;
begin:
BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN;} opt_work
;
BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN;} opt_work;
opt_work:
/* empty */ {}
......@@ -4535,12 +4332,10 @@ opt_work:
;
commit:
COMMIT_SYM { Lex->sql_command = SQLCOM_COMMIT; }
;
COMMIT_SYM { Lex->sql_command = SQLCOM_COMMIT;};
rollback:
ROLLBACK_SYM { Lex->sql_command = SQLCOM_ROLLBACK; }
;
ROLLBACK_SYM { Lex->sql_command = SQLCOM_ROLLBACK;};
/*
......@@ -4605,16 +4400,14 @@ optional_order_or_limit:
union_option:
/* empty */ {}
| ALL {Select->master_unit()->union_option= 1;}
;
| ALL {Select->master_unit()->union_option= 1;};
singleval_subselect:
subselect_start singleval_subselect_init
subselect_end
{
$$= $2;
}
;
};
singleval_subselect_init:
select_init2
......@@ -4622,16 +4415,14 @@ singleval_subselect_init:
$$= new Item_singleval_subselect(YYTHD,
Lex->current_select->master_unit()->
first_select());
}
;
};
exists_subselect:
subselect_start exists_subselect_init
subselect_end
{
$$= $2;
}
;
};
exists_subselect_init:
select_init2
......@@ -4659,13 +4450,11 @@ subselect_start:
{
if (mysql_new_select(Lex, 1))
YYABORT;
}
;
};
subselect_end:
')'
{
LEX *lex=Lex;
lex->current_select = lex->current_select->outer_select();
}
;
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment