blob: 91f0322cebcb2dffac5983593d71af2c0ac6301f [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.spark.sql.execution.command.mutation.merge
import scala.collection.mutable.ArrayBuffer
import org.apache.spark.sql.Column
import org.apache.spark.sql.catalyst.TableIdentifier
import org.apache.spark.util.LongAccumulator
/**
* It describes the type of match like whenmatched or whennotmatched etc., it holds all the actions
* to be done when this match passes.
*/
abstract class MergeMatch extends Serializable {
var list: ArrayBuffer[MergeAction] = new ArrayBuffer[MergeAction]()
def getExp: Option[Column]
def addAction(action: MergeAction): MergeMatch = {
list += action
this
}
def getActions: List[MergeAction] = {
list.toList
}
def updateActions(actions: List[MergeAction]): MergeMatch = {
list = new ArrayBuffer[MergeAction]()
list ++= actions
this
}
}
/**
* It describes the type of action like update,delete or insert
*/
trait MergeAction extends Serializable
/**
* It is the holder to keep all the matches and join condition.
*/
case class MergeDataSetMatches(joinExpr: Column, matchList: List[MergeMatch]) extends Serializable
case class WhenMatched(expression: Option[Column] = None) extends MergeMatch {
override def getExp: Option[Column] = expression
}
case class WhenNotMatched(expression: Option[Column] = None) extends MergeMatch {
override def getExp: Option[Column] = expression
}
case class WhenNotMatchedAndExistsOnlyOnTarget(expression: Option[Column] = None)
extends MergeMatch {
override def getExp: Option[Column] = expression
}
case class UpdateAction(updateMap: Map[Column, Column]) extends MergeAction
case class InsertAction(insertMap: Map[Column, Column]) extends MergeAction
/**
* It inserts the history data into history table
*/
case class InsertInHistoryTableAction(insertMap: Map[Column, Column], historyTable: TableIdentifier)
extends MergeAction
case class DeleteAction() extends MergeAction
case class Stats(insertedRows: LongAccumulator,
updatedRows: LongAccumulator,
deletedRows: LongAccumulator)