[ 
https://issues.apache.org/jira/browse/CASSANDRA-11935?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15673778#comment-15673778
 ] 

Benjamin Lerer commented on CASSANDRA-11935:
--------------------------------------------

{quote}
That said, I "think" CASSANDRA-11946 also help here, assuming we restrict 
functions overloads by return type first. In that case, we'd create overloads 
with same argument types but different return type (so {{tinyint add(tinyint, 
tinyint)}}, {{int add(tinyint, tinyint)}}, {{bigint add(tinyint, tinyint)}}, 
etc...) and {{i = 100 + 50}} would use the proper one.
{quote}

It would work for {{i = 100 + 50}} but not for {{SELECT 100 + 50}} where we 
will get an error like: {{Ambiguous '+' operation: use type casts to 
disambiguate}}.

If we do not overload functions with different return types but still use the 
return type to eliminates some of the functions, in the case of {{c = 1 + 1}}, 
where c is a {{smallint}}, we end up with 3 possible functions: {{smallint 
add(tinyint, smallint)}}, {{smallint add(tinyint, smallint)}} and {{smallint 
add(smallint, smallint)}}.
In such a case, I believe that we should just pick the operation with the same 
argument types than the return type.

The only corner case (if I did not miss anything) would be with bind markers. 
For something like: {{c = 1 + ?}} I believe that we should force the user to 
use a {{type hint}} as the fact that a {{smallint}} is expected is not obvious.

For the {{preferedType}} I still believe that we should stop at {{int}} for 
integer to minimize the risk of overflow issues in the selection part.    

> Add support for arithmetic operators
> ------------------------------------
>
>                 Key: CASSANDRA-11935
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11935
>             Project: Cassandra
>          Issue Type: Sub-task
>          Components: CQL
>            Reporter: Benjamin Lerer
>            Assignee: Benjamin Lerer
>             Fix For: 3.x
>
>
> The goal of this ticket is to add support for arithmetic operators:
> * {{-}}: Change the sign of the argument
> * {{+}}: Addition operator
> * {{-}}: Minus operator
> * {{*}}: Multiplication operator
> * {{/}}: Division operator
> * {{%}}: Modulo operator
> This ticket we should focus on adding operator only for numeric types to keep 
> the scope as small as possible. Dates and string operations will be adressed 
> in follow up tickets.
> The operation precedence should be:
> # {{*}}, {{/}}, {{%}}
> # {{+}}, {{-}}
> Some implicit data conversion should be performed when operations are 
> performed on different types (e.g. double + int).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to