maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #10579
Re: bb-10.2-compatibility
Hello Alexander,
Here is a new version of the patch that show call stack on error (rebased on your last commit).
Of course, I share this code under terms of MCA.
Jérôme.
> -----Message d'origine-----
> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx]
> Envoyé : lundi 27 mars 2017 09:16
> À : jerome brauge
> Cc : MariaDB Developers (maria-developers@xxxxxxxxxxxxxxxxxxx)
> Objet : Re: bb-10.2-compatibility
>
> Hello Jérôme,
>
>
> On 03/24/2017 09:00 PM, jerome brauge wrote:
> > Hello Alexander,
> >
> > On oracle when an error occurred inside a stored procedure, the error
> > message contains the stack trace of calling procedures.
> >
> > It's very useful when you have tons of procedures.
> >
> > I wrote this little patch to do something like that by adding the
> > stack trace as "notes".
> >
>
> Thank you! I like the patch.
>
>
> Minor suggestions on coding style:
>
> when "if" goes inside another "if" or "for", please use parentheses:
>
>
> Please change:
>
> + for (; state_map[(uchar) c] == MY_LEX_SKIP ; c= lip->yyGet())
> + if (c == '\n') lip->yylineno++;
>
> to:
>
> + for (; state_map[(uchar) c] == MY_LEX_SKIP ; c= lip->yyGet()) {
> + if (c == '\n')
> + lip->yylineno++;
> + }
>
>
>
> The same here:
>
> + if (i != NULL)
> + if (m_qname.str != NULL)
> + push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
> + ER_SP_STACK_TRACE,
> + ER_THD(thd, ER_SP_STACK_TRACE),
> + i->m_lineno, m_qname.str);
> + else
> + push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
> + ER_SP_STACK_TRACE,
> + ER_THD(thd, ER_SP_STACK_TRACE),
> + i->m_lineno, "anonymous block");
>
>
>
> But I'd better do like this:
>
>
> if (i != NULL)
> push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
> ER_SP_STACK_TRACE,
> ER_THD(thd, ER_SP_STACK_TRACE),
> i->m_lineno,
> m_qname.str != NULL ? m_qname.str :
> "anonymous block");
>
>
>
> >
> >
> > To show the correct lines number (according to result of show create
> > procedure) , I had to correct yylineno in sql_les.cc.
>
> Looks like a bug, specific to some non-default sql_mode values that include
> INGORE_SPACE. sql_mode=ORACLE is affected.
> Thanks for fixing this. Perhaps it should go in a separate patch.
>
> >
> > But now, some tests failed because the line number of errors have
> changed !
>
> I run all test suites like this:
>
> ./mtr --mem --reorder --force --max-test-fail=0 --parallel=6
>
>
> Only a few tests failed. Most of them should be recorded.
>
> But in some tests something goes unexpectedly:
>
> - rpl.rpl_slave_grp_exec does not work at all
>
> It fails with:
>
> 2017-03-27 11:08:42 140352080532224 [Warning] Slave: At line 3 in
> test.tr2 Error_code: 4059
>
> where 4059 is exactly ER_SP_STACK_TRACE in my build.
> So it seems some replication code gets confused with these new notes.
> Can you please check?
>
>
> - main.signal_demo3 removes "Error"s and adds "Note"s instead:
>
> show warnings;
> Level Code Message
> -Error 1644 Oops in proc_7
> +Note 4059 At line 4 in demo.proc_7
>
> ...
>
> show warnings;
> Level Code Message
> -Error 1644 Oops in proc_9
> -Error 1644 Oops in proc_8
> Error 1644 Oops in proc_7
> +Note 4059 At line 4 in demo.proc_7
> Error 1644 Oops in proc_6
> +Note 4059 At line 4 in demo.proc_6
>
> Looks wrong.
>
>
>
> >
> >
> > What is your opinion on this patch ?
> >
> >
> >
> > Regards,
> >
> > Jérôme.
> >
Attachment:
0001-Show-callstack-as-notes-on-error.patch
Description: 0001-Show-callstack-as-notes-on-error.patch
References