diff options
author | unknown <sasha@mysql.sashanet.com> | 2001-03-12 20:18:16 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2001-03-12 20:18:16 -0700 |
commit | 49e73e6f2069f021600d39c964babfcf4e165297 (patch) | |
tree | eae6ce17036177571f150abef4027475b6aaaedd /sql | |
parent | 0d70b929833aeee50535343fde6ab77a15c24083 (diff) | |
parent | a4c63857aa511cfa6b086cd0c83333eac7804572 (diff) | |
download | mariadb-git-49e73e6f2069f021600d39c964babfcf4e165297.tar.gz |
Merge work:/home/bk/mysql
into mysql.sashanet.com:/home/sasha/src/bk/mysql
Docs/manual.texi:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_class.h:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/gen_lex_hash.cc | 8 | ||||
-rw-r--r-- | sql/lex.h | 1 | ||||
-rw-r--r-- | sql/mysql_priv.h | 2 | ||||
-rw-r--r-- | sql/sql_class.h | 5 | ||||
-rw-r--r-- | sql/sql_lex.cc | 56 | ||||
-rw-r--r-- | sql/sql_parse.cc | 4 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 23 |
7 files changed, 68 insertions, 31 deletions
diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc index 78ffb266366..ca105257f19 100644 --- a/sql/gen_lex_hash.cc +++ b/sql/gen_lex_hash.cc @@ -254,7 +254,7 @@ you have to change 'main' to print out the new function\n"); if (write_warning) fprintf (stderr,"Fatal error when generating hash for symbols\n\ Didn't find suitable values for perfect hashing:\n\ -You have to edit gen_lex_hase.cc to generate a new hashing function.\n\ +You have to edit gen_lex_hash.cc to generate a new hashing function.\n\ You can try running gen_lex_hash with --search to find a suitable value\n\ Symbol array size = %d\n",function_mod); return -1; @@ -472,8 +472,10 @@ int main(int argc,char **argv) int error; MY_INIT(argv[0]); - start_value=5315771L; best_t1=6916833L; best_t2=3813748L; best_type=3; /* mode=5839 add=5 type: 0 */ - if (get_options(argc,(char **) argv)) + start_value=4934807L; best_t1=5181754L; best_t2=1469522L; best_type=0; + /* mode=4999 add=7 type: 0 */ + + if (get_options(argc,(char **) argv)) exit(1); make_max_length_table(); diff --git a/sql/lex.h b/sql/lex.h index 6f030aa524d..6d676a39755 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -270,6 +270,7 @@ static SYMBOL symbols[] = { { "SLAVE", SYM(SLAVE),0,0}, { "SMALLINT", SYM(SMALLINT),0,0}, { "SONAME", SYM(UDF_SONAME_SYM),0,0}, + { "SQL_ANSI_MODE", SYM(SQL_ANSI_MODE),0,0}, { "SQL_AUTO_IS_NULL", SYM(SQL_AUTO_IS_NULL),0,0}, { "SQL_BIG_RESULT", SYM(SQL_BIG_RESULT),0,0}, { "SQL_BIG_SELECTS", SYM(SQL_BIG_SELECTS),0,0}, diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index a975cab3c7c..1f41e0a0d2e 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -539,6 +539,8 @@ extern struct show_var_st init_vars[]; extern struct show_var_st status_vars[]; extern enum db_type default_table_type; +extern uchar global_state_map[256]; + #ifndef __WIN__ extern pthread_t signal_thread; #endif diff --git a/sql/sql_class.h b/sql/sql_class.h index d1b870852ee..3fd166ebc5a 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -286,7 +286,10 @@ public: ulong slave_proxy_id; // in slave thread we need to know in behalf of which // thread the query is being run to replicate temp tables properly - + + // thread-specific state map for lex parser + uchar state_map[256]; + THD(); ~THD(); bool store_globals(); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index b8d2ee13b0e..f0357b99d70 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -75,7 +75,7 @@ inline int lex_casecmp(const char *s, const char *t, uint len) #include "lex_hash.h" -static uchar state_map[256]; +uchar global_state_map[256]; void lex_init(void) @@ -89,42 +89,49 @@ void lex_init(void) VOID(pthread_key_create(&THR_LEX,NULL)); - /* Fill state_map with states to get a faster parser */ + /* Fill global_state_map with states to get a faster parser */ for (i=0; i < 256 ; i++) { if (isalpha(i)) - state_map[i]=(uchar) STATE_IDENT; + global_state_map[i]=(uchar) STATE_IDENT; else if (isdigit(i)) - state_map[i]=(uchar) STATE_NUMBER_IDENT; + global_state_map[i]=(uchar) STATE_NUMBER_IDENT; #if defined(USE_MB) && defined(USE_MB_IDENT) else if (use_mb(default_charset_info) && my_ismbhead(default_charset_info, i)) - state_map[i]=(uchar) STATE_IDENT; + global_state_map[i]=(uchar) STATE_IDENT; #endif else if (!isgraph(i)) - state_map[i]=(uchar) STATE_SKIP; + global_state_map[i]=(uchar) STATE_SKIP; else - state_map[i]=(uchar) STATE_CHAR; + global_state_map[i]=(uchar) STATE_CHAR; } - state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) STATE_IDENT; - state_map[(uchar)'\'']=state_map[(uchar)'"']=(uchar) STATE_STRING; - state_map[(uchar)'-']=state_map[(uchar)'+']=(uchar) STATE_SIGNED_NUMBER; - state_map[(uchar)'.']=(uchar) STATE_REAL_OR_POINT; - state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) STATE_CMP_OP; - state_map[(uchar)'<']= (uchar) STATE_LONG_CMP_OP; - state_map[(uchar)'&']=state_map[(uchar)'|']=(uchar) STATE_BOOL; - state_map[(uchar)'#']=(uchar) STATE_COMMENT; - state_map[(uchar)';']=(uchar) STATE_COLON; - state_map[(uchar)':']=(uchar) STATE_SET_VAR; - state_map[0]=(uchar) STATE_EOL; - state_map[(uchar)'\\']= (uchar) STATE_ESCAPE; - state_map[(uchar)'/']= (uchar) STATE_LONG_COMMENT; - state_map[(uchar)'*']= (uchar) STATE_END_LONG_COMMENT; - state_map[(uchar)'@']= (uchar) STATE_USER_END; - state_map[(uchar) '`']= (uchar) STATE_USER_VARIABLE_DELIMITER; + global_state_map[(uchar)'_']= + global_state_map[(uchar)'$']=(uchar) STATE_IDENT; + global_state_map[(uchar)'\'']= + global_state_map[(uchar)'"']=(uchar) STATE_STRING; + global_state_map[(uchar)'-']= + global_state_map[(uchar)'+']=(uchar) STATE_SIGNED_NUMBER; + global_state_map[(uchar)'.']=(uchar) STATE_REAL_OR_POINT; + global_state_map[(uchar)'>']= + global_state_map[(uchar)'=']= + global_state_map[(uchar)'!']= (uchar) STATE_CMP_OP; + global_state_map[(uchar)'<']= (uchar) STATE_LONG_CMP_OP; + global_state_map[(uchar)'&']=global_state_map[(uchar)'|']=(uchar) STATE_BOOL; + global_state_map[(uchar)'#']=(uchar) STATE_COMMENT; + global_state_map[(uchar)';']=(uchar) STATE_COLON; + global_state_map[(uchar)':']=(uchar) STATE_SET_VAR; + global_state_map[0]=(uchar) STATE_EOL; + global_state_map[(uchar)'\\']= (uchar) STATE_ESCAPE; + global_state_map[(uchar)'/']= (uchar) STATE_LONG_COMMENT; + global_state_map[(uchar)'*']= (uchar) STATE_END_LONG_COMMENT; + global_state_map[(uchar)'@']= (uchar) STATE_USER_END; + global_state_map[(uchar) '`']= (uchar) STATE_USER_VARIABLE_DELIMITER; + if (thd_startup_options & OPTION_ANSI_MODE) { - state_map[(uchar) '"'] = STATE_USER_VARIABLE_DELIMITER; + global_state_map[(uchar) '"'] = STATE_USER_VARIABLE_DELIMITER; } + DBUG_VOID_RETURN; } @@ -418,6 +425,7 @@ int yylex(void *arg) uint length; enum lex_states state,prev_state; LEX *lex=current_lex; + uchar *state_map = lex->thd->state_map; YYSTYPE *yylval=(YYSTYPE*) arg; lex->yylval=yylval; // The global state diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 1884a8825ba..6ddb3b45864 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -512,6 +512,10 @@ pthread_handler_decl(handle_one_connection,arg) return 0; } + // copy global state map into thread + for(int x=0; x < 256; x++) + thd->state_map[x] = global_state_map[x]; + do { int error; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index fa44e7799fa..9a0badda099 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -394,6 +394,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token END %token THEN_SYM +%token SQL_ANSI_MODE %token SQL_BIG_TABLES %token SQL_BIG_SELECTS %token SQL_SELECT_LIMIT @@ -2603,6 +2604,18 @@ option_value: else Lex->options|= OPTION_NOT_AUTO_COMMIT; } + | SQL_ANSI_MODE equal NUM + { + if(atoi($3.str) == 0) + { + Lex->options &= ~(OPTION_ANSI_MODE); + Lex->thd->state_map[(uchar) '"'] = STATE_STRING; + } else { + Lex->options |= OPTION_ANSI_MODE; + Lex->thd->state_map[(uchar) '"'] = STATE_USER_VARIABLE_DELIMITER; + } + } + | SQL_SELECT_LIMIT equal ULONG_NUM { Lex->select_limit= $3; @@ -2697,16 +2710,20 @@ 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 { - $$= (opt_sql_bin_update)? OPTION_UPDATE_LOG|OPTION_BIN_LOG: OPTION_UPDATE_LOG ; + $$= (opt_sql_bin_update)? + OPTION_UPDATE_LOG|OPTION_BIN_LOG: + OPTION_UPDATE_LOG ; } | SQL_LOG_BIN { - $$= (opt_sql_bin_update)? OPTION_UPDATE_LOG|OPTION_BIN_LOG: OPTION_BIN_LOG ; + $$= (opt_sql_bin_update)? + OPTION_UPDATE_LOG|OPTION_BIN_LOG: + OPTION_BIN_LOG ; } | SQL_WARNINGS { $$= OPTION_WARNINGS; } | SQL_LOW_PRIORITY_UPDATES { $$= OPTION_LOW_PRIORITY_UPDATES; } |