Package | Description |
---|---|
org.modeshape.jcr.query.engine |
This package contains several fully-functional query engine implementations.
|
org.modeshape.jcr.query.optimize |
This package contains the Optimizer interface, a rule-based optimizer implementation, and library of optimization rules.
|
org.modeshape.jcr.query.plan |
This package defines the
Planner interface, the CanonicalPlanner implementation, and the
PlanNode class that is used to represent a canonical query plan. |
Modifier and Type | Method and Description |
---|---|
protected NodeSequence |
ScanningQueryEngine.createNodeSequence(QueryCommand originalQuery,
org.modeshape.jcr.query.engine.ScanningQueryEngine.ScanQueryContext context,
PlanNode plan,
QueryResults.Columns columns,
QuerySources sources)
Create a node sequence containing the results of the original query as defined by the supplied plan.
|
protected NodeSequence |
ScanningQueryEngine.createNodeSequenceForSource(QueryCommand originalQuery,
QueryContext context,
PlanNode sourceNode,
IndexPlan index,
QueryResults.Columns columns,
QuerySources sources)
Create a node sequence for the given index
|
protected NodeSequence |
IndexQueryEngine.createNodeSequenceForSource(QueryCommand originalQuery,
QueryContext context,
PlanNode sourceNode,
IndexPlan indexPlan,
QueryResults.Columns columns,
QuerySources sources) |
protected NodeSequence |
ScanningQueryEngine.createNodeSequenceForSource(QueryCommand originalQuery,
QueryContext context,
PlanNode sourceNode,
QueryResults.Columns columns,
QuerySources sources)
Create a node sequence for the given source.
|
protected QueryResults.Columns |
ScanningQueryEngine.determineProjectedColumns(PlanNode optimizedPlan,
org.modeshape.jcr.query.engine.ScanningQueryEngine.ScanQueryContext context)
Compute the columns that are defined in the supplied
plan node . |
protected QueryResults |
ScanningQueryEngine.executeOptimizedQuery(org.modeshape.jcr.query.engine.ScanningQueryEngine.ScanQueryContext context,
QueryCommand command,
QueryResults.Statistics statistics,
PlanNode plan)
Execute the optimized query defined by the supplied
plan node . |
Modifier and Type | Method and Description |
---|---|
protected PlanNode |
RaiseSelectCriteria.copySelectNode(QueryContext context,
PlanNode selectNode,
SelectorName selectorName,
String propertyName,
SelectorName copySelectorName,
String copyPropertyName) |
protected PlanNode |
CopyCriteria.copySelectNode(QueryContext context,
PlanNode selectNode,
SelectorName selectorName,
String propertyName,
SelectorName copySelectorName,
String copyPropertyName) |
PlanNode |
RightOuterToLeftOuterJoins.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewritePseudoColumns.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewritePathAndNameCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewriteIdentityJoins.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewriteAsRangeCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ReplaceViews.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ReorderSortAndRemoveDuplicates.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RemoveEmptyAccessNodes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RaiseVariableName.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RaiseSelectCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
PushSelectCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
PushProjects.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
OrderIndexesByCost.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
OptimizerRule.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack)
Optimize the supplied plan using the supplied context, hints, and yet-to-be-run rules.
|
PlanNode |
JoinOrder.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
CopyCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ChooseJoinAlgorithm.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddOrderingColumnsToSources.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddJoinConditionColumnsToSources.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddIndexes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddAccessNodes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
protected PlanNode |
PushSelectCriteria.findBestChildForCriteria(PlanNode criteriaNode,
PlanNode originatingNode) |
protected PlanNode |
PushSelectCriteria.findOriginatingNode(PlanNode criteriaNode,
List<PlanNode> originatingNodes)
Find the first node that has all of the same
selectors as the supplied criteria. |
PlanNode |
RuleBasedOptimizer.optimize(QueryContext context,
PlanNode plan) |
PlanNode |
Optimizer.optimize(QueryContext context,
PlanNode plan)
Optimize the supplied query plan and produce an executable processor plan.
|
Modifier and Type | Method and Description |
---|---|
protected void |
AddJoinConditionColumnsToSources.addEquiJoinColumn(QueryContext context,
PlanNode node,
Column joinColumn)
Make sure that the supplied column is included in the
projected columns on the supplied
plan node or its children. |
protected boolean |
AddOrderingColumnsToSources.addSortColumn(QueryContext context,
PlanNode node,
Column sortColumn)
Make sure that the supplied column is included in the
projected columns on the supplied
plan node or its children. |
protected boolean |
PushSelectCriteria.atBoundary(PlanNode criteriaNode,
PlanNode originatingNode)
Determine whether all of the nodes between the criteria node and its originating node are criteria (SELECT) nodes.
|
protected PlanNode |
RaiseSelectCriteria.copySelectNode(QueryContext context,
PlanNode selectNode,
SelectorName selectorName,
String propertyName,
SelectorName copySelectorName,
String copyPropertyName) |
protected PlanNode |
CopyCriteria.copySelectNode(QueryContext context,
PlanNode selectNode,
SelectorName selectorName,
String propertyName,
SelectorName copySelectorName,
String copyPropertyName) |
protected void |
CopyCriteria.copySelectNodes(QueryContext context,
PlanNode fromJoined,
PlanNode toJoined) |
PlanNode |
RightOuterToLeftOuterJoins.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewritePseudoColumns.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewritePathAndNameCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewriteIdentityJoins.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RewriteAsRangeCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ReplaceViews.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ReorderSortAndRemoveDuplicates.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RemoveEmptyAccessNodes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RaiseVariableName.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
RaiseSelectCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
PushSelectCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
PushProjects.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
OrderIndexesByCost.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
OptimizerRule.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack)
Optimize the supplied plan using the supplied context, hints, and yet-to-be-run rules.
|
PlanNode |
JoinOrder.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
CopyCriteria.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
ChooseJoinAlgorithm.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddOrderingColumnsToSources.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddJoinConditionColumnsToSources.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddIndexes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
PlanNode |
AddAccessNodes.execute(QueryContext context,
PlanNode plan,
LinkedList<OptimizerRule> ruleStack) |
protected PlanNode |
PushSelectCriteria.findBestChildForCriteria(PlanNode criteriaNode,
PlanNode originatingNode) |
protected PlanNode |
PushSelectCriteria.findOriginatingNode(PlanNode criteriaNode,
List<PlanNode> originatingNodes)
Find the first node that has all of the same
selectors as the supplied criteria. |
PlanNode |
RuleBasedOptimizer.optimize(QueryContext context,
PlanNode plan) |
PlanNode |
Optimizer.optimize(QueryContext context,
PlanNode plan)
Optimize the supplied query plan and produce an executable processor plan.
|
protected boolean |
PushSelectCriteria.pushDownJoinCriteria(PlanNode criteriaNode,
PlanNode joinNode)
Attempt to push down criteria that applies to the JOIN as additional constraints on the JOIN itself.
|
protected boolean |
PushSelectCriteria.pushTowardsOriginatingNode(PlanNode criteriaNode,
PlanNode originatingNode)
Push the criteria node as close to the originating node as possible.
|
protected void |
RaiseVariableName.raiseVariableName(PlanNode node) |
protected String |
RaiseVariableName.removeVariableName(PlanNode node) |
protected void |
RewriteIdentityJoins.rewriteJoinNode(QueryContext context,
PlanNode joinNode,
Map<SelectorName,SelectorName> rewrittenSelectors) |
Modifier and Type | Method and Description |
---|---|
protected PlanNode |
PushSelectCriteria.findOriginatingNode(PlanNode criteriaNode,
List<PlanNode> originatingNodes)
Find the first node that has all of the same
selectors as the supplied criteria. |
Modifier and Type | Method and Description |
---|---|
static PlanNode |
PlanUtil.addMissingProjectColumns(QueryContext context,
PlanNode node,
List<Column> allProjectedColumns) |
protected PlanNode |
CanonicalPlanner.attachCriteria(QueryContext context,
PlanNode plan,
Constraint constraint,
List<? extends Column> columns,
Map<String,Subquery> subqueriesByVariableName)
Attach all criteria above the join nodes.
|
protected PlanNode |
CanonicalPlanner.attachDuplicateRemoval(QueryContext context,
PlanNode plan)
Attach DUP_REMOVE node at top of tree.
|
protected PlanNode |
CanonicalPlanner.attachLimits(QueryContext context,
PlanNode plan,
Limit limit)
Attach a LIMIT node at the top of the plan tree.
|
protected PlanNode |
CanonicalPlanner.attachProject(QueryContext context,
PlanNode plan,
List<? extends Column> columns,
Map<SelectorName,Schemata.Table> selectors)
Attach a PROJECT node at the top of the plan tree.
|
protected PlanNode |
CanonicalPlanner.attachSorting(QueryContext context,
PlanNode plan,
List<? extends Ordering> orderings)
Attach SORT node at top of tree.
|
protected PlanNode |
CanonicalPlanner.attachSubqueries(QueryContext context,
PlanNode plan,
Map<String,Subquery> subqueriesByVariableName)
Attach plan nodes for each subquery, resulting with the first subquery at the top of the plan tree.
|
PlanNode |
PlanNode.clone()
This class returns a new clone of the plan tree rooted at this node.
|
protected PlanNode |
PlanNode.cloneWithoutNewParent() |
protected PlanNode |
CanonicalPlanner.createCanonicalPlan(QueryContext context,
Query query)
Create a canonical query plan for the given query.
|
protected PlanNode |
CanonicalPlanner.createCanonicalPlan(QueryContext context,
SetQuery query)
Create a canonical query plan for the given set query.
|
PlanNode |
Planner.createPlan(QueryContext context,
QueryCommand query)
Create a canonical query plan for the given command.
|
PlanNode |
CanonicalPlanner.createPlan(QueryContext context,
QueryCommand query) |
protected PlanNode |
CanonicalPlanner.createPlanNode(QueryContext context,
Source source,
Map<SelectorName,Schemata.Table> usedSelectors)
Create a JOIN or SOURCE node that contain the source information.
|
PlanNode |
PlanNode.findAncestor(PlanNode.Type typeToFind)
Starting at the parent of this node, find the lowest (also closest) ancestor that has the specified type.
|
PlanNode |
PlanNode.findAncestor(PlanNode.Type firstTypeToFind,
PlanNode.Type... additionalTypesToFind)
Starting at the parent of this node, find the lowest (also closest) ancestor that has one of the specified types.
|
PlanNode |
PlanNode.findAncestor(Set<PlanNode.Type> typesToFind)
Starting at the parent of this node, find the lowest (also closest) ancestor that has one of the specified types.
|
PlanNode |
PlanNode.findAtOrBelow(PlanNode.Traversal order,
PlanNode.Type typeToFind)
Find the first node with the specified type that are at or below this node.
|
PlanNode |
PlanNode.findAtOrBelow(PlanNode.Traversal order,
PlanNode.Type firstTypeToFind,
PlanNode.Type... additionalTypesToFind)
Find the first node with one of the specified types that are at or below this node.
|
PlanNode |
PlanNode.findAtOrBelow(PlanNode.Traversal order,
Set<PlanNode.Type> typesToFind)
Find the first node with one of the specified types that are at or below this node.
|
PlanNode |
PlanNode.findAtOrBelow(PlanNode.Type typeToFind)
Find the first node with the specified type that are at or below this node.
|
PlanNode |
PlanNode.findAtOrBelow(PlanNode.Type firstTypeToFind,
PlanNode.Type... additionalTypesToFind)
Find the first node with one of the specified types that are at or below this node.
|
PlanNode |
PlanNode.findAtOrBelow(Set<PlanNode.Type> typesToFind)
Find the first node with one of the specified types that are at or below this node.
|
PlanNode |
PlanNode.getChild(int index)
Get the child at the supplied index.
|
PlanNode |
PlanNode.getFirstChild()
Get the first child.
|
PlanNode |
PlanNode.getLastChild()
Get the last child.
|
PlanNode |
PlanNode.getParent()
Get the parent of this node.
|
PlanNode |
PlanNode.removeFromParent()
Remove this node from its parent, and return the node that used to be the parent of this node.
|
Modifier and Type | Method and Description |
---|---|
List<PlanNode> |
PlanNode.findAllAtOrBelow()
Find all of the nodes that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Traversal order)
Find all of the nodes that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Traversal order,
PlanNode.Type typeToFind)
Find all of the nodes of the specified type that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Traversal order,
PlanNode.Type firstTypeToFind,
PlanNode.Type... additionalTypesToFind)
Find all of the nodes with one of the specified types that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Traversal order,
Set<PlanNode.Type> typesToFind)
Find all of the nodes with one of the specified types that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Type typeToFind)
Find all of the nodes of the specified type that are at or below this node, using pre-order traversal.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(PlanNode.Type firstTypeToFind,
PlanNode.Type... additionalTypesToFind)
Find all of the nodes with one of the specified types that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllAtOrBelow(Set<PlanNode.Type> typesToFind)
Find all of the nodes with one of the specified types that are at or below this node.
|
List<PlanNode> |
PlanNode.findAllFirstNodesAtOrBelow(PlanNode.Type typeToFind)
Look at nodes below this node, searching for nodes that have the supplied type.
|
List<PlanNode> |
PlanNode.getChildren()
Get the unmodifiable list of child nodes.
|
LinkedList<PlanNode> |
PlanNode.getPathTo(PlanNode descendant)
Get the path from this node (inclusive) to the supplied descendant node (inclusive)
|
Iterator<PlanNode> |
PlanNode.iterator() |
List<PlanNode> |
PlanNode.removeAllChildren()
Remove all children from this node.
|
Modifier and Type | Method and Description |
---|---|
void |
PlanNode.addChildren(PlanNode first,
PlanNode second)
Add the supplied nodes at the end of the list of children.
|
void |
PlanNode.addChildren(PlanNode first,
PlanNode second,
PlanNode third)
Add the supplied nodes at the end of the list of children.
|
void |
PlanNode.addFirstChild(PlanNode child)
Add the supplied node to the front of the list of children.
|
void |
PlanNode.addLastChild(PlanNode child)
Add the supplied node to the end of the list of children.
|
static PlanNode |
PlanUtil.addMissingProjectColumns(QueryContext context,
PlanNode node,
List<Column> allProjectedColumns) |
void |
PlanNode.Operation.apply(PlanNode node) |
protected PlanNode |
CanonicalPlanner.attachCriteria(QueryContext context,
PlanNode plan,
Constraint constraint,
List<? extends Column> columns,
Map<String,Subquery> subqueriesByVariableName)
Attach all criteria above the join nodes.
|
protected PlanNode |
CanonicalPlanner.attachDuplicateRemoval(QueryContext context,
PlanNode plan)
Attach DUP_REMOVE node at top of tree.
|
protected PlanNode |
CanonicalPlanner.attachLimits(QueryContext context,
PlanNode plan,
Limit limit)
Attach a LIMIT node at the top of the plan tree.
|
protected PlanNode |
CanonicalPlanner.attachProject(QueryContext context,
PlanNode plan,
List<? extends Column> columns,
Map<SelectorName,Schemata.Table> selectors)
Attach a PROJECT node at the top of the plan tree.
|
protected PlanNode |
CanonicalPlanner.attachSorting(QueryContext context,
PlanNode plan,
List<? extends Ordering> orderings)
Attach SORT node at top of tree.
|
protected PlanNode |
CanonicalPlanner.attachSubqueries(QueryContext context,
PlanNode plan,
Map<String,Subquery> subqueriesByVariableName)
Attach plan nodes for each subquery, resulting with the first subquery at the top of the plan tree.
|
static PlanUtil.ColumnMapping |
PlanUtil.createMappingFor(Schemata.View view,
PlanNode viewPlan) |
static PlanUtil.ColumnMapping |
PlanUtil.createMappingForAliased(SelectorName viewAlias,
Schemata.View view,
PlanNode viewPlan) |
void |
PlanNode.extractChild(PlanNode child)
Remove the child node from this node, and replace that child with its first child (if there is one).
|
static List<Column> |
PlanUtil.findRequiredColumns(QueryContext context,
PlanNode planNode)
Collected the minimum set of columns from the supplied table that are required by or used within the plan at the supplied
node or above.
|
static List<String> |
PlanUtil.findRequiredColumnTypes(QueryContext context,
List<Column> columns,
PlanNode node) |
LinkedList<PlanNode> |
PlanNode.getPathTo(PlanNode descendant)
Get the path from this node (inclusive) to the supplied descendant node (inclusive)
|
void |
PlanNode.insertAsParent(PlanNode newParent)
Insert the supplied node into the plan node tree immediately above this node.
|
boolean |
PlanNode.isAbove(PlanNode possibleDescendant)
Determine if the supplied node is a descendant of this node.
|
boolean |
PlanNode.isBelow(PlanNode possibleAncestor)
Determine if the supplied node is an ancestor of this node.
|
boolean |
PlanNode.isSameAs(PlanNode other)
Determine whether the supplied plan is equivalent to this plan.
|
boolean |
PlanNode.removeChild(PlanNode child)
Remove the node from this node.
|
static void |
PlanUtil.removeDuplicateSelectNodesUnderEachAccessNode(QueryContext context,
PlanNode node) |
boolean |
PlanNode.replaceChild(PlanNode child,
PlanNode replacement)
Replace the supplied child with another node.
|
static Constraint |
PlanUtil.replaceReferences(QueryContext context,
Constraint constraint,
PlanUtil.ColumnMapping mapping,
PlanNode node) |
static void |
PlanUtil.replaceReferencesToRemovedSource(QueryContext context,
PlanNode planNode,
Map<SelectorName,SelectorName> rewrittenSelectors) |
static DynamicOperand |
PlanUtil.replaceViewReferences(QueryContext context,
DynamicOperand operand,
PlanUtil.ColumnMapping mapping,
PlanNode node) |
static JoinCondition |
PlanUtil.replaceViewReferences(QueryContext context,
JoinCondition joinCondition,
PlanUtil.ColumnMapping mapping,
PlanNode node) |
static void |
PlanUtil.replaceViewReferences(QueryContext context,
PlanNode topOfViewInPlan,
PlanUtil.ColumnMapping mappings) |
protected static void |
PlanUtil.replaceViewReferences(QueryContext context,
PlanNode node,
PlanUtil.ColumnMapping mappings,
SelectorName viewName,
List<PlanNode> potentiallyRemovableSources) |
void |
PlanNode.setParent(PlanNode parent)
Set the parent for this node.
|
protected void |
CanonicalPlanner.setSubqueryVariableName(PlanNode subqueryPlan,
String varName) |
Modifier and Type | Method and Description |
---|---|
void |
PlanNode.addChildren(Iterable<PlanNode> otherChildren)
Add the supplied nodes at the end of the list of children.
|
void |
PlanNode.orderChildren(Comparator<PlanNode> comparator) |
void |
PlanNode.orderChildren(PlanNode.Type type,
Comparator<PlanNode> comparator) |
protected static void |
PlanUtil.replaceViewReferences(QueryContext context,
PlanNode node,
PlanUtil.ColumnMapping mappings,
SelectorName viewName,
List<PlanNode> potentiallyRemovableSources) |
Constructor and Description |
---|
PlanNode(PlanNode.Type type,
PlanNode parent)
Create a new plan node with the supplied initial type ad that is a child of the supplied parent.
|
PlanNode(PlanNode.Type type,
PlanNode parent,
Iterable<SelectorName> selectors)
Create a new plan node with the supplied initial type ad that is a child of the supplied parent.
|
PlanNode(PlanNode.Type type,
PlanNode parent,
SelectorName... selectors)
Create a new plan node with the supplied initial type ad that is a child of the supplied parent.
|
Copyright © 2008–2016 JBoss, a division of Red Hat. All rights reserved.