[teiid-commits] teiid SVN: r4234 - in trunk/engine/src: test/java/org/teiid/dqp/internal/process and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Jul 12 14:24:56 EDT 2012


Author: shawkins
Date: 2012-07-12 14:24:56 -0400 (Thu, 12 Jul 2012)
New Revision: 4234

Modified:
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedStatementRequest.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
   trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
Log:
TEIID-2098 ensuring maxrows is not misapplied to procedures

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedStatementRequest.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedStatementRequest.java	2012-07-12 17:45:57 UTC (rev 4233)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedStatementRequest.java	2012-07-12 18:24:56 UTC (rev 4234)
@@ -300,4 +300,20 @@
 	    
 	    context.setVariableContext(result);
 	}
+	
+	@Override
+	public boolean isReturingParams() {
+		if (userCommand instanceof StoredProcedure) {
+			StoredProcedure sp = (StoredProcedure)userCommand;
+			if (sp.isCallableStatement() && sp.returnsResultSet()) {
+				for (SPParameter param : sp.getMapOfParameters().values()) {
+					int type = param.getParameterType();
+					if (type == SPParameter.INOUT || type == SPParameter.OUT || type == SPParameter.RETURN_VALUE) {
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
 } 

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java	2012-07-12 17:45:57 UTC (rev 4233)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java	2012-07-12 18:24:56 UTC (rev 4234)
@@ -474,5 +474,9 @@
 	public void setExecutor(Executor executor) {
 		this.executor = executor;
 	}
+
+	public boolean isReturingParams() {
+		return false;
+	}
 	
 }

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java	2012-07-12 17:45:57 UTC (rev 4233)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java	2012-07-12 18:24:56 UTC (rev 4234)
@@ -581,7 +581,9 @@
 				}
 			}
 		};
-		if (!request.addedLimit && this.requestMsg.getRowLimit() > 0) {
+		if (!request.addedLimit && this.requestMsg.getRowLimit() > 0 && !request.isReturingParams()) {
+			//covers maxrows for commands that already have a limit, are prepared, or are a stored procedure
+			//TODO: allow max rows to have an effect for callablestatements with out params
         	this.collector.setRowLimit(this.requestMsg.getRowLimit());
         }
 		this.resultsBuffer = collector.getTupleBuffer();

Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java	2012-07-12 17:45:57 UTC (rev 4233)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java	2012-07-12 18:24:56 UTC (rev 4234)
@@ -614,6 +614,22 @@
         assertEquals(2, rm.getResultsList().size());
     }
     
+    /**
+     * Ensure that the row limit is not misapplied.
+     * Note that it still could be applied in this example, but the
+     * resultset only returns a single row
+     */
+    @Test public void testProcedureMaxRows() throws Exception {
+    	String sql = "{? = call TEIIDSP9(1, ?)}"; //$NON-NLS-1$
+    	RequestMessage request = exampleRequestMessage(sql);
+    	request.setRowLimit(1);
+    	request.setStatementType(StatementType.CALLABLE);
+        ResultsMessage rm = execute("A", 1, request);
+        
+        assertNull(rm.getException());
+        assertEquals(2, rm.getResultsList().size());
+    }
+    
 	public void helpTestVisibilityFails(String sql) throws Exception {
         RequestMessage reqMsg = exampleRequestMessage(sql); 
         reqMsg.setTxnAutoWrapMode(RequestMessage.TXN_WRAP_OFF);



More information about the teiid-commits mailing list