[teiid-commits] teiid SVN: r2813 - in branches/7.1.x/engine/src: test/java/org/teiid/dqp/internal/process and 1 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Mon Jan 3 17:46:14 EST 2011
Author: shawkins
Date: 2011-01-03 17:46:11 -0500 (Mon, 03 Jan 2011)
New Revision: 2813
Modified:
branches/7.1.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
branches/7.1.x/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
Log:
TEIID-1414 fix for prepared statement reference values in subqueries
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-01-03 16:29:09 UTC (rev 2812)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-01-03 22:46:11 UTC (rev 2813)
@@ -414,7 +414,7 @@
* @throws QueryValidatorException
*/
private void rewriteSubqueryContainer(SubqueryContainer container, boolean removeOrderBy) throws TeiidComponentException, TeiidProcessingException{
- if (rewriteSubcommands && container.getCommand() != null && container.getCommand().getProcessorPlan() == null) {
+ if (rewriteSubcommands && container.getCommand() != null && (container.getCommand().getProcessorPlan() == null || processing)) {
container.setCommand(rewriteCommand(container.getCommand(), removeOrderBy));
}
}
Modified: branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
===================================================================
--- branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2011-01-03 16:29:09 UTC (rev 2812)
+++ branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2011-01-03 22:46:11 UTC (rev 2813)
@@ -49,12 +49,13 @@
import org.teiid.query.optimizer.capabilities.FakeCapabilitiesFinder;
import org.teiid.query.optimizer.capabilities.SourceCapabilities.Capability;
import org.teiid.query.processor.FakeDataManager;
+import org.teiid.query.processor.HardcodedDataManager;
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.processor.TestProcessor;
import org.teiid.query.unittest.FakeMetadataFacade;
import org.teiid.query.unittest.FakeMetadataFactory;
-
+ at SuppressWarnings("nls")
public class TestPreparedStatement {
private static final int SESSION_ID = 6;
@@ -418,4 +419,23 @@
helpTestProcessing(preparedSql, values, expected, dataManager, FakeMetadataFactory.example1Cached(), false, false,FakeMetadataFactory.example1VDB());
}
+ @Test public void testWithSubqueryPushdown() throws Exception {
+ String preparedSql = "SELECT pm1.g1.e1 FROM pm1.g1 WHERE pm1.g1.e2 IN (SELECT pm1.g2.e2 FROM pm1.g2 WHERE pm1.g2.e1 = ?)"; //$NON-NLS-1$
+
+ List[] expected = new List[] {
+ Arrays.asList("a"),
+ };
+
+ List values = Arrays.asList("a"); //$NON-NLS-1$
+
+ QueryMetadataInterface metadata = FakeMetadataFactory.example1Cached();
+ HardcodedDataManager dataManager = new HardcodedDataManager(metadata);
+ dataManager.addData("SELECT g_0.e1 FROM g1 AS g_0 WHERE g_0.e2 IN (SELECT g_1.e2 FROM g2 AS g_1 WHERE g_1.e1 = 'a')", new List[] {Arrays.asList("a")});
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
+
+ helpTestProcessing(preparedSql, values, expected, dataManager, new DefaultCapabilitiesFinder(caps), metadata, null, false, false, false, FakeMetadataFactory.example1VDB());
+ }
+
}
Modified: branches/7.1.x/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
===================================================================
--- branches/7.1.x/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-01-03 16:29:09 UTC (rev 2812)
+++ branches/7.1.x/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-01-03 22:46:11 UTC (rev 2813)
@@ -31,6 +31,8 @@
import org.teiid.common.buffer.BlockedException;
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
+import org.teiid.dqp.internal.datamgr.LanguageBridgeFactory;
+import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.util.CommandContext;
@@ -43,7 +45,7 @@
ProcessorDataManager {
// sql string to data
- private Map data = new HashMap();
+ private Map<String, List[]> data = new HashMap<String, List[]>();
// valid models - if null, any is assumed valid
private Set validModels;
@@ -53,12 +55,19 @@
private boolean blockOnce;
// Collect all commands run against this class
- private List commandHistory = new ArrayList(); // Commands
+ private List<Command> commandHistory = new ArrayList<Command>(); // Commands
+ private LanguageBridgeFactory lbf;
+
public HardcodedDataManager() {
this(true);
}
+ public HardcodedDataManager(QueryMetadataInterface metadata) {
+ this(true);
+ this.lbf = new LanguageBridgeFactory(metadata);
+ }
+
public HardcodedDataManager(boolean mustRegisterCommands) {
this.mustRegisterCommands = mustRegisterCommands;
}
@@ -123,10 +132,17 @@
List projectedSymbols = command.getProjectedSymbols();
- List[] rows = (List[]) data.get(command.toString());
+ String commandString = null;
+ if (lbf == null) {
+ commandString = command.toString();
+ } else {
+ commandString = lbf.translate(command).toString();
+ }
+
+ List[] rows = data.get(commandString);
if(rows == null) {
if (mustRegisterCommands) {
- throw new TeiidComponentException("Unknown command: " + command.toString()); //$NON-NLS-1$
+ throw new TeiidComponentException("Unknown command: " + commandString); //$NON-NLS-1$
}
// Create one row of nulls
rows = new List[1];
More information about the teiid-commits
mailing list