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 2012/03/25 23:38:04 UTC

svn commit: r1305150 - in /db/torque/torque4/trunk/torque-runtime: ./ src/main/java/org/apache/torque/criteria/ src/main/java/org/apache/torque/sql/ src/main/java/org/apache/torque/util/ src/test/java/org/apache/torque/util/

Author: tfischer
Date: Sun Mar 25 21:38:04 2012
New Revision: 1305150

URL: http://svn.apache.org/viewvc?rev=1305150&view=rev
Log:
TORQUE-141: added a way to set the fetchSize on a query

Added:
    db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/util/BasePeerImplTest.java
Modified:
    db/torque/torque4/trunk/torque-runtime/pom.xml
    db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/criteria/Criteria.java
    db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/Query.java
    db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
    db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/BasePeerImpl.java

Modified: db/torque/torque4/trunk/torque-runtime/pom.xml
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/pom.xml?rev=1305150&r1=1305149&r2=1305150&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/pom.xml (original)
+++ db/torque/torque4/trunk/torque-runtime/pom.xml Sun Mar 25 21:38:04 2012
@@ -111,6 +111,12 @@
       <scope>test</scope>
     </dependency>
     
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <version>1.9.0</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/criteria/Criteria.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/criteria/Criteria.java?rev=1305150&r1=1305149&r2=1305150&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/criteria/Criteria.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/criteria/Criteria.java Sun Mar 25 21:38:04 2012
@@ -183,6 +183,9 @@ public class Criteria
      */
     private Map<String, String> aliases = new HashMap<String, String>();
 
+    /** The JDBC statement fetch size, if any. */
+    private Integer fetchSize;
+
     private boolean useTransaction = false;
 
     /**
@@ -625,6 +628,26 @@ public class Criteria
     }
 
     /**
+     * Returns the JDBC statement fetch size to use for queries.
+     *
+     * @return the fetch size, or null if none is set.
+     */
+    public Integer getFetchSize()
+    {
+        return fetchSize;
+    }
+
+    /**
+     * Sets the JDBC statement fetch size to use for queries.
+     *
+     * @param fetchSize the fetch size, or null for not set.
+     */
+    public void setFetchSize(Integer fetchSize)
+    {
+        this.fetchSize = fetchSize;
+    }
+
+    /**
      * Adds a select column to the Criteria.
      *
      * @param column The select column to add.
@@ -895,6 +918,7 @@ public class Criteria
         equalsBuilder.append(criteria.aliases, this.aliases);
         equalsBuilder.append(criteria.asColumns, this.asColumns);
         equalsBuilder.append(criteria.joins, this.joins);
+        equalsBuilder.append(criteria.fetchSize, this.fetchSize);
         return equalsBuilder.isEquals();
     }
 
@@ -918,6 +942,7 @@ public class Criteria
         hashCodeBuilder.append(aliases);
         hashCodeBuilder.append(asColumns);
         hashCodeBuilder.append(joins);
+        hashCodeBuilder.append(fetchSize);
         return hashCodeBuilder.toHashCode();
     }
 

Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/Query.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/Query.java?rev=1305150&r1=1305149&r2=1305150&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/Query.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/Query.java Sun Mar 25 21:38:04 2012
@@ -154,6 +154,9 @@ public class Query
     /** The type of the statement. */
     private Type type = Type.SELECT;
 
+    /** The JDBC statement fetch size, if any. */
+    private Integer fetchSize;
+
     /**
      * Retrieve the modifier buffer in order to add modifiers to this
      * query.  E.g. DISTINCT and ALL.
@@ -405,6 +408,26 @@ public class Query
     }
 
     /**
+     * Returns the JDBC statement fetch size to use for queries.
+     *
+     * @return the fetch size, or null if none is set.
+     */
+    public Integer getFetchSize()
+    {
+        return fetchSize;
+    }
+
+    /**
+     * Sets the JDBC statement fetch size to use for queries.
+     *
+     * @param fetchSize the fetch size, or null for not set.
+     */
+    public void setFetchSize(Integer fetchSize)
+    {
+        this.fetchSize = fetchSize;
+    }
+
+    /**
      * Outputs the query statement.
      *
      * @return A String with the query statement.

Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java?rev=1305150&r1=1305149&r2=1305150&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/sql/SqlBuilder.java Sun Mar 25 21:38:04 2012
@@ -136,6 +136,7 @@ public final class SqlBuilder
         processHaving(crit, sqlStatement);
         processOrderBy(db, database, crit, sqlStatement);
         processLimits(crit, sqlStatement);
+        sqlStatement.setFetchSize(crit.getFetchSize());
 
         return sqlStatement;
     }

Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/BasePeerImpl.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/BasePeerImpl.java?rev=1305150&r1=1305149&r2=1305150&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/BasePeerImpl.java (original)
+++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/BasePeerImpl.java Sun Mar 25 21:38:04 2012
@@ -1320,6 +1320,10 @@ public class BasePeerImpl implements Ser
         try
         {
             statement = connection.prepareStatement(query.toString());
+            if (query.getFetchSize() != null)
+            {
+                statement.setFetchSize(query.getFetchSize());
+            }
 
             List<Object> replacements = setPreparedStatementReplacements(
                     statement,

Added: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/util/BasePeerImplTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/util/BasePeerImplTest.java?rev=1305150&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/util/BasePeerImplTest.java (added)
+++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/util/BasePeerImplTest.java Sun Mar 25 21:38:04 2012
@@ -0,0 +1,131 @@
+package org.apache.torque.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.List;
+
+import org.apache.torque.BaseTestCase;
+import org.apache.torque.criteria.Criteria;
+import org.apache.torque.om.mapper.CompositeMapper;
+import org.apache.torque.om.mapper.IntegerMapper;
+import org.apache.torque.om.mapper.StringMapper;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests the class BasePeerImpl.
+ *
+ * @version $Id: $
+ */
+public class BasePeerImplTest extends BaseTestCase
+{
+    /** System under test. */
+    private BasePeerImpl basePeerImpl;
+
+    /** Mock db connection. */
+    @Mock
+    private Connection connection;
+
+    /** Mock prepared statement. */
+    @Mock
+    private PreparedStatement preparedStatement;
+
+    /** Mock result set. */
+    @Mock
+    private ResultSet resultSet;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        basePeerImpl = new BasePeerImpl();
+        super.setUp();
+        MockitoAnnotations.initMocks(this);
+        when(connection.prepareStatement((String) any()))
+                .thenReturn(preparedStatement);
+        when(preparedStatement.executeQuery()).thenReturn(resultSet);
+    }
+
+    /**
+     * Check that the fetch size gets set on the prepared statement when
+     * set in the criteria.
+     *
+     * @throws Exception if the test fails.
+     */
+    public void testDoSelectAll() throws Exception
+    {
+        Criteria criteria = new Criteria();
+        criteria.addSelectColumn(stringColumnMap);
+        criteria.addSelectColumn(integerColumnMap);
+        // single result "fd", 23 found
+        when(resultSet.next()).thenReturn(true, false);
+        when(resultSet.getString(1)).thenReturn("fd");
+        when(resultSet.getInt(2)).thenReturn(23);
+
+        CompositeMapper mapper = new CompositeMapper();
+        mapper.addMapper(new StringMapper(), 0);
+        mapper.addMapper(new IntegerMapper(), 1);
+
+        List<List<Object>> result = basePeerImpl.doSelect(
+                criteria, mapper, tableMap, connection);
+
+        // verify mock (verfication order not relevant)
+        verify(connection).prepareStatement(
+                "SELECT TABLE.COLUMN1, TABLE.COLUMN4 FROM TABLE");
+        verify(preparedStatement).executeQuery();
+        verify(preparedStatement).close();
+        verify(resultSet, times(2)).next();
+        verify(resultSet).getString(1);
+        verify(resultSet).getInt(2);
+        verify(resultSet).close();
+        verifyNoMoreInteractions(connection, preparedStatement, resultSet);
+        // verify result
+        assertEquals(1, result.size()); // one rwow
+        assertEquals(2, result.get(0).size()); // two columns
+        assertEquals("fd", result.get(0).get(0));
+        assertEquals(23, result.get(0).get(1));
+    }
+
+    /**
+     * Check that the fetch size gets set on the prepared statement when
+     * set in the criteria.
+     *
+     * @throws Exception if the test fails.
+     */
+    public void testDoSelectAllFetchSize() throws Exception
+    {
+        Criteria criteria = new Criteria();
+        criteria.setFetchSize(13);
+        // no results found
+        when(resultSet.next()).thenReturn(false);
+
+        basePeerImpl.doSelect(
+                criteria, new IntegerMapper(), tableMap, connection);
+        verify(preparedStatement).setFetchSize(13);
+    }
+}



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