Github user wangyum commented on a diff in the pull request:

    https://github.com/apache/spark/pull/21782#discussion_r202931883
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
 ---
    @@ -306,44 +306,60 @@ class AstBuilder(conf: SQLConf) extends 
SqlBaseBaseVisitor[AnyRef] with Logging
       }
     
       /**
    -   * Add ORDER BY/SORT BY/CLUSTER BY/DISTRIBUTE BY/LIMIT/WINDOWS clauses 
to the logical plan. These
    -   * clauses determine the shape (ordering/partitioning/rows) of the query 
result.
    +   * Add ORDER BY/SORT BY/CLUSTER BY/DISTRIBUTE BY/RANGE PARTITION 
BY/LIMIT/WINDOWS
    +   * clauses to the logical plan.
    +   * These clauses determine the shape (ordering/partitioning/rows) of the 
query result.
        */
       private def withQueryResultClauses(
           ctx: QueryOrganizationContext,
           query: LogicalPlan): LogicalPlan = withOrigin(ctx) {
         import ctx._
     
    -    // Handle ORDER BY, SORT BY, DISTRIBUTE BY, and CLUSTER BY clause.
    +    // Handle ORDER BY, SORT BY, DISTRIBUTE BY, RANGE PARTITION BY and 
CLUSTER BY clause.
    +    val isOrder = !order.isEmpty
    +    val isSort = !sort.isEmpty
    +    val isDistributeBy = !distributeBy.isEmpty
    +    val isClusterBy = !clusterBy.isEmpty
    +    val isRangePartitionBy = !rangePartitionBy.isEmpty
         val withOrder = if (
    -      !order.isEmpty && sort.isEmpty && distributeBy.isEmpty && 
clusterBy.isEmpty) {
    +      isOrder && !isSort && !isDistributeBy && !isClusterBy && 
!isRangePartitionBy) {
           // ORDER BY ...
           Sort(order.asScala.map(visitSortItem), global = true, query)
    -    } else if (order.isEmpty && !sort.isEmpty && distributeBy.isEmpty && 
clusterBy.isEmpty) {
    +    } else if (!isOrder && isSort && !isDistributeBy && !isClusterBy && 
!isRangePartitionBy) {
           // SORT BY ...
           Sort(sort.asScala.map(visitSortItem), global = false, query)
    -    } else if (order.isEmpty && sort.isEmpty && !distributeBy.isEmpty && 
clusterBy.isEmpty) {
    +    } else if (!isOrder && !isSort && isDistributeBy && !isClusterBy && 
!isRangePartitionBy) {
           // DISTRIBUTE BY ...
           withRepartitionByExpression(ctx, expressionList(distributeBy), query)
    -    } else if (order.isEmpty && !sort.isEmpty && !distributeBy.isEmpty && 
clusterBy.isEmpty) {
    +    } else if (!isOrder && isSort && isDistributeBy && !isClusterBy && 
!isRangePartitionBy) {
           // SORT BY ... DISTRIBUTE BY ...
           Sort(
             sort.asScala.map(visitSortItem),
             global = false,
             withRepartitionByExpression(ctx, expressionList(distributeBy), 
query))
    -    } else if (order.isEmpty && sort.isEmpty && distributeBy.isEmpty && 
!clusterBy.isEmpty) {
    +    } else if (!isOrder && !isSort && !isDistributeBy && isClusterBy && 
!isRangePartitionBy) {
           // CLUSTER BY ...
           val expressions = expressionList(clusterBy)
           Sort(
             expressions.map(SortOrder(_, Ascending)),
             global = false,
             withRepartitionByExpression(ctx, expressions, query))
    -    } else if (order.isEmpty && sort.isEmpty && distributeBy.isEmpty && 
clusterBy.isEmpty) {
    +    } else if (!isOrder && !isSort && !isDistributeBy && !isClusterBy && 
isRangePartitionBy) {
    +      // RANGE PARTITION BY ...
    +      withRepartitionByExpression(ctx, 
rangePartitionBy.asScala.map(visitSortItem), query)
    --- End diff --
    
    Will invoke 
https://github.com/apache/spark/blob/e3201e165e41f076ec72175af246d12c0da529cf/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/basicLogicalOperators.scala#L888


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to