Packages

t

org.apache.spark.sql.catalyst.analysis.resolver

ProducesUnresolvedSubtree

trait ProducesUnresolvedSubtree extends ResolvesExpressionChildren

A mixin trait for expression resolvers that as part of their resolution, replace single node with a subtree of nodes. This step is necessary because the underlying legacy code that is being called produces partially-unresolved subtrees. In order to resolve the subtree a callback resolver is called recursively. This callback must ensure that no node is resolved twice in order to not break the single-pass invariant. This is done by tagging the limits of this traversal with ResolverTag.SINGLE_PASS_SUBTREE_BOUNDARY tag. This tag is applied to the original expression's children, which are guaranteed to be resolved at the time of given expression's resolution. When callback resolver encounters the node that is tagged, it should return identity instead of trying to resolve it.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ProducesUnresolvedSubtree
  2. ResolvesExpressionChildren
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @IntrinsicCandidate() @native()
  9. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @IntrinsicCandidate() @native()
  10. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  11. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @IntrinsicCandidate() @native()
  13. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @IntrinsicCandidate() @native()
  14. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  15. def toString(): String
    Definition Classes
    AnyRef → Any
  16. def tryPopSinglePassSubtreeBoundary(unresolvedExpression: Expression): Boolean

    Try to pop the tag that marks the boundary of the single-pass subtree resolution.

    Try to pop the tag that marks the boundary of the single-pass subtree resolution. ExpressionResolver calls this method to check if the subtree traversal needs to be stopped because lower subtree is already resolved.

    Attributes
    protected
  17. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  18. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  20. def withResolvedChildren(unresolvedExpression: Expression, resolveChild: (Expression) => Expression): Expression

    Resolves generic Expression children and returns its copy with children resolved.

    Resolves generic Expression children and returns its copy with children resolved.

    We avoid extra method calls here, because resolveChild usually recurses deeply into resolution, and expression trees may be quite deep.

    Attributes
    protected
    Definition Classes
    ResolvesExpressionChildren
  21. def withResolvedChildren(unresolvedExpression: QuaternaryExpression, resolveChild: (Expression) => Expression): Expression

    Resolves QuaternaryExpression children and returns its copy with children resolved.

    Resolves QuaternaryExpression children and returns its copy with children resolved.

    Attributes
    protected
    Definition Classes
    ResolvesExpressionChildren
  22. def withResolvedChildren(unresolvedExpression: TernaryExpression, resolveChild: (Expression) => Expression): Expression

    Resolves TernaryExpression children and returns its copy with children resolved.

    Resolves TernaryExpression children and returns its copy with children resolved.

    Attributes
    protected
    Definition Classes
    ResolvesExpressionChildren
  23. def withResolvedChildren(unresolvedExpression: BinaryExpression, resolveChild: (Expression) => Expression): Expression

    Resolves BinaryExpression children and returns its copy with children resolved.

    Resolves BinaryExpression children and returns its copy with children resolved.

    Attributes
    protected
    Definition Classes
    ResolvesExpressionChildren
  24. def withResolvedChildren(unresolvedExpression: UnaryExpression, resolveChild: (Expression) => Expression): Expression

    Resolves UnaryExpression children and returns its copy with children resolved.

    Resolves UnaryExpression children and returns its copy with children resolved.

    Attributes
    protected
    Definition Classes
    ResolvesExpressionChildren
  25. def withResolvedSubtree(expression: Expression, expressionResolver: (Expression) => Expression)(body: => Expression): Expression

    Helper method used to resolve a subtree that is generated as part of the resolution of some node.

    Helper method used to resolve a subtree that is generated as part of the resolution of some node. Method ensures that the downwards traversal never visits previously resolved nodes by tracking the limits of the traversal with a tag. Invokes a resolver callback to resolve children, but DOES NOT resolve the root of the subtree.

    If the result of the callback is the same object as the source expression, we don't perform the downwards traversal. This is both more optimal and a fail-safe mechanism in case we accidentally lose the ResolverTag.SINGLE_PASS_SUBTREE_BOUNDARY tag.

    Attributes
    protected

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated
    Deprecated

    (Since version 9)

Inherited from AnyRef

Inherited from Any

Ungrouped