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$