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. \