summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy90
1 files changed, 82 insertions, 8 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 34cdb3dbf13..2207d8834b2 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -54,6 +54,7 @@ inline Item *or_or_concat(Item* A, Item* B)
Key::Keytype key_type;
enum db_type db_type;
enum row_type row_type;
+ enum enum_tx_isolation tx_isolation;
String *string;
key_part_spec *key_part;
TABLE_LIST *table_list;
@@ -141,6 +142,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token CASCADE
%token CHECKSUM_SYM
%token CHECK_SYM
+%token COMMITTED_SYM
%token COLUMNS
%token COLUMN_SYM
%token CONSTRAINT
@@ -166,6 +168,9 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token FROM
%token FULL
%token FULLTEXT_SYM
+%token GEMINI_SYM
+%token GEMINI_SPIN_RETRIES
+%token GLOBAL_SYM
%token GRANT
%token GRANTS
%token GREATEST_SYM
@@ -183,12 +188,14 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token INNOBASE_SYM
%token INTO
%token IN_SYM
+%token ISOLATION
%token ISAM_SYM
%token JOIN_SYM
%token KEYS
%token KEY_SYM
%token LEADING
%token LEAST_SYM
+%token LEVEL_SYM
%token LEX_HOSTNAME
%token LIKE
%token LINES
@@ -244,6 +251,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token REGEXP
%token RELOAD
%token RENAME
+%token REPEATABLE_SYM
%token RESTORE_SYM
%token RESTRICT
%token REVOKE
@@ -251,6 +259,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token ROW_FORMAT_SYM
%token ROW_SYM
%token SET
+%token SERIALIZABLE_SYM
+%token SESSION_SYM
%token SHUTDOWN
%token STARTING
%token STATUS_SYM
@@ -262,6 +272,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token TEXT_STRING
%token TO_SYM
%token TRAILING
+%token TRANSACTION_SYM
%token TYPE_SYM
%token FUNC_ARG0
%token FUNC_ARG1
@@ -270,6 +281,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token UDF_RETURNS_SYM
%token UDF_SONAME_SYM
%token UDF_SYM
+%token UNCOMMITTED_SYM
%token UNION_SYM
%token UNIQUE_SYM
%token USAGE
@@ -361,6 +373,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token MAKE_SET_SYM
%token MINUTE_SECOND_SYM
%token MINUTE_SYM
+%token MODE_SYM
%token MODIFY_SYM
%token MONTH_SYM
%token NOW_SYM
@@ -372,6 +385,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token RIGHT
%token ROUND
%token SECOND_SYM
+%token SHARE_SYM
%token SUBSTRING
%token SUBSTRING_INDEX
%token TRIM
@@ -484,6 +498,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <row_type> row_types
+%type <tx_isolation> tx_isolation isolation_types
+
%type <udf_type> udf_func_type
%type <symbol> FUNC_ARG0 FUNC_ARG1 FUNC_ARG2 FUNC_ARG3 keyword
@@ -749,7 +765,8 @@ table_types:
| MERGE_SYM { $$= DB_TYPE_MRG_MYISAM; }
| HEAP_SYM { $$= DB_TYPE_HEAP; }
| BERKELEY_DB_SYM { $$= DB_TYPE_BERKELEY_DB; }
- | INNOBASE_SYM { $$= DB_TYPE_INNOBASE; }
+ | INNOBASE_SYM { $$= DB_TYPE_INNOBASE; }
+ | GEMINI_SYM { $$= DB_TYPE_GEMINI; }
row_types:
DEFAULT { $$= ROW_TYPE_DEFAULT; }
@@ -1216,9 +1233,10 @@ select:
{
LEX *lex=Lex;
lex->sql_command= SQLCOM_SELECT;
+ lex->lock_option=TL_READ;
mysql_init_select(lex);
}
- select_options select_item_list select_into
+ select_options select_item_list select_into select_lock_type
select_into:
/* empty */
@@ -1240,13 +1258,20 @@ select_option_list:
select_option:
STRAIGHT_JOIN { Lex->options|= SELECT_STRAIGHT_JOIN; }
- | HIGH_PRIORITY { Lex->options|= SELECT_HIGH_PRIORITY; }
+ | HIGH_PRIORITY { Lex->lock_option= TL_READ_HIGH_PRIORITY; }
| DISTINCT { Lex->options|= SELECT_DISTINCT; }
| SQL_SMALL_RESULT { Lex->options|= SELECT_SMALL_RESULT; }
| SQL_BIG_RESULT { Lex->options|= SELECT_BIG_RESULT; }
| SQL_BUFFER_RESULT { Lex->options|= OPTION_BUFFER_RESULT; }
| ALL {}
+select_lock_type:
+ /* empty */
+ | FOR_SYM UPDATE_SYM
+ { Lex->lock_option= TL_WRITE; }
+ | IN_SYM SHARE_SYM MODE_SYM
+ { Lex->lock_option= TL_READ_WITH_SHARED_LOCKS; }
+
select_item_list:
select_item_list ',' select_item
| select_item
@@ -2124,8 +2149,10 @@ opt_low_priority:
delete:
DELETE_SYM
- { Lex->sql_command= SQLCOM_DELETE; Lex->options=0;
- Lex->lock_option= current_thd->update_lock_default; }
+ {
+ Lex->sql_command= SQLCOM_DELETE; Lex->options=0;
+ Lex->lock_option= current_thd->update_lock_default;
+ }
opt_delete_options FROM table
where_clause delete_limit_clause
@@ -2479,6 +2506,7 @@ keyword:
| AGAINST {}
| AGGREGATE_SYM {}
| AUTOCOMMIT {}
+ | AUTO_INC {}
| AVG_ROW_LENGTH {}
| AVG_SYM {}
| BACKUP_SYM {}
@@ -2491,6 +2519,7 @@ keyword:
| CHECK_SYM {}
| COMMENT_SYM {}
| COMMIT_SYM {}
+ | COMMITTED_SYM {}
| COMPRESSED_SYM {}
| DATA_SYM {}
| DATETIME {}
@@ -2510,12 +2539,16 @@ keyword:
| FIXED_SYM {}
| FLUSH_SYM {}
| GRANTS {}
+ | GEMINI_SYM {}
+ | GLOBAL_SYM {}
| HEAP_SYM {}
| HOSTS_SYM {}
| HOUR_SYM {}
| IDENTIFIED_SYM {}
+ | ISOLATION {}
| ISAM_SYM {}
| INNOBASE_SYM {}
+ | LEVEL_SYM {}
| LOCAL_SYM {}
| LOGS_SYM {}
| MAX_ROWS {}
@@ -2532,6 +2565,7 @@ keyword:
| MINUTE_SYM {}
| MIN_ROWS {}
| MODIFY_SYM {}
+ | MODE_SYM {}
| MONTH_SYM {}
| MYISAM_SYM {}
| NATIONAL_SYM {}
@@ -2550,6 +2584,7 @@ keyword:
| RAID_TYPE {}
| RELOAD {}
| REPAIR {}
+ | REPEATABLE_SYM {}
| RESET_SYM {}
| RESTORE_SYM {}
| ROLLBACK_SYM {}
@@ -2557,6 +2592,9 @@ keyword:
| ROW_FORMAT_SYM {}
| ROW_SYM {}
| SECOND_SYM {}
+ | SERIALIZABLE_SYM {}
+ | SESSION_SYM {}
+ | SHARE_SYM {}
| SHUTDOWN {}
| START_SYM {}
| STATUS_SYM {}
@@ -2564,11 +2602,13 @@ keyword:
| STRING_SYM {}
| TEMPORARY {}
| TEXT_SYM {}
+ | TRANSACTION_SYM {}
| TRUNCATE_SYM {}
| TIMESTAMP {}
| TIME_SYM {}
| TYPE_SYM {}
| UDF_SYM {}
+ | UNCOMMITTED_SYM {}
| VARIABLES {}
| WORK_SYM {}
| YEAR_SYM {}
@@ -2579,9 +2619,12 @@ keyword:
set:
SET opt_option
{
+ THD *thd=current_thd;
Lex->sql_command= SQLCOM_SET_OPTION;
- Lex->options=current_thd->options;
- Lex->select_limit=current_thd->default_select_limit;
+ Lex->options=thd->options;
+ Lex->select_limit=thd->default_select_limit;
+ Lex->gemini_spin_retries=thd->gemini_spin_retries;
+ Lex->tx_isolation=thd->tx_isolation;
}
option_value_list
@@ -2601,6 +2644,7 @@ option_value:
else
Lex->options|= $1;
}
+ | set_isolation
| AUTOCOMMIT equal NUM
{
if (atoi($3.str) != 0) /* Test NOT AUTOCOMMIT */
@@ -2641,6 +2685,14 @@ option_value:
{
current_thd->next_insert_id=$3;
}
+ | GEMINI_SPIN_RETRIES equal ULONG_NUM
+ {
+ Lex->gemini_spin_retries= $3;
+ }
+ | GEMINI_SPIN_RETRIES equal DEFAULT
+ {
+ Lex->gemini_spin_retries= 1;
+ }
| CHAR_SYM SET IDENT
{
CONVERT *tmp;
@@ -2702,7 +2754,7 @@ text_or_password:
}
set_option:
- SQL_BIG_TABLES { $$= OPTION_BIG_TABLES; }
+ SQL_BIG_TABLES { $$= OPTION_BIG_TABLES; }
| SQL_BIG_SELECTS { $$= OPTION_BIG_SELECTS; }
| SQL_LOG_OFF { $$= OPTION_LOG_OFF; }
| SQL_LOG_UPDATE
@@ -2724,6 +2776,28 @@ set_option:
| SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; }
| SQL_QUOTE_SHOW_CREATE { $$= OPTION_QUOTE_SHOW_CREATE; }
+
+set_isolation:
+ GLOBAL_SYM tx_isolation
+ {
+ if (check_process_priv())
+ YYABORT;
+ default_tx_isolation= $2;
+ }
+ | SESSION_SYM tx_isolation
+ { current_thd->session_tx_isolation= $2; }
+ | tx_isolation
+ { Lex->tx_isolation= $1; }
+
+tx_isolation:
+ TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types { $$=$4; }
+
+isolation_types:
+ READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; }
+ | READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; }
+ | REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; }
+ | SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; }
+
/* Lock function */
lock: