← Back to team overview

maria-developers team mailing list archive

Re: MDEV-10598 - bb-10.2-compatibility

 


On 03/22/2017 05:05 PM, jerome brauge wrote:
> Alexander,
> As requested, this is my last patch for MDEV-10598. 
> Of course, I share this code under MCA.

Excellent. Thank you very much for you contribution!

> 
> Best regards,
> Jérôme.
> 
> 
>> -----Message d'origine-----
>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx]
>> Envoyé : mercredi 22 mars 2017 12:00
>> À : jerome brauge
>> Objet : Re: MDEV-10598 - bb-10.2-compatibility
>>
>> Hello Jerome,
>>
>>
>> On 03/22/2017 01:37 PM, jerome brauge wrote:
>>> Hello Alexander,
>>> All works fine, thank you very much.
>>
>> Thanks for confirming!
>>
>> Can I ask you for some bureaucracy?
>>
>> Can you please send your last patch for "MDEV-10598 - bb-10.2-
>> compatibility" to maria-developers and specify that you share it under BSD
>> license?
>>
>> This is needed to officially accept your code into our trees.
>>
>> Thanks!
>>
>>
>>> Now, we are blocked by MDEV-12137 (delete or update statement with
>> the same source and target).
>>> When do you think you can work on it?
>>
>> Sorry, I don't have expertise in this part of the code.
>>
>> Somebody else will be working on it.
>> But I'm afraid this is not something of high priority at the moment.
>>
>>
>>>
>>> Regards,
>>> Jérôme.
>>>
>>>> -----Message d'origine-----
>>>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx] Envoyé : jeudi 16 mars
>>>> 2017 13:03 À : jerome brauge Cc : MariaDB Developers
>>>> (maria-developers@xxxxxxxxxxxxxxxxxxx)
>>>> Objet : Re: MDEV-10598 - bb-10.2-compatibility
>>>>
>>>> Hello Jerome,
>>>>
>>>>
>>>> On 03/14/2017 06:07 PM, jerome brauge wrote:
>>>>> Hi Alexander,
>>>>> Can you review this patch ?
>>>>> I could add more tests when your others points will be corrected.
>>>>
>>>> I tried to simplify your patch slightly.
>>>>
>>>> sp_instr_cpush instructions are now created from the array
>>>> sp_pcontext::m_cursors, which already stores all cursors declared on
>>>> the current frame.
>>>>
>>>> So there is now no a need for a separate list sp_head::m_delayed_cpush.
>>>>
>>>> This seems to work fine.
>>>>
>>>> Also, I changed the meaning of the last argument of
>>>> sp_declare_cursor() to the opposite: from "delay_instr" to
>> "add_cpush_instr".
>>>> I find "bool do_something" easier to read than "bool
>>>> dont_do_something", especially in this context:
>>>>
>>>>   if (do_something)
>>>>
>>>> vs
>>>>
>>>>   if (!dont_do_something)
>>>>
>>>>
>>>> but this is probably my personal preference :)
>>>>
>>>> Also I removed overloading (and fixed sql_yacc.yy instead).
>>>>
>>>>
>>>> Can you please review the attached patch?
>>>>
>>>> (It also includes my previous suggestions)
>>>>
>>>> Many thanks!!!
>>>>
>>>>>
>>>>> Thanks.
>>>>> Jérôme.
>>>>>
>>>>>
>>>>>> -----Message d'origine-----
>>>>>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx] Envoyé : mardi 14
>>>>>> mars
>>>>>> 2017 11:54 À : jerome brauge Cc : MariaDB Developers
>>>>>> (maria-developers@xxxxxxxxxxxxxxxxxxx)
>>>>>> Objet : Re: MDEV-10598 - bb-10.2-compatibility
>>>>>>
>>>>>> Hi Jerome,
>>>>>>
>>>>>> On 03/14/2017 02:29 PM, jerome brauge wrote:
>>>>>>> Thanks Alexander,
>>>>>>>
>>>>>>> I have two other problems to finalize my patch:
>>>>>>> - Attached script cur_err_warning.sql produce a warning 1931
>>>>>>> (Query
>>>>>> execution was interrupted. The query examined at least 2 rows,
>>>>>> which exceeds LIMIT ROWS EXAMINED (0). The query result may be
>>>>>> incomplete) and I don't see why.
>>>>>>
>>>>>> That's my fault. Please ignore this warning for now.
>>>>>> This warning happens when the procedure opens a cursor to resolve
>>>>>> its structure. I will suppress this warning later.
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> - Attached script cur_err_field_name.sql produce an error 4057
>>>>>>> (HY000) at
>>>>>> line 23: Row variable 'rec2' does not have a field 'a'
>>>>>>
>>>>>> This is also my bug.
>>>>>> The problem is that rec2 has a name "rec1.a" instead of just "a".
>>>>>>
>>>>>>
>>>>>>
>>>>>> Please change
>>>>>>
>>>>>> CURSOR cur2 IS SELECT rec1.a ;
>>>>>>
>>>>>> to
>>>>>>
>>>>>> CURSOR cur2 IS SELECT rec1.a AS a;
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> These two scripts work fine on oracle.
>>>>>>>
>>>>>>> Jérôme.
>>>>>>>
>>>>>>>
>>>>>>>> -----Message d'origine-----
>>>>>>>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx] Envoyé : mardi 14
>>>>>>>> mars
>>>>>>>> 2017 11:11 À : jerome brauge Objet : Re: MDEV-10598 -
>>>>>>>> bb-10.2-compatibility
>>>>>>>>
>>>>>>>> Hello Jerome,
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 03/13/2017 07:46 PM, jerome brauge wrote:
>>>>>>>>> Alexander,
>>>>>>>>> I think there is a little bug with ROWTYPE: when I affect a
>>>>>>>>> variable with a
>>>>>>>> field value, the server crash.
>>>>>>>>> I attached the script which cause the issue.
>>>>>>>>
>>>>>>>> Thanks for reporting this.
>>>>>>>>
>>>>>>>>
>>>>>>>> This quick patch fixes the problem:
>>>>>>>>
>>>>>>>>
>>>>>>>> diff --git a/sql/sp_head.cc b/sql/sp_head.cc index
>>>>>>>> faf9f5f..745f982
>>>>>>>> 100644
>>>>>>>> --- a/sql/sp_head.cc
>>>>>>>> +++ b/sql/sp_head.cc
>>>>>>>> @@ -347,6 +347,12 @@ Item *
>>>>>>>>  sp_prepare_func_item(THD* thd, Item **it_addr, uint cols)  {
>>>>>>>>    DBUG_ENTER("sp_prepare_func_item");
>>>>>>>> +  if (!(*it_addr)->fixed &&
>>>>>>>> +      (*it_addr)->fix_fields(thd, it_addr))  {
>>>>>>>> +    DBUG_PRINT("info", ("fix_fields() failed"));
>>>>>>>> +    DBUG_RETURN(NULL);
>>>>>>>> +  }
>>>>>>>>    it_addr= (*it_addr)->this_item_addr(thd, it_addr);
>>>>>>>>
>>>>>>>>    if ((!(*it_addr)->fixed &&
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> But I'm still thinking.
>>>>>>>> Perhaps I'll end some with some different patch.
>>>>>>>> I let you know when the final fix is pushed.
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> This is the call stack :
>>>>>>>>>
>>>>>>>>>> 	mysqld.exe!my_sigabrt_handler(int sig) Line 477	C
>>>>>>>>>  	mysqld.exe!raise(int signum) Line 516	C++
>>>>>>>>>  	mysqld.exe!abort() Line 64	C++
>>>>>>>>>  	mysqld.exe!common_assert_to_stderr_direct(const wchar_t
>>>> * const
>>>>>>>> expression, const wchar_t * const file_name, const unsigned int
>>>>>>>> line_number) Line 124	C++
>>>>>>>>>  	mysqld.exe!common_assert_to_stderr<wchar_t>(const
>>>> wchar_t *
>>>>>>>> const expression, const wchar_t * const file_name, const unsigned
>> int
>>>>>>>> line_number) Line 138	C++
>>>>>>>>>  	mysqld.exe!common_assert<wchar_t>(const wchar_t *
>>>> const
>>>>>>>> expression, const wchar_t * const file_name, const unsigned int
>>>>>>>> line_number, void * const return_address) Line 383	C++
>>>>>>>>>  	mysqld.exe!_wassert(const wchar_t * expression, const
>>>> wchar_t *
>>>>>>>> file_name, unsigned int line_number) Line 404	C++
>>>>>>>>>
>>>> 	mysqld.exe!Item_splocal_row_field_by_name::this_item_addr(THD
>>>>>>>> * thd, Item * * it) Line 1814	C++
>>>>>>>>>  	mysqld.exe!sp_prepare_func_item(THD * thd, Item * *
>>>> it_addr,
>>>>>>>> unsigned int cols) Line 350	C++
>>>>>>>>>  	mysqld.exe!sp_eval_expr(THD * thd, Item * result_item,
>>>> Field *
>>>>>>>> result_field, Item * * expr_item_ptr) Line 391	C++
>>>>>>>>>  	mysqld.exe!sp_rcontext::set_variable(THD * thd, unsigned
>>>> int
>>>>>>>>> idx,
>>>>>>>> Item * * value) Line 566	C++
>>>>>>>>>  	mysqld.exe!sp_instr_set::exec_core(THD * thd, unsigned int
>>>> *
>>>>>>>> nextp) Line 3378	C++
>>>>>>>>>  	mysqld.exe!sp_lex_keeper::reset_lex_and_exec_core(THD
>>>> * thd,
>>>>>>>> unsigned int * nextp, bool open_tables, sp_instr * instr) Line
>>>>>>>> 3097
>>>> 	C++
>>>>>>>>>  	mysqld.exe!sp_instr_set::execute(THD * thd, unsigned int *
>>>>>>>>> nextp)
>>>>>>>> Line 3371	C++
>>>>>>>>>  	mysqld.exe!sp_head::execute(THD * thd, bool
>>>>>>>> merge_da_on_success) Line 1261	C++
>>>>>>>>>  	mysqld.exe!sp_head::execute_procedure(THD * thd,
>>>> List<Item> *
>>>>>>>> args) Line 2086	C++
>>>>>>>>>  	mysqld.exe!do_execute_sp(THD * thd, sp_head * sp) Line
>>>> 2890
>>>>>>>> 	C++
>>>>>>>>>  	mysqld.exe!mysql_execute_command(THD * thd) Line 5919
>>>> 	C++
>>>>>>>>>  	mysqld.exe!mysql_parse(THD * thd, char * rawbuf, unsigned
>>>> int
>>>>>>>> length, Parser_state * parser_state, bool is_com_multi, bool
>>>>>>>> is_next_command) Line 8006	C++
>>>>>>>>>  	mysqld.exe!dispatch_command(enum_server_command
>>>> command,
>>>>>>>> THD * thd, char * packet, unsigned int packet_length, bool
>>>> is_com_multi,
>>>>>>>> bool is_next_command) Line 1821	C++
>>>>>>>>>  	mysqld.exe!do_command(THD * thd) Line 1369	C++
>>>>>>>>>  	mysqld.exe!threadpool_process_request(THD * thd) Line
>>>> 346
>>>>>>>> 	C++
>>>>>>>>>  	mysqld.exe!tp_callback(TP_connection * c) Line 192	C++
>>>>>>>>>  	mysqld.exe!tp_callback(_TP_CALLBACK_INSTANCE *
>>>> instance, void *
>>>>>>>> context) Line 377	C++
>>>>>>>>>  	mysqld.exe!work_callback(_TP_CALLBACK_INSTANCE *
>>>> instance,
>>>>>>>> void * context, _TP_WORK * work) Line 451	C++
>>>>>>>>>
>>>>>>>>> Can you reproduce this ?
>>>>>>>>>
>>>>>>>>> Jérôme.
>>>>>>>>>
>>>>>>>>>> -----Message d'origine-----
>>>>>>>>>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx] Envoyé : lundi
>>>>>>>>>> 13 mars
>>>>>>>>>> 2017 14:47 À : jerome brauge Objet : Re: MDEV-10598 -
>>>>>>>>>> bb-10.2-compatibility
>>>>>>>>>>
>>>>>>>>>> Jérôme,
>>>>>>>>>>
>>>>>>>>>> On 03/13/2017 05:43 PM, jerome brauge wrote:
>>>>>>>>>>> Hello Alexander,
>>>>>>>>>>> I have to do some changes in the patch and add some tests
>>>>>>>>>>> cases (with row type) I think it will be ready this afternoon (CET).
>>>>>>>>>>
>>>>>>>>>> Excellent. You rock!
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Jérôme.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> -----Message d'origine-----
>>>>>>>>>>>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx] Envoyé : lundi
>>>>>>>>>>>> 13 mars
>>>>>>>>>>>> 2017 14:38 À : jerome brauge Cc : maria-developers Objet : Re:
>>>>>>>>>>>> MDEV-10598 - bb-10.2-compatibility
>>>>>>>>>>>>
>>>>>>>>>>>> Hello Jerome,
>>>>>>>>>>>>
>>>>>>>>>>>> will you try to apply your patch on top of the current
>>>>>>>>>>>> bb-10.2-
>>>>>>>>>> compatibility?
>>>>>>>>>>>>
>>>>>>>>>>>> Or should I do that?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks!
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 03/10/2017 02:36 PM, Alexander Barkov wrote:
>>>>>>>>>>>>> Hello Jerome,
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 02/27/2017 11:39 PM, jerome brauge wrote:
>>>>>>>>>>>>>> Hello Alexander,
>>>>>>>>>>>>>> Thanks for the explanation.
>>>>>>>>>>>>>> It's something we do not use. I did not think about it.
>>>>>>>>>>>>>> I look forward to your patch.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I pushed these tasks:
>>>>>>>>>>>>>
>>>>>>>>>>>>> MDEV-10581 sql_mode=ORACLE: Explicit cursor FOR LOOP
>>>>>>>>>>>>> MDEV-12098 sql_mode=ORACLE: Implicit cursor FOR loop
>>>>>>>>>>>>> MDEV-12011 sql_mode=ORACLE: cursor%ROWTYPE in variable
>>>>>>>>>> declarations
>>>>>>>>>>>>> MDEV-12133 sql_mode=ORACLE: table%ROWTYPE in variable
>>>>>>>>>> declarations
>>>>>>>>>>>>>
>>>>>>>>>>>>> Please clone the branch again.
>>>>>>>>>>>>> Git pull will not work, because I recently rebased
>>>>>>>>>>>>> bb-10.2-compatibility on top of the latest 10.2.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> When implementing cursor%ROWTYPE, I had your patch in
>> mind
>>>>>> and
>>>>>>>>>> made
>>>>>>>>>>>>> some refactoring to help us apply MDEV-10598 easier.
>>>>>>>>>>>>> Please see a comment to MDEV-12011 in "git log".
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now the tricky thing (when adding your patch) is to make
>>>>>>>>>>>>> sure that this work fine:
>>>>>>>>>>>>>
>>>>>>>>>>>>> CREATE PROCEDURE p1
>>>>>>>>>>>>> AS
>>>>>>>>>>>>>   a INT:=10;
>>>>>>>>>>>>>   CURSOR cur1 IS SELECT a;
>>>>>>>>>>>>>   rec1 cur1%ROWTYPE;
>>>>>>>>>>>>>   CURSOR cur2 IS SELECT rec1.a;
>>>>>>>>>>>>>   rec2 cur2%ROWTYPE;
>>>>>>>>>>>>> BEGIN
>>>>>>>>>>>>>   OPEN cur2;
>>>>>>>>>>>>>   FETCH cur2 INTO rec2;
>>>>>>>>>>>>>   CLOSE cur2;
>>>>>>>>>>>>>   SELECT rec2.a;
>>>>>>>>>>>>> END;
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> I.e. a set of intermixed CURSOR and cursor%ROWTYPE
>> variable
>>>>>>>>>>>>> declarations referencing each other recursively.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks.
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>> Jérôme.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -----Message d'origine----- De : Alexander Barkov
>>>>>>>>>>>>>>> [mailto:bar@xxxxxxxxxxx] Envoyé :
>>>>>>>>>>>>>>> lundi
>>>>>>>>>>>>>>> 27 février 2017 11:28 À : jerome brauge Cc :
>>>>>>>>>>>>>>> maria-developers
>>>>>> Objet :
>>>>>>>>>>>>>>> Re: MDEV-10598 - bb-10.2-compatibility
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hello Jerome,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 02/21/2017 07:18 PM, jerome brauge wrote:
>>>>>>>>>>>>>>>> Hello Alexander,
>>>>>>>>>>>>>>>> I've done this patch for MDEV-10598.
>>>>>>>>>>>>>>>> Can you review it ?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> It seems we'll have to postpone this patch.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I'm currently working on:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> MDEV-10598 Variable declarations can go after cursor
>>>>>>>>>>>>>>> declarations
>>>>>>>>>>>>>>> MDEV-12011 sql_mode=ORACLE: cursor%ROWTYPE in
>> variable
>>>>>>>>>>>> declarations
>>>>>>>>>>>>>>> So the trick with postponing variable declarations using a
>>>>>>>>>>>>>>> temporary list might not work properly after adding
>>>>>>>>>>>>>>> MDEV-10598 abd MDEV-12011, the order of cursors and
>>>> variables is important.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Example:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> DECLARE
>>>>>>>>>>>>>>>   CURSOR cur1 IS SELECT a,b FROM t1;
>>>>>>>>>>>>>>>   v cur1%ROWTYPE;
>>>>>>>>>>>>>>>   CURSOR cur2 IS SELECT v.a, v.b FROM DUAL; BEGIN
>>>>>>>>>>>>>>>   ...
>>>>>>>>>>>>>>> END;
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> So the order of cur1, v and cur2 is important.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I'll let you known when I'm ready with %ROWTYPE tasks.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks!
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>>> Jérôme.
>>>>>>>>>>>>>>>>


References