All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.crobox.clickhouse.dsl.column.ScalaStringFunctions.scala Maven / Gradle / Ivy
package com.crobox.clickhouse.dsl.column
import com.crobox.clickhouse.dsl.TableColumn
import scala.language.implicitConversions
import com.crobox.clickhouse.dsl.marshalling.QueryValueFormats._
trait ScalaStringFunctions { self: StringFunctions with StringSearchFunctions with LogicalFunctions with Magnets =>
trait ScalaStringFunctionOps { self: StringSearchOps with StringOps with StringColMagnet[_] =>
def startsWithAnyOf[S](others: Seq[S],
caseInsensitive: Boolean)(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
if (caseInsensitive) iStartsWithAnyOf(others) else startsWithAnyOf(others)
def endsWithAnyOf[S](others: Seq[S],
caseInsensitive: Boolean)(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
if (caseInsensitive) iEndsWithAnyOf(others) else endsWithAnyOf(others)
def containsAnyOf[S](others: Iterable[S],
caseInsensitive: Boolean)(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
if (caseInsensitive) iContainsAnyOf(others) else containsAnyOf(others)
def startsWith(other: StringColMagnet[_], caseInsensitive: Boolean): TableColumn[Boolean] =
if (caseInsensitive) iStartsWith(other) else startsWith(other)
def endsWith(other: StringColMagnet[_], caseInsensitive: Boolean): TableColumn[Boolean] =
if (caseInsensitive) iEndsWith(other) else endsWith(other)
def contains(other: StringColMagnet[_], caseInsensitive: Boolean): TableColumn[Boolean] =
if (caseInsensitive) iContains(other) else contains(other)
//
// Case Sensitive
//
def startsWithAnyOf[S](others: Seq[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
likeWithAnyOf(others.map(other => concat(ev(other), "%")))
def endsWithAnyOf[S](others: Seq[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
likeWithAnyOf(others.map(other => concat("%", ev(other))))
def containsAnyOf[S](others: Iterable[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
likeWithAnyOf(others.map(other => concat("%", ev(other), "%")))
def startsWith(other: StringColMagnet[_]): TableColumn[Boolean] =
Like(self, Concat(other, "%"))
def endsWith(other: StringColMagnet[_]): TableColumn[Boolean] =
Like(self, Concat("%", other))
def contains(other: StringColMagnet[_]): TableColumn[Boolean] =
Like(self, Concat("%", other, "%"))
def likeWithAnyOf[S](others: Iterable[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
others.map(o => Like(self, ev(o)).asInstanceOf[TableColumn[Boolean]]).reduce((a, b) => or(a, b))
//
// Case Insensitive
//
def iStartsWithAnyOf[S](others: Seq[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
iLikeWithAnyOf(others.map(other => concat(ev(other), "%")))
def iEndsWithAnyOf[S](others: Seq[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
iLikeWithAnyOf(others.map(other => concat("%", ev(other))))
def iContainsAnyOf[S](others: Iterable[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
iLikeWithAnyOf(others.map(other => concat("%", ev(other), "%")))
def iStartsWith(other: StringColMagnet[_]): TableColumn[Boolean] =
ILike(self, Concat(other, "%"))
def iEndsWith(other: StringColMagnet[_]): TableColumn[Boolean] =
ILike(self, Concat("%", other))
def iContains(other: StringColMagnet[_]): TableColumn[Boolean] =
ILike(self, Concat("%", other, "%"))
def iLikeWithAnyOf[S](others: Iterable[S])(implicit ev: S => StringColMagnet[_]): TableColumn[Boolean] =
others.map(o => ILike(self, ev(o)).asInstanceOf[TableColumn[Boolean]]).reduce((a, b) => or(a, b))
}
}