[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