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
This commit is contained in:
commit
10d5f95eee
@ -895,7 +895,8 @@ Changes in release 4.0.x (Development; Alpha)
|
|||||||
|
|
||||||
Changes in release 3.23.x (Stable)
|
Changes in release 3.23.x (Stable)
|
||||||
|
|
||||||
* News-3.23.34a::
|
* News-3.23.35:: Changes in release 3.23.35
|
||||||
|
* News-3.23.34a:: Changes in release 3.23.34a
|
||||||
* News-3.23.34:: Changes in release 3.23.34
|
* News-3.23.34:: Changes in release 3.23.34
|
||||||
* News-3.23.33:: Changes in release 3.23.33
|
* News-3.23.33:: Changes in release 3.23.33
|
||||||
* News-3.23.32:: Changes in release 3.23.32
|
* News-3.23.32:: Changes in release 3.23.32
|
||||||
@ -22074,6 +22075,11 @@ or
|
|||||||
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") where user="bob' and host="%.loc.gov";
|
mysql> UPDATE mysql.user SET password=PASSWORD("newpass") where user="bob' and host="%.loc.gov";
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@item SQL_ANSI_MODE = 0 | 1
|
||||||
|
@cindex ANSI mode, SQL_ANSI_MODE
|
||||||
|
If set to @code{1}, the connection will be in ANSI mode, as described in
|
||||||
|
@ref{ANSI mode}.
|
||||||
|
|
||||||
@item SQL_AUTO_IS_NULL = 0 | 1
|
@item SQL_AUTO_IS_NULL = 0 | 1
|
||||||
If set to @code{1} (default) then one can find the last inserted row
|
If set to @code{1} (default) then one can find the last inserted row
|
||||||
for a table with an auto_increment row with the following construct:
|
for a table with an auto_increment row with the following construct:
|
||||||
@ -42056,7 +42062,9 @@ users uses this code as the rest of the code and because of this we are
|
|||||||
not yet 100 % confident in this code.
|
not yet 100 % confident in this code.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* News-3.23.34a::
|
|
||||||
|
* News-3.23.35:: Changes in release 3.23.35
|
||||||
|
* News-3.23.34a:: Changes in release 3.23.34a
|
||||||
* News-3.23.34:: Changes in release 3.23.34
|
* News-3.23.34:: Changes in release 3.23.34
|
||||||
* News-3.23.33:: Changes in release 3.23.33
|
* News-3.23.33:: Changes in release 3.23.33
|
||||||
* News-3.23.32:: Changes in release 3.23.32
|
* News-3.23.32:: Changes in release 3.23.32
|
||||||
@ -42094,9 +42102,19 @@ not yet 100 % confident in this code.
|
|||||||
* News-3.23.0:: Changes in release 3.23.0
|
* News-3.23.0:: Changes in release 3.23.0
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node News-3.23.34a, News-3.23.34, News-3.23.x, News-3.23.x
|
@node News-3.23.35, News-3.23.34a, News-3.23.x, News-3.23.x
|
||||||
|
@appendixsubsec Changes in release 3.23.35
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
Added SQL_ANSI_MODE. You can now switch to ANSI mode for only your
|
||||||
|
connection by running @code{SET SQL_ANSI_MODE=1}, and you can turn
|
||||||
|
ANSI mode off with @code{SET SQL_ANSI_MODE=0}.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@node News-3.23.34a, News-3.23.34, News-3.23.35, News-3.23.x
|
||||||
@appendixsubsec Changes in release 3.23.34a
|
@appendixsubsec Changes in release 3.23.34a
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
|
@item
|
||||||
Add extra files to distribution to allow one to compile Innobase.
|
Add extra files to distribution to allow one to compile Innobase.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ you have to change 'main' to print out the new function\n");
|
|||||||
if (write_warning)
|
if (write_warning)
|
||||||
fprintf (stderr,"Fatal error when generating hash for symbols\n\
|
fprintf (stderr,"Fatal error when generating hash for symbols\n\
|
||||||
Didn't find suitable values for perfect hashing:\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\
|
You can try running gen_lex_hash with --search to find a suitable value\n\
|
||||||
Symbol array size = %d\n",function_mod);
|
Symbol array size = %d\n",function_mod);
|
||||||
return -1;
|
return -1;
|
||||||
@ -472,7 +472,9 @@ int main(int argc,char **argv)
|
|||||||
int error;
|
int error;
|
||||||
|
|
||||||
MY_INIT(argv[0]);
|
MY_INIT(argv[0]);
|
||||||
start_value=5315771L; best_t1=6916833L; best_t2=3813748L; best_type=3; /* mode=5839 add=5 type: 0 */
|
start_value=4934807L; best_t1=5181754L; best_t2=1469522L; best_type=0;
|
||||||
|
/* mode=4999 add=7 type: 0 */
|
||||||
|
|
||||||
if (get_options(argc,(char **) argv))
|
if (get_options(argc,(char **) argv))
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
@ -270,6 +270,7 @@ static SYMBOL symbols[] = {
|
|||||||
{ "SLAVE", SYM(SLAVE),0,0},
|
{ "SLAVE", SYM(SLAVE),0,0},
|
||||||
{ "SMALLINT", SYM(SMALLINT),0,0},
|
{ "SMALLINT", SYM(SMALLINT),0,0},
|
||||||
{ "SONAME", SYM(UDF_SONAME_SYM),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_AUTO_IS_NULL", SYM(SQL_AUTO_IS_NULL),0,0},
|
||||||
{ "SQL_BIG_RESULT", SYM(SQL_BIG_RESULT),0,0},
|
{ "SQL_BIG_RESULT", SYM(SQL_BIG_RESULT),0,0},
|
||||||
{ "SQL_BIG_SELECTS", SYM(SQL_BIG_SELECTS),0,0},
|
{ "SQL_BIG_SELECTS", SYM(SQL_BIG_SELECTS),0,0},
|
||||||
|
@ -539,6 +539,8 @@ extern struct show_var_st init_vars[];
|
|||||||
extern struct show_var_st status_vars[];
|
extern struct show_var_st status_vars[];
|
||||||
extern enum db_type default_table_type;
|
extern enum db_type default_table_type;
|
||||||
|
|
||||||
|
extern uchar global_state_map[256];
|
||||||
|
|
||||||
#ifndef __WIN__
|
#ifndef __WIN__
|
||||||
extern pthread_t signal_thread;
|
extern pthread_t signal_thread;
|
||||||
#endif
|
#endif
|
||||||
|
@ -287,6 +287,9 @@ public:
|
|||||||
ulong slave_proxy_id; // in slave thread we need to know in behalf of which
|
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 the query is being run to replicate temp tables properly
|
||||||
|
|
||||||
|
// thread-specific state map for lex parser
|
||||||
|
uchar state_map[256];
|
||||||
|
|
||||||
THD();
|
THD();
|
||||||
~THD();
|
~THD();
|
||||||
bool store_globals();
|
bool store_globals();
|
||||||
|
@ -75,7 +75,7 @@ inline int lex_casecmp(const char *s, const char *t, uint len)
|
|||||||
|
|
||||||
#include "lex_hash.h"
|
#include "lex_hash.h"
|
||||||
|
|
||||||
static uchar state_map[256];
|
uchar global_state_map[256];
|
||||||
|
|
||||||
|
|
||||||
void lex_init(void)
|
void lex_init(void)
|
||||||
@ -89,42 +89,49 @@ void lex_init(void)
|
|||||||
|
|
||||||
VOID(pthread_key_create(&THR_LEX,NULL));
|
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++)
|
for (i=0; i < 256 ; i++)
|
||||||
{
|
{
|
||||||
if (isalpha(i))
|
if (isalpha(i))
|
||||||
state_map[i]=(uchar) STATE_IDENT;
|
global_state_map[i]=(uchar) STATE_IDENT;
|
||||||
else if (isdigit(i))
|
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)
|
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||||
else if (use_mb(default_charset_info) && my_ismbhead(default_charset_info, i))
|
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
|
#endif
|
||||||
else if (!isgraph(i))
|
else if (!isgraph(i))
|
||||||
state_map[i]=(uchar) STATE_SKIP;
|
global_state_map[i]=(uchar) STATE_SKIP;
|
||||||
else
|
else
|
||||||
state_map[i]=(uchar) STATE_CHAR;
|
global_state_map[i]=(uchar) STATE_CHAR;
|
||||||
}
|
}
|
||||||
state_map[(uchar)'_']=state_map[(uchar)'$']=(uchar) STATE_IDENT;
|
global_state_map[(uchar)'_']=
|
||||||
state_map[(uchar)'\'']=state_map[(uchar)'"']=(uchar) STATE_STRING;
|
global_state_map[(uchar)'$']=(uchar) STATE_IDENT;
|
||||||
state_map[(uchar)'-']=state_map[(uchar)'+']=(uchar) STATE_SIGNED_NUMBER;
|
global_state_map[(uchar)'\'']=
|
||||||
state_map[(uchar)'.']=(uchar) STATE_REAL_OR_POINT;
|
global_state_map[(uchar)'"']=(uchar) STATE_STRING;
|
||||||
state_map[(uchar)'>']=state_map[(uchar)'=']=state_map[(uchar)'!']= (uchar) STATE_CMP_OP;
|
global_state_map[(uchar)'-']=
|
||||||
state_map[(uchar)'<']= (uchar) STATE_LONG_CMP_OP;
|
global_state_map[(uchar)'+']=(uchar) STATE_SIGNED_NUMBER;
|
||||||
state_map[(uchar)'&']=state_map[(uchar)'|']=(uchar) STATE_BOOL;
|
global_state_map[(uchar)'.']=(uchar) STATE_REAL_OR_POINT;
|
||||||
state_map[(uchar)'#']=(uchar) STATE_COMMENT;
|
global_state_map[(uchar)'>']=
|
||||||
state_map[(uchar)';']=(uchar) STATE_COLON;
|
global_state_map[(uchar)'=']=
|
||||||
state_map[(uchar)':']=(uchar) STATE_SET_VAR;
|
global_state_map[(uchar)'!']= (uchar) STATE_CMP_OP;
|
||||||
state_map[0]=(uchar) STATE_EOL;
|
global_state_map[(uchar)'<']= (uchar) STATE_LONG_CMP_OP;
|
||||||
state_map[(uchar)'\\']= (uchar) STATE_ESCAPE;
|
global_state_map[(uchar)'&']=global_state_map[(uchar)'|']=(uchar) STATE_BOOL;
|
||||||
state_map[(uchar)'/']= (uchar) STATE_LONG_COMMENT;
|
global_state_map[(uchar)'#']=(uchar) STATE_COMMENT;
|
||||||
state_map[(uchar)'*']= (uchar) STATE_END_LONG_COMMENT;
|
global_state_map[(uchar)';']=(uchar) STATE_COLON;
|
||||||
state_map[(uchar)'@']= (uchar) STATE_USER_END;
|
global_state_map[(uchar)':']=(uchar) STATE_SET_VAR;
|
||||||
state_map[(uchar) '`']= (uchar) STATE_USER_VARIABLE_DELIMITER;
|
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)
|
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;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,6 +425,7 @@ int yylex(void *arg)
|
|||||||
uint length;
|
uint length;
|
||||||
enum lex_states state,prev_state;
|
enum lex_states state,prev_state;
|
||||||
LEX *lex=current_lex;
|
LEX *lex=current_lex;
|
||||||
|
uchar *state_map = lex->thd->state_map;
|
||||||
YYSTYPE *yylval=(YYSTYPE*) arg;
|
YYSTYPE *yylval=(YYSTYPE*) arg;
|
||||||
|
|
||||||
lex->yylval=yylval; // The global state
|
lex->yylval=yylval; // The global state
|
||||||
|
@ -512,6 +512,10 @@ pthread_handler_decl(handle_one_connection,arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copy global state map into thread
|
||||||
|
for(int x=0; x < 256; x++)
|
||||||
|
thd->state_map[x] = global_state_map[x];
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -394,6 +394,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
|
|||||||
%token END
|
%token END
|
||||||
%token THEN_SYM
|
%token THEN_SYM
|
||||||
|
|
||||||
|
%token SQL_ANSI_MODE
|
||||||
%token SQL_BIG_TABLES
|
%token SQL_BIG_TABLES
|
||||||
%token SQL_BIG_SELECTS
|
%token SQL_BIG_SELECTS
|
||||||
%token SQL_SELECT_LIMIT
|
%token SQL_SELECT_LIMIT
|
||||||
@ -2603,6 +2604,18 @@ option_value:
|
|||||||
else
|
else
|
||||||
Lex->options|= OPTION_NOT_AUTO_COMMIT;
|
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
|
| SQL_SELECT_LIMIT equal ULONG_NUM
|
||||||
{
|
{
|
||||||
Lex->select_limit= $3;
|
Lex->select_limit= $3;
|
||||||
@ -2702,11 +2715,15 @@ set_option:
|
|||||||
| SQL_LOG_OFF { $$= OPTION_LOG_OFF; }
|
| SQL_LOG_OFF { $$= OPTION_LOG_OFF; }
|
||||||
| SQL_LOG_UPDATE
|
| 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
|
| 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_WARNINGS { $$= OPTION_WARNINGS; }
|
||||||
| SQL_LOW_PRIORITY_UPDATES { $$= OPTION_LOW_PRIORITY_UPDATES; }
|
| SQL_LOW_PRIORITY_UPDATES { $$= OPTION_LOW_PRIORITY_UPDATES; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user