[
http://jira.codehaus.org/browse/GEOT-1169?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gabriel Roldán reopened GEOT-1169:
----------------------------------
reopening as it still needs to be ported to 2.3.x
> CQL Parser should allow nested function calls
> ---------------------------------------------
>
> Key: GEOT-1169
> URL: http://jira.codehaus.org/browse/GEOT-1169
> Project: GeoTools
> Issue Type: Improvement
> Components: new modules
> Affects Versions: 2.3.1, 2.4.M0
> Reporter: Gabriel Roldán
> Assigned To: Gabriel Roldán
> Priority: Critical
> Fix For: 2.3.1, 2.4.M0
>
> Attachments: 1167-1168-1169.patch
>
>
> CQL defines attribute and literals as possible rutine invocation arguments.
> We need them to be any {{Expression}}, most notably nested functions.
> Test case:
> {code}
> /**
> * The CQL grammar allows only literals and attribute names as function
> * arguments.
> * <p>
> * This tests the extension to allow for a generic expression as function
> * argument, as allowed by
> * [EMAIL PROTECTED] FilterFactory#function(String, Expression[])}
> * </p>
> * <p>
> * In particular, it is often needed to nest functions like to concatenate
> * various strings:
> * <code>strConcat(A, strConcat(B, strConcat(C, ".")))</code>
> * </p>
> *
> * @throws ParseException
> */
> public void testExtensionFunctionWithAnyExpressionArgument() throws
> ParseException {
> String cqlExpression = "strConcat(A, strConcat(B, strConcat(C,
> \".\")))";
> Expression expression = FilterBuilder.parseExpression(cqlExpression);
> assertNotNull(expression);
> assertTrue(expression instanceof Function);
> Function function = (Function) expression;
> assertEquals(2, function.getParameters().size());
> Expression propertyName = (Expression)
> function.getParameters().get(0);
> assertTrue(propertyName instanceof PropertyName);
> assertEquals("A", ((PropertyName) propertyName).getPropertyName());
> Expression arg2 = (Expression) function.getParameters().get(1);
> assertTrue(arg2 instanceof Function);
> function = (Function) arg2;
> propertyName = (Expression) function.getParameters().get(0);
> assertTrue(propertyName instanceof PropertyName);
> assertEquals("B", ((PropertyName) propertyName).getPropertyName());
> arg2 = (Expression) function.getParameters().get(1);
> assertTrue(arg2 instanceof Function);
> function = (Function) arg2;
> propertyName = (Expression) function.getParameters().get(0);
> assertTrue(propertyName instanceof PropertyName);
> assertEquals("C", ((PropertyName) propertyName).getPropertyName());
> arg2 = (Expression) function.getParameters().get(1);
> assertTrue(arg2 instanceof Literal);
> assertEquals(".", ((Literal) arg2).getValue());
> }
> {code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel