diff options
author | unknown <konstantin@mysql.com> | 2005-07-15 00:31:09 +0400 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2005-07-15 00:31:09 +0400 |
commit | b0641a3bdd518439a2bf8d5f66dda663942e40b6 (patch) | |
tree | 67dc52609b50b369c1fe7c45c4b20109d1c9bff2 /sql | |
parent | 7750905037e9c1e64d5172819b746815ed268152 (diff) | |
parent | 73386c15a6698234d287525c2271b64756eb3354 (diff) | |
download | mariadb-git-b0641a3bdd518439a2bf8d5f66dda663942e40b6.tar.gz |
Merge mysql.com:/opt/local/work/mysql-4.1-root
into mysql.com:/opt/local/work/mysql-5.0-root
regex/regerror.c:
Auto merged
sql/sql_lex.cc:
Auto merged
mysql-test/r/ps.result:
Manual merge
mysql-test/t/ps.test:
Manual merge
sql/sql_yacc.yy:
Manual merge
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_lex.cc | 9 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 19 |
2 files changed, 15 insertions, 13 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 218410eed81..a4293fa76bd 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -556,6 +556,15 @@ int yylex(void *arg, void *yythd) lex->next_state= MY_LEX_START; // Allow signed numbers if (c == ',') lex->tok_start=lex->ptr; // Let tok_start point at next item + /* + Check for a placeholder: it should not precede a possible identifier + because of binlogging: when a placeholder is replaced with + its value in a query for the binlog, the query must stay + grammatically correct. + */ + else if (c == '?' && ((THD*) yythd)->command == COM_PREPARE && + !ident_map[cs, yyPeek()]) + return(PARAM_MARKER); return((int) c); case MY_LEX_IDENT_OR_NCHAR: diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 84de06d5604..f0ad035ed5a 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -465,6 +465,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token PACK_KEYS_SYM %token PARTIAL %token PASSWORD +%token PARAM_MARKER %token PHASE_SYM %token POINTFROMTEXT %token POINT_SYM @@ -6933,23 +6934,15 @@ text_string: ; param_marker: - '?' + PARAM_MARKER { THD *thd=YYTHD; LEX *lex= thd->lex; - if (thd->command == COM_STMT_PREPARE) - { - Item_param *item= new Item_param((uint) (lex->tok_start - - (uchar *) thd->query)); - if (!($$= item) || lex->param_list.push_back(item)) - { - my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); - YYABORT; - } - } - else + Item_param *item= new Item_param((uint) (lex->tok_start - + (uchar *) thd->query)); + if (!($$= item) || lex->param_list.push_back(item)) { - yyerror(ER(ER_SYNTAX_ERROR)); + my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); YYABORT; } } |