[teiid-commits] teiid SVN: r3136 - in trunk: engine/src/main/java/org/teiid/dqp/internal/process and 13 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon May 2 22:38:01 EDT 2011


Author: shawkins
Date: 2011-05-02 22:38:00 -0400 (Mon, 02 May 2011)
New Revision: 3136

Added:
   trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
Modified:
   trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
   trunk/api/src/main/java/org/teiid/metadata/Procedure.java
   trunk/api/src/main/java/org/teiid/metadata/Table.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java
   trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
   trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java
   trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java
   trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java
   trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
   trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
   trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
   trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
   trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
   trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java
   trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java
   trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java
   trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java
   trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
   trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java
   trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java
   trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java
   trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
   trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java
Log:
TEIID-1507 more general collection of groups/procedures used during planning and execution.

Modified: trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/AbstractMetadataRecord.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,6 +37,14 @@
  */
 public abstract class AbstractMetadataRecord implements Serializable {
 	
+	public interface Modifiable {
+		long getLastModified();
+	}
+	
+	public interface DataModifiable {
+		long getLastDataModification();
+	}
+	
 	private static final long serialVersionUID = 564092984812414058L;
 
 	public final static char NAME_DELIM_CHAR = '.';

Modified: trunk/api/src/main/java/org/teiid/metadata/Procedure.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Procedure.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/Procedure.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -25,11 +25,13 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
 
+
 /**
  * ProcedureRecordImpl
  */
-public class Procedure extends AbstractMetadataRecord {
+public class Procedure extends AbstractMetadataRecord implements Modifiable {
     
 	private static final long serialVersionUID = 7714869437683360834L;
 

Modified: trunk/api/src/main/java/org/teiid/metadata/Table.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Table.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/api/src/main/java/org/teiid/metadata/Table.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -27,8 +27,10 @@
 import java.util.List;
 
 import org.teiid.core.types.DataTypeManager;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
 
-public class Table extends ColumnSet<Schema> {
+public class Table extends ColumnSet<Schema> implements Modifiable, DataModifiable {
 
 	private static final long serialVersionUID = 4891356771125218672L;
 

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/AccessInfo.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -35,13 +35,12 @@
 import org.teiid.api.exception.query.QueryValidatorException;
 import org.teiid.core.TeiidComponentException;
 import org.teiid.metadata.AbstractMetadataRecord;
-import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
+import org.teiid.metadata.Schema;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
 import org.teiid.query.metadata.TempMetadataID;
 import org.teiid.query.metadata.TransformationMetadata;
 import org.teiid.query.optimizer.relational.RelationalPlanner;
-import org.teiid.query.processor.ProcessorPlan;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.tempdata.TempTableStore;
 import org.teiid.query.util.CommandContext;
 
@@ -52,20 +51,14 @@
 	
 	private static final long serialVersionUID = -2608267960584191359L;
 	
-	private transient Set<Table> viewsAccessed;
-	private transient Set<Procedure> proceduresAccessed;
-	private transient Set<Object> tablesAccessed;
+	private transient Set<Object> objectsAccessed;
 	
-	private List<List<String>> externalTableNames;
-	private List<List<String>> externalViewNames;
-	private List<List<String>> externalProcedureNames;
+	private List<List<String>> externalNames;
 	
 	private transient long creationTime = System.currentTimeMillis();
 	
 	private void writeObject(java.io.ObjectOutputStream out)  throws IOException {
-		externalTableNames = initExternalList(externalTableNames, tablesAccessed);
-		externalViewNames = initExternalList(externalViewNames, viewsAccessed);
-		externalProcedureNames = initExternalList(externalProcedureNames, proceduresAccessed);
+		externalNames = initExternalList(externalNames, objectsAccessed);
 		out.defaultWriteObject();
 	}
 	
@@ -74,7 +67,7 @@
 		this.creationTime = System.currentTimeMillis();
 	}
 	
-	private List<List<String>> initExternalList(List<List<String>> externalNames, Set<? extends Object> accessed) {
+	private static List<List<String>> initExternalList(List<List<String>> externalNames, Set<? extends Object> accessed) {
 		if (externalNames == null) {
 			externalNames = new ArrayList<List<String>>(accessed.size());
 			for (Object object : accessed) {
@@ -90,63 +83,44 @@
 		return externalNames;
 	}
 	
-	public Set<Procedure> getProceduresAccessed() {
-		return proceduresAccessed;
+	public Set<Object> getObjectsAccessed() {
+		return objectsAccessed;
 	}
-
-	public Set<Table> getViewsAccessed() {
-		return viewsAccessed;
-	}
 	
-	public Set<Object> getTablesAccessed() {
-		return tablesAccessed;
-	}
-	
 	public long getCreationTime() {
 		return creationTime;
 	}
 	
-	void populate(ProcessorPlan plan, CommandContext context) {
-		List<GroupSymbol> groups = new ArrayList<GroupSymbol>();
-		plan.getAccessedGroups(groups);
-		if (!groups.isEmpty()) {
-			tablesAccessed = new HashSet<Object>();
-			for (GroupSymbol groupSymbol : groups) {
-				tablesAccessed.add(groupSymbol.getMetadataID());
-			}	
+	void populate(CommandContext context, boolean data) {
+		Set<Object> objects = null;
+		if (data) {
+			objects = context.getDataObjects();
 		} else {
-			tablesAccessed = Collections.emptySet();
+			objects = context.getPlanningObjects();
 		}
-		if (!context.getViewsAccessed().isEmpty()) {
-			this.viewsAccessed = new HashSet<Table>(context.getViewsAccessed());
+		if (objects == null || objects.isEmpty()) {
+			this.objectsAccessed = Collections.emptySet(); 
 		} else {
-			this.viewsAccessed = Collections.emptySet();
+			this.objectsAccessed = objects;
 		}
-		if (!context.getProceduresAccessed().isEmpty()) {
-			this.proceduresAccessed = new HashSet<Procedure>(context.getProceduresAccessed());
-		} else {
-			this.proceduresAccessed = Collections.emptySet();
-		}
 	}
 	
+	/**
+	 * Restore reconnects to the live metadata objects
+	 * @throws QueryResolverException
+	 * @throws QueryValidatorException
+	 * @throws TeiidComponentException
+	 */
 	void restore() throws QueryResolverException, QueryValidatorException, TeiidComponentException {
-		if (this.viewsAccessed != null) {
+		if (this.objectsAccessed != null) {
 			return;
 		}
 		VDBMetaData vdb = DQPWorkContext.getWorkContext().getVDB();
 		TransformationMetadata tm = vdb.getAttachment(TransformationMetadata.class);
 		TempTableStore globalStore = vdb.getAttachment(TempTableStore.class);
-		if (!externalViewNames.isEmpty()) {
-			this.viewsAccessed = new HashSet<Table>();
-			for (List<String> key : this.externalViewNames) {
-				this.viewsAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getTables().get(key.get(1).toUpperCase()));
-			}
-		} else {
-			this.viewsAccessed = Collections.emptySet();
-		}
-		this.externalViewNames = null;
-		if (!externalTableNames.isEmpty()) {
-			for (List<String> key : this.externalTableNames) {
+		if (!externalNames.isEmpty()) {
+			this.objectsAccessed = new HashSet<Object>(externalNames.size());
+			for (List<String> key : this.externalNames) {
 				if (key.size() == 1) {
 					String matTableName = key.get(0);
 					TempMetadataID id = globalStore.getMetadataStore().getTempGroupID(matTableName);
@@ -155,54 +129,37 @@
 						String viewFullName = matTableName.substring(RelationalPlanner.MAT_PREFIX.length());
 						id = globalStore.getGlobalTempTableMetadataId(tm.getGroupID(viewFullName), tm);
 					}
-					this.tablesAccessed.add(id);
+					this.objectsAccessed.add(id);
 				} else {
-					this.tablesAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getTables().get(key.get(1).toUpperCase()));
+					Schema s = tm.getMetadataStore().getSchema(key.get(0).toUpperCase());
+					Modifiable m = s.getTables().get(key.get(1).toUpperCase());
+					if (m == null) {
+						m = s.getProcedures().get(key.get(1).toUpperCase());
+					}
+					if (m != null) {
+						this.objectsAccessed.add(m);
+					}
 				}
 			}
 		} else {
-			this.tablesAccessed = Collections.emptySet();
+			this.objectsAccessed = Collections.emptySet();
 		}
-		this.externalTableNames = null;
-		if (!externalProcedureNames.isEmpty()) {
-			for (List<String> key : this.externalProcedureNames) {
-				this.proceduresAccessed.add(tm.getMetadataStore().getSchema(key.get(0).toUpperCase()).getProcedures().get(key.get(1).toUpperCase()));
-			}
-		} else {
-			this.proceduresAccessed = Collections.emptySet();
-		}
-		this.externalProcedureNames = null;
+		this.externalNames = null;
 	}
 	
 	boolean validate(boolean data, long modTime) {
-		if (this.tablesAccessed == null || modTime < 0) {
+		if (this.objectsAccessed == null || modTime < 0) {
 			return true;
 		}
-		if (!data) {
-			for (Table t : getViewsAccessed()) {
-				if (t.getLastModified() - modTime > this.creationTime) {
+		for (Object o : this.objectsAccessed) {
+			if (!data) {
+				if (o instanceof Modifiable && ((Modifiable)o).getLastModified() - modTime > this.creationTime) {
 					return false;
 				}
+			} else if (o instanceof DataModifiable && ((DataModifiable)o).getLastDataModification() - modTime > this.creationTime) {
+				return false;
 			}
-			for (Procedure p : getProceduresAccessed()) {
-				if (p.getLastModified() - modTime > this.creationTime) {
-					return false;
-				}
-			}
 		}
-		for (Object o : getTablesAccessed()) {
-			if (o instanceof Table) {
-				Table t = (Table)o;
-				if ((data?t.getLastDataModification():t.getLastModified()) - modTime > this.creationTime) {
-					return false;
-				}
-			} else if (o instanceof TempMetadataID) {
-				TempMetadataID tid = (TempMetadataID)o;
-				if ((data?tid.getTableData().getLastDataModification():tid.getTableData().getLastModified()) - modTime > this.creationTime) {
-					return false;
-				}
-			}
-		}
 		return true;
 	}
 	

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/CachedResults.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -92,7 +92,7 @@
 		this.rowCount = results.getRowCount();
 		this.uuid = results.getId();
 		this.hasLobs = results.isLobs();
-		this.accessInfo.populate(plan, plan.getContext());
+		this.accessInfo.populate(plan.getContext(), true);
 	}
 	
 	public void setCommand(Command command) {

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -85,6 +85,7 @@
 import org.teiid.query.sql.lang.UnaryFromClause;
 import org.teiid.query.sql.symbol.Constant;
 import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.visitor.GroupCollectorVisitor;
 import org.teiid.query.tempdata.TempTableStore;
 import org.teiid.query.tempdata.TempTableStore.MatTableInfo;
 import org.teiid.query.util.CommandContext;
@@ -170,6 +171,11 @@
 		if (limit > 0) {
 			aqr.setFetchSize(Math.min(limit, aqr.getFetchSize()));
 		}
+		if (context.getDataObjects() != null) {
+			for (GroupSymbol gs : GroupCollectorVisitor.getGroupsIgnoreInlineViews(command, false)) {
+				context.accessedDataObject(gs.getMetadataID());
+			}
+		}
 		ConnectorManagerRepository cmr = workItem.getDqpWorkContext().getVDB().getAttachment(ConnectorManagerRepository.class);
 		ConnectorWork work = cmr.getConnectorManager(aqr.getConnectorName()).registerRequest(aqr);
         return new DataTierTupleSource(aqr, workItem, work, this, limit);

Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/PreparedPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -76,7 +76,7 @@
 	 */
 	public void setPlan(ProcessorPlan planValue, CommandContext context){
 		plan = planValue;
-		this.accessInfo.populate(planValue, context);
+		this.accessInfo.populate(context, 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	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -25,6 +25,7 @@
 import java.sql.ResultSet;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -425,6 +426,8 @@
 		originalCommand = request.userCommand;
         if (cachable && (requestMsg.useResultSetCache() || originalCommand.getCacheHint() != null) && rsCache != null && originalCommand.areResultsCachable()) {
         	this.cid = cacheId;
+        	//turn on the collection of data objects used
+        	request.processor.getContext().setDataObjects(new HashSet<Object>(4));
         }
 		processor = request.processor;
 		collector = new BatchCollector(processor, processor.getBufferManager(), this.request.context, isForwardOnly()) {

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadata.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -508,5 +508,10 @@
 			QueryMetadataException {
 		return null;
 	}
+	
+	@Override
+	public QueryMetadataInterface getSessionMetadata() {
+		return null;
+	}
     
 }

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/BasicQueryMetadataWrapper.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -382,5 +382,10 @@
 			QueryMetadataException {
 		return actualMetadata.getName(metadataID);
 	}
+	
+	@Override
+	public QueryMetadataInterface getSessionMetadata() {
+		return actualMetadata.getSessionMetadata();
+	}
 
 }

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/QueryMetadataInterface.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -677,4 +677,6 @@
 	 * @throws TeiidComponentException
 	 */
 	boolean hasProcedure(String name) throws TeiidComponentException;
+
+	QueryMetadataInterface getSessionMetadata();
 }

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -80,6 +80,15 @@
 		this.session = session;
 	}
     
+    public QueryMetadataInterface getSessionMetadata() {
+    	if (isSession()) {
+    		TempMetadataAdapter tma = new TempMetadataAdapter(new BasicQueryMetadata(), this.tempStore);
+    		tma.session = true;
+    		return tma;
+    	}
+    	return this.actualMetadata.getSessionMetadata();
+    }
+    
     public QueryMetadataInterface getDesignTimeMetadata() {
     	if (isSession()) {
     		return this.actualMetadata.getDesignTimeMetadata();

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -29,6 +29,8 @@
 import java.util.List;
 
 import org.teiid.core.util.LRUCache;
+import org.teiid.metadata.AbstractMetadataRecord.DataModifiable;
+import org.teiid.metadata.AbstractMetadataRecord.Modifiable;
 import org.teiid.query.mapping.relational.QueryNode;
 import org.teiid.query.sql.lang.CacheHint;
 import org.teiid.query.sql.symbol.SingleElementSymbol;
@@ -42,7 +44,7 @@
  * TODO: we should be using the real metadata objects, but internal and
  * designer legacy keep us on the temp framework
  */
-public class TempMetadataID implements Serializable {
+public class TempMetadataID implements Serializable, Modifiable, DataModifiable {
     
 	private static final long serialVersionUID = -1879211827339120135L;
 	private static final int LOCAL_CACHE_SIZE = 8;
@@ -156,6 +158,16 @@
         this.type = type;
         this.originalMetadataID = metadataID;
     }
+    
+    @Override
+    public long getLastDataModification() {
+    	return getTableData().getLastDataModification();
+    }
+    
+    @Override
+    public long getLastModified() {
+    	return getTableData().getLastModified();
+    }
 
     /**
      * Get ID value 

Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/QueryOptimizer.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,7 +37,6 @@
 import org.teiid.core.id.IntegerIDFactory;
 import org.teiid.dqp.internal.process.PreparedPlan;
 import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
 import org.teiid.metadata.FunctionMethod.Determinism;
 import org.teiid.query.analysis.AnalysisRecord;
 import org.teiid.query.metadata.QueryMetadataInterface;
@@ -130,7 +129,7 @@
 					ProcessorPlan plan = planProcedure(command, metadata, idGenerator, capFinder, analysisRecord, clone);
 					//note that this is not a full prepared plan.  It is not usable by user queries.
 					if (pid instanceof Procedure) {
-						clone.accessedProcedure((Procedure)pid);
+						clone.accessedPlanningObject(pid);
 					}
 					pp = new PreparedPlan();
 					pp.setPlan(plan, clone);
@@ -138,12 +137,9 @@
 					context.setDeterminismLevel(determinismLevel);
 				}
 				result = pp.getPlan().clone();
-				for (Table t : pp.getAccessInfo().getViewsAccessed()) {
-					context.accessedView(t);
+				for (Object id : pp.getAccessInfo().getObjectsAccessed()) {
+					context.accessedPlanningObject(id);
 				}
-				for (Procedure p : pp.getAccessInfo().getProceduresAccessed()) {
-					context.accessedProcedure(p);
-				}
 			}
 	        // propagate procedure parameters to the plan to allow runtime type checking
 	        ProcedureContainer container = (ProcedureContainer)cupc.getUserCommand();

Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -42,7 +42,6 @@
 import org.teiid.dqp.internal.process.Request;
 import org.teiid.language.SQLConstants;
 import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.analysis.AnalysisRecord;
 import org.teiid.query.mapping.relational.QueryNode;
@@ -96,6 +95,7 @@
 import org.teiid.query.sql.lang.SubqueryContainer;
 import org.teiid.query.sql.lang.SubqueryFromClause;
 import org.teiid.query.sql.lang.TableFunctionReference;
+import org.teiid.query.sql.lang.TargetedCommand;
 import org.teiid.query.sql.lang.TranslatableProcedureContainer;
 import org.teiid.query.sql.lang.UnaryFromClause;
 import org.teiid.query.sql.lang.Update;
@@ -114,7 +114,6 @@
 import org.teiid.query.sql.util.SymbolMap;
 import org.teiid.query.sql.visitor.AggregateSymbolCollectorVisitor;
 import org.teiid.query.sql.visitor.CorrelatedReferenceCollectorVisitor;
-import org.teiid.query.sql.visitor.GroupCollectorVisitor;
 import org.teiid.query.sql.visitor.GroupsUsedByElementsVisitor;
 import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
 import org.teiid.query.util.CommandContext;
@@ -522,9 +521,6 @@
         // Create top project node - define output columns for stored query / procedure
         PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);
 
-        Collection<GroupSymbol> groups = GroupCollectorVisitor.getGroups(command, false);
-        projectNode.addGroups(groups);
-
         // Set output columns
         List<SingleElementSymbol> cols = command.getProjectedSymbols();
         projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, cols);
@@ -538,8 +534,12 @@
         	ProcedureContainer container = (ProcedureContainer)command;
         	usingTriggerAction = addNestedProcedure(sourceNode, container, container.getGroup().getMetadataID());
         }
-        sourceNode.addGroups(groups);
-
+        GroupSymbol target = ((TargetedCommand)command).getGroup();
+        sourceNode.addGroup(target);
+    	Object id = getTrackableGroup(target, metadata);
+    	if (id != null) {
+    		context.accessedPlanningObject(id);
+    	}
         attachLast(projectNode, sourceNode);
 
         //for INTO query, attach source and project nodes
@@ -559,6 +559,12 @@
 	private boolean addNestedProcedure(PlanNode sourceNode,
 			ProcedureContainer container, Object metadataId) throws TeiidComponentException,
 			QueryMetadataException, TeiidProcessingException {
+		if (container instanceof StoredProcedure) {
+			StoredProcedure sp = (StoredProcedure)container;
+			if (sp.getProcedureID() instanceof Procedure) {
+				context.accessedPlanningObject(sp.getProcedureID());
+			}
+		}
 		String cacheString = "transformation/" + container.getClass().getSimpleName().toUpperCase(); //$NON-NLS-1$
 		Command c = (Command)metadata.getFromMetadataCache(metadataId, cacheString);
 		if (c == null) {
@@ -599,12 +605,6 @@
 			//skip the rewrite here, we'll do that in the optimizer
 			//so that we know what the determinism level is.
 			addNestedCommand(sourceNode, container.getGroup(), container, c, false);
-			if (container instanceof StoredProcedure) {
-				StoredProcedure sp = (StoredProcedure)container;
-				if (sp.getProcedureID() instanceof Procedure) {
-					context.accessedProcedure((Procedure)sp.getProcedureID());
-				}
-			}
 		} else if (!container.getGroup().isTempTable() && //we hope for the best, and do a specific validation for subqueries below
 				container instanceof TranslatableProcedureContainer //we force the evaluation of procedure params - TODO: inserts are fine except for nonpushdown functions on columns
 				&& !CriteriaCapabilityValidatorVisitor.canPushLanguageObject(container, metadata.getModelID(container.getGroup().getMetadataID()), metadata, capFinder, analysisRecord)) {
@@ -790,11 +790,14 @@
             	hints.hasVirtualGroups = true;
             }
             Command nestedCommand = ufc.getExpandedCommand();
-            if (nestedCommand == null && !group.isTempGroupSymbol() && !group.isProcedure() 
-            		&& (!(group.getMetadataID() instanceof TempMetadataID) || metadata.getVirtualPlan(group.getMetadataID()) != null)
-        	        && (metadata.isVirtualGroup(group.getMetadataID()))) { 
-            	//must be a view layer
-            	nestedCommand = resolveVirtualGroup(group);
+            if (nestedCommand == null && !group.isProcedure()) {
+            	Object id = getTrackableGroup(group, metadata);
+            	if (id != null) {
+            		context.accessedPlanningObject(id);
+            	}
+            	if (!group.isTempGroupSymbol() && metadata.isVirtualGroup(group.getMetadataID())) { 
+    				nestedCommand = resolveVirtualGroup(group);
+        		}
             }
             node = NodeFactory.getNewNode(NodeConstants.Types.SOURCE);
             if (group.getModelMetadataId() != null) {
@@ -875,6 +878,24 @@
         }
     }
 
+	public static Object getTrackableGroup(GroupSymbol group, QueryMetadataInterface metadata)
+			throws TeiidComponentException, QueryMetadataException {
+		if (group.isTempGroupSymbol()) {
+			QueryMetadataInterface qmi = metadata.getSessionMetadata();
+			try {
+				//exclude proc scoped temp tables
+				if (group.isGlobalTable() || (qmi != null && qmi.getGroupID(group.getNonCorrelationName()) == group.getMetadataID())) {
+					return group.getMetadataID();
+				}
+			} catch (QueryMetadataException e) {
+				//not a session table
+			}
+		} else {
+			return group.getMetadataID();
+		}
+		return null;
+	}
+
 	private SymbolMap getCorrelatedReferences(PlanNode parent, PlanNode node,
 			LanguageObject lo) {
 		PlanNode rootJoin = parent;
@@ -1111,6 +1132,7 @@
         		//TODO: update the table for defaultMat
         		recordAnnotation(analysisRecord, Annotation.MATERIALIZED_VIEW, Priority.LOW, "SimpleQueryResolver.materialized_table_not_used", virtualGroup, matTableName); //$NON-NLS-1$
         	}else{
+            	this.context.accessedPlanningObject(matMetadataId);
         		qnode = new QueryNode(null);
         		Query query = createMatViewQuery(matMetadataId, matTableName, Arrays.asList(new AllSymbol()), isImplicitGlobal);
         		query.setCacheHint(hint);
@@ -1121,9 +1143,6 @@
         } else {
             // Not a materialized view - query the primary transformation
             qnode = metadata.getVirtualPlan(metadataID); 
-            if (metadataID instanceof Table) {
-            	this.context.accessedView((Table)metadataID);
-            }
         }
 
         Command result = (Command)QueryResolver.resolveView(virtualGroup, qnode, cacheString, metadata).getCommand().clone();   

Modified: trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/BatchedUpdatePlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -33,7 +33,6 @@
 import org.teiid.core.TeiidComponentException;
 import org.teiid.core.TeiidProcessingException;
 import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.sql.util.VariableContext;
 import org.teiid.query.util.CommandContext;
 
@@ -239,11 +238,4 @@
 		return true;
     }
     
-    @Override
-    public void getAccessedGroups(List<GroupSymbol> groups) {
-        for (int i = 0; i < getPlanCount(); i++) {
-        	updatePlans[i].getAccessedGroups(groups);
-        }
-    }
-
 }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/DdlPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -48,7 +48,6 @@
 import org.teiid.query.sql.lang.AlterView;
 import org.teiid.query.sql.lang.Command;
 import org.teiid.query.sql.lang.StoredProcedure;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.util.CommandContext;
 
 public class DdlPlan extends ProcessorPlan {
@@ -226,9 +225,4 @@
         return props;
 	}
 	
-	@Override
-	public void getAccessedGroups(List<GroupSymbol> groups) {
-		
-	}
-	
 }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/ProcessorPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -37,7 +37,6 @@
 import org.teiid.core.TeiidProcessingException;
 import org.teiid.query.analysis.AnalysisRecord;
 import org.teiid.query.processor.BatchCollector.BatchProducer;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.util.CommandContext;
 
 
@@ -177,6 +176,4 @@
     	return false;
     }
     
-    public abstract void getAccessedGroups(List<GroupSymbol> groups);
-    
 }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ForEachRowPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -39,7 +39,6 @@
 import org.teiid.query.sql.lang.Command;
 import org.teiid.query.sql.symbol.ElementSymbol;
 import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.sql.symbol.SingleElementSymbol;
 import org.teiid.query.util.CommandContext;
 
@@ -163,10 +162,4 @@
 		return true;
 	}
 	
-	@Override
-	public void getAccessedGroups(List<GroupSymbol> groups) {
-		this.queryPlan.getAccessedGroups(groups);
-		this.rowProcedure.getAccessedGroups(groups);
-	}
-
 }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/proc/ProcedurePlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -65,7 +65,6 @@
 import org.teiid.query.sql.lang.Criteria;
 import org.teiid.query.sql.symbol.ElementSymbol;
 import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.sql.symbol.Reference;
 import org.teiid.query.sql.util.VariableContext;
 import org.teiid.query.tempdata.TempTableStore;
@@ -714,20 +713,4 @@
     	return requiresTransaction || transactionalReads;
     }
     
-    @Override
-    public void getAccessedGroups(List<GroupSymbol> groups) {
-    	ArrayList<ProcessorPlan> plans = new ArrayList<ProcessorPlan>();
-    	this.originalProgram.getChildPlans(plans);
-    	LinkedList<GroupSymbol> tempGroups = new LinkedList<GroupSymbol>();
-    	for (ProcessorPlan processorPlan : plans) {
-			processorPlan.getAccessedGroups(tempGroups);
-		}
-    	for (GroupSymbol groupSymbol : tempGroups) {
-			if (groupSymbol.isTempTable() && !groupSymbol.isGlobalTable()) {
-				continue;
-			}
-			groups.add(groupSymbol);
-		}
-    }
-    
 }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/RelationalPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -41,13 +41,10 @@
 import org.teiid.query.processor.QueryProcessor;
 import org.teiid.query.processor.relational.ProjectIntoNode.Mode;
 import org.teiid.query.sql.LanguageObject;
-import org.teiid.query.sql.lang.Command;
 import org.teiid.query.sql.lang.Create;
 import org.teiid.query.sql.lang.Insert;
 import org.teiid.query.sql.lang.QueryCommand;
 import org.teiid.query.sql.lang.WithQueryCommand;
-import org.teiid.query.sql.symbol.GroupSymbol;
-import org.teiid.query.sql.visitor.GroupCollectorVisitor;
 import org.teiid.query.tempdata.TempTableStore;
 import org.teiid.query.util.CommandContext;
 
@@ -291,29 +288,6 @@
     }
     
     @Override
-    public void getAccessedGroups(List<GroupSymbol> groups) {
-    	getAccessedGroups(groups, this.root);
-    }
-    
-    void getAccessedGroups(List<GroupSymbol> groups, RelationalNode node) {
-    	if (node instanceof AccessNode) {
-    		Command c = ((AccessNode)node).getCommand();
-    		if (c instanceof QueryCommand) {
-    			QueryCommand qc = (QueryCommand)c;
-    			groups.addAll(GroupCollectorVisitor.getGroupsIgnoreInlineViews(qc, true));
-    		}
-		} else if (node instanceof PlanExecutionNode) {
-			PlanExecutionNode pen = (PlanExecutionNode)node;
-			pen.getProcessorPlan().getAccessedGroups(groups);
-		}
-		for (RelationalNode child : node.getChildren()) {
-			if (child != null) {
-				getAccessedGroups(groups, child);
-			}
-		}
-    }
-    
-    @Override
     public TupleBuffer getFinalBuffer() throws BlockedException, TeiidComponentException, TeiidProcessingException {
     	return root.getFinalBuffer();
     }

Modified: trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/processor/xml/XMLPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -479,8 +479,4 @@
         return this.originalProgram;
     }
     
-    @Override
-    public void getAccessedGroups(List<GroupSymbol> groups) {
-    	//TODO: add support
-    }
 }
\ No newline at end of file

Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Create.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -39,7 +39,7 @@
 /** 
  * @since 5.5
  */
-public class Create extends Command {
+public class Create extends Command implements TargetedCommand {
     /** Identifies the table to be created. */
     private GroupSymbol table;
     private List<ElementSymbol> primaryKey = new ArrayList<ElementSymbol>();
@@ -49,6 +49,11 @@
     public GroupSymbol getTable() {
         return table;
     }
+    
+    @Override
+    public GroupSymbol getGroup() {
+    	return table;
+    }
 
     public void setTable(GroupSymbol table) {
         this.table = table;

Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Drop.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -24,10 +24,8 @@
 
 import java.util.List;
 
-import org.teiid.core.TeiidComponentException;
 import org.teiid.core.util.EquivalenceUtil;
 import org.teiid.core.util.HashCodeUtil;
-import org.teiid.query.metadata.QueryMetadataInterface;
 import org.teiid.query.sql.LanguageVisitor;
 import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.sql.visitor.SQLStringVisitor;
@@ -37,13 +35,18 @@
 /** 
  * @since 5.5
  */
-public class Drop extends Command {
+public class Drop extends Command implements TargetedCommand {
     /** Identifies the table to be dropped. */
     private GroupSymbol table;
     
     public GroupSymbol getTable() {
         return table;
     }
+    
+    @Override
+    public GroupSymbol getGroup() {
+    	return table;
+    }
 
     public void setTable(GroupSymbol table) {
         this.table = table;

Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/ProcedureContainer.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -26,17 +26,14 @@
 
 import org.teiid.query.sql.symbol.ElementSymbol;
 import org.teiid.query.sql.symbol.Expression;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.validator.UpdateValidator.UpdateInfo;
 
 
-public abstract class ProcedureContainer extends Command {
+public abstract class ProcedureContainer extends Command implements TargetedCommand {
 
     private int updateCount = -1;
     private UpdateInfo updateInfo;
     
-    public abstract GroupSymbol getGroup();
-    
     protected void copyMetadataState(ProcedureContainer copy) {
         super.copyMetadataState(copy);
         copy.setUpdateInfo(this.getUpdateInfo());

Added: trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java	                        (rev 0)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -0,0 +1,30 @@
+/*
+ * 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.query.sql.lang;
+
+import org.teiid.query.sql.symbol.GroupSymbol;
+
+public interface TargetedCommand {
+
+	GroupSymbol getGroup();
+}


Property changes on: trunk/engine/src/main/java/org/teiid/query/sql/lang/TargetedCommand.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/tempdata/TempTableDataManager.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -286,6 +286,7 @@
 		Determinism determinismLevel = context.resetDeterminismLevel();
 		QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(proc.toString(), fullName.toUpperCase(), context);
 		qp.setNonBlocking(true);
+		qp.getContext().setDataObjects(null);
 		BatchCollector bc = qp.createBatchCollector();
 		TupleBuffer tb = bc.collectTuples();
 		CachedResults cr = new CachedResults();
@@ -352,6 +353,7 @@
 				metadata.getFullName(ids.iterator().next()) + " = ?" + ' ' + Reserved.OPTION + ' ' + Reserved.NOCACHE; //$NON-NLS-1$
 			QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(queryString, matViewName.toUpperCase(), context, key.getValue());
 			qp.setNonBlocking(true);
+			qp.getContext().setDataObjects(null);
 			TupleSource ts = new BatchCollector.BatchProducerTupleSource(qp);
 			List<?> tuple = ts.nextTuple();
 			boolean delete = false;
@@ -430,8 +432,15 @@
 				}
 			} 
 			table = globalStore.getOrCreateTempTable(tableName, query, bufferManager, false);
+			context.accessedDataObject(group.getMetadataID());
 		} else {
 			table = contextStore.getOrCreateTempTable(tableName, query, bufferManager, true);
+			if (context.getDataObjects() != null) {
+				Object id = RelationalPlanner.getTrackableGroup(group, context.getMetadata());
+				if (id != null) {
+					context.accessedDataObject(group.getMetadataID());
+				}
+			}
 		}
 		if (remapColumns) {
 			//convert to the actual table symbols (this is typically handled by the languagebridgefactory
@@ -516,7 +525,7 @@
 				String transformation = metadata.getVirtualPlan(group.getMetadataID()).getQuery();
 				QueryProcessor qp = context.getQueryProcessorFactory().createQueryProcessor(transformation, fullName, context);
 				qp.setNonBlocking(true);
-				
+				qp.getContext().setDataObjects(null);
 				if (distributedCache != null) {
 					CachedResults cr = new CachedResults();
 					BatchCollector bc = qp.createBatchCollector();

Modified: trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/main/java/org/teiid/query/util/CommandContext.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -40,8 +40,6 @@
 import org.teiid.dqp.internal.process.PreparedPlan;
 import org.teiid.dqp.internal.process.SessionAwareCache;
 import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
-import org.teiid.metadata.Procedure;
-import org.teiid.metadata.Table;
 import org.teiid.metadata.FunctionMethod.Determinism;
 import org.teiid.query.QueryPlugin;
 import org.teiid.query.eval.SecurityFunctionEvaluator;
@@ -118,6 +116,7 @@
 	    
 	    private int userRequestSourceConcurrency;
 	    private Subject subject;
+	    private HashSet<Object> dataObjects;
 	}
 	
 	private GlobalState globalState = new GlobalState();
@@ -126,8 +125,8 @@
     private TempTableStore tempTableStore;
     private LinkedList<String> recursionStack;
     private boolean nonBlocking;
-    private HashSet<Table> viewsAccessed;
-    private HashSet<Procedure> proceduresAccessed;
+    private HashSet<Object> planningObjects;
+    private HashSet<Object> dataObjects = this.globalState.dataObjects;
 
     /**
      * Construct a new context.
@@ -160,6 +159,7 @@
     
     private CommandContext(GlobalState state) {
     	this.globalState = state;
+    	this.dataObjects = this.globalState.dataObjects;
     }
     
     public Determinism getDeterminismLevel() {
@@ -539,32 +539,32 @@
 		this.globalState.subject = subject;
 	}
 	
-	public void accessedView(Table id) {
-		if (this.viewsAccessed == null) {
-			this.viewsAccessed = new HashSet<Table>();
+	public void accessedPlanningObject(Object id) {
+		if (this.planningObjects == null) {
+			this.planningObjects = new HashSet<Object>();
 		}
-		this.viewsAccessed.add(id);
+		this.planningObjects.add(id);
 	}
 	
-	public Set<Table> getViewsAccessed() {
-		if (this.viewsAccessed == null) {
+	public Set<Object> getPlanningObjects() {
+		if (this.planningObjects == null) {
 			return Collections.emptySet();
 		}
-		return viewsAccessed;
+		return planningObjects;
 	}
 	
-	public void accessedProcedure(Procedure id) {
-		if (this.proceduresAccessed == null) {
-			this.proceduresAccessed = new HashSet<Procedure>();
+	public void accessedDataObject(Object id) {
+		if (this.dataObjects != null) {
+			this.dataObjects.add(id);
 		}
-		this.proceduresAccessed.add(id);
 	}
 	
-	public Set<Procedure> getProceduresAccessed() {
-		if (this.proceduresAccessed == null) {
-			return Collections.emptySet();
-		}
-		return proceduresAccessed;
+	public Set<Object> getDataObjects() {
+		return dataObjects;
 	}
 	
+	public void setDataObjects(HashSet<Object> dataObjectsAccessed) {
+		this.dataObjects = dataObjectsAccessed;
+	}
+	
 }

Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestCachedResults.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -75,7 +75,7 @@
 		ProcessorPlan plan = new FakeProcessorPlan(0);
 		CommandContext cc = new CommandContext();
 		Table t = RealMetadataFactory.exampleBQT().getGroupID("bqt1.smalla");
-		cc.accessedView(t);
+		cc.accessedDataObject(t);
 		plan.setContext(cc);
 		results.setResults(tb, plan);
 		results.setCommand(new Query());

Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRuleAccessPatternValidation.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -85,7 +85,7 @@
 		
 		//Generate canonical plan
     	RelationalPlanner p = new RelationalPlanner();
-    	p.initialize(query, null, METADATA, FINDER, null, null);
+    	p.initialize(query, null, METADATA, FINDER, null, new CommandContext());
     	PlanNode planNode = p.generatePlan(query);
     	RelationalPlanner planner = new RelationalPlanner();
 		final RuleStack rules = planner.buildRules();

Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestRulePushSelectCriteria.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -43,7 +43,6 @@
 import org.teiid.query.optimizer.relational.plantree.NodeFactory;
 import org.teiid.query.optimizer.relational.plantree.PlanNode;
 import org.teiid.query.optimizer.relational.plantree.NodeConstants.Info;
-import org.teiid.query.optimizer.relational.rules.RulePushSelectCriteria;
 import org.teiid.query.parser.QueryParser;
 import org.teiid.query.sql.lang.Command;
 import org.teiid.query.sql.symbol.ElementSymbol;
@@ -72,7 +71,8 @@
     	Command command = TestOptimizer.helpGetCommand("select * from (select * from pm1.g1 union select * from pm1.g2) x where e1 = 1", metadata, null); //$NON-NLS-1$
     	Command subCommand = TestOptimizer.helpGetCommand("select * from pm1.g1 union select * from pm1.g2", metadata, null); //$NON-NLS-1$
     	RelationalPlanner p = new RelationalPlanner();
-    	p.initialize(command, null, metadata, null, null, null);
+    	CommandContext cc = new CommandContext();
+    	p.initialize(command, null, metadata, null, null, cc);
     	PlanNode root = p.generatePlan(command);
     	PlanNode child = p.generatePlan(subCommand);
     	PlanNode sourceNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.SOURCE);
@@ -83,7 +83,7 @@
         accessNode.addGroups(child.getFirstChild().getGroups());
     	child.getFirstChild().addAsParent(accessNode);
     	
-    	new RulePushSelectCriteria().execute(root, metadata, new DefaultCapabilitiesFinder(), new RuleStack(), AnalysisRecord.createNonRecordingRecord(), new CommandContext());
+    	new RulePushSelectCriteria().execute(root, metadata, new DefaultCapabilitiesFinder(), new RuleStack(), AnalysisRecord.createNonRecordingRecord(), cc);
     	// the select node should still be above the access node
     	accessNode = NodeEditor.findNodePreOrder(root, NodeConstants.Types.ACCESS);
     	assertEquals(NodeConstants.Types.SELECT, accessNode.getParent().getType());

Modified: trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java	2011-05-02 18:34:41 UTC (rev 3135)
+++ trunk/engine/src/test/java/org/teiid/query/processor/FakeProcessorPlan.java	2011-05-03 02:38:00 UTC (rev 3136)
@@ -33,7 +33,6 @@
 import org.teiid.common.buffer.TupleBatch;
 import org.teiid.core.TeiidComponentException;
 import org.teiid.query.sql.lang.Command;
-import org.teiid.query.sql.symbol.GroupSymbol;
 import org.teiid.query.util.CommandContext;
 
 
@@ -141,8 +140,4 @@
         return this.outputElements;
     }
     
-    @Override
-    public void getAccessedGroups(List<GroupSymbol> groups) {
-    }
-
 }



More information about the teiid-commits mailing list