[
https://issues.apache.org/jira/browse/CASSANDRA-10783?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15317088#comment-15317088
]
Benjamin Lerer commented on CASSANDRA-10783:
--------------------------------------------
I have the following remarks:
* The fact that {{Term.Raw}} implements {{Selectable}} looks confusing to me
from a hierachy point of view. I think it would be better if there was a new
{{Selectable}} implementation for Litterals that hold a reference to the
{{Term.Raw}} (I have pushed an example
[here|https://github.com/apache/cassandra/commit/cdde2447b86611a158357b757cb9eb4153fe2dc2]).
* The fact that {{ColumnIdentifier.Raw::prepare}} produce a
{{ColumnDefinition}} does not look really logical. I would be in favor of
moving {{ColumnIdentifier::Raw}} and its implementations to
{{ColumnDefinition}}.
* {{UnrecognizedEntityException}} is not used anymore and can be remove as well
as the {{try-catch}} block in {{SelectStatement::prepareRestrictions}} and the
{{containsAlias}} method.
* In {{WithFieldSelection}} switching from {{ColumnIdentifier}} to
{{ByteBuffer}} makes the column name unreadable in the error message. As it did
not break any test it means that we are probably not testing those checks and
that we should add some tests for it.
* {{Relation::toColumnDefinition}} could be inlined
* {{SelectorFactories::asList}} is not used and could be removed
* {{Selector}} contains some unused imports
I think it would also be good to add some extra tests to {{TermSelectionTest}}:
* to {{testSelectLiteral}}:
{code}
assertColumnNames(execute("SELECT ck, t, (int)42, (int)43 FROM %s"), "ck", "t",
"(int)42", "(int)43");
assertRows(execute("SELECT ck, t, (int) 42, (int) 43 FROM %s"),
row(1, "one", 42, 43),
row(2, "two", 42, 43),
row(3, "three", 42, 43));
{code}
* to {{testSelectPrepared}}:
{code}
execute("SELECT pk, ck, " + fIntMax + "(i, (int)?) FROM %s WHERE pk = " +
fIntMax + "((int)1,(int)1)", unset())
{code}
* to {{testPreparedFunctionArgs}}:
{code}
execute("SELECT pk, ck, " + fIntMax + "(i, (int)?) FROM %s WHERE pk = " +
fIntMax + "((int)1,(int)1)", unset());
{code}
In fact, the latest query fail with a {{NPE}}.
> Allow literal value as parameter of UDF & UDA
> ---------------------------------------------
>
> Key: CASSANDRA-10783
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10783
> Project: Cassandra
> Issue Type: Improvement
> Components: CQL
> Reporter: DOAN DuyHai
> Assignee: Robert Stupp
> Priority: Minor
> Labels: CQL3, UDF, client-impacting, doc-impacting
> Fix For: 3.x
>
>
> I have defined the following UDF
> {code:sql}
> CREATE OR REPLACE FUNCTION maxOf(current int, testValue int) RETURNS NULL ON
> NULL INPUT
> RETURNS int
> LANGUAGE java
> AS 'return Math.max(current,testValue);'
> CREATE TABLE maxValue(id int primary key, val int);
> INSERT INTO maxValue(id, val) VALUES(1, 100);
> SELECT maxOf(val, 101) FROM maxValue WHERE id=1;
> {code}
> I got the following error message:
> {code}
> SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query]
> message="line 1:19 no viable alternative at input '101' (SELECT maxOf(val1,
> [101]...)">
> {code}
> It would be nice to allow literal value as parameter of UDF and UDA too.
> I was thinking about an use-case for an UDA groupBy() function where the end
> user can *inject* at runtime a literal value to select which aggregation he
> want to display, something similar to GROUP BY ... HAVING <filter clause>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)