← Back to team overview

maria-developers team mailing list archive

Re: MDEV-17359

 

Hi Jerome,


On 10/04/2018 06:11 PM, jerome brauge wrote:
> Hi Alexander,
> Thank you very much.
> Do you think this these patches will be ready for 10.3.10 GA ?

Unfortunately no. It's too late for 10.3.10. But they'll be in 10.3.11.

I've pushed MDEV-17374.


Now MDEV-17359 can be fixed without any shift/reduce conflicts,
just by this two-line change in sql_yacc_ora.yy:


one line for LIKE:

-        | bit_expr LIKE mysql_concatenation_expr opt_escape
+        | bit_expr LIKE bit_expr opt_escape


and one line for NOT LIKE:


-        | bit_expr not LIKE mysql_concatenation_expr opt_escape
+        | bit_expr not LIKE bit_expr opt_escape



This is the output after applying this change:


SET sql_mode=ORACLE;
SELECT 111 LIKE 100+10+1, 'ab' like 'a'||'b';

+-------------------+--------------------+
| 111 LIKE 100+10+1 | 'ab' like 'a'||'b' |
+-------------------+--------------------+
|                 1 |                  1 |
+-------------------+--------------------+
1 row in set (0.00 sec)


Are you willing to make a new patch and extend the tests to cover
additive and mutiplicative expressions?


Note, it actually enables bit operators as well,
which are not supported by Oracle.

But I think this should not be harmful.


So I think all expressions from "bit_expr" should be covered in the test:

|
&
<<
>>
||
+
-
*
/
DIV
MOD
^

No needs to test the rules with INTERVAL
(this grammar will be gone soon).


Thanks!




> 
> Regards.
> 
>> -----Message d'origine-----
>> De : Alexander Barkov [mailto:bar@xxxxxxxxxxx]
>> Envoyé : jeudi 4 octobre 2018 16:05
>> À : jerome brauge
>> Cc : MariaDB Developers (maria-developers@xxxxxxxxxxxxxxxxxxx)
>> Objet : Re: MDEV-17359
>>
>> Hi Jerome,
>>
>> Note, Oracle supports not only concatenation in the pattern, but also
>> additive and multiplicative expressions, e.g.:
>>
>> SELECT 'x' FROM DUAL WHERE '100' LIKE 10*10;
>>
>> This kind of expressions currently also do not work.
>>
>> I think that in this rule:
>>
>>         | bit_expr LIKE mysql_concatenation_expr opt_escape
>>           {
>>             $$= new (thd->mem_root) Item_func_like(thd, $1, $3, $4,
>>                                                    Lex->escape_used);
>>             if (unlikely($$ == NULL))
>>               MYSQL_YYABORT;
>>           }
>>
>>
>> mysql_concatenation_expr should be just replaced to bit_expr.
>>
>> But this adds a lot of new shift/reduce conflicts because of flaws in the
>> current grammar. They need to be fixed before MDEV-17359.
>>
>>
>> I reported these conflicts in:
>>
>> MDEV-17374 Shift/reduce conflicts because of SOUNDS_SYM, ESCAPE_SYM,
>> USER_SYM not given precedence
>>
>> I'll have a patch soon, then will return to MDEV-17359.
>>
>> Greetings.
>>
>>
>> On 10/04/2018 09:26 AM, Alexander Barkov wrote:
>>> Jerome,
>>>
>>> Can you please wait. I'll do some more analysis on the subject.
>>>
>>>
>>> On 10/04/2018 09:16 AM, Alexander Barkov wrote:
>>>>   Hello Jerome,
>>>>
>>>> On 10/03/2018 05:33 PM, jerome brauge wrote:
>>>>> Hello Alexander,
>>>>> Can you review this patch for MDEV-17359 ?
>>>>>
>>>>> Best regards.
>>>>>
>>>>
>>>>
>>>> Thanks for you contribution!
>>>>
>>>>
>>>> I noticed that Oracle also supports concatenation in the ESCAPE clause:
>>>>
>>>> SELECT 'x' FROM DUAL WHERE 'a' LIKE 'b' ESCAPE ''||'x'||'';
>>>>
>>>> This can be done separately, or can be addressed in the same patch,
>>>> if you wish :)
>>>>
>>>>
>>>> Review comments:
>>>>
>>>> I've been trying to gradually make the two *.yy files as similar as
>>>> possible, to turn them into a single *.yy at the end.
>>>> So new changes in the grammar should usually make the two files look
>>>> more similar rather than make them diverge.
>>>>
>>>> However, it seems in case of concatenation and like, having only a
>>>> pair of MYSQL_CONCAT_SYM and ORACLE_CONCAT_SYM does not solve
>> the
>>>> problem. I could not make a quick patch which would converge
>>>> sql_yacc.yy and sql_yacc_ora.yy.
>>>>
>>>> It's likely that we'll have to introduce separate MYSQL_LIKE_SYM and
>>>> ORACLE_LIKE_SYM. But I can do it separately later (after more
>>>> analysis).
>>>>
>>>>
>>>> I the meanwhile, could you please rename mysql_concatenation_expr
>>>> into oracle_concatenation_expr in sql_yacc_ora.yy, so it looks like
>>>> this:
>>>>
>>>>
>>>> oracle_concatenation_expr:
>>>>            simple_expr
>>>>         | oracle_concatenation_expr ORACLE_CONCAT_SYM simple_expr
>>>>            {
>>>>              $$= new (thd->mem_root)
>>>> Item_func_concat_operator_oracle(thd, $1, $3);
>>>>              if (unlikely($$ == NULL))
>>>>                MYSQL_YYABORT;
>>>>            }
>>>>         ;
>>>>
>>>>
>>>>
>>>> Later, when we join the two *.yy files, we will need both
>>>> mysql_concatenation_expr (in its current reduction) and
>>>> oracle_concatenation_expr (in your reduction with
>> ORACLE_CONCAT_SYM
>>>> and Item_func_concat_operator_oracle) .
>>>>
>>>>
>>>> Thanks.
>>>>
> Ce message et les pièces jointes sont confidentiels et établis à l'attention exclusive de ses destinataires. Toute utilisation ou diffusion, même partielle, non autorisée est interdite. Tout message électronique est susceptible d'altération; CEGID décline donc toute responsabilité au titre de ce message. Si vous n'êtes pas le destinataire de ce message, merci de le détruire et d'avertir l'expéditeur.
> 
> This message and any attachments are confidential and intended solely for the addressees. Any unauthorized use or disclosure, either whole or partial is prohibited. E-mails are susceptible to alteration; CEGID shall therefore not be liable for the content of this message. If you are not the intended recipient of this message, please delete it and notify the sender.
> 


Follow ups

References