Skip to content

Commit

Permalink
make stringcomparison extends ExpectsInputTypes
Browse files Browse the repository at this point in the history
  • Loading branch information
scwf committed May 5, 2015
1 parent 8aa5aea commit b374ddf
Showing 1 changed file with 6 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ case class Lower(child: Expression) extends UnaryExpression with CaseConversionE
}

/** A base trait for functions that compare two strings, returning a boolean. */
trait StringComparison {
trait StringComparison extends ExpectsInputTypes {
self: BinaryExpression =>

def compare(l: UTF8String, r: UTF8String): Boolean
Expand All @@ -163,6 +163,8 @@ trait StringComparison {

override def nullable: Boolean = left.nullable || right.nullable

override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType)

override def eval(input: Row): Any = {
val leftEval = left.eval(input)
if(leftEval == null) {
Expand All @@ -183,27 +185,24 @@ trait StringComparison {
* A function that returns true if the string `left` contains the string `right`.
*/
case class Contains(left: Expression, right: Expression)
extends BinaryExpression with Predicate with StringComparison with ExpectsInputTypes {
extends BinaryExpression with Predicate with StringComparison {
override def compare(l: UTF8String, r: UTF8String): Boolean = l.contains(r)
override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType)
}

/**
* A function that returns true if the string `left` starts with the string `right`.
*/
case class StartsWith(left: Expression, right: Expression)
extends BinaryExpression with Predicate with StringComparison with ExpectsInputTypes {
extends BinaryExpression with Predicate with StringComparison {
override def compare(l: UTF8String, r: UTF8String): Boolean = l.startsWith(r)
override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType)
}

/**
* A function that returns true if the string `left` ends with the string `right`.
*/
case class EndsWith(left: Expression, right: Expression)
extends BinaryExpression with Predicate with StringComparison with ExpectsInputTypes {
extends BinaryExpression with Predicate with StringComparison {
override def compare(l: UTF8String, r: UTF8String): Boolean = l.endsWith(r)
override def expectedChildTypes: Seq[DataType] = Seq(StringType, StringType)
}

/**
Expand Down

0 comments on commit b374ddf

Please sign in to comment.