[teiid-commits] teiid SVN: r1487 - in trunk: connector-metadata/src/test/java/com/metamatrix/connector/metadata/internal and 10 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon Sep 28 17:07:51 EDT 2009


Author: shawkins
Date: 2009-09-28 17:07:51 -0400 (Mon, 28 Sep 2009)
New Revision: 1487

Removed:
   trunk/connector-metadata/src/test/java/com/metamatrix/connector/metadata/internal/FakeProcessorDataManager.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/TempTableStoresHolder.java
Modified:
   trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java
   trunk/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java
   trunk/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java
   trunk/engine/src/main/java/com/metamatrix/query/processor/proc/ProcedurePlan.java
   trunk/engine/src/main/java/com/metamatrix/query/processor/relational/SubqueryAwareRelationalNode.java
   trunk/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
   trunk/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
   trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCoreRequestHandling.java
   trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
   trunk/runtime/src/main/java/com/metamatrix/platform/security/session/service/SessionServiceImpl.java
   trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestResultsMetadataWithProvider.java
   trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestStaticMetadataProvider.java
Log:
TEIID-849 fix for resolving subqueries in stored procedure parameters and for using the appropriate context information.

Modified: trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java
===================================================================
--- trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/common-core/src/main/java/com/metamatrix/common/types/basic/StringToCharacterTransform.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -42,7 +42,7 @@
 			return new Character(' '); 
 		}
 		
-        return new Character( s.charAt(0) );
+        return Character.valueOf(s.charAt(0));
 	}
 
 	/**

Deleted: trunk/connector-metadata/src/test/java/com/metamatrix/connector/metadata/internal/FakeProcessorDataManager.java
===================================================================
--- trunk/connector-metadata/src/test/java/com/metamatrix/connector/metadata/internal/FakeProcessorDataManager.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/connector-metadata/src/test/java/com/metamatrix/connector/metadata/internal/FakeProcessorDataManager.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -1,78 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership.  Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package com.metamatrix.connector.metadata.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.metamatrix.api.exception.MetaMatrixComponentException;
-import com.metamatrix.common.buffer.BlockedException;
-import com.metamatrix.common.buffer.TupleSource;
-import com.metamatrix.query.processor.FakeTupleSource;
-import com.metamatrix.query.processor.ProcessorDataManager;
-import com.metamatrix.query.sql.lang.Command;
-import com.metamatrix.query.util.CommandContext;
-
-/**
- */
-public class FakeProcessorDataManager implements ProcessorDataManager {
-    private Command command;
-    
-    public Command getCommand(){
-        return command;
-    }
-    /**
-     * 
-     */
-    public FakeProcessorDataManager() {
-        super();
-    }
-
-    /* 
-     * @see com.metamatrix.query.processor.ProcessorDataManager#registerRequest(java.lang.Object, com.metamatrix.query.sql.lang.Command, java.lang.String, int)
-     */
-    public TupleSource registerRequest(Object processorID, Command command, String modelName, String connectorBindingId, int nodeID)
-        throws MetaMatrixComponentException {
-        this.command = command;
-        return new FakeTupleSource(new ArrayList(), new List[0]);
-    }
-
-    /* 
-     * @see com.metamatrix.query.processor.ProcessorDataManager#lookupCodeValue(com.metamatrix.query.util.CommandContext, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
-     */
-    public Object lookupCodeValue(
-        CommandContext context,
-        String codeTableName,
-        String returnElementName,
-        String keyElementName,
-        Object keyValue)
-        throws BlockedException, MetaMatrixComponentException {
-        return null;
-    }
-    
-    @Override
-    public void clearCodeTables() {
-    	
-    }
-
-}

Modified: trunk/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/com/metamatrix/query/eval/Evaluator.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -103,8 +103,9 @@
 		this.elements = elements;
 	}
     
-    public void setContext(CommandContext context) {
+    public void initialize(CommandContext context, ProcessorDataManager dataMgr) {
 		this.context = context;
+		this.dataMgr = dataMgr;
 	}
 
 	public boolean evaluate(Criteria criteria, List tuple)
@@ -316,13 +317,7 @@
         	valueIter = new CollectionValueIterator(((SetCriteria)criteria).getValues());
         } else if (criteria instanceof DependentSetCriteria){
         	ContextReference ref = (ContextReference)criteria;
-        	ValueIteratorSource vis = (ValueIteratorSource)getContext(criteria).getVariableContext().getGlobalValue(ref.getContextSymbol());
-        	HashSet<Object> values;
-			try {
-				values = vis.getCachedSet(ref.getValueExpression());
-			} catch (MetaMatrixProcessingException e) {
-				throw new CriteriaEvaluationException(e, e.getMessage());
-			}
+        	HashSet<Object> values = getValues(getContext(criteria), ref);
         	if (values != null) {
         		return values.contains(leftValue);
         	}
@@ -367,6 +362,19 @@
         return Boolean.valueOf(criteria.isNegated());
 	}
 
+	public static HashSet<Object> getValues(CommandContext context,
+			ContextReference ref) throws MetaMatrixComponentException,
+			CriteriaEvaluationException {
+		ValueIteratorSource vis = (ValueIteratorSource)context.getVariableContext().getGlobalValue(ref.getContextSymbol());
+		HashSet<Object> values;
+		try {
+			values = vis.getCachedSet(ref.getValueExpression());
+		} catch (MetaMatrixProcessingException e) {
+			throw new CriteriaEvaluationException(e, e.getMessage());
+		}
+		return values;
+	}
+
 	public boolean evaluate(IsNullCriteria criteria, List tuple)
 		throws CriteriaEvaluationException, BlockedException, MetaMatrixComponentException {
 

Modified: trunk/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/com/metamatrix/query/metadata/TempMetadataStore.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -43,13 +43,13 @@
 public class TempMetadataStore implements Serializable {
 
     // UPPER CASE TEMP GROUP NAME --> TempMetadataID for group
-    private Map tempGroups;     
+    private Map<String, TempMetadataID> tempGroups;     
     
     /**
      * Constructor for TempMetadataStore.
      */
     public TempMetadataStore() {
-        this(new HashMap());
+        this(new HashMap<String, TempMetadataID>());
     }
 
     /**
@@ -57,9 +57,9 @@
      * the parameter is null, a new empty Map will beused instead.
      * @param data Map of upper case group name to group TempMetadataID object
      */
-    public TempMetadataStore(Map data) {
+    public TempMetadataStore(Map<String, TempMetadataID> data) {
         if (data == null) {
-            tempGroups = new HashMap();
+            tempGroups = new HashMap<String, TempMetadataID>();
         } else {
             tempGroups = data;
         }
@@ -164,7 +164,7 @@
     public TempMetadataID addElementSymbolToTempGroup(String tempGroup, SingleElementSymbol symbol) {
         String tempName = tempGroup.toUpperCase();
         
-        TempMetadataID groupID = (TempMetadataID)this.tempGroups.get(tempName);
+        TempMetadataID groupID = this.tempGroups.get(tempName);
         if (groupID != null) {
             TempMetadataID elementID = createElementSymbol(tempName, symbol, false);
             
@@ -198,7 +198,7 @@
      * @return Metadata ID or null if not found
      */
     public TempMetadataID getTempGroupID(String tempGroup) {
-        return (TempMetadataID) tempGroups.get(tempGroup.toUpperCase());    
+        return tempGroups.get(tempGroup.toUpperCase());    
     }
     
     /**
@@ -213,7 +213,7 @@
         }
         String groupName = tempElement.substring(0, index);
             
-        TempMetadataID groupID = (TempMetadataID) tempGroups.get(groupName.toUpperCase());
+        TempMetadataID groupID = tempGroups.get(groupName.toUpperCase());
         if(groupID != null) {
             Iterator elementIter = groupID.getElements().iterator();
             while(elementIter.hasNext()) { 
@@ -234,7 +234,7 @@
      * @return Metadata ID or null if not found
      */
     public List getTempElementElementIDs(String tempGroup) {
-        TempMetadataID groupID = (TempMetadataID) tempGroups.get(tempGroup.toUpperCase());        
+        TempMetadataID groupID = tempGroups.get(tempGroup.toUpperCase());        
         if(groupID != null) {
             return groupID.getElements();
         }
@@ -243,14 +243,14 @@
     }
     
     public void addElementToTempGroup(String tempGroup, ElementSymbol symbol) {
-        TempMetadataID groupID = (TempMetadataID) tempGroups.get(tempGroup.toUpperCase());        
+        TempMetadataID groupID = tempGroups.get(tempGroup.toUpperCase());        
         if(groupID != null) {
             groupID.addElement((TempMetadataID)symbol.getMetadataID());
         }
     }
     
-    public void removeTempGroup(String tempGroup) {
-        tempGroups.remove(tempGroup.toUpperCase());  
+    public TempMetadataID removeTempGroup(String tempGroup) {
+        return tempGroups.remove(tempGroup.toUpperCase());  
     }
 
 }

Modified: trunk/engine/src/main/java/com/metamatrix/query/processor/proc/ProcedurePlan.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/processor/proc/ProcedurePlan.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/com/metamatrix/query/processor/proc/ProcedurePlan.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -137,9 +137,8 @@
     public void initialize(CommandContext context, ProcessorDataManager dataMgr, BufferManager bufferMgr) {       
         this.bufferMgr = bufferMgr;
         this.batchSize = bufferMgr.getProcessorBatchSize();
-        tempTableStore = new TempTableStoreImpl(bufferMgr, context.getConnectionID(), (TempTableStore)context.getTempTableStore());
-        this.dataMgr = new TempTableDataManager(dataMgr, tempTableStore);
         setContext(context);
+        this.dataMgr = dataMgr;
         if (evaluator == null) {
         	this.evaluator = new SubqueryAwareEvaluator(Collections.emptyMap(), getDataManager(), getContext(), this.bufferMgr);
         } 
@@ -199,6 +198,8 @@
 		            context.setValue(entry.getKey(), value);
 				}
     		}
+    		tempTableStore = new TempTableStoreImpl(bufferMgr, getContext().getConnectionID(), null);
+            this.dataMgr = new TempTableDataManager(dataMgr, tempTableStore);
     	}
     	this.evaluatedParams = true;
     }
@@ -316,6 +317,7 @@
         if (this.evaluator != null) {
         	this.evaluator.close();
         }
+        this.tempTableStore = null;
     }
 
     public String toString() {
@@ -632,14 +634,14 @@
     }
 
     boolean evaluateCriteria(Criteria condition) throws BlockedException, MetaMatrixProcessingException, MetaMatrixComponentException {
-    	evaluator.setContext(getContext());
+    	evaluator.initialize(getContext(), getDataManager());
 		boolean result = evaluator.evaluate(condition, Collections.emptyList());
 		this.evaluator.close();
 		return result;
     }
     
     Object evaluateExpression(Expression expression) throws BlockedException, MetaMatrixProcessingException, MetaMatrixComponentException {
-    	evaluator.setContext(getContext());
+    	evaluator.initialize(getContext(), getDataManager());
     	Object result = evaluator.evaluate(expression, Collections.emptyList());
     	this.evaluator.close();
     	return result;

Modified: trunk/engine/src/main/java/com/metamatrix/query/processor/relational/SubqueryAwareRelationalNode.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/processor/relational/SubqueryAwareRelationalNode.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/com/metamatrix/query/processor/relational/SubqueryAwareRelationalNode.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -17,7 +17,7 @@
 		if (this.evaluator == null) {
 			this.evaluator = new SubqueryAwareEvaluator(elementMap, getDataManager(), getContext(), getBufferManager());
 		} else {
-			this.evaluator.setContext(getContext());
+			this.evaluator.initialize(getContext(), getDataManager());
 		}
 		return this.evaluator;
 	}

Modified: trunk/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/com/metamatrix/query/resolver/command/ExecResolver.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -23,6 +23,7 @@
 package com.metamatrix.query.resolver.command;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -44,6 +45,7 @@
 import com.metamatrix.query.metadata.TempMetadataStore;
 import com.metamatrix.query.parser.QueryParser;
 import com.metamatrix.query.resolver.ProcedureContainerResolver;
+import com.metamatrix.query.resolver.QueryResolver;
 import com.metamatrix.query.resolver.VariableResolver;
 import com.metamatrix.query.resolver.util.ResolverUtil;
 import com.metamatrix.query.resolver.util.ResolverVisitor;
@@ -52,10 +54,13 @@
 import com.metamatrix.query.sql.lang.ProcedureContainer;
 import com.metamatrix.query.sql.lang.SPParameter;
 import com.metamatrix.query.sql.lang.StoredProcedure;
+import com.metamatrix.query.sql.lang.SubqueryContainer;
 import com.metamatrix.query.sql.proc.CreateUpdateProcedureCommand;
 import com.metamatrix.query.sql.symbol.ElementSymbol;
 import com.metamatrix.query.sql.symbol.Expression;
 import com.metamatrix.query.sql.symbol.GroupSymbol;
+import com.metamatrix.query.sql.visitor.CommandCollectorVisitor;
+import com.metamatrix.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
 import com.metamatrix.query.util.ErrorMessageKeys;
 
 /**
@@ -284,6 +289,11 @@
                 SPParameter param = (SPParameter) paramIter.next();
                 Expression expr = param.getExpression();
                 if(expr != null) {
+                    for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
+                        QueryResolver.setChildMetadata(container.getCommand(), command);
+                        
+                        QueryResolver.resolveCommand(container.getCommand(), Collections.EMPTY_MAP, useMetadataCommands, metadata.getMetadata(), analysis);
+                    }
                     ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
                     Class paramType = param.getClassType();
 

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -91,6 +91,7 @@
 import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
 import com.metamatrix.query.processor.ProcessorDataManager;
 import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.tempdata.TempTableStoreImpl;
 import com.metamatrix.server.serverapi.RequestInfo;
 import com.metamatrix.vdb.runtime.VDBKey;
 
@@ -119,6 +120,36 @@
 		}
 	}
 	
+	static class ClientState {
+		List<RequestID> requests;
+		TempTableStoreImpl tempTableStoreImpl;
+		
+		public ClientState(TempTableStoreImpl tableStoreImpl) {
+			this.tempTableStoreImpl = tableStoreImpl;
+		}
+		
+		public synchronized void addRequest(RequestID requestID) {
+			if (requests == null) {
+				requests = new LinkedList<RequestID>();
+			}
+			requests.add(requestID);
+		}
+		
+		public synchronized List<RequestID> getRequests() {
+			if (requests == null) {
+				return Collections.emptyList();
+			}
+			return new ArrayList<RequestID>(requests);
+		}
+
+		public synchronized void removeRequest(RequestID requestID) {
+			if (requests != null) {
+				requests.remove(requestID);
+			}
+		}
+		
+	}
+	
     //Constants
     private static final int DEFAULT_MAX_CODE_TABLE_RECORDS = 10000;
     private static final int DEFAULT_MAX_CODE_TABLES = 200;
@@ -151,11 +182,10 @@
     private int processorTimeslice = DEFAULT_PROCESSOR_TIMESLICE;
     private boolean processorDebugAllowed;
     
-	private TempTableStoresHolder tempTableStoresHolder;
     private int chunkSize = 0;
     
-	private Map<RequestID, RequestWorkItem> requests = Collections.synchronizedMap(new HashMap<RequestID, RequestWorkItem>());			
-	private Map<String, List<RequestID>> requestsByClients = Collections.synchronizedMap(new HashMap<String, List<RequestID>>());
+	private Map<RequestID, RequestWorkItem> requests = new ConcurrentHashMap<RequestID, RequestWorkItem>();			
+	private Map<String, ClientState> clientState = Collections.synchronizedMap(new HashMap<String, ClientState>());
 	private DQPContextCache contextCache;
     private ServiceLoader loader = new ServiceLoader();
 
@@ -179,27 +209,32 @@
      * Return a list of {@link RequestInfo} for the given session
      */
     public List<RequestInfo> getRequestsByClient(String clientConnection) {
-        List<RequestID> ids = this.requestsByClients.get(clientConnection);
-
-        return buildRequestInfos(ids);
+    	ClientState state = getClientState(clientConnection, false);
+    	if (state == null) {
+    		return Collections.emptyList();
+    	}
+        return buildRequestInfos(state.getRequests());
     }
+    
+    public ClientState getClientState(String key, boolean create) {
+    	synchronized (clientState) {
+    		ClientState state = clientState.get(key);
+    		if (state == null && create) {
+    			state = new ClientState(new TempTableStoreImpl(bufferManager, key, null));
+        		clientState.put(key, state);
+    		}
+    		return state;
+		}
+    }
 
     /**
      * Return a list of all {@link RequestInfo} 
      */
     public List<RequestInfo> getRequests() {
-        List<RequestID> copies = null;
-		synchronized(requests) {
-            copies = new ArrayList<RequestID>(requests.keySet());
-        }
-		
-		return buildRequestInfos(copies);
+		return buildRequestInfos(requests.keySet());
     } 
 
-    private List<RequestInfo> buildRequestInfos(List<RequestID> ids) {
-		if(ids == null) {
-			return Collections.emptyList();
-		}
+    private List<RequestInfo> buildRequestInfos(Collection<RequestID> ids) {
 		List<RequestInfo> results = new ArrayList<RequestInfo>();
     	for (RequestID requestID : ids) {
             RequestWorkItem holder = requests.get(requestID);
@@ -246,10 +281,10 @@
 	    } else {
 	    	request = new Request();
 	    }
+	    ClientState state = this.getClientState(workContext.getConnectionID(), true);
 	    request.initialize(requestMsg, getEnvironment(), bufferManager,
 				dataTierMgr, vdbCapabilties, transactionService,
-				processorDebugAllowed, this.tempTableStoresHolder
-						.getTempTableStore(workContext.getConnectionID()),
+				processorDebugAllowed, state.tempTableStoreImpl,
 				workContext, chunkSize);
 		
         RequestWorkItem workItem = null;
@@ -266,7 +301,7 @@
         }
         
     	logMMCommand(workItem, true, false, 0); //TODO: there is no transaction at this point 
-        addRequest(requestID, workItem);
+        addRequest(requestID, workItem, state);
         
         this.addWork(workItem);      
         return resultsFuture;
@@ -284,26 +319,17 @@
 		return resultsFuture;
 	}
 
-	void addRequest(RequestID requestID, RequestWorkItem workItem) {
+	void addRequest(RequestID requestID, RequestWorkItem workItem, ClientState state) {
 		this.requests.put(requestID, workItem);
-        synchronized (requestsByClients) {
-            List<RequestID> clientRequests = this.requestsByClients.get(workItem.getDqpWorkContext().getConnectionID());
-            if (clientRequests == null) {
-            	clientRequests = new LinkedList<RequestID>();
-            	this.requestsByClients.put(workItem.getDqpWorkContext().getConnectionID(), clientRequests);
-            }
-            clientRequests.add(requestID);
-		}
+		state.addRequest(requestID);
 	}
     
     void removeRequest(final RequestWorkItem workItem) {
     	this.requests.remove(workItem.requestID);
-    	synchronized (requestsByClients) {
-        	List<RequestID> clientRequests = this.requestsByClients.get(workItem.getDqpWorkContext().getConnectionID());
-        	if (clientRequests != null) {
-        		clientRequests.remove(workItem.requestID);
-        	}
-		}
+    	ClientState state = getClientState(workItem.getDqpWorkContext().getConnectionID(), false);
+    	if (state != null) {
+    		state.removeRequest(workItem.requestID);
+    	}
     	contextCache.removeRequestScopedCache(workItem.requestID.toString());
     }
            
@@ -414,12 +440,9 @@
     	        
         // sometimes there will not be any atomic requests pending, in that
         // situation we still need to clear the master request from our map
-        List<RequestID> requestIds = requestsByClients.get(sessionId);
-        if (requestIds != null) {
-            synchronized (requestsByClients) {
-            	requestIds = new ArrayList<RequestID>(requestIds);
-    		}
-	        for (RequestID reqId : requestIds) {
+        ClientState state = getClientState(sessionId, false);
+        if (state != null) {
+	        for (RequestID reqId : state.getRequests()) {
 	            try {
 	                cancelRequest(reqId);
 	            } catch (MetaMatrixComponentException err) {
@@ -667,8 +690,6 @@
         // Create the worker pools to tie the queues together
         processWorkerPool = WorkerPoolFactory.newWorkerPool(PROCESS_PLAN_QUEUE_NAME, PropertiesUtils.getIntProperty(props, DQPEmbeddedProperties.PROCESS_POOL_MAX_THREADS, DEFAULT_MAX_PROCESS_WORKERS)); 
  
-        tempTableStoresHolder = new TempTableStoresHolder(bufferManager);
-        
         dataTierMgr = new DataTierManagerImpl(this,
                                             (DataService) env.findService(DQPServiceNames.DATA_SERVICE),
                                             (VDBService) env.findService(DQPServiceNames.VDB_SERVICE),
@@ -761,7 +782,7 @@
 	public MetadataResult getMetadata(long requestID)
 			throws MetaMatrixComponentException, MetaMatrixProcessingException {
 		DQPWorkContext workContext = DQPWorkContext.getWorkContext();
-		MetaDataProcessor processor = new MetaDataProcessor(this.metadataService, this, this.prepPlanCache, getEnvironment(), this.tempTableStoresHolder);
+		MetaDataProcessor processor = new MetaDataProcessor(this.metadataService, this, this.prepPlanCache, getEnvironment());
 		return processor.processMessage(workContext.getRequestID(requestID), workContext, null, true);
 	}
 
@@ -769,7 +790,7 @@
 			boolean allowDoubleQuotedVariable)
 			throws MetaMatrixComponentException, MetaMatrixProcessingException {
 		DQPWorkContext workContext = DQPWorkContext.getWorkContext();
-		MetaDataProcessor processor = new MetaDataProcessor(this.metadataService, this, this.prepPlanCache, getEnvironment(), this.tempTableStoresHolder);
+		MetaDataProcessor processor = new MetaDataProcessor(this.metadataService, this, this.prepPlanCache, getEnvironment());
 		return processor.processMessage(workContext.getRequestID(requestID), workContext, preparedSql, allowDoubleQuotedVariable);
 	}
 }
\ No newline at end of file

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -29,6 +29,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.teiid.dqp.internal.process.DQPCore.ClientState;
 import org.teiid.dqp.internal.process.PreparedPlanCache.CacheID;
 import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
 
@@ -80,17 +81,15 @@
     private PreparedPlanCache planCache;
     private ApplicationEnvironment env;
         
-    private TempTableStoresHolder tempTableStoresHolder;
     private String vdbName;
     private String vdbVersion;
     private RequestID requestID;
     
-    public MetaDataProcessor(MetadataService metadataService, DQPCore requestManager, PreparedPlanCache planCache, ApplicationEnvironment env, TempTableStoresHolder tempTableStoresHolder) {
+    public MetaDataProcessor(MetadataService metadataService, DQPCore requestManager, PreparedPlanCache planCache, ApplicationEnvironment env) {
         this.metadataService = metadataService;    
         this.requestManager = requestManager;
         this.planCache = planCache;
         this.env = env;
-        this.tempTableStoresHolder = tempTableStoresHolder;
     }
         
     /**
@@ -128,9 +127,12 @@
         }
         
         TempTableStore tempTableStore = null;
-        if(tempTableStoresHolder != null) {
+        if(requestManager != null) {
             if (workItem != null) {
-                tempTableStore = tempTableStoresHolder.getTempTableStore(workContext.getConnectionID());
+                ClientState state = requestManager.getClientState(workContext.getConnectionID(), false);
+                if (state != null) {
+                	tempTableStore = state.tempTableStoreImpl;
+                }
             }
         }
         if(tempTableStore != null) {

Deleted: trunk/engine/src/main/java/org/teiid/dqp/internal/process/TempTableStoresHolder.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/TempTableStoresHolder.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/TempTableStoresHolder.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -1,52 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership.  Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-
-package org.teiid.dqp.internal.process;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.metamatrix.common.buffer.BufferManager;
-import com.metamatrix.query.tempdata.TempTableStore;
-import com.metamatrix.query.tempdata.TempTableStoreImpl;
-
-
-/** 
- * @since 5.5
- */
-public class TempTableStoresHolder {
-    private BufferManager buffer;
-    private Map tempTableStores = new HashMap();
-
-    public TempTableStoresHolder(BufferManager buffer) {
-        this.buffer = buffer;
-    }
-    
-    public synchronized TempTableStore getTempTableStore(String sessionID) {
-        TempTableStore tempTableStore = (TempTableStore)tempTableStores.get(sessionID);
-        if(tempTableStore == null) {
-            tempTableStore = new TempTableStoreImpl(buffer, sessionID, null);
-            tempTableStores.put(sessionID, tempTableStore);
-        }
-        return tempTableStore;
-    }
-}

Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/proc/TestProcedureProcessor.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -2690,7 +2690,7 @@
         helpTestProcess(plan, expected, dataMgr);
     }
     
-    @Test public void testTempSubqueryInput() throws Exception {
+    @Test public void testUpdateDeleteTemp() throws Exception {
         String proc = "CREATE VIRTUAL PROCEDURE " + //$NON-NLS-1$
         		"BEGIN " + //$NON-NLS-1$
                 " select e1, e2, e3, e4 into #t1 from pm1.g1;\n" + //$NON-NLS-1$
@@ -2710,5 +2710,24 @@
         helpTestProcess(plan, expected, dataMgr);
     }
     
+    @Test public void testTempSubqueryInput() throws Exception {
+        String proc = "CREATE VIRTUAL PROCEDURE " + //$NON-NLS-1$
+        		"BEGIN " + //$NON-NLS-1$
+        		" create local temporary table t1 (e1 string);\n" + //$NON-NLS-1$
+                " select e1 into t1 from pm1.g1;\n" + //$NON-NLS-1$
+                " select e2 from (exec pm1.sq2((select max(e1) from t1))) x;\n" + //$NON-NLS-1$
+        		"END"; //$NON-NLS-1$
+
+        FakeMetadataFacade metadata = createProcedureMetadata(proc);
+        String userQuery = "SELECT * FROM (EXEC pm1.sq1()) as proc"; //$NON-NLS-1$
+        FakeDataManager dataMgr = exampleDataManager2(metadata);
+        ProcessorPlan plan = getProcedurePlan(userQuery, metadata, TestOptimizer.getGenericFinder());
+
+        List[] expected = new List[] {
+                Arrays.asList( 51 ),
+        };
+        helpTestProcess(plan, expected, dataMgr);
+    }
+    
     private static final boolean DEBUG = false;
 }

Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCoreRequestHandling.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCoreRequestHandling.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCoreRequestHandling.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -26,15 +26,10 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.mockito.Mockito;
-import org.teiid.connector.xa.api.TransactionContext;
-import org.teiid.dqp.internal.process.DQPCore;
-import org.teiid.dqp.internal.process.DQPWorkContext;
-import org.teiid.dqp.internal.process.DataTierTupleSource;
-import org.teiid.dqp.internal.process.RequestWorkItem;
-
 import junit.framework.TestCase;
 
+import org.teiid.dqp.internal.process.DQPCore.ClientState;
+
 import com.metamatrix.api.exception.MetaMatrixException;
 import com.metamatrix.dqp.exception.SourceWarning;
 import com.metamatrix.dqp.internal.datamgr.ConnectorID;
@@ -91,7 +86,7 @@
 	private RequestID addRequest(DQPCore rm, String sessionId, int executionId) {
 		RequestMessage r0 = new RequestMessage("test command"); //$NON-NLS-1$
         RequestID id = new RequestID(sessionId, executionId);
-        addRequest(rm, r0, id, null, null);  //$NON-NLS-1$
+        addRequest(rm, r0, id, null, null);  
 		return id;
 	}
 
@@ -118,7 +113,7 @@
         DQPCore rm = new DQPCore();
         RequestMessage r0 = new RequestMessage("foo"); //$NON-NLS-1$
         RequestID requestID = new RequestID(SESSION_STRING, 1);
-        RequestWorkItem workItem = addRequest(rm, r0, requestID, null, null);  //$NON-NLS-1$
+        RequestWorkItem workItem = addRequest(rm, r0, requestID, null, null);  
         assertTrue(workItem.resultsCursor.resultsRequested);
     }
     
@@ -127,7 +122,7 @@
         RequestMessage r0 = new RequestMessage("foo"); //$NON-NLS-1$
         RequestID requestID = new RequestID(SESSION_STRING, 1);
 
-        RequestWorkItem workItem = addRequest(rm, r0, requestID, null, null);  //$NON-NLS-1$
+        RequestWorkItem workItem = addRequest(rm, r0, requestID, null, null);
                 
         workItem.addSourceFailureDetails(getSourceFailures("Model1", "Binding1", "Warning1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         workItem.addSourceFailureDetails(getSourceFailures("Model2", "Binding2", "Warning2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -148,7 +143,8 @@
     	}
         RequestWorkItem workItem = new RequestWorkItem(rm, requestMsg, null, null, id, workContext);
         workItem.setOriginalCommand(originalCommand);
-        rm.addRequest(id, workItem);
+        ClientState state = rm.getClientState(id.getConnectionID(), true);
+        rm.addRequest(id, workItem, state);
         return workItem;
     }
     

Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -82,7 +82,7 @@
         ApplicationEnvironment env = new ApplicationEnvironment();
         FakeVDBService vdbService = new FakeVDBService();
         env.bindService(DQPServiceNames.VDB_SERVICE, vdbService);
-        MetaDataProcessor mdProc = new MetaDataProcessor(mdSvc, requestMgr, prepPlanCache, env, null);
+        MetaDataProcessor mdProc = new MetaDataProcessor(mdSvc, requestMgr, prepPlanCache, env);
                      
         return mdProc.processMessage(requestID, workContext, null, true).getColumnMetadata();    
     }
@@ -151,7 +151,7 @@
         // Initialize components
         ApplicationEnvironment env = new ApplicationEnvironment();
         env.bindService(DQPServiceNames.VDB_SERVICE, vdbService);
-        MetaDataProcessor mdProc = new MetaDataProcessor(mdSvc, new DQPCore(), prepPlanCache, env, null);
+        MetaDataProcessor mdProc = new MetaDataProcessor(mdSvc, new DQPCore(), prepPlanCache, env);
                      
         DQPWorkContext workContext = new DQPWorkContext();
         workContext.setVdbName("MyVDB"); //$NON-NLS-1$
@@ -195,7 +195,7 @@
         while(iter.hasNext()) {
             String type = (String) iter.next();
             Class typeClass = DataTypeManager.getDataTypeClass(type);
-            MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null, null);
+            MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null);
             Map columnMetadata = processor.getDefaultColumn("vdb", "1", "t", "c", typeClass); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
             verifyColumn(columnMetadata, type);            
         }               

Modified: trunk/runtime/src/main/java/com/metamatrix/platform/security/session/service/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/com/metamatrix/platform/security/session/service/SessionServiceImpl.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/runtime/src/main/java/com/metamatrix/platform/security/session/service/SessionServiceImpl.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -39,7 +39,6 @@
 import com.metamatrix.admin.api.exception.security.InvalidSessionException;
 import com.metamatrix.admin.api.exception.security.MetaMatrixSecurityException;
 import com.metamatrix.api.exception.MetaMatrixComponentException;
-import com.metamatrix.api.exception.security.AuthorizationException;
 import com.metamatrix.api.exception.security.MetaMatrixAuthenticationException;
 import com.metamatrix.api.exception.security.SessionServiceException;
 import com.metamatrix.common.api.MMURL;

Modified: trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestResultsMetadataWithProvider.java
===================================================================
--- trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestResultsMetadataWithProvider.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestResultsMetadataWithProvider.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -42,7 +42,7 @@
     }
 
     public StaticMetadataProvider exampleProvider() throws Exception {
-        MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null, null);
+        MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null);
         Map col1 = processor.getDefaultColumn("vdb", "1", "table", "col1", String.class); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
         Map col2 = processor.getDefaultColumn("vdb", "1", "table", "col2", Integer.class); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
         

Modified: trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestStaticMetadataProvider.java
===================================================================
--- trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestStaticMetadataProvider.java	2009-09-28 17:09:14 UTC (rev 1486)
+++ trunk/test-integration/common/src/test/java/com/metamatrix/jdbc/TestStaticMetadataProvider.java	2009-09-28 21:07:51 UTC (rev 1487)
@@ -44,7 +44,7 @@
     }
 
     private StaticMetadataProvider example1() throws Exception {
-        MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null, null);
+        MetaDataProcessor processor = new MetaDataProcessor(null, null, null, null);
         Map[] columnMetadata = new Map[] { 
             processor.getDefaultColumn("vdb", "1", "table", "c1", String.class), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
             processor.getDefaultColumn("vdb", "1", "table", "c2", Integer.class) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$



More information about the teiid-commits mailing list