You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2013/03/20 23:52:22 UTC
svn commit: r1459091 - in /openjpa/trunk/openjpa-kernel/src/main:
java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt
resources/org/apache/openjpa/kernel/jpql/localizer.properties
Author: ppoddar
Date: Wed Mar 20 22:52:18 2013
New Revision: 1459091
URL: http://svn.apache.org/r1459091
Log:
OPENJPA-2355: Allow more than two input argument to CONCAT()
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=1459091&r1=1459090&r2=1459091&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Wed Mar 20 22:52:18 2013
@@ -1297,11 +1297,22 @@ public class JPQLExpressionBuilder
return factory.trim(val1, trimChar, trimWhere);
case JJTCONCAT:
- val1 = getValue(left(node));
- val2 = getValue(right(node));
+ if (node.children.length < 2)
+ throw parseException(EX_USER, "less-child-count",
+ new Object[]{ Integer.valueOf(2), node,
+ Arrays.asList(node.children) }, null);
+
+ val1 = getValue(firstChild(node));
+ val2 = getValue(secondChild(node));
setImplicitType(val1, TYPE_STRING);
setImplicitType(val2, TYPE_STRING);
- return factory.concat(val1, val2);
+ Value concat = factory.concat(val1, val2);
+ for (int i = 2; i < node.children.length; i++) {
+ val2 = getValue(node.children[i]);
+ setImplicitType(val2, TYPE_STRING);
+ concat = factory.concat(concat, val2);
+ }
+ return concat;
case JJTSUBSTRING:
// Literals are forced to be Integers because PostgreSQL rejects Longs in SUBSTRING parameters.
Modified: openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt?rev=1459091&r1=1459090&r2=1459091&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt (original)
+++ openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt Wed Mar 20 22:52:18 2013
@@ -1195,7 +1195,7 @@ void functions_returning_strings() : { }
void concat() #CONCAT : { }
{
- <CONCAT> "(" string_expression() <COMMA> string_expression() ")"
+ <CONCAT> "(" string_expression() <COMMA> string_expression() [ <COMMA> string_expression() ] ")"
}
Modified: openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties?rev=1459091&r1=1459090&r2=1459091&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties (original)
+++ openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties Wed Mar 20 22:52:18 2013
@@ -40,6 +40,8 @@ unknown-comp: Unknown comparison operato
wrong-child-count: Wrong number of arguments to expression \
of type "{1}": should have been {0}, but the following arguments \
were specified: "{2}".
+less-child-count: Insufficient number of argument to expression \
+ of type "{1}": should have been at least {0}, but were: "{2}"
not-schema-name: The name "{0}" is not a recognized entity or identifier. \
Known entity names: {1}
not-schema-name-hint: The name "{0}" is not a recognized entity or identifier. \