You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2014/10/26 13:56:48 UTC

svn commit: r1634317 - in /db/torque/torque4/trunk/torque-runtime/src: main/java/org/apache/torque/sql/JoinBuilder.java test/java/org/apache/torque/sql/SqlBuilderTest.java

Author: tfischer
Date: Sun Oct 26 12:56:48 2014
New Revision: 1634317

URL: http://svn.apache.org/r1634317
Log:
TORQUE-333 correct handling of PreparedStatementReplacements in some joins

Modified:
    db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/JoinBuilder.java
    db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java

Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/JoinBuilder.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/JoinBuilder.java?rev=1634317&r1=1634316&r2=1634317&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/JoinBuilder.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/JoinBuilder.java Sun Oct 26 12:56:48 2014
@@ -174,6 +174,7 @@ public final class JoinBuilder
                             rightExpression.getSql().toString(),
                             joinType,
                             buildJoinCondition(joinCondition, criteria));
+                    fromElement.getPreparedStatementReplacements().addAll(rightExpression.getPreparedStatementReplacements());
                     queryFromClause.add(fromElement);
                 }
                 else

Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java?rev=1634317&r1=1634316&r2=1634317&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java Sun Oct 26 12:56:48 2014
@@ -31,6 +31,7 @@ import org.apache.torque.TorqueException
 import org.apache.torque.criteria.Criteria;
 import org.apache.torque.criteria.Criterion;
 import org.apache.torque.criteria.FromElement;
+import org.apache.torque.criteria.PreparedStatementPart;
 import org.apache.torque.criteria.SqlEnum;
 import org.apache.torque.om.NumberKey;
 
@@ -1119,6 +1120,40 @@ public class SqlBuilderTest extends Base
         assertEquals("y", query.getPreparedStatementReplacements().get(1));
     }
 
+    /**
+     * Tests that a subselect can be added to the from clause.
+     *
+     * @throws Exception if an error occurs
+     */
+    public void testInnerJoinExplicitWithSubselect() throws Exception
+    {
+        Criteria subselect = new Criteria()
+            .where(new ColumnImpl("table2.column2"), 5)
+            .addSelectColumn(new ColumnImpl("table2.column1"));
+        Query subselectQuery = SqlBuilder.buildQuery(subselect);
+        PreparedStatementPart fromClause = new PreparedStatementPart(
+                "(" + subselectQuery.toString() + ") alias",
+                subselectQuery.getPreparedStatementReplacements().toArray());
+        Criterion join = new Criterion(new ColumnImpl("table1.column1"), new ColumnImpl("alias.column1"));
+
+        Criteria criteria = new Criteria()
+            .addSelectColumn(new ColumnImpl("table1.column1"))
+            .addJoin(new PreparedStatementPart("table1"), fromClause, join, Criteria.INNER_JOIN)
+            .where(new ColumnImpl("table1.column3"), 3);
+
+        Query query = SqlBuilder.buildQuery(criteria);
+
+        assertEquals(
+                "SELECT table1.column1 FROM table1 INNER JOIN "
+                   + "(SELECT table2.column1 FROM table2 WHERE table2.column2=?) alias"
+                   + " ON table1.column1=alias.column1"
+                   + " WHERE table1.column3=?",
+                query.toString());
+        assertEquals(2, query.getPreparedStatementReplacements().size());
+        assertEquals(5, query.getPreparedStatementReplacements().get(0));
+        assertEquals(3, query.getPreparedStatementReplacements().get(1));
+    }
+
     public void testInnerJoinWithJoinCriteriaAndDefaultSchema()
             throws Exception
     {



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org