in tools/bigquery-hive-external-table-loader/src/main/scala/com/google/cloud/bqhiveloader/PartitionFilters.scala [109:146]
def parseExpression(expr: String): Option[FilterExpression] = {
if (expr.contains("<=")) {
expr.split("<=").map(_.trim) match {
case Array(l,r) => Option(LessThanOrEq(l, r))
case _ => None
}
} else if (expr.contains(">=")) {
expr.split(">=").map(_.trim) match {
case Array(l,r) => Option(GreaterThanOrEq(l, r))
case _ => None
}
} else if (expr.contains('=')) {
expr.split('=').map(_.trim) match {
case Array(l,r) => Option(Equals(l, r))
case _ => None
}
} else if (expr.contains('<')) {
expr.split('<').map(_.trim) match {
case Array(l,r) => Option(LessThan(l, r))
case _ => None
}
} else if (expr.contains('>')) {
expr.split('>').map(_.trim) match {
case Array(l,r) => Option(GreaterThan(l, r))
case _ => None
}
} else if (expr.contains(" IN ")) {
expr.split(" IN ").map(_.trim) match {
case Array(l,r) =>
val set = r.stripPrefix("(").stripSuffix(")")
.split(',').map(_.trim).toSet
Option(In(l, set))
case _ => None
}
} else if (expr.trim == "*") {
Option(MatchAll)
} else None
}