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-unsubscr...@db.apache.org For additional commands, e-mail: torque-dev-h...@db.apache.org