[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