cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benjamin Lerer (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-11935) Add support for arithmetic operators
Date Thu, 17 Nov 2016 13:47:59 GMT


Benjamin Lerer commented on CASSANDRA-11935:

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.

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:
>             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

View raw message