| 3158 | */ |
| 3159 | |
| 3160 | bool THD::sql_parser(LEX *old_lex, LEX *lex, |
| 3161 | char *str, uint str_len, bool stmt_prepare_mode) |
| 3162 | { |
| 3163 | extern int MYSQLparse(THD * thd); |
| 3164 | extern int ORAparse(THD * thd); |
| 3165 | |
| 3166 | bool parse_status= false; |
| 3167 | Parser_state parser_state; |
| 3168 | Parser_state *old_parser_state= m_parser_state; |
| 3169 | |
| 3170 | if (parser_state.init(this, str, str_len)) |
| 3171 | return true; |
| 3172 | |
| 3173 | m_parser_state= &parser_state; |
| 3174 | parser_state.m_lip.stmt_prepare_mode= stmt_prepare_mode; |
| 3175 | parser_state.m_lip.multi_statements= false; |
| 3176 | parser_state.m_lip.m_digest= NULL; |
| 3177 | |
| 3178 | lex->param_list= old_lex->param_list; |
| 3179 | lex->sphead= old_lex->sphead; |
| 3180 | lex->spname= old_lex->spname; |
| 3181 | lex->spcont= old_lex->spcont; |
| 3182 | lex->sp_chistics= old_lex->sp_chistics; |
| 3183 | lex->trg_chistics= old_lex->trg_chistics; |
| 3184 | |
| 3185 | parse_status= (variables.sql_mode & MODE_ORACLE) ? |
| 3186 | ORAparse(this) : MYSQLparse(this) != 0; |
| 3187 | |
| 3188 | m_parser_state= old_parser_state; |
| 3189 | |
| 3190 | return parse_status; |
| 3191 | } |
| 3192 | |
| 3193 | |
| 3194 | struct Item_change_record: public ilink |