blob: 9570a663bb16000408ae2926a65e751511f29aae [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.spark.impl.optimization.accumulator
import org.apache.ignite.spark.impl.optimization.IgniteQueryContext
import org.apache.spark.sql.catalyst.expressions.{Expression, NamedExpression, SortOrder}
import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan
/**
* Generic query info accumulator interface.
*/
private[apache] trait QueryAccumulator extends LogicalPlan {
/**
* @return Ignite query context.
*/
def igniteQueryContext: IgniteQueryContext
/**
* @return Generated output.
*/
def outputExpressions: Seq[NamedExpression]
/**
* @return Ordering info.
*/
def orderBy: Option[Seq[SortOrder]]
/**
* @param outputExpressions New output expressions.
* @return Copy of this accumulator with new output.
*/
def withOutputExpressions(outputExpressions: Seq[NamedExpression]): QueryAccumulator
/**
* @param orderBy New ordering.
* @return Copy of this accumulator with new order.
*/
def withOrderBy(orderBy: Seq[SortOrder]): QueryAccumulator
/**
* @return Copy of this accumulator with `limit` expression.
*/
def withLimit(limit: Expression): QueryAccumulator
/**
* @return Copy of this accumulator with `localLimit` expression.
*/
def withLocalLimit(localLimit: Expression): QueryAccumulator
/**
* @param prettyPrint If true human readable query will be generated.
* @return SQL query.
*/
def compileQuery(prettyPrint: Boolean = false, nestedQuery: Boolean = false): String
/**
* @return Qualifier that should be use to select data from this accumulator.
*/
def qualifier: String
/**
* All expressions are resolved when extra optimization executed.
*/
override lazy val resolved = true
}