## Uses of Interface
org.eclipse.rdf4j.query.algebra.QueryModelVisitor

- Packages that use QueryModelVisitor
  Package | Description
  --- | ---
  org.eclipse.rdf4j.federated.algebra |
  org.eclipse.rdf4j.federated.optimizer |
  org.eclipse.rdf4j.query.algebra | Abstract Query Algebra model.
  org.eclipse.rdf4j.query.algebra.evaluation.impl |
  org.eclipse.rdf4j.query.algebra.helpers |
  org.eclipse.rdf4j.query.parser.sparql | The rdf4j SPARQL 1.1 parser.
  org.eclipse.rdf4j.queryrender | This package contains classes for working with RDF4J query objects.
  org.eclipse.rdf4j.queryrender.sparql |
  org.eclipse.rdf4j.queryrender.sparql.experimental | This package contains classes for rendering RDF4J query objects as SPARQL queries.
  org.eclipse.rdf4j.sail.federation.algebra |
  org.eclipse.rdf4j.sail.federation.optimizers |

- - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.federated.algebra

    Methods in org.eclipse.rdf4j.federated.algebra with parameters of type QueryModelVisitor
    Modifier and Type | Method | Description
    --- | --- | ---
    `<X extends Exception> void` | BoundFiltersNode.`visit​(QueryModelVisitor<X> visitor)` |
    `static <X extends Exception> void` | BoundFiltersNode.`visit​(QueryModelVisitor<X> visitor, BindingSet boundFilters)` |
    `<X extends Exception> void` | CheckStatementPattern.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ConjunctiveFilterExpr.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | EmptyStatementPattern.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ExclusiveGroup.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FedXService.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FedXStatementPattern.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FilterExpr.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | NJoin.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | NTuple.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | NUnion.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | PassThroughTupleExpr.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | SingleSourceQuery.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | StatementSource.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | CheckStatementPattern.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ConjunctiveFilterExpr.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ExclusiveGroup.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FedXService.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FedXStatementPattern.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FilterExpr.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | NTuple.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | PassThroughTupleExpr.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | SingleSourceQuery.`visitChildren​(QueryModelVisitor<X> visitor)` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.federated.optimizer

    Classes in org.eclipse.rdf4j.federated.optimizer that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `ExclusiveTupleExprOptimizer` | A specialized optimizer which identifies and marks `ExclusiveTupleExpr`.
    `class` | `FilterOptimizer` | Filter optimizer to push down FILTER expressions as far as possible.
    `protected static class` | `FilterOptimizer.FilterBindingFinder` |
    `protected static class` | `FilterOptimizer.FilterExprInsertVisitor` |
    `protected static class` | `FilterOptimizer.VarFinder` |
    `class` | `GenericInfoOptimizer` | Generic optimizer Tasks: - Collect information (hasUnion, hasFilter, hasService) - Collect all statements in a list (for source selection), do not collect SERVICE expressions - Collect all Join arguments and group them in the NJoin structure for easier optimization (flatten)
    `class` | `LimitOptimizer` | An optimizer that attempts to push upper limits into BGPs of the query.
    `class` | `ServiceOptimizer` | Optimizer for SERVICE nodes.
    `class` | `StatementGroupAndJoinOptimizer` | Optimizer with the following tasks: 1.
    `class` | `UnionOptimizer` | Optimizer to flatten the UNION operations.

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.query.algebra

    Methods in org.eclipse.rdf4j.query.algebra with parameters of type QueryModelVisitor
    Modifier and Type | Method | Description
    --- | --- | ---
    `<X extends Exception> void` | Add.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | And.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ArbitraryLengthPath.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Avg.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | BindingSetAssignment.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | BNodeGenerator.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Bound.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Clear.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Coalesce.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Compare.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | CompareAll.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | CompareAny.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Copy.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Count.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Create.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Datatype.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | DeleteData.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | DescribeOperator.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Difference.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Distinct.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | EmptySet.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Exists.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Extension.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ExtensionElem.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Filter.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FunctionCall.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Group.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | GroupConcat.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | GroupElem.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | If.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | In.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | InsertData.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Intersection.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IRIFunction.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IsBNode.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IsLiteral.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IsNumeric.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IsResource.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | IsURI.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Join.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Label.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Lang.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | LangMatches.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | LeftJoin.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Like.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ListMemberOperator.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Load.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | LocalName.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | MathExpr.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Max.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Min.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Modify.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Move.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | MultiProjection.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Namespace.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Not.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Or.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Order.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | OrderElem.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Projection.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ProjectionElem.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ProjectionElemList.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | QueryModelNode.`visit​(QueryModelVisitor<X> visitor)` | Visits this node.
    `<X extends Exception> void` | QueryRoot.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Reduced.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Regex.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | SameTerm.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Sample.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Service.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | SingletonSet.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Slice.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | StatementPattern.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Str.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Sum.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | TripleRef.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | TupleFunctionCall.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Union.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ValueConstant.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ValueExprTripleRef.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Var.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ZeroLengthPath.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | AbstractQueryModelNode.`visitChildren​(QueryModelVisitor<X> visitor)` | Dummy implementation of `QueryModelNode.visitChildren(org.eclipse.rdf4j.query.algebra.QueryModelVisitor<X>)` that does nothing.
    `<X extends Exception> void` | Add.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ArbitraryLengthPath.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | BinaryTupleOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | BinaryValueOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Bound.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Clear.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | CompareSubQueryValueOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Copy.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Create.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Extension.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ExtensionElem.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Filter.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | FunctionCall.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Group.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | GroupElem.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | If.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | LeftJoin.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Load.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Modify.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Move.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | MultiProjection.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | NAryValueOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Order.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | OrderElem.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Projection.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ProjectionElemList.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | QueryModelNode.`visitChildren​(QueryModelVisitor<X> visitor)` | Visits the children of this node.
    `<X extends Exception> void` | Regex.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | Service.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | StatementPattern.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | SubQueryValueOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | TripleRef.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | TupleFunctionCall.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | UnaryTupleOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | UnaryValueOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ValueExprTripleRef.`visitChildren​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | ZeroLengthPath.`visitChildren​(QueryModelVisitor<X> visitor)` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.query.algebra.evaluation.impl

    Classes in org.eclipse.rdf4j.query.algebra.evaluation.impl that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected static class` | `BindingAssigner.VarVisitor` |
    `protected static class` | `CompareOptimizer.CompareVisitor` |
    `protected static class` | `ConjunctiveConstraintSplitter.ConstraintVisitor` |
    `protected class` | `ConstantOptimizer.ConstantVisitor` |
    `protected class` | `ConstantOptimizer.VarNameCollector` |
    `protected static class` | `DisjunctiveConstraintOptimizer.OrSameTermOptimizer` |
    `protected static class` | `EvaluationStatistics.CardinalityCalculator` |
    `protected static class` | `FilterOptimizer.DeMergeFilterFinder` |
    `protected static class` | `FilterOptimizer.FilterFinder` |
    `protected static class` | `FilterOptimizer.FilterRelocator` |
    `protected static class` | `FilterOptimizer.MergeFilterFinder` |
    `protected static class` | `IterativeEvaluationOptimizer.IEOVisitor` |
    `protected static class` | `OrderLimitOptimizer.OrderOptimizer` |
    `protected class` | `QueryJoinOptimizer.JoinVisitor` | Deprecated. This class is protected for historic reasons only, and will be made private in a future major release.
    `class` | `QueryModelNormalizer` | A query optimizer that (partially) normalizes query models to a canonical form.
    `protected static class` | `QueryModelPruner.TreeSanitizer` | Deprecated.
    `protected class` | `RegexAsStringFunctionOptimizer.RegexAsStringFunctionVisitor` |
    `protected static class` | `SameTermFilterOptimizer.BindingSetAssignmentCollector` |
    `protected static class` | `SameTermFilterOptimizer.SameTermFilterVisitor` |
    `protected static class` | `SameTermFilterOptimizer.VarBinder` |
    `protected static class` | `SameTermFilterOptimizer.VarRenamer` |
    `protected static class` | `TupleFunctionEvaluationStatistics.TupleFunctionCardinalityCalculator` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.query.algebra.helpers

    Classes in org.eclipse.rdf4j.query.algebra.helpers that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `AbstractQueryModelVisitor<X extends Exception>` | Base class for `QueryModelVisitor`s.
    `class` | `BGPCollector<X extends Exception>` | Basic graph pattern collector.
    `class` | `QueryModelNodeReplacer` | Deprecated.
    `class` | `QueryModelTreePrinter` | QueryModelVisitor implementation that "prints" a tree representation of a query model.
    `class` | `QueryModelTreeToGenericPlanNode` | Convert TupleExpr (QueryModelNode) to GenericPlanNode for the Query.explain(...) feature.
    `class` | `QueryModelVisitorBase<X extends Exception>` | Deprecated. since 2.0.
    `class` | `StatementPatternCollector` | A QueryModelVisitor that collects StatementPattern's from a query model.
    `class` | `VarNameCollector` | A QueryModelVisitor that collects the names of (non-constant) variables that are used in a query model.

    Constructors in org.eclipse.rdf4j.query.algebra.helpers with parameters of type QueryModelVisitor
    Constructor | Description
    --- | ---
    `BGPCollector​(QueryModelVisitor<X> visitor)` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.query.parser.sparql

    Classes in org.eclipse.rdf4j.query.parser.sparql that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `TripleRefCollector` |
    `protected class` | `TupleExprBuilder.SameTermCollector` |
    `protected class` | `TupleExprBuilder.VarCollector` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.queryrender

    Classes in org.eclipse.rdf4j.queryrender that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `BaseTupleExprRenderer` | Base class for rendering RDF4J query API objects into strings.

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.queryrender.sparql

    Classes in org.eclipse.rdf4j.queryrender.sparql that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `ContextCollector` | Visitor implementation for the query algebra which walks the tree and figures out the context for nodes in the algebra.
    `class` | `SparqlTupleExprRenderer` | Extends the BaseTupleExprRenderer to provide support for rendering tuple expressions as SPARQL queries.

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.queryrender.sparql.experimental

    Classes in org.eclipse.rdf4j.queryrender.sparql.experimental that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `SparqlQueryRenderer` | An alternative implementation of the SPARQL query renderer (more complete than the default `SPARQLQueryRenderer`)

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.sail.federation.algebra

    Methods in org.eclipse.rdf4j.sail.federation.algebra with parameters of type QueryModelVisitor
    Modifier and Type | Method | Description
    --- | --- | ---
    `<X extends Exception> void` | NaryJoin.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | OwnedTupleExpr.`visit​(QueryModelVisitor<X> visitor)` |
    `<X extends Exception> void` | AbstractNaryOperator.`visitChildren​(QueryModelVisitor<X> visitor)` |

  - ### Uses of QueryModelVisitor in org.eclipse.rdf4j.sail.federation.optimizers

    Classes in org.eclipse.rdf4j.sail.federation.optimizers that implement QueryModelVisitor
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `EmptyPatternOptimizer` | Remove StatementPatterns that have no statements.
    `protected static class` | `EvaluationStatistics.CardinalityCalculator` |
    `class` | `FederationJoinOptimizer` | Deprecated. since 3.1.0.
    `class` | `OwnedTupleExprPruner` | Remove redundant `OwnedTupleExpr`.
    `class` | `PrepareOwnedTupleExpr` | Remove redundant `OwnedTupleExpr`.
    `protected class` | `QueryModelPruner.TreeSanitizer` |
    `protected class` | `QueryMultiJoinOptimizer.JoinVisitor` |