teiid SVN: r2423 - in trunk/engine/src: main/java/org/teiid/query/optimizer/relational/rules and 10 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-06 01:08:25 -0400 (Fri, 06 Aug 2010)
New Revision: 2423
Modified:
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCopyCriteria.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushSelectCriteria.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
trunk/engine/src/main/java/org/teiid/query/processor/relational/BatchedUpdateNode.java
trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java
trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java
trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestGroupRecontext.java
trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
Log:
TEIID-536 allowing for the evaluation of uncorrelated scalarsubqueries prior to pushdown if they cannot be pushed to the source.
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataID.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -41,28 +41,35 @@
private static final int LOCAL_CACHE_SIZE = 8;
+ public enum Type {
+ VIRTUAL,
+ TEMP,
+ SCALAR
+ }
+
private String ID; // never null, upper cased fully-qualified string
- private int selectPosition = -1; //used for order by symbol resolving. refers to the position in the select clause
- private int position;
- private Class<?> type; // type of this element, only for element
+ private Type metadataType = Type.VIRTUAL;
+
+ //Table metadata
+ private Collection<TempMetadataID> accessPatterns;
private List<TempMetadataID> elements; // of TempMetadataID, only for group
- private Object originalMetadataID;
- private boolean isVirtual = true; // virtual by default
- private boolean isTempTable;
- private Collection<TempMetadataID> accessPatterns;
private int cardinality = QueryMetadataInterface.UNKNOWN_CARDINALITY;
- private LRUCache<Object, Object> localCache;
- private boolean scalarGroup;
private List<TempMetadataID> primaryKey;
private QueryNode queryNode;
+ private transient LRUCache<Object, Object> localCache;
+ //Column metadata
+ private Object originalMetadataID;
+ private int position;
+ private Class<?> type; // type of this element, only for element
+
/**
* Constructor for group form of metadata ID.
* @param ID Fully-qualified, upper-case name of ID
* @param elements List of TempMetadataID representing elements
*/
public TempMetadataID(String ID, List<TempMetadataID> elements) {
- this(ID, elements, true, false);
+ this(ID, elements, Type.VIRTUAL);
}
/**
@@ -71,15 +78,14 @@
* @param elements List of TempMetadataID representing elements
* @param isVirtual whether or not the group is a virtual group
*/
- public TempMetadataID(String ID, List<TempMetadataID> elements, boolean isVirtual, boolean isTempTable) {
+ public TempMetadataID(String ID, List<TempMetadataID> elements, Type type) {
this.ID = ID;
this.elements = elements;
int pos = 1;
for (TempMetadataID tempMetadataID : elements) {
tempMetadataID.setPosition(pos++);
}
- this.isVirtual = isVirtual;
- this.isTempTable = isTempTable;
+ this.metadataType = type;
}
/**
@@ -147,7 +153,7 @@
* @return True if virtual
*/
public boolean isVirtual() {
- return this.isVirtual;
+ return metadataType == Type.VIRTUAL;
}
/**
@@ -156,7 +162,7 @@
* @since 5.5
*/
public boolean isTempTable() {
- return this.isTempTable;
+ return this.metadataType == Type.TEMP;
}
/**
@@ -222,17 +228,13 @@
}
public void setTempTable(boolean isTempTable) {
- this.isTempTable = isTempTable;
+ if (isTempTable) {
+ this.metadataType = Type.TEMP;
+ } else {
+ this.metadataType = Type.VIRTUAL;
+ }
}
- public int getSelectPosition() {
- return this.selectPosition;
- }
-
- public void setSelectPosition(int position) {
- this.selectPosition = position;
- }
-
Object getProperty(Object key) {
if (this.localCache != null) {
return this.localCache.get(key);
@@ -248,11 +250,11 @@
}
public boolean isScalarGroup() {
- return scalarGroup;
+ return this.metadataType == Type.SCALAR;
}
- public void setScalarGroup(boolean scalarGroup) {
- this.scalarGroup = scalarGroup;
+ public void setScalarGroup() {
+ this.metadataType = Type.SCALAR;
}
public List<TempMetadataID> getPrimaryKey() {
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataStore.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -29,6 +29,7 @@
import java.util.List;
import java.util.Map;
+import org.teiid.query.metadata.TempMetadataID.Type;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.AliasSymbol;
import org.teiid.query.sql.symbol.ElementSymbol;
@@ -115,7 +116,7 @@
}
// Create group ID
- TempMetadataID groupID = new TempMetadataID(tempName, elementIDs, isVirtual, isTempTable);
+ TempMetadataID groupID = new TempMetadataID(tempName, elementIDs, isVirtual?Type.VIRTUAL:Type.TEMP);
this.tempGroups.put(tempName, groupID);
return groupID;
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -367,14 +367,14 @@
@Override
public void visit(ScalarSubquery obj) {
try {
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_SUBQUERIES_SCALAR)) {
- markInvalid();
- return;
+ if(!this.caps.supportsCapability(Capability.QUERY_SUBQUERIES_SCALAR)
+ || validateSubqueryPushdown(obj, modelID, metadata, capFinder) == null) {
+ if (obj.getCommand().getCorrelatedReferences() == null) {
+ obj.setShouldEvaluate(true);
+ } else {
+ markInvalid();
+ }
}
- if (validateSubqueryPushdown(obj, modelID, metadata, capFinder) == null) {
- markInvalid();
- }
} catch(QueryMetadataException e) {
handleException(new TeiidComponentException(e));
} catch(TeiidComponentException e) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -23,6 +23,7 @@
package org.teiid.query.optimizer.relational.rules;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -78,10 +79,22 @@
PlanNode endNode = NodeEditor.findParent(startNode.getType()==NodeConstants.Types.SOURCE?startNode.getParent():startNode, NodeConstants.Types.SOURCE);
+ boolean rewrite = false;
+ if (newGroups != null && newGroups.size() == 1) {
+ for (Expression expression : (Collection<Expression>)symbolMap.values()) {
+ if (!(expression instanceof ElementSymbol)) {
+ rewrite = true;
+ break;
+ }
+ }
+ } else {
+ rewrite = true;
+ }
+
while(current != endNode) {
// Make translations as defined in node in each current node
- convertNode(current, oldGroup, newGroups, symbolMap, metadata);
+ convertNode(current, oldGroup, newGroups, symbolMap, metadata, rewrite);
PlanNode parent = current.getParent();
@@ -162,7 +175,7 @@
// symbols. In that case, some additional work can be done because we can assume
// that an oldElement isn't being replaced by an expression using elements from
// multiple new groups.
- static void convertNode(PlanNode node, GroupSymbol oldGroup, Set<GroupSymbol> newGroups, Map symbolMap, QueryMetadataInterface metadata)
+ static void convertNode(PlanNode node, GroupSymbol oldGroup, Set<GroupSymbol> newGroups, Map symbolMap, QueryMetadataInterface metadata, boolean rewrite)
throws QueryPlannerException {
// Convert expressions from correlated subquery references;
@@ -203,7 +216,7 @@
if(type == NodeConstants.Types.SELECT) {
Criteria crit = (Criteria) node.getProperty(NodeConstants.Info.SELECT_CRITERIA);
- crit = convertCriteria(crit, symbolMap, metadata);
+ crit = convertCriteria(crit, symbolMap, metadata, rewrite);
node.setProperty(NodeConstants.Info.SELECT_CRITERIA, crit);
if (!singleMapping) {
@@ -223,7 +236,7 @@
List<Criteria> joinCrits = (List<Criteria>) node.getProperty(NodeConstants.Info.JOIN_CRITERIA);
if(joinCrits != null && !joinCrits.isEmpty()) {
Criteria crit = new CompoundCriteria(joinCrits);
- crit = convertCriteria(crit, symbolMap, metadata);
+ crit = convertCriteria(crit, symbolMap, metadata, rewrite);
if (crit instanceof CompoundCriteria) {
node.setProperty(NodeConstants.Info.JOIN_CRITERIA, ((CompoundCriteria)crit).getCriteria());
} else {
@@ -275,11 +288,14 @@
return expression;
}
- static Criteria convertCriteria(Criteria criteria, final Map symbolMap, QueryMetadataInterface metadata)
+ static Criteria convertCriteria(Criteria criteria, final Map symbolMap, QueryMetadataInterface metadata, boolean rewrite)
throws QueryPlannerException {
ExpressionMappingVisitor.mapExpressions(criteria, symbolMap);
+ if (!rewrite) {
+ return criteria;
+ }
// Simplify criteria if possible
try {
return QueryRewriter.rewriteCriteria(criteria, null, null, metadata);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCollapseSource.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -371,6 +371,7 @@
};
DeepPostOrderNavigator.doVisit(command, visitor);
}
+ command.setProcessorPlan(container.getCommand().getProcessorPlan());
container.setCommand(command);
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCopyCriteria.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCopyCriteria.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleCopyCriteria.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -131,7 +131,7 @@
Criteria tgtCrit = (Criteria) crit.clone();
try {
- tgtCrit = FrameUtil.convertCriteria(tgtCrit, tgtMap, metadata);
+ tgtCrit = FrameUtil.convertCriteria(tgtCrit, tgtMap, metadata, true);
} catch (QueryPlannerException err) {
LogManager.logDetail(LogConstants.CTX_QUERY_PLANNER, err, "Could not remap target criteria in RuleCopyCriteria"); //$NON-NLS-1$
return false;
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushAggregates.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -756,7 +756,7 @@
throws QueryPlannerException {
while (node != null) {
- FrameUtil.convertNode(node, null, null, exprMap, metadata);
+ FrameUtil.convertNode(node, null, null, exprMap, metadata, true);
switch (node.getType()) {
case NodeConstants.Types.SOURCE:
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushSelectCriteria.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushSelectCriteria.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushSelectCriteria.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -562,7 +562,7 @@
copyNode.setProperty(NodeConstants.Info.IS_HAVING, Boolean.TRUE);
}
- FrameUtil.convertNode(copyNode, sourceGroup, null, symbolMap.asMap(), metadata);
+ FrameUtil.convertNode(copyNode, sourceGroup, null, symbolMap.asMap(), metadata, true);
PlanNode intermediateParent = NodeEditor.findParent(projectNode, NodeConstants.Types.ACCESS, NodeConstants.Types.SOURCE | NodeConstants.Types.SET_OP);
if (intermediateParent != null) {
intermediateParent.addAsParent(copyNode);
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/AccessNode.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -25,6 +25,7 @@
import static org.teiid.query.analysis.AnalysisRecord.*;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.teiid.api.exception.query.ExpressionEvaluationException;
@@ -35,6 +36,7 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
+import org.teiid.query.eval.Evaluator;
import org.teiid.query.execution.QueryExecPlugin;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.rewriter.QueryRewriter;
@@ -42,7 +44,7 @@
import org.teiid.query.util.CommandContext;
-public class AccessNode extends RelationalNode {
+public class AccessNode extends SubqueryAwareRelationalNode {
// Initialization state
private Command command;
@@ -110,15 +112,15 @@
}
protected boolean prepareNextCommand(Command atomicCommand) throws TeiidComponentException, TeiidProcessingException {
- return prepareCommand(atomicCommand, this, this.getContext(), this.getContext().getMetadata());
+ return prepareCommand(atomicCommand, getEvaluator(Collections.emptyMap()), this.getContext(), this.getContext().getMetadata());
}
- static boolean prepareCommand(Command atomicCommand, RelationalNode node, CommandContext context, QueryMetadataInterface metadata)
+ static boolean prepareCommand(Command atomicCommand, Evaluator eval, CommandContext context, QueryMetadataInterface metadata)
throws ExpressionEvaluationException, TeiidComponentException,
TeiidProcessingException {
try {
// Defect 16059 - Rewrite the command once the references have been replaced with values.
- QueryRewriter.evaluateAndRewrite(atomicCommand, node.getDataManager(), context, metadata);
+ QueryRewriter.evaluateAndRewrite(atomicCommand, eval, context, metadata);
} catch (QueryValidatorException e) {
throw new TeiidProcessingException(e, QueryExecPlugin.Util.getString("AccessNode.rewrite_failed", atomicCommand)); //$NON-NLS-1$
}
@@ -185,6 +187,7 @@
}
public void closeDirect() {
+ super.closeDirect();
closeSources();
}
Modified: trunk/engine/src/main/java/org/teiid/query/processor/relational/BatchedUpdateNode.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/processor/relational/BatchedUpdateNode.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/processor/relational/BatchedUpdateNode.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -33,6 +34,7 @@
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
+import org.teiid.query.eval.Evaluator;
import org.teiid.query.execution.QueryExecPlugin;
import org.teiid.query.sql.lang.BatchedUpdateCommand;
import org.teiid.query.sql.lang.Command;
@@ -45,7 +47,7 @@
* Node that batches commands sent to the DataManager.
* @since 4.2
*/
-public class BatchedUpdateNode extends RelationalNode {
+public class BatchedUpdateNode extends SubqueryAwareRelationalNode {
private static final List<Integer> ZERO_COUNT_TUPLE = Arrays.asList(Integer.valueOf(0));
@@ -98,7 +100,9 @@
boolean needProcessing = false;
if(shouldEvaluate != null && shouldEvaluate.get(i)) {
updateCommand = (Command) updateCommand.clone();
- needProcessing = AccessNode.prepareCommand(updateCommand, this, context, context.getMetadata());
+ Evaluator eval = getEvaluator(Collections.emptyMap());
+ eval.initialize(context, getDataManager());
+ needProcessing = AccessNode.prepareCommand(updateCommand, eval, context, context.getMetadata());
} else {
needProcessing = RelationalNodeUtil.shouldExecute(updateCommand, true);
}
@@ -146,6 +150,7 @@
* @since 4.2
*/
public void closeDirect() {
+ super.closeDirect();
if (tupleSource != null) {
tupleSource.closeSource();
tupleSource = null;
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -229,7 +229,7 @@
GroupSymbol variables = new GroupSymbol(name);
externalGroups.addGroup(variables);
TempMetadataID tid = metadata.addTempGroup(name, symbols);
- tid.setScalarGroup(true);
+ tid.setScalarGroup();
variables.setMetadataID(tid);
return variables;
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -36,15 +36,14 @@
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
-import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.CommandResolver;
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.OrderBy;
+import org.teiid.query.sql.lang.OrderByItem;
import org.teiid.query.sql.lang.QueryCommand;
import org.teiid.query.sql.lang.SetQuery;
-import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.util.ErrorMessageKeys;
@@ -139,12 +138,11 @@
* @return True if the ORDER BY contains the element
*/
public static boolean orderByContainsVariable(OrderBy orderBy, SingleElementSymbol ses, int position) {
- for (final Iterator iterator = orderBy.getSortKeys().iterator(); iterator.hasNext();) {
- final ElementSymbol element = (ElementSymbol)iterator.next();
- if (position == ((TempMetadataID)element.getMetadataID()).getSelectPosition()) {
- return true;
- }
- }
+ for (OrderByItem item : orderBy.getOrderByItems()) {
+ if (item.getExpressionPosition() == position) {
+ return true;
+ }
+ }
return false;
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/util/ResolverUtil.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -427,7 +427,6 @@
if (matchedSymbol != null) {
TempMetadataID tempMetadataID = new TempMetadataID(symbol.getName(), matchedSymbol.getType());
int position = knownElements.indexOf(matchedSymbol);
- tempMetadataID.setSelectPosition(position);
symbol.setMetadataID(tempMetadataID);
symbol.setType(matchedSymbol.getType());
return position;
Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -62,7 +62,6 @@
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataStore;
-import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.processor.relational.DependentValueSource;
import org.teiid.query.resolver.QueryResolver;
import org.teiid.query.resolver.util.ResolverUtil;
@@ -180,7 +179,8 @@
private CreateUpdateProcedureCommand procCommand;
private boolean rewriteSubcommands;
- private ProcessorDataManager dataMgr;
+ private boolean processing;
+ private Evaluator evaluator;
private Map variables; //constant propagation
private int commandType;
@@ -189,12 +189,14 @@
this.metadata = metadata;
this.context = context;
this.procCommand = procCommand;
+ this.evaluator = new Evaluator(Collections.emptyMap(), null, context);
}
- public static Command evaluateAndRewrite(Command command, ProcessorDataManager dataMgr, CommandContext context, QueryMetadataInterface metadata) throws TeiidProcessingException, TeiidComponentException {
+ public static Command evaluateAndRewrite(Command command, Evaluator eval, CommandContext context, QueryMetadataInterface metadata) throws TeiidProcessingException, TeiidComponentException {
QueryRewriter queryRewriter = new QueryRewriter(metadata, context, null);
- queryRewriter.dataMgr = dataMgr;
+ queryRewriter.evaluator = eval;
queryRewriter.rewriteSubcommands = true;
+ queryRewriter.processing = true;
return queryRewriter.rewriteCommand(command, false);
}
@@ -1049,7 +1051,7 @@
private Criteria rewriteDependentSetCriteria(DependentSetCriteria dsc)
throws TeiidComponentException, TeiidProcessingException{
- if (dataMgr == null) {
+ if (!processing) {
return rewriteCriteria(dsc);
}
SetCriteria setCrit = new SetCriteria();
@@ -1147,9 +1149,9 @@
}
private Criteria evaluateCriteria(Criteria crit) throws TeiidComponentException, TeiidProcessingException{
- if(EvaluatableVisitor.isFullyEvaluatable(crit, true)) {
+ if(EvaluatableVisitor.isFullyEvaluatable(crit, !processing)) {
try {
- Boolean eval = new Evaluator(Collections.emptyMap(), this.dataMgr, context).evaluateTVL(crit, Collections.emptyList());
+ Boolean eval = evaluator.evaluateTVL(crit, Collections.emptyList());
if (eval == null) {
return UNKNOWN_CRITERIA;
@@ -1807,7 +1809,7 @@
private Criteria getSimpliedCriteria(Criteria crit, Expression a, boolean outcome, boolean nullPossible) {
if (nullPossible) {
if (outcome) {
- if (this.dataMgr != null) {
+ if (processing) {
return crit;
}
IsNullCriteria inc = new IsNullCriteria(a);
@@ -1885,7 +1887,7 @@
if (expression instanceof ElementSymbol) {
ElementSymbol es = (ElementSymbol)expression;
Class<?> type = es.getType();
- if (dataMgr == null && es.isExternalReference()) {
+ if (!processing && es.isExternalReference()) {
String grpName = es.getGroupSymbol().getCanonicalName();
if (variables == null) {
@@ -1922,7 +1924,11 @@
} else if (expression instanceof SearchedCaseExpression) {
expression = rewriteCaseExpression((SearchedCaseExpression)expression);
} else if (expression instanceof ScalarSubquery) {
- rewriteSubqueryContainer((ScalarSubquery)expression, true);
+ ScalarSubquery subquery = (ScalarSubquery)expression;
+ if (subquery.shouldEvaluate() && processing) {
+ return new Constant(evaluator.evaluate(subquery, null), subquery.getType());
+ }
+ rewriteSubqueryContainer(subquery, true);
return expression;
} else if (expression instanceof ExpressionSymbol) {
if (expression instanceof AggregateSymbol) {
@@ -1936,7 +1942,7 @@
rewriteExpressions(expression);
}
- if(dataMgr == null) {
+ if(!processing) {
if (!EvaluatableVisitor.isFullyEvaluatable(expression, true)) {
return expression;
}
@@ -1944,7 +1950,7 @@
return expression;
}
- Object value = new Evaluator(Collections.emptyMap(), dataMgr, context).evaluate(expression, Collections.emptyList());
+ Object value = evaluator.evaluate(expression, Collections.emptyList());
if (value instanceof Constant) {
return (Constant)value; //multi valued substitution
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/sql/symbol/ScalarSubquery.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -43,9 +43,10 @@
private static AtomicInteger ID = new AtomicInteger();
private Command command;
- private Class type;
+ private Class<?> type;
private int hashCode;
private String id = "$sc/id" + ID.getAndIncrement(); //$NON-NLS-1$
+ private boolean shouldEvaluate;
/**
* Default constructor
@@ -58,6 +59,14 @@
this.setCommand(subqueryCommand);
}
+ public boolean shouldEvaluate() {
+ return shouldEvaluate;
+ }
+
+ public void setShouldEvaluate(boolean shouldEvaluate) {
+ this.shouldEvaluate = shouldEvaluate;
+ }
+
@Override
public String getContextSymbol() {
return id;
@@ -150,6 +159,7 @@
ScalarSubquery clone = new ScalarSubquery(copyCommand);
//Don't invoke the lazy-loading getType()
clone.setType(this.type);
+ clone.shouldEvaluate = this.shouldEvaluate;
return clone;
}
Modified: trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/main/java/org/teiid/query/sql/visitor/EvaluatableVisitor.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -130,7 +130,11 @@
}
public void visit(ScalarSubquery obj){
- evaluationNotPossible(EvaluationLevel.PUSH_DOWN);
+ if (obj.shouldEvaluate()) {
+ evaluationNotPossible(EvaluationLevel.PROCESSING);
+ } else {
+ evaluationNotPossible(EvaluationLevel.PUSH_DOWN);
+ }
}
public void visit(DependentSetCriteria obj) {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -1349,27 +1349,6 @@
});
}
- @Test public void testCompareSubquery4() {
- ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where e1 > (select e1 FROM pm2.g1 where e2 = 13)", example1(), //$NON-NLS-1$
- new String[] { "SELECT e1 FROM pm1.g1" }); //$NON-NLS-1$
- checkNodeTypes(plan, new int[] {
- 1, // Access
- 0, // DependentAccess
- 1, // DependentSelect
- 0, // DependentProject
- 0, // DupRemove
- 0, // Grouping
- 0, // NestedLoopJoinStrategy
- 0, // MergeJoinStrategy
- 0, // Null
- 0, // PlanExecution
- 1, // Project
- 0, // Select
- 0, // Sort
- 0 // UnionAll
- });
- }
-
@Test public void testExistsSubquery1() {
ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where exists (select e1 FROM pm2.g1)", example1(), //$NON-NLS-1$
new String[] { "SELECT e1 FROM pm1.g1" }); //$NON-NLS-1$
@@ -1391,48 +1370,6 @@
});
}
- @Test public void testScalarSubquery1() {
- ProcessorPlan plan = helpPlan("Select e1, (select e1 FROM pm2.g1 where e1 = 'x') from pm1.g1", example1(), //$NON-NLS-1$
- new String[] { "SELECT e1 FROM pm1.g1" }); //$NON-NLS-1$
- checkNodeTypes(plan, new int[] {
- 1, // Access
- 0, // DependentAccess
- 0, // DependentSelect
- 1, // DependentProject
- 0, // DupRemove
- 0, // Grouping
- 0, // NestedLoopJoinStrategy
- 0, // MergeJoinStrategy
- 0, // Null
- 0, // PlanExecution
- 0, // Project
- 0, // Select
- 0, // Sort
- 0 // UnionAll
- });
- }
-
- @Test public void testScalarSubquery2() {
- ProcessorPlan plan = helpPlan("Select e1, (select e1 FROM pm2.g1 where e1 = 'x') as X from pm1.g1", example1(), //$NON-NLS-1$
- new String[] { "SELECT e1 FROM pm1.g1" }); //$NON-NLS-1$
- checkNodeTypes(plan, new int[] {
- 1, // Access
- 0, // DependentAccess
- 0, // DependentSelect
- 1, // DependentProject
- 0, // DupRemove
- 0, // Grouping
- 0, // NestedLoopJoinStrategy
- 0, // MergeJoinStrategy
- 0, // Null
- 0, // PlanExecution
- 0, // Project
- 0, // Select
- 0, // Sort
- 0 // UnionAll
- });
- }
-
@Test public void testTempGroup() {
ProcessorPlan plan = helpPlan("select e1 from tm1.g1 where e1 = 'x'", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
new String[] { "SELECT e1 FROM tm1.g1" }); //$NON-NLS-1$
@@ -5747,14 +5684,14 @@
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- String sql = "select e1 from pm1.g1 where e1 = convert((exec pm1.sq11(1, 2)), integer)"; //$NON-NLS-1$
+ String sql = "select pm1.g1.e1, pm1.g1.e2 from pm1.g1 where e1 = convert((exec pm1.sq11(e2, 2)), integer)"; //$NON-NLS-1$
helpPlan(sql,
FakeMetadataFactory.example1Cached(),
null,
capFinder,
new String[] {
- "SELECT e1 FROM pm1.g1"}, //$NON-NLS-1$
+ "SELECT pm1.g1.e1, pm1.g1.e2 FROM pm1.g1"}, //$NON-NLS-1$
SHOULD_SUCCEED);
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestSubqueryPushdown.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -217,7 +217,7 @@
/**
* Check that scalar subquery in select is pushed
*/
- public void DEFER_testPushSubqueryInSelectClause1() {
+ public void testPushSubqueryInSelectClause1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
@@ -710,6 +710,41 @@
new String[] { "SELECT g_0.e1, (convert((SELECT MAX(g_1.e1) FROM pm1.g1 AS g_1), integer) + 1) FROM pm1.g1 AS g_0" }, SHOULD_SUCCEED); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
-
-
+
+ @Test public void testScalarSubquery2() {
+ ProcessorPlan plan = helpPlan("Select e1, (select e1 FROM pm2.g1 where pm1.g1.e1 = 'x') as X from pm1.g1", example1(), //$NON-NLS-1$
+ new String[] { "SELECT e1 FROM pm1.g1" }); //$NON-NLS-1$
+ checkNodeTypes(plan, new int[] {
+ 1, // Access
+ 0, // DependentAccess
+ 0, // DependentSelect
+ 1, // DependentProject
+ 0, // DupRemove
+ 0, // Grouping
+ 0, // NestedLoopJoinStrategy
+ 0, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 0, // Project
+ 0, // Select
+ 0, // Sort
+ 0 // UnionAll
+ });
+ }
+
+ /**
+ * Technically this is not a full push-down, but the subquery will be evaluated prior to pushdown
+ */
+ @Test public void testCompareSubquery4() {
+ ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where e1 > (select e1 FROM pm2.g1 where e2 = 13)", example1(), //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 > (SELECT g_1.e1 FROM pm2.g1 AS g_1 WHERE g_1.e2 = 13)" }); //$NON-NLS-1$
+ checkNodeTypes(plan, FULL_PUSHDOWN);
+ }
+
+ @Test public void testScalarSubquery1() {
+ ProcessorPlan plan = helpPlan("Select e1, (select e1 FROM pm2.g1 where e1 = 'x') from pm1.g1", example1(), //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1, (SELECT g_1.e1 FROM pm2.g1 AS g_1 WHERE g_1.e1 = 'x') FROM pm1.g1 AS g_0" }); //$NON-NLS-1$
+ checkNodeTypes(plan, FULL_PUSHDOWN);
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestGroupRecontext.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestGroupRecontext.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/relational/rules/TestGroupRecontext.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -122,7 +122,7 @@
SubqueryCompareCriteria crit = new SubqueryCompareCriteria(e1, query, SubqueryCompareCriteria.EQ, SubqueryCompareCriteria.ALL);
SubqueryCompareCriteria expected = new SubqueryCompareCriteria(x1, query, SubqueryCompareCriteria.EQ, SubqueryCompareCriteria.ALL);
- FrameUtil.convertCriteria(crit, symbolMap, null);
+ FrameUtil.convertCriteria(crit, symbolMap, null, true);
assertEquals(crit, expected);
}
Modified: trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2010-08-06 05:00:38 UTC (rev 2422)
+++ trunk/engine/src/test/java/org/teiid/query/processor/TestProcessor.java 2010-08-06 05:08:25 UTC (rev 2423)
@@ -23,6 +23,7 @@
package org.teiid.query.processor;
import static org.junit.Assert.*;
+import static org.teiid.query.optimizer.TestOptimizer.*;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -7483,6 +7484,32 @@
helpProcess(plan, dataManager, expected);
}
+
+ @Test public void testUncorrelatedScalarSubqueryPushdown() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ FakeMetadataFacade metadata = example1();
+
+ BasicSourceCapabilities caps = getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, false);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = helpPlan("select pm1.g1.e1 from pm1.g1 where e1 < (select max(vm1.g1.e1) from vm1.g1)", metadata, //$NON-NLS-1$
+ null, capFinder,
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 < (SELECT MAX(g_1.e1) FROM pm1.g1 AS g_1)" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ checkNodeTypes(plan, FULL_PUSHDOWN);
+
+ HardcodedDataManager hdm = new HardcodedDataManager();
+ hdm.addData("SELECT MAX(g_0.e1) FROM pm1.g1 AS g_0", new List[] {Arrays.asList("c")});
+ hdm.addData("SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 < 'c'", new List[] {Arrays.asList("a")});
+
+ List[] expected = new List[] {
+ Arrays.asList("a"),
+ };
+
+ helpProcess(plan, hdm, expected);
+ }
private static final boolean DEBUG = false;
}
15 years, 5 months
teiid SVN: r2422 - in trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc: sybase and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-06 01:00:38 -0400 (Fri, 06 Aug 2010)
New Revision: 2422
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
Log:
TEIID-1181 updating sqlserver/sybase logic to avoid the byte type
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2010-08-06 04:57:28 UTC (rev 2421)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2010-08-06 05:00:38 UTC (rev 2422)
@@ -930,7 +930,7 @@
* @return the value
* @throws SQLException
*/
- public Object retrieveValue(CallableStatement results, int parameterIndex, Class expectedType) throws SQLException{
+ public Object retrieveValue(CallableStatement results, int parameterIndex, Class<?> expectedType) throws SQLException{
Integer code = TYPE_CODE_MAP.get(expectedType);
if(code != null) {
switch(code.intValue()) {
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2010-08-06 04:57:28 UTC (rev 2421)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2010-08-06 05:00:38 UTC (rev 2422)
@@ -24,6 +24,10 @@
*/
package org.teiid.translator.jdbc.sybase;
+import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -37,6 +41,7 @@
import org.teiid.translator.TranslatorException;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.SourceSystemFunctions;
+import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.AliasModifier;
import org.teiid.translator.jdbc.ConvertModifier;
import org.teiid.translator.jdbc.EscapeSyntaxModifier;
@@ -332,4 +337,32 @@
public boolean booleanNullable() {
return false;
}
+
+ @Override
+ public Object retrieveValue(ResultSet results, int columnIndex,
+ Class<?> expectedType) throws SQLException {
+ if (expectedType == TypeFacility.RUNTIME_TYPES.BYTE) {
+ expectedType = TypeFacility.RUNTIME_TYPES.SHORT;
+ }
+ return super.retrieveValue(results, columnIndex, expectedType);
+ }
+
+ @Override
+ public Object retrieveValue(CallableStatement results, int parameterIndex,
+ Class<?> expectedType) throws SQLException {
+ if (expectedType == TypeFacility.RUNTIME_TYPES.BYTE) {
+ expectedType = TypeFacility.RUNTIME_TYPES.SHORT;
+ }
+ return super.retrieveValue(results, parameterIndex, expectedType);
+ }
+
+ @Override
+ public void bindValue(PreparedStatement stmt, Object param,
+ Class<?> paramType, int i) throws SQLException {
+ if (paramType == TypeFacility.RUNTIME_TYPES.BYTE) {
+ paramType = TypeFacility.RUNTIME_TYPES.SHORT;
+ param = ((Byte)param).shortValue();
+ }
+ super.bindValue(stmt, param, paramType, i);
+ }
}
15 years, 5 months
teiid SVN: r2421 - in trunk/runtime/src/main/java/org/teiid: services and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-06 00:57:28 -0400 (Fri, 06 Aug 2010)
New Revision: 2421
Modified:
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
Log:
TEIID-1187 updating connection type logic
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-05 20:13:20 UTC (rev 2420)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-06 04:57:28 UTC (rev 2421)
@@ -36,8 +36,6 @@
import org.teiid.adminapi.AdminException;
import org.teiid.adminapi.AdminProcessingException;
import org.teiid.adminapi.Model;
-import org.teiid.adminapi.VDB.ConnectionType;
-import org.teiid.adminapi.VDB.Status;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.core.CoreConstants;
@@ -130,20 +128,23 @@
return new VDBKey(vdb.getName(), vdb.getVersion());
}
- public VDBMetaData getActiveVDB(String vdbName) throws VirtualDatabaseException {
+ public VDBMetaData getVDB(String vdbName) throws VirtualDatabaseException {
int latestVersion = 0;
for (VDBKey key:this.vdbRepo.tailMap(new VDBKey(vdbName, 0)).keySet()) {
if(!key.getName().equalsIgnoreCase(vdbName)) {
break;
}
VDBMetaData vdb = this.vdbRepo.get(key).getVDB();
- if (vdb.getStatus() == Status.ACTIVE) {
- if (vdb.getConnectionType() == ConnectionType.ANY) {
- latestVersion = Math.max(vdb.getVersion(), latestVersion);
- } else if (latestVersion == 0 && vdb.getConnectionType() == ConnectionType.BY_VERSION) {
+ switch (vdb.getConnectionType()) {
+ case ANY:
+ latestVersion = Math.max(vdb.getVersion(), latestVersion);
+ break;
+ case BY_VERSION:
+ if (latestVersion == 0) {
latestVersion = vdb.getVersion();
- }
- }
+ }
+ break;
+ }
}
if(latestVersion == 0) {
throw new VirtualDatabaseException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-05 20:13:20 UTC (rev 2420)
+++ trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-06 04:57:28 UTC (rev 2421)
@@ -166,18 +166,19 @@
if (vdbName != null) {
String vdbVersion = properties.getProperty(TeiidURL.JDBC.VDB_VERSION);
if (vdbVersion == null) {
+ vdbVersion = "latest"; //$NON-NLS-1$
try {
- vdb = this.vdbRepository.getActiveVDB(vdbName);
+ vdb = this.vdbRepository.getVDB(vdbName);
} catch (VirtualDatabaseException e) {
- throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
+ throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, vdbVersion)); //$NON-NLS-1$
}
}
else {
vdb = this.vdbRepository.getVDB(vdbName, Integer.parseInt(vdbVersion));
- if (vdb.getStatus() != VDB.Status.ACTIVE || vdb.getConnectionType() == ConnectionType.NONE) {
- throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, vdbVersion)); //$NON-NLS-1$
- }
}
+ if (vdb.getStatus() != VDB.Status.ACTIVE || vdb.getConnectionType() == ConnectionType.NONE) {
+ throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, vdbVersion)); //$NON-NLS-1$
+ }
}
if (sessionMaxLimit > 0 && getActiveSessionsCount() >= sessionMaxLimit) {
15 years, 5 months
teiid SVN: r2420 - trunk/cache-jbosscache/src/main/java/org/teiid/cache/jboss.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-08-05 16:13:20 -0400 (Thu, 05 Aug 2010)
New Revision: 2420
Modified:
trunk/cache-jbosscache/src/main/java/org/teiid/cache/jboss/ClusterableCacheFactory.java
Log:
TEIID-1185
Modified: trunk/cache-jbosscache/src/main/java/org/teiid/cache/jboss/ClusterableCacheFactory.java
===================================================================
--- trunk/cache-jbosscache/src/main/java/org/teiid/cache/jboss/ClusterableCacheFactory.java 2010-08-05 17:41:38 UTC (rev 2419)
+++ trunk/cache-jbosscache/src/main/java/org/teiid/cache/jboss/ClusterableCacheFactory.java 2010-08-05 20:13:20 UTC (rev 2420)
@@ -64,7 +64,9 @@
@Override
public void destroy() {
- this.delegate.destroy();
+ if (this.delegate != null) {
+ this.delegate.destroy();
+ }
}
private Object getClusteredCache() {
15 years, 5 months
teiid SVN: r2419 - in trunk: console and 2 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-05 13:41:38 -0400 (Thu, 05 Aug 2010)
New Revision: 2419
Modified:
trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
trunk/console/pom.xml
trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
trunk/console/src/main/java/org/teiid/rhq/plugin/VDBDiscoveryComponent.java
Log:
TEIID-1187 updating versioning logic to use .version.vdb
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-05 16:49:58 UTC (rev 2418)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-05 17:41:38 UTC (rev 2419)
@@ -60,6 +60,8 @@
@XmlRootElement(name = "vdb")
public class VDBMetaData extends AdminObjectImpl implements VDB {
+ private static final String VERSION_DELIM = "."; //$NON-NLS-1$
+
private static final long serialVersionUID = -4723595252013356436L;
/**
@@ -109,12 +111,17 @@
private boolean removed;
@ManagementProperty(description="Name of the VDB")
- @ManagementObjectID(type="vdb")
@XmlAttribute(name = "name", required = true)
public String getName() {
return super.getName();
}
+ @ManagementProperty(description="Full Name of the VDB")
+ @ManagementObjectID(type="vdb")
+ public String getFullName() {
+ return getName() + VERSION_DELIM + getVersion();
+ }
+
// This needed by JAXB marshaling
public void setName(String name) {
super.setName(name);
@@ -170,8 +177,12 @@
public void setUrl(URL url) {
this.setUrl(url.toExternalForm());
- String fileName = FileUtils.getBaseFileNameWithoutExtension(url.getPath());
- String prefix = getName() + "_"; //$NON-NLS-1$
+ String path = url.getPath();
+ if (path.endsWith("/")) { //$NON-NLS-1$
+ path = path.substring(0, path.length() - 1);
+ }
+ String fileName = FileUtils.getBaseFileNameWithoutExtension(path);
+ String prefix = getName() + VERSION_DELIM;
if (StringUtil.startsWithIgnoreCase(fileName, prefix)) {
try {
int fileVersion = Integer.parseInt(fileName.substring(prefix.length()));
@@ -270,7 +281,7 @@
}
public String toString() {
- return getName()+"."+getVersion()+ models.getMap().values(); //$NON-NLS-1$
+ return getName()+VERSION_DELIM+getVersion()+ models.getMap().values(); //$NON-NLS-1$
}
public ModelMetaData getModel(String modelName) {
Modified: trunk/console/pom.xml
===================================================================
--- trunk/console/pom.xml 2010-08-05 16:49:58 UTC (rev 2418)
+++ trunk/console/pom.xml 2010-08-05 17:41:38 UTC (rev 2419)
@@ -104,6 +104,7 @@
<dependency>
<groupId>org.jboss.teiid</groupId>
<artifactId>teiid-client</artifactId>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.teiid</groupId>
Modified: trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2010-08-05 16:49:58 UTC (rev 2418)
+++ trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2010-08-05 17:41:38 UTC (rev 2419)
@@ -47,6 +47,7 @@
import org.teiid.adminapi.Request;
import org.teiid.adminapi.Session;
import org.teiid.adminapi.Transaction;
+import org.teiid.adminapi.VDB.Status;
import org.teiid.adminapi.impl.RequestMetadata;
import org.teiid.adminapi.impl.RequestMetadataMapper;
import org.teiid.rhq.plugin.objects.ExecutedResult;
@@ -137,7 +138,7 @@
.equals(PluginConstants.ComponentType.VDB.Metrics.STATUS)) {
// TODO remove version parameter after AdminAPI is changed
resultObject = getVDBStatus(connection, (String) valueMap
- .get(VDB.NAME), 1);
+ .get(VDB.NAME));
} else if (metric
.equals(PluginConstants.ComponentType.VDB.Metrics.QUERY_COUNT)) {
resultObject = new Double(getQueryCount(connection).doubleValue());
@@ -375,7 +376,7 @@
}
public static String getVDBStatus(ProfileServiceConnection connection,
- String vdbName, int version) {
+ String vdbName) {
ManagedComponent mcVdb = null;
try {
@@ -392,6 +393,10 @@
final String msg = "Exception in getVDBStatus(): " + e.getMessage(); //$NON-NLS-1$
LOG.error(msg, e);
}
+
+ if (mcVdb == null) {
+ return Status.INACTIVE.toString();
+ }
return ProfileServiceUtil.getSimpleValue(mcVdb, "status", String.class); //$NON-NLS-1$
}
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-05 16:49:58 UTC (rev 2418)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-05 17:41:38 UTC (rev 2419)
@@ -93,7 +93,7 @@
@Override
public void start(ResourceContext context) {
this.setComponentName(context.getPluginConfiguration().getSimpleValue(
- "name", null));
+ "fullName", null));
this.resourceConfiguration = context.getPluginConfiguration();
this.componentType = PluginConstants.ComponentType.VDB.NAME;
super.start(context);
@@ -136,7 +136,7 @@
// TODO Remove vdb version after no longer viable in Teiid
String version = this.resourceConfiguration.getSimpleValue(
"version", null);
- String status = DQPManagementView.getVDBStatus(getConnection(), this.name, Integer.parseInt(version));
+ String status = DQPManagementView.getVDBStatus(getConnection(), this.name);
if (status.equals("ACTIVE")) {
return AvailabilityType.UP;
}
@@ -149,8 +149,7 @@
Map<String, Object> valueMap) {
// Parameter logic for VDB Metrics
String key = VDB.NAME;
- valueMap.put(key, this.resourceConfiguration.getSimpleValue("name",
- null));
+ valueMap.put(key, this.name);
}
@Override
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/VDBDiscoveryComponent.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/VDBDiscoveryComponent.java 2010-08-05 16:49:58 UTC (rev 2418)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/VDBDiscoveryComponent.java 2010-08-05 17:41:38 UTC (rev 2419)
@@ -64,6 +64,8 @@
String vdbKey = mcVdb.getDeployment().getName();
String vdbName = ProfileServiceUtil.getSimpleValue(mcVdb, "name",
String.class);
+ String fullName = ProfileServiceUtil.getSimpleValue(mcVdb, "fullName",
+ String.class);
Integer vdbVersion = ProfileServiceUtil.getSimpleValue(mcVdb,
"version", Integer.class);
String vdbDescription = ProfileServiceUtil.getSimpleValue(mcVdb,
@@ -93,6 +95,7 @@
Configuration configuration = detail.getPluginConfiguration();
configuration.put(new PropertySimple("name", vdbName));
+ configuration.put(new PropertySimple("fullName", fullName));
configuration.put(new PropertySimple("version", vdbVersion));
configuration
.put(new PropertySimple("description", vdbDescription));
15 years, 5 months
teiid SVN: r2418 - trunk/documentation/reference/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-05 12:49:58 -0400 (Thu, 05 Aug 2010)
New Revision: 2418
Modified:
trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml
trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
Log:
TEIID-1186 fixing broken links
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-08-05 15:18:36 UTC (rev 2417)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/procedures.xml 2010-08-05 16:49:58 UTC (rev 2418)
@@ -366,7 +366,7 @@
</section>
<section>
<title>Executing Virtual Procedures</title>
- <para>You execute procedures using the SQL <link linkend="execute_command">EXECUTE</link> command. If
+ <para>You execute procedures using the SQL <link linkend="exec_command">EXECUTE</link> command. If
the procedure has defined inputs, you specify those in a
sequential list, or using "name=value" syntax. You must use the
name of the input parameter, scoped by the full procedure name if
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-08-05 15:18:36 UTC (rev 2417)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/sql_support.xml 2010-08-05 16:49:58 UTC (rev 2418)
@@ -1132,7 +1132,7 @@
</listitem>
</itemizedlist>
<para>Previous versions of Teiid accepted the PLANONLY, DEBUG, and SHOWPLAN option arguments. These are no longer accepted in the OPTION clause.
- Please see the <link linkend="other_commands">other commands</link> chapter for using these options.
+ Please see the Client Developers Guide for replacements to those options.
</para>
</section>
</section>
15 years, 5 months
teiid SVN: r2417 - in trunk: build/kits/jboss-container/deployers/teiid.deployer and 14 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-05 11:18:36 -0400 (Thu, 05 Aug 2010)
New Revision: 2417
Modified:
trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
trunk/client/src/main/java/org/teiid/adminapi/VDB.java
trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
trunk/console/src/main/resources/META-INF/rhq-plugin.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java
trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java
trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java
Log:
TEIID-1187 changing the scoping of connectormanagerrepository and the vdb level translators. also separating vdb status from an updatable property that determines how to allow connections.
Modified: trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/build/kits/jboss-container/deploy/teiid/teiid-jboss-beans.xml 2010-08-05 15:18:36 UTC (rev 2417)
@@ -60,7 +60,6 @@
<property name="transactionManager"><inject bean="TransactionManager" property="transactionManager"/></property>
<property name="sessionService"><inject bean="SessionService"/></property>
<property name="bufferService"><inject bean="BufferService"/></property>
- <property name="connectorManagerRepository"><inject bean="ConnectorManagerRepository"/></property>
<property name="securityHelper"><inject bean="SecurityHelper"/></property>
<property name="VDBRepository"><inject bean="VDBRepository"/></property>
<property name="cacheFactory"><inject bean="CacheFactory"/></property>
Modified: trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
--- trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/build/kits/jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml 2010-08-05 15:18:36 UTC (rev 2417)
@@ -5,7 +5,6 @@
<!-- Deployer specific Stuff -->
<bean name="VDBStructure" class="org.teiid.deployers.VDBStructure" />
<bean name="VDBRepository" class="org.teiid.deployers.VDBRepository"/>
- <bean name="ConnectorManagerRepository" class="org.teiid.dqp.internal.datamgr.ConnectorManagerRepository"/>
<bean name="SecurityHelper" class="org.teiid.jboss.JBossSecurityHelper"/>
<bean name="JBossLifeCycleListener" class="org.teiid.jboss.JBossLifeCycleListener"/>
@@ -46,7 +45,6 @@
</uninstall>
<property name="VDBRepository"><inject bean="VDBRepository"/></property>
<property name="objectSerializer"><inject bean="ObjectSerializer"/></property>
- <property name="connectorManagerRepository"><inject bean="ConnectorManagerRepository"/></property>
<property name="translatorRepository"><inject bean="translatorRepository"/></property>
<property name="containerLifeCycleListener"><inject bean="JBossLifeCycleListener"/></property>
<property name="threadPool"><inject bean="jboss.system:service=ThreadPool"/></property>
@@ -77,7 +75,6 @@
<bean name="VDBStatusChecker" class="org.teiid.deployers.VDBStatusChecker">
<property name="VDBRepository"><inject bean="VDBRepository"/></property>
- <property name="connectorManagerRepository"><inject bean="ConnectorManagerRepository"/></property>
</bean>
<!-- Persistence class for the VDB deployment file -->
Modified: trunk/client/src/main/java/org/teiid/adminapi/VDB.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/VDB.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/client/src/main/java/org/teiid/adminapi/VDB.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -40,9 +40,10 @@
*/
public interface VDB extends AdminObject {
- public static enum Status{INCOMPLETE, INACTIVE, ACTIVE, DELETED, ACTIVE_DEFAULT};
+ public static enum Status{INACTIVE, ACTIVE};
-
+ public enum ConnectionType {NONE, BY_VERSION, ANY}
+
/**
* @return Collection of Teiid Models
*/
@@ -51,7 +52,12 @@
/**
* @return the status
*/
- public Status getStatus();
+ public Status getStatus();
+
+ /**
+ * @return the connection status
+ */
+ public ConnectionType getConnectionType();
/**
* @return the VDB version
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -21,6 +21,7 @@
*/
package org.teiid.adminapi.impl;
+import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -43,6 +44,8 @@
import org.teiid.adminapi.Translator;
import org.teiid.adminapi.VDB;
import org.teiid.adminapi.impl.ModelMetaData.ValidationError;
+import org.teiid.core.util.FileUtils;
+import org.teiid.core.util.StringUtil;
@ManagementObject(componentType=@ManagementComponent(type="teiid",subtype="vdb"), properties=ManagementProperties.EXPLICIT)
@@ -102,7 +105,8 @@
private String fileUrl = null;
private boolean dynamic = false;
private VDB.Status status = VDB.Status.INACTIVE;
-
+ private ConnectionType connectionType = VDB.ConnectionType.BY_VERSION;
+ private boolean removed;
@ManagementProperty(description="Name of the VDB")
@ManagementObjectID(type="vdb")
@@ -116,7 +120,25 @@
super.setName(name);
}
+ public boolean isRemoved() {
+ return removed;
+ }
+
+ public void setRemoved(boolean removed) {
+ this.removed = removed;
+ }
+
@Override
+ @ManagementProperty(description="Collections Allowed")
+ public ConnectionType getConnectionType() {
+ return this.connectionType;
+ }
+
+ public void setConnectionType(ConnectionType allowConnections) {
+ this.connectionType = allowConnections;
+ }
+
+ @Override
@ManagementProperty(description="VDB Status")
public Status getStatus() {
return this.status;
@@ -145,6 +167,20 @@
public void setUrl(String url) {
this.fileUrl = url;
}
+
+ public void setUrl(URL url) {
+ this.setUrl(url.toExternalForm());
+ String fileName = FileUtils.getBaseFileNameWithoutExtension(url.getPath());
+ String prefix = getName() + "_"; //$NON-NLS-1$
+ if (StringUtil.startsWithIgnoreCase(fileName, prefix)) {
+ try {
+ int fileVersion = Integer.parseInt(fileName.substring(prefix.length()));
+ this.setVersion(fileVersion);
+ } catch (NumberFormatException e) {
+
+ }
+ }
+ }
@Override
@ManagementProperty(description="Models in a VDB", managed=true)
@@ -294,6 +330,10 @@
return this.dataPolicies.getMap().get(policyName);
}
+ public VDBTranslatorMetaData getTranslator(String name) {
+ return this.translators.getMap().get(name);
+ }
+
public boolean isPreview() {
return Boolean.valueOf(getPropertyValue("preview")); //$NON-NLS-1$
}
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -44,7 +44,13 @@
@Translator(name="sqlserver")
public class SQLServerExecutionFactory extends SybaseExecutionFactory {
+ public static final String V_2005 = "2005"; //$NON-NLS-1$
+ public static final String V_2008 = "2008"; //$NON-NLS-1$
+
//TEIID-31 remove mod modifier for SQL Server 2008
+ public SQLServerExecutionFactory() {
+ setDatabaseVersion(V_2005);
+ }
@Override
protected List<Object> convertDateToString(Function function) {
Modified: trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/console/src/main/java/org/teiid/rhq/plugin/VDBComponent.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -367,6 +367,8 @@
"description", String.class);
String vdbStatus = ProfileServiceUtil.getSimpleValue(mcVdb, "status",
String.class);
+ String connectionType = ProfileServiceUtil.getSimpleValue(mcVdb, "connectionType",
+ String.class);
String vdbURL = ProfileServiceUtil.getSimpleValue(mcVdb, "url",
String.class);
@@ -378,6 +380,7 @@
configuration.put(new PropertySimple("description", vdbDescription));
configuration.put(new PropertySimple("status", vdbStatus));
configuration.put(new PropertySimple("url", vdbURL));
+ configuration.put(new PropertySimple("connectionType", connectionType));
getTranslators(mcVdb, configuration);
Modified: trunk/console/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/console/src/main/resources/META-INF/rhq-plugin.xml 2010-08-05 15:18:36 UTC (rev 2417)
@@ -451,12 +451,20 @@
readOnly="true" />
<c:simple-property name="status" type="string"
description="The Virtual Database Status" required="false"
- summary="true">
+ summary="true" readOnly="true">
<c:property-options>
<c:option value="ACTIVE" name="UP" />
<c:option value="INACTIVE" name="DOWN" default="true" />
</c:property-options>
</c:simple-property>
+ <c:simple-property name="connectionType" type="string"
+ description="Connections to allow to this Virtual Database" required="false">
+ <c:property-options>
+ <c:option value="NONE" name="NONE" />
+ <c:option value="BY_VERSION" name="BY VERSION" default="true" />
+ <c:option value="ANY" name="ANY" />
+ </c:property-options>
+ </c:simple-property>
<c:simple-property name="url" type="string"
description="The Virtual Database URL" required="false" readOnly="true" />
</c:group>
@@ -467,7 +475,7 @@
<c:map-property name="map"
description="Translator Overrides for this VDB">
<c:simple-property name="name" displayName="Name"
- description="Name of this translator instance" required="true"
+ description="Name of this translator instance" required="false"
readOnly="true" />
<c:simple-property name="type" displayName="Translator type"
description="Translator type" required="false" readOnly="true" />
@@ -476,7 +484,7 @@
required="false" readOnly="true" />
<c:simple-property name="propertyValue"
displayName="Property Value" description="Property Value"
- required="false" />
+ required="false" readOnly="true"/>
</c:map-property>
</c:list-property>
</c:group>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManager.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -39,7 +39,6 @@
import org.teiid.dqp.DQPPlugin;
import org.teiid.dqp.message.AtomicRequestID;
import org.teiid.dqp.message.AtomicRequestMessage;
-import org.teiid.dqp.service.BufferService;
import org.teiid.logging.CommandLogMessage;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
@@ -68,9 +67,6 @@
private String translatorName;
private String connectionName;
- //services acquired in start
- private BufferService bufferService;
-
// known requests
private ConcurrentHashMap<AtomicRequestID, ConnectorWorkItem> requestStates = new ConcurrentHashMap<AtomicRequestID, ConnectorWorkItem>();
@@ -155,10 +151,6 @@
return requestStates.size();
}
- public void setBufferService(BufferService service) {
- this.bufferService = service;
- }
-
/**
* initialize this <code>ConnectorManager</code>.
* @throws TranslatorException
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorManagerRepository.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -23,8 +23,6 @@
package org.teiid.dqp.internal.datamgr;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -42,11 +40,10 @@
return this.repo.get(connectorName);
}
- public List<ConnectorManager> getConnectorManagers() {
- return new ArrayList<ConnectorManager>(this.repo.values());
+ public Map<String, ConnectorManager> getConnectorManagers() {
+ return repo;
}
-
public ConnectorManager removeConnectorManager(String connectorName) {
return this.repo.remove(connectorName);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/TranslatorRepository.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -27,52 +27,25 @@
import java.util.concurrent.ConcurrentHashMap;
import org.teiid.adminapi.Translator;
-import org.teiid.adminapi.impl.TranslatorMetaData;
import org.teiid.adminapi.impl.VDBTranslatorMetaData;
-import org.teiid.vdb.runtime.VDBKey;
public class TranslatorRepository implements Serializable{
private static final long serialVersionUID = -1212280886010974273L;
- private Map<String, TranslatorMetaData> translatorRepo = new ConcurrentHashMap<String, TranslatorMetaData>();
- private Map<VDBKey, Map<String, VDBTranslatorMetaData>> vdbScopedTranslatorRepo = new ConcurrentHashMap<VDBKey, Map<String, VDBTranslatorMetaData>>();
+ private Map<String, VDBTranslatorMetaData> translatorRepo = new ConcurrentHashMap<String, VDBTranslatorMetaData>();
- public void addTranslatorMetadata(String name, TranslatorMetaData factory) {
+ public void addTranslatorMetadata(String name, VDBTranslatorMetaData factory) {
this.translatorRepo.put(name, factory);
- }
-
- public void addTranslatorMetadata(VDBKey key, String name, VDBTranslatorMetaData factory) {
- Map<String, VDBTranslatorMetaData> repo = vdbScopedTranslatorRepo.get(key);
- if (repo == null) {
- repo = new ConcurrentHashMap<String, VDBTranslatorMetaData>();
- this.vdbScopedTranslatorRepo.put(key, repo);
- }
- repo.put(name, factory);
}
- public Translator getTranslatorMetaData(VDBKey key, String name) {
- Translator factory = null;
-
- if (key != null) {
- Map<String, VDBTranslatorMetaData> repo = vdbScopedTranslatorRepo.get(key);
- if (repo != null && !repo.isEmpty()) {
- factory = repo.get(name);
- }
- }
-
- if (factory == null) {
- factory = this.translatorRepo.get(name);
- }
-
+ public Translator getTranslatorMetaData(String name) {
+ Translator factory = this.translatorRepo.get(name);
return factory;
}
- public TranslatorMetaData removeTranslatorMetadata(String name) {
+ public VDBTranslatorMetaData removeTranslatorMetadata(String name) {
return this.translatorRepo.remove(name);
}
- public void removeVDBTranslators(VDBKey name) {
- this.vdbScopedTranslatorRepo.remove(name);
- }
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -59,7 +59,6 @@
import org.teiid.core.TeiidProcessingException;
import org.teiid.core.types.Streamable;
import org.teiid.dqp.DQPPlugin;
-import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.process.ThreadReuseExecutor.PrioritizedRunnable;
import org.teiid.dqp.message.AtomicRequestMessage;
import org.teiid.dqp.message.RequestID;
@@ -186,7 +185,6 @@
private SessionAwareCache<CachedResults> rsCache;
private TransactionService transactionService;
private BufferService bufferService;
- private ConnectorManagerRepository connectorManagerRepository;
// Query worker pool for processing plans
private int processorTimeslice = DQPConfiguration.DEFAULT_PROCESSOR_TIMESLICE;
@@ -332,8 +330,7 @@
ClientState state = this.getClientState(workContext.getSessionId(), true);
request.initialize(requestMsg, bufferManager,
dataTierMgr, transactionService, state.sessionTables,
- workContext, connectorManagerRepository,
- this.useEntitlements);
+ workContext, this.useEntitlements);
ResultsFuture<ResultsMessage> resultsFuture = new ResultsFuture<ResultsMessage>();
RequestWorkItem workItem = new RequestWorkItem(this, requestMsg, request, resultsFuture.getResultsReceiver(), requestID, workContext);
@@ -648,7 +645,6 @@
this.processWorkerPool = new ThreadReuseExecutor(DQPConfiguration.PROCESS_PLAN_QUEUE_NAME, config.getMaxThreads());
dataTierMgr = new TempTableDataManager(new DataTierManagerImpl(this,
- this.connectorManagerRepository,
this.bufferService), this.bufferManager);
}
@@ -791,14 +787,6 @@
return processor.processMessage(workContext.getRequestID(requestID), workContext, preparedSql, allowDoubleQuotedVariable);
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
- public ConnectorManagerRepository getConnectorManagerRepository() {
- return this.connectorManagerRepository;
- }
-
public boolean isExceptionOnMaxSourceRows() {
return exceptionOnMaxSourceRows;
}
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 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -105,18 +105,12 @@
// Resources
private DQPCore requestMgr;
private BufferService bufferService;
- private ConnectorManagerRepository connectorManagerRepository;
- public DataTierManagerImpl(DQPCore requestMgr, ConnectorManagerRepository connectorRepo, BufferService bufferService) {
+ public DataTierManagerImpl(DQPCore requestMgr, BufferService bufferService) {
this.requestMgr = requestMgr;
- this.connectorManagerRepository = connectorRepo;
this.bufferService = bufferService;
}
- private ConnectorManager getCM(String connectorName) {
- return this.connectorManagerRepository.getConnectorManager(connectorName);
- }
-
public TupleSource registerRequest(CommandContext context, Command command, String modelName, String connectorBindingId, int nodeID) throws TeiidComponentException, TeiidProcessingException {
RequestWorkItem workItem = requestMgr.getRequestWorkItem((RequestID)context.getProcessorID());
@@ -125,7 +119,8 @@
}
AtomicRequestMessage aqr = createRequest(context.getProcessorID(), command, modelName, connectorBindingId, nodeID);
- ConnectorWork work = getCM(aqr.getConnectorName()).registerRequest(aqr);
+ ConnectorManagerRepository cmr = workItem.getDqpWorkContext().getVDB().getAttachment(ConnectorManagerRepository.class);
+ ConnectorWork work = cmr.getConnectorManager(aqr.getConnectorName()).registerRequest(aqr);
return new DataTierTupleSource(aqr, workItem, work, this);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -137,7 +137,6 @@
TransactionService transactionService,
TempTableStore tempTableStore,
DQPWorkContext workContext,
- ConnectorManagerRepository repo,
boolean useEntitlements) {
this.requestMsg = requestMsg;
@@ -150,7 +149,7 @@
idGenerator.setDefaultFactory(new IntegerIDFactory());
this.workContext = workContext;
this.requestId = workContext.getRequestID(this.requestMsg.getExecutionId());
- this.connectorManagerRepo = repo;
+ this.connectorManagerRepo = workContext.getVDB().getAttachment(ConnectorManagerRepository.class);
this.useEntitlements = useEntitlements;
}
Modified: trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/main/java/org/teiid/vdb/runtime/VDBKey.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -27,29 +27,29 @@
import org.teiid.core.util.HashCodeUtil;
-public class VDBKey implements Serializable{
+public class VDBKey implements Serializable, Comparable<VDBKey>{
private static final long serialVersionUID = -7249750823144856081L;
private String name;
- private String version;
+ private int version;
public VDBKey(String name, String version) {
this.name = name.toUpperCase();
if (version != null) {
- this.version = version.toUpperCase();
+ this.version = Integer.parseInt(version);
}
}
public VDBKey(String name, int version) {
this.name = name.toUpperCase();
- this.version = String.valueOf(version);
+ this.version = version;
}
public String getName() {
return name;
}
- public String getVersion() {
+ public int getVersion() {
return version;
}
@@ -74,19 +74,8 @@
VDBKey other = (VDBKey)obj;
- if (!other.name.equals(this.name)) {
- return false;
- }
-
- if (this.version != null) {
- if (!this.version.equals(other.version)) {
- return false;
- }
- } else if (other.version != null){
- return false;
- }
-
- return true;
+ return other.name.equals(this.name)
+ && version == other.version;
}
/**
@@ -95,5 +84,14 @@
public String toString() {
return name + " " + version; //$NON-NLS-1$
}
+
+ @Override
+ public int compareTo(VDBKey o) {
+ int compare = name.compareTo(o.name);
+ if (compare == 0) {
+ return version - o.version;
+ }
+ return compare;
+ }
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDQPCore.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -53,12 +53,12 @@
context.getVDB().getModel("BQT3").setVisible(false); //$NON-NLS-1$
ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class);
+ context.getVDB().addAttchment(ConnectorManagerRepository.class, repo);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
core = new DQPCore();
core.setBufferService(new FakeBufferService());
core.setCacheFactory(new DefaultCacheFactory());
- core.setConnectorManagerRepository(repo);
core.setTransactionService(new FakeTransactionService());
core.start(new DQPConfiguration());
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestDataTierManager.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -82,7 +82,6 @@
dtm = new DataTierManagerImpl(rm,
- repo,
bs);
command = helpGetCommand(sql, metadata);
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -245,7 +245,7 @@
ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
- serverRequest.initialize(request, BufferManagerFactory.getStandaloneBufferManager(), null, new FakeTransactionService(), null, workContext, repo, false);
+ serverRequest.initialize(request, BufferManagerFactory.getStandaloneBufferManager(), null, new FakeTransactionService(), null, workContext, false);
serverRequest.setMetadata(capFinder, metadata, null);
serverRequest.processRequest();
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -77,14 +77,10 @@
Command command = QueryParser.getQueryParser().parseCommand(QUERY);
QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
- ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class);
- Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
-
-
RequestMessage message = new RequestMessage();
DQPWorkContext workContext = FakeMetadataFactory.buildWorkContext(metadata, FakeMetadataFactory.example1VDB());
- request.initialize(message, null, null,new FakeTransactionService(),null, workContext, repo, false);
+ request.initialize(message, null, null,new FakeTransactionService(),null, workContext, false);
request.initMetadata();
request.validateAccess(command);
}
@@ -133,13 +129,12 @@
} else {
request = new Request();
}
-
ConnectorManagerRepository repo = Mockito.mock(ConnectorManagerRepository.class);
+ workContext.getVDB().addAttchment(ConnectorManagerRepository.class, repo);
Mockito.stub(repo.getConnectorManager(Mockito.anyString())).toReturn(new AutoGenDataService());
request.initialize(message, Mockito.mock(BufferManager.class),
- new FakeDataManager(), new FakeTransactionService(), null, workContext, repo,
- false);
+ new FakeDataManager(), new FakeTransactionService(), null, workContext, false);
request.processRequest();
return request;
Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/RuntimeEngineDeployer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -62,7 +62,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidRuntimeException;
import org.teiid.deployers.VDBRepository;
-import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.process.DQPConfiguration;
import org.teiid.dqp.internal.process.DQPCore;
import org.teiid.dqp.internal.process.DQPWorkContext;
@@ -288,10 +287,6 @@
this.dqpCore.setBufferService(service);
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.dqpCore.setConnectorManagerRepository(repo);
- }
-
public void setSecurityHelper(SecurityHelper helper) {
this.csr.setSecurityHelper(helper);
}
Modified: trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java
===================================================================
--- trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetaDataInstanceClassFactory.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -32,7 +32,9 @@
import org.jboss.metatype.api.values.MetaValueFactory;
import org.teiid.adminapi.impl.DataPolicyMetadata;
import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.PropertyMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
+import org.teiid.adminapi.impl.VDBTranslatorMetaData;
import org.teiid.adminapi.jboss.ManagedUtil;
public class VDBMetaDataInstanceClassFactory extends AbstractInstanceClassFactory<VDBMetaData> {
@@ -89,6 +91,17 @@
}
}
}
+ else if (property.getName().equals("overrideTranslators")) { //$NON-NLS-1$
+ List<ManagedObject> translators = (List<ManagedObject>)MetaValueFactory.getInstance().unwrap(property.getValue());
+ for (ManagedObject translator:translators) {
+ VDBTranslatorMetaData translatorInstance = vdb.getTranslator(translator.getName());
+ ManagedProperty mp = translator.getProperty("property"); //$NON-NLS-1$
+ List<PropertyMetadata> properties = (List<PropertyMetadata>)MetaValueFactory.getInstance().unwrap(mp.getValue());
+ for (PropertyMetadata managedProperty:properties) {
+ translatorInstance.addProperty(managedProperty.getName(), managedProperty.getValue());
+ }
+ }
+ }
else {
super.setValue(beanInfo, property, vdb, value);
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -29,6 +29,7 @@
import org.teiid.adminapi.impl.DataPolicyMetadata;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
+import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.metadata.MetadataStore;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.metadata.CompositeMetadataStore;
@@ -47,16 +48,19 @@
private UDFMetaData udf;
private LinkedHashMap<VDBKey, CompositeVDB> children;
private MetadataStore[] additionalStores;
+ private ConnectorManagerRepository cmr;
// used as cached item to avoid rebuilding
private VDBMetaData mergedVDB;
- public CompositeVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String, Resource> visibilityMap, UDFMetaData udf, MetadataStore... additionalStores) {
+ public CompositeVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String, Resource> visibilityMap, UDFMetaData udf, ConnectorManagerRepository cmr, MetadataStore... additionalStores) {
this.vdb = vdb;
this.stores = stores;
this.visibilityMap = visibilityMap;
this.udf = udf;
+ this.cmr = cmr;
this.additionalStores = additionalStores;
+ this.vdb.addAttchment(ConnectorManagerRepository.class, cmr);
update(this.vdb);
}
@@ -121,7 +125,9 @@
mergedVDB.setDescription(this.vdb.getDescription());
mergedVDB.setStatus(this.vdb.getStatus());
mergedVDB.setJAXBProperties(this.vdb.getJAXBProperties());
-
+ mergedVDB.setConnectionType(this.vdb.getConnectionType());
+ ConnectorManagerRepository mergedRepo = new ConnectorManagerRepository();
+ mergedRepo.getConnectorManagers().putAll(this.cmr.getConnectorManagers());
for (CompositeVDB child:this.children.values()) {
// add models
@@ -132,7 +138,9 @@
for (DataPolicy p:child.getVDB().getDataPolicies()) {
mergedVDB.addDataPolicy((DataPolicyMetadata)p);
}
+ mergedRepo.getConnectorManagers().putAll(child.cmr.getConnectorManagers());
}
+ mergedVDB.addAttchment(ConnectorManagerRepository.class, mergedRepo);
return mergedVDB;
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -43,7 +43,7 @@
Unmarshaller un = VDBParserDeployer.getUnMarsheller();
VDBMetaData vdb = (VDBMetaData)un.unmarshal(file.openStream());
- vdb.setUrl(unit.getRoot().toURL().toExternalForm());
+ vdb.setUrl(unit.getRoot().toURL());
vdb.setDynamic(true);
LogManager.logDetail(LogConstants.CTX_RUNTIME,"VDB "+unit.getRoot().getName()+" has been parsed."); //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/TranslatorDeployer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -56,7 +56,7 @@
}
String type = data.getType();
- Translator parent = this.translatorRepository.getTranslatorMetaData(null, type);
+ Translator parent = this.translatorRepository.getTranslatorMetaData(type);
if ( parent == null) {
throw new DeploymentException(RuntimePlugin.Util.getString("translator_type_not_found", unit.getName())); //$NON-NLS-1$
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -55,12 +55,10 @@
import org.teiid.runtime.RuntimePlugin;
import org.teiid.translator.ExecutionFactory;
import org.teiid.translator.TranslatorException;
-import org.teiid.vdb.runtime.VDBKey;
public class VDBDeployer extends AbstractSimpleRealDeployer<VDBMetaData> {
private VDBRepository vdbRepository;
- private ConnectorManagerRepository connectorManagerRepository;
private TranslatorRepository translatorRepository;
private ObjectSerializer serializer;
private ContainerLifeCycleListener shutdownListener;
@@ -75,11 +73,13 @@
@Override
public void deploy(DeploymentUnit unit, VDBMetaData deployment) throws DeploymentException {
- if (this.vdbRepository.getVDB(deployment.getName(), deployment.getVersion()) != null) {
- this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion());
+ if (this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion())) {
LogManager.logInfo(LogConstants.CTX_RUNTIME, RuntimePlugin.Util.getString("redeploying_vdb", deployment)); //$NON-NLS-1$
}
+ TranslatorRepository repo = new TranslatorRepository();
+ ConnectorManagerRepository cmr = new ConnectorManagerRepository();
+
boolean preview = deployment.isPreview();
if (!preview) {
@@ -97,7 +97,7 @@
VDBTranslatorMetaData data = (VDBTranslatorMetaData)t;
String type = data.getType();
- Translator parent = this.translatorRepository.getTranslatorMetaData(null, type);
+ Translator parent = this.translatorRepository.getTranslatorMetaData(type);
if ( parent == null) {
throw new DeploymentException(RuntimePlugin.Util.getString("translator_type_not_found", unit.getName())); //$NON-NLS-1$
}
@@ -107,15 +107,15 @@
if (data.getPropertyValue(key) == null && parent.getPropertyValue(key) != null) {
data.addProperty(key, parent.getPropertyValue(key));
}
- }
- this.translatorRepository.addTranslatorMetadata(new VDBKey(deployment.getName(), deployment.getVersion()), data.getName(), data);
+ }
+ repo.addTranslatorMetadata(data.getName(), data);
}
- createConnectorManagers(deployment);
+ createConnectorManagers(cmr, repo, deployment);
// if store is null and vdb dynamic vdb then try to get the metadata
if (store == null && deployment.isDynamic()) {
store = new MetadataStoreGroup();
- buildDynamicMetadataStore((VFSDeploymentUnit)unit, deployment, store);
+ buildDynamicMetadataStore((VFSDeploymentUnit)unit, deployment, store, cmr);
}
// allow empty vdbs for enabling the preview functionality
@@ -142,7 +142,7 @@
deployment.removeAttachment(MetadataStoreGroup.class);
// add transformation metadata to the repository.
- this.vdbRepository.addVDB(deployment, store, visibilityMap, udf);
+ this.vdbRepository.addVDB(deployment, store, visibilityMap, udf, cmr);
try {
saveMetadataStore((VFSDeploymentUnit)unit, deployment, store);
@@ -152,7 +152,7 @@
boolean valid = true;
if (!preview) {
- valid = validateSources(deployment);
+ valid = validateSources(cmr, deployment);
// Check if the VDB is fully configured.
if (valid) {
@@ -167,7 +167,7 @@
LogManager.logInfo(LogConstants.CTX_RUNTIME, RuntimePlugin.Util.getString("vdb_deployed",deployment, valid?"active":"inactive")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
- private void createConnectorManagers(final VDBMetaData deployment) throws DeploymentException {
+ private void createConnectorManagers(ConnectorManagerRepository cmr, TranslatorRepository repo, final VDBMetaData deployment) throws DeploymentException {
IdentityHashMap<Translator, ExecutionFactory<Object, Object>> map = new IdentityHashMap<Translator, ExecutionFactory<Object, Object>>();
for (Model model:deployment.getModels()) {
@@ -175,13 +175,16 @@
continue;
}
for (String source:model.getSourceNames()) {
- if (this.connectorManagerRepository.getConnectorManager(source) != null) {
+ if (cmr.getConnectorManager(source) != null) {
continue;
}
String name = model.getSourceTranslatorName(source);
- Translator translator = VDBDeployer.this.translatorRepository.getTranslatorMetaData(new VDBKey(deployment.getName(), deployment.getVersion()), name);
+ Translator translator = repo.getTranslatorMetaData(name);
if (translator == null) {
+ translator = this.translatorRepository.getTranslatorMetaData(name);
+ }
+ if (translator == null) {
throw new DeploymentException(RuntimePlugin.Util.getString("translator_not_found", deployment.getName(), deployment.getVersion(), name)); //$NON-NLS-1$
}
@@ -193,12 +196,12 @@
ConnectorManager cm = new ConnectorManager(name, model.getSourceConnectionJndiName(source));
cm.setExecutionFactory(ef);
- this.connectorManagerRepository.addConnectorManager(source, cm);
+ cmr.addConnectorManager(source, cm);
}
}
}
- private boolean validateSources(VDBMetaData deployment) {
+ private boolean validateSources(ConnectorManagerRepository cmr, VDBMetaData deployment) {
boolean valid = true;
for(Model m:deployment.getModels()) {
ModelMetaData model = (ModelMetaData)m;
@@ -207,7 +210,7 @@
if (mapping.getName().equals(CoreConstants.SYSTEM_MODEL) || model.getName().equals(CoreConstants.ODBC_MODEL)) {
continue;
}
- ConnectorManager cm = this.connectorManagerRepository.getConnectorManager(mapping.getName());
+ ConnectorManager cm = cmr.getConnectorManager(mapping.getName());
String msg = cm.getStausMessage();
if (msg != null && msg.length() > 0) {
valid = false;
@@ -232,25 +235,12 @@
public void undeploy(DeploymentUnit unit, VDBMetaData deployment) {
super.undeploy(unit, deployment);
- // there is chance that two different VDBs using the same source name, and their
- // connector manager is removed. should we prefix vdb name??
- for (Model model:deployment.getModels()) {
- if (model.getName().equals(CoreConstants.SYSTEM_MODEL) || model.getName().equals(CoreConstants.ODBC_MODEL)){
- continue;
- }
- for (String source:model.getSourceNames()) {
- if (this.connectorManagerRepository.getConnectorManager(source) != null) {
- this.connectorManagerRepository.removeConnectorManager(source);
- }
- }
- }
-
- this.translatorRepository.removeVDBTranslators(new VDBKey(deployment.getName(), deployment.getVersion()));
-
if (this.vdbRepository != null) {
this.vdbRepository.removeVDB(deployment.getName(), deployment.getVersion());
}
+ deployment.setRemoved(true);
+
try {
deleteMetadataStore((VFSDeploymentUnit)unit, deployment);
} catch (IOException e) {
@@ -264,10 +254,6 @@
this.serializer = serializer;
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
private void saveMetadataStore(VFSDeploymentUnit unit, VDBMetaData vdb, MetadataStoreGroup store) throws IOException {
File cacheFileName = this.serializer.getAttachmentPath(unit, vdb.getName()+"_"+vdb.getVersion()); //$NON-NLS-1$
if (!cacheFileName.exists()) {
@@ -284,7 +270,7 @@
}
}
- private void buildDynamicMetadataStore(final VFSDeploymentUnit unit, final VDBMetaData vdb, final MetadataStoreGroup vdbStore) throws DeploymentException {
+ private void buildDynamicMetadataStore(final VFSDeploymentUnit unit, final VDBMetaData vdb, final MetadataStoreGroup vdbStore, final ConnectorManagerRepository cmr) throws DeploymentException {
// make sure we are configured correctly first
for (Model model:vdb.getModels()) {
@@ -322,19 +308,19 @@
threadPool.run(new Runnable() {
@Override
public void run() {
- loadMetadata(vdb, model, cache, cacheFile, vdbStore);
+ loadMetadata(vdb, model, cache, cacheFile, vdbStore, cmr);
}
});
}
}
}
- private void loadMetadata(VDBMetaData vdb, ModelMetaData model, boolean cache, File cacheFile, MetadataStoreGroup vdbStore) {
+ private void loadMetadata(VDBMetaData vdb, ModelMetaData model, boolean cache, File cacheFile, MetadataStoreGroup vdbStore, ConnectorManagerRepository cmr) {
Exception exception = null;
boolean loaded = false;;
for (String sourceName: model.getSourceNames()) {
- ConnectorManager cm = this.connectorManagerRepository.getConnectorManager(sourceName);
+ ConnectorManager cm = cmr.getConnectorManager(sourceName);
if (cm == null) {
continue;
}
@@ -360,7 +346,7 @@
synchronized (this) {
if (!loaded) {
- vdb.setStatus(VDB.Status.INCOMPLETE);
+ vdb.setStatus(VDB.Status.INACTIVE);
String msg = RuntimePlugin.Util.getString("failed_to_retrive_metadata", vdb.getName()+"-"+vdb.getVersion(), model.getName()); //$NON-NLS-1$ //$NON-NLS-2$
model.addError(ModelMetaData.ValidationError.Severity.ERROR.toString(), msg);
if (exception != null) {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBParserDeployer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -135,7 +135,7 @@
return null;
}
- vdb.setUrl(unit.getRoot().toURL().toExternalForm());
+ vdb.setUrl(unit.getRoot().toURL());
// build the metadata store
if (imf != null) {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -28,18 +28,21 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.NavigableMap;
import java.util.Properties;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListMap;
import org.jboss.deployers.spi.DeploymentException;
import org.teiid.adminapi.AdminException;
import org.teiid.adminapi.AdminProcessingException;
import org.teiid.adminapi.Model;
-import org.teiid.adminapi.VDB;
+import org.teiid.adminapi.VDB.ConnectionType;
+import org.teiid.adminapi.VDB.Status;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.core.CoreConstants;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
import org.teiid.metadata.Datatype;
@@ -57,12 +60,12 @@
public class VDBRepository implements Serializable{
private static final long serialVersionUID = 312177538191772674L;
- private Map<VDBKey, CompositeVDB> vdbRepo = new ConcurrentHashMap<VDBKey, CompositeVDB>();
+ private NavigableMap<VDBKey, CompositeVDB> vdbRepo = new ConcurrentSkipListMap<VDBKey, CompositeVDB>();
private MetadataStore systemStore;
private MetadataStore odbcStore;
private boolean odbcEnabled = false;
- public void addVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String, Resource> visibilityMap, UDFMetaData udf) throws DeploymentException {
+ public void addVDB(VDBMetaData vdb, MetadataStoreGroup stores, LinkedHashMap<String, Resource> visibilityMap, UDFMetaData udf, ConnectorManagerRepository cmr) throws DeploymentException {
if (getVDB(vdb.getName(), vdb.getVersion()) != null) {
throw new DeploymentException(RuntimePlugin.Util.getString("duplicate_vdb", vdb.getName(), vdb.getVersion())); //$NON-NLS-1$
}
@@ -78,12 +81,12 @@
if (this.odbcStore == null) {
addSystemModel(vdb);
- this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, this.systemStore));
+ this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, cmr, this.systemStore));
}
else {
addSystemModel(vdb);
addODBCModel(vdb);
- this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, this.systemStore, odbcStore));
+ this.vdbRepo.put(vdbId(vdb), new CompositeVDB(vdb, stores, visibilityMap, udf, cmr, this.systemStore, odbcStore));
}
}
@@ -129,26 +132,24 @@
public VDBMetaData getActiveVDB(String vdbName) throws VirtualDatabaseException {
int latestVersion = 0;
- for (VDBKey key:this.vdbRepo.keySet()) {
- if(key.getName().equalsIgnoreCase(vdbName)) {
- VDBMetaData vdb = this.vdbRepo.get(key).getVDB();
- if (vdb.getStatus() == VDB.Status.ACTIVE_DEFAULT) {
- latestVersion = vdb.getVersion();
- break;
- }
- // Make sure the VDB Name and version number are the only parts of this vdb key
- latestVersion = Math.max(latestVersion, Integer.parseInt(key.getVersion()));
+ for (VDBKey key:this.vdbRepo.tailMap(new VDBKey(vdbName, 0)).keySet()) {
+ if(!key.getName().equalsIgnoreCase(vdbName)) {
+ break;
}
+ VDBMetaData vdb = this.vdbRepo.get(key).getVDB();
+ if (vdb.getStatus() == Status.ACTIVE) {
+ if (vdb.getConnectionType() == ConnectionType.ANY) {
+ latestVersion = Math.max(vdb.getVersion(), latestVersion);
+ } else if (latestVersion == 0 && vdb.getConnectionType() == ConnectionType.BY_VERSION) {
+ latestVersion = vdb.getVersion();
+ }
+ }
}
if(latestVersion == 0) {
throw new VirtualDatabaseException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
}
- VDBMetaData vdb = getVDB(vdbName, latestVersion);
- if (vdb.getStatus() == VDB.Status.ACTIVE || vdb.getStatus() == VDB.Status.ACTIVE_DEFAULT) {
- return vdb;
- }
- throw new VirtualDatabaseException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, latestVersion)); //$NON-NLS-1$
+ return getVDB(vdbName, latestVersion);
}
public MetadataStore getSystemStore() {
@@ -178,14 +179,17 @@
this.odbcEnabled = true;
}
- public synchronized void removeVDB(String vdbName, int vdbVersion) {
+ public synchronized boolean removeVDB(String vdbName, int vdbVersion) {
VDBKey key = new VDBKey(vdbName, vdbVersion);
- this.vdbRepo.remove(key);
-
- // if this VDB was part of another VDB; then remove them.
- for (CompositeVDB other:this.vdbRepo.values()) {
- other.removeChild(key);
+ CompositeVDB removed = this.vdbRepo.remove(key);
+ if (removed != null) {
+ // if this VDB was part of another VDB; then remove them.
+ for (CompositeVDB other:this.vdbRepo.values()) {
+ other.removeChild(key);
+ }
+ return true;
}
+ return false;
}
public Map<String, Datatype> getBuiltinDatatypes() {
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBStatusChecker.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -35,7 +35,6 @@
public class VDBStatusChecker {
private static final String JAVA_CONTEXT = "java:"; //$NON-NLS-1$
private VDBRepository vdbRepository;
- private ConnectorManagerRepository connectorManagerRepository;
public void translatorAdded(String translatorName) {
resourceAdded(translatorName, true);
@@ -63,15 +62,12 @@
this.vdbRepository = repo;
}
- public void setConnectorManagerRepository(ConnectorManagerRepository repo) {
- this.connectorManagerRepository = repo;
- }
-
public void resourceAdded(String resourceName, boolean translator) {
for (VDBMetaData vdb:this.vdbRepository.getVDBs()) {
if (vdb.getStatus() == VDB.Status.ACTIVE || vdb.isPreview()) {
continue;
}
+ ConnectorManagerRepository cmr = vdb.getAttachment(ConnectorManagerRepository.class);
for (Model m:vdb.getModels()) {
ModelMetaData model = (ModelMetaData)m;
@@ -81,7 +77,7 @@
String sourceName = getSourceName(resourceName, model, translator);
if (sourceName != null) {
- ConnectorManager cm = this.connectorManagerRepository.getConnectorManager(sourceName);
+ ConnectorManager cm = cmr.getConnectorManager(sourceName);
model.clearErrors();
String status = cm.getStausMessage();
if (status != null && status.length() > 0) {
Modified: trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -40,6 +40,8 @@
import org.jboss.managed.api.annotation.ManagementObject;
import org.jboss.managed.api.annotation.ManagementProperties;
import org.jboss.managed.api.annotation.ManagementProperty;
+import org.teiid.adminapi.VDB;
+import org.teiid.adminapi.VDB.ConnectionType;
import org.teiid.adminapi.impl.SessionMetadata;
import org.teiid.adminapi.impl.VDBMetaData;
import org.teiid.client.security.InvalidSessionException;
@@ -163,16 +165,19 @@
String vdbName = properties.getProperty(TeiidURL.JDBC.VDB_NAME);
if (vdbName != null) {
String vdbVersion = properties.getProperty(TeiidURL.JDBC.VDB_VERSION);
- try {
- if (vdbVersion == null) {
- vdb = this.vdbRepository.getActiveVDB(vdbName);
+ if (vdbVersion == null) {
+ try {
+ vdb = this.vdbRepository.getActiveVDB(vdbName);
+ } catch (VirtualDatabaseException e) {
+ throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, "latest")); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ else {
+ vdb = this.vdbRepository.getVDB(vdbName, Integer.parseInt(vdbVersion));
+ if (vdb.getStatus() != VDB.Status.ACTIVE || vdb.getConnectionType() == ConnectionType.NONE) {
+ throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, vdbVersion)); //$NON-NLS-1$
}
- else {
- vdb = this.vdbRepository.getVDB(vdbName, Integer.parseInt(vdbVersion));
- }
- } catch (VirtualDatabaseException e) {
- throw new SessionServiceException(RuntimePlugin.Util.getString("VDBService.VDB_does_not_exist._2", vdbName, vdbVersion==null?"latest":vdbVersion)); //$NON-NLS-1$ //$NON-NLS-2$
- }
+ }
}
if (sessionMaxLimit > 0 && getActiveSessionsCount() >= sessionMaxLimit) {
Modified: trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/TestXMLTypeTranslations.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -113,7 +113,7 @@
Mockito.stub(rwi.getDqpWorkContext()).toReturn(workContext);
Mockito.stub(core.getRequestWorkItem((RequestID)Mockito.anyObject())).toReturn(rwi);
- DataTierManagerImpl dataMgr = new DataTierManagerImpl(core, null, null);
+ DataTierManagerImpl dataMgr = new DataTierManagerImpl(core, null);
doProcess(metadata,
sql,
finder, dataMgr , new List[] {Arrays.asList(new String(ObjectConverterUtil.convertToByteArray(new FileInputStream(UnitTestUtil.getTestDataFile("test-schema.xsd")))))}, DEBUG); //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java 2010-08-04 21:52:59 UTC (rev 2416)
+++ trunk/test-integration/common/src/test/java/org/teiid/jdbc/FakeServer.java 2010-08-05 15:18:36 UTC (rev 2417)
@@ -60,6 +60,7 @@
LogonImpl logon;
DQPCore dqp = new DQPCore();
VDBRepository repo = new VDBRepository();
+ private ConnectorManagerRepository cmr;
public FakeServer() {
this.logon = new LogonImpl(sessionService, null);
@@ -73,7 +74,7 @@
this.dqp.setCacheFactory(new DefaultCacheFactory());
this.dqp.setTransactionService(new FakeTransactionService());
- ConnectorManagerRepository cmr = Mockito.mock(ConnectorManagerRepository.class);
+ cmr = Mockito.mock(ConnectorManagerRepository.class);
Mockito.stub(cmr.getConnectorManager("source")).toReturn(new ConnectorManager("x", "x") {
@Override
public SourceCapabilities getCapabilities() {
@@ -81,7 +82,6 @@
}
});
- this.dqp.setConnectorManagerRepository(cmr);
this.dqp.setCacheFactory(new DefaultCacheFactory());
this.dqp.start(new DQPConfiguration());
this.sessionService.setDqp(this.dqp);
@@ -114,7 +114,7 @@
try {
MetadataStoreGroup stores = new MetadataStoreGroup();
stores.addStore(metadata);
- this.repo.addVDB(vdbMetaData, stores, imf.getEntriesPlusVisibilities(), null);
+ this.repo.addVDB(vdbMetaData, stores, imf.getEntriesPlusVisibilities(), null, cmr);
} catch (DeploymentException e) {
throw new RuntimeException(e);
}
15 years, 5 months
teiid SVN: r2416 - trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-04 17:52:59 -0400 (Wed, 04 Aug 2010)
New Revision: 2416
Modified:
trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java
Log:
re-enabling source query logging
Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java 2010-08-04 19:30:28 UTC (rev 2415)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java 2010-08-04 21:52:59 UTC (rev 2416)
@@ -105,7 +105,7 @@
translatedCommand.translateCommand(command);
if (translatedCommand.getSql() != null && LogManager.isMessageToBeRecorded(LogConstants.CTX_CONNECTOR, MessageLevel.DETAIL)) {
- LogManager.logDetail("Source-specific command: " + translatedCommand.getSql()); //$NON-NLS-1$
+ LogManager.logDetail(LogConstants.CTX_CONNECTOR, "Source-specific command: " + translatedCommand.getSql()); //$NON-NLS-1$
}
return translatedCommand;
15 years, 5 months
teiid SVN: r2415 - trunk/runtime/src/main/java/org/teiid/deployers.
by teiid-commits@lists.jboss.org
Author: rareddy
Date: 2010-08-04 15:30:28 -0400 (Wed, 04 Aug 2010)
New Revision: 2415
Modified:
trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
Log:
TEIID-1006: Once after the metadata is loaded asynchronously the transformation metadata needs to be computed.
Modified: trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-04 14:37:01 UTC (rev 2414)
+++ trunk/runtime/src/main/java/org/teiid/deployers/CompositeVDB.java 2010-08-04 19:30:28 UTC (rev 2415)
@@ -76,7 +76,7 @@
this.mergedVDB = null;
}
- private void update(VDBMetaData vdbMetadata) {
+ void update(VDBMetaData vdbMetadata) {
TransformationMetadata metadata = buildTransformationMetaData(vdbMetadata, getVisibilityMap(), getMetadataStores(), getUDF());
vdbMetadata.addAttchment(QueryMetadataInterface.class, metadata);
vdbMetadata.addAttchment(TransformationMetadata.class, metadata);
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-04 14:37:01 UTC (rev 2414)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java 2010-08-04 19:30:28 UTC (rev 2415)
@@ -370,6 +370,7 @@
}
else {
if (vdb.isValid()) {
+ this.vdbRepository.updateVDB(vdb.getName(), vdb.getVersion());
vdb.setStatus(VDB.Status.ACTIVE);
LogManager.logInfo(LogConstants.CTX_RUNTIME, RuntimePlugin.Util.getString("vdb_activated",vdb.getName(), vdb.getVersion())); //$NON-NLS-1$
}
Modified: trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-04 14:37:01 UTC (rev 2414)
+++ trunk/runtime/src/main/java/org/teiid/deployers/VDBRepository.java 2010-08-04 19:30:28 UTC (rev 2415)
@@ -223,4 +223,11 @@
this.odbcStore = getODBCMetadataStore();
}
}
+
+ public void updateVDB(String name, int version) {
+ CompositeVDB v = this.vdbRepo.get(new VDBKey(name, version));
+ if (v!= null) {
+ v.update(v.getVDB());
+ }
+ }
}
15 years, 5 months
teiid SVN: r2414 - in trunk: engine/src/main/java/org/teiid/dqp/internal/process and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2010-08-04 10:37:01 -0400 (Wed, 04 Aug 2010)
New Revision: 2414
Modified:
trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
Log:
TEIID-829 updating lookup docs
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2010-08-04 13:08:10 UTC (rev 2413)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/scalar_functions.xml 2010-08-04 14:37:01 UTC (rev 2414)
@@ -1774,8 +1774,7 @@
</section>
<section>
<title>Lookup Function</title>
- <para>The Lookup function allows you to cache a table’s
- data in memory and access it through a scalar function. This caching
+ <para>The Lookup function allows you to cache a key value pair table and access it through a scalar function. This caching
accelerates response time to queries that use the lookup tables, known
in business terminology as lookup tables or code tables.</para>
<para>A StatePostalCodes table used to translate postal codes to
@@ -1788,15 +1787,12 @@
</para>
<para>When you call this function for any combination of codeTable, returnColumn, and
keyColumn for the first time, the Teiid System caches the result.
- The Teiid System uses this cached map for all
+ The Teiid System uses this cache for all
queries, in all sessions, that later access this lookup table. The
codeTable requires use of the fully-qualified name, and the
returnColumn and keyColumn parameters should use shortened column
names.</para>
- <para>Because the Teiid System caches and indexes this
- information in memory, this function provides quick access after the
- Teiid System initially caches the lookup table. The Teiid
- System unloads these cached lookup tables when you stop and restart
+ <para>The Teiid System unloads these cached lookup tables when you stop and restart
the Teiid System. Thus, you should not use this function for
data that is subject to updates. Instead, you can use it against
static data that does not change over time.</para>
@@ -1806,11 +1802,6 @@
<para>The keyColumn is expected to contain unique key
values. If the column contains duplicate values, an exception will be thrown.</para>
</listitem>
- <listitem>
- <para>Cached lookup tables might consume significant memory. You
- can limit the number and maximum size of these code tables by
- setting configuration properties.</para>
- </listitem>
</itemizedlist>
</note>
<informaltable frame="all">
@@ -2064,9 +2055,18 @@
functions not categorized below are considered deterministic.</para>
</listitem>
<listitem>
+ <para>User Deterministic - the function will return the same
+ result for the given inputs for the same user. This includes the hasRole
+ and user functions. User deterministic functions are evaluated
+ by the engine as soon as all input values are known, which may occur as soon
+ as the rewrite phase. If a user deterministic function is evaluated
+ during the creation of a prepared processing plan, then the resulting
+ plan will be cached only for the user.</para>
+ </listitem>
+ <listitem>
<para>Session Deterministic - the function will return the same
- result for the given inputs under the same user session. This category includes the hasRole,
- env, and user functions. Session deterministic functions are evaluated
+ result for the given inputs under the same user session. This category includes the env
+ function. Session deterministic functions are evaluated
by the engine as soon as all input values are known, which may occur as soon
as the rewrite phase. If a session deterministic function is evaluated
during the creation of a prepared processing plan, then the resulting
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-04 13:08:10 UTC (rev 2413)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/DQPCore.java 2010-08-04 14:37:01 UTC (rev 2414)
@@ -230,6 +230,9 @@
}
public ClientState getClientState(String key, boolean create) {
+ if (key == null) {
+ return null;
+ }
ClientState state = clientState.get(key);
if (state == null && create) {
state = new ClientState(new TempTableStore(key));
15 years, 5 months