[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