in spark/hbase-spark/src/main/scala/org/apache/hadoop/hbase/spark/DynamicLogicExpression.scala [251:323]
private def build(
expressionArray: Array[String],
offSet: Int,
encoder: BytesEncoder): (DynamicLogicExpression, Int) = {
val expr = {
if (expressionArray(offSet).equals("(")) {
val left = build(expressionArray, offSet + 1, encoder)
val right = build(expressionArray, left._2 + 1, encoder)
if (expressionArray(left._2).equals("AND")) {
(new AndLogicExpression(left._1, right._1), right._2 + 1)
} else if (expressionArray(left._2).equals("OR")) {
(new OrLogicExpression(left._1, right._1), right._2 + 1)
} else {
throw new Throwable("Unknown gate:" + expressionArray(left._2))
}
} else {
val command = expressionArray(offSet + 1)
if (command.equals("<")) {
(
new LessThanLogicExpression(expressionArray(offSet), expressionArray(offSet + 2).toInt),
offSet + 3)
} else if (command.equals("<=")) {
(
new LessThanOrEqualLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt),
offSet + 3)
} else if (command.equals(">")) {
(
new GreaterThanLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt),
offSet + 3)
} else if (command.equals(">=")) {
(
new GreaterThanOrEqualLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt),
offSet + 3)
} else if (command.equals("==")) {
(
new EqualLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt,
false),
offSet + 3)
} else if (command.equals("!=")) {
(
new EqualLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt,
true),
offSet + 3)
} else if (command.equals("startsWith")) {
(
new StartsWithLogicExpression(
expressionArray(offSet),
expressionArray(offSet + 2).toInt),
offSet + 3)
} else if (command.equals("isNull")) {
(new IsNullLogicExpression(expressionArray(offSet), false), offSet + 2)
} else if (command.equals("isNotNull")) {
(new IsNullLogicExpression(expressionArray(offSet), true), offSet + 2)
} else if (command.equals("Pass")) {
(new PassThroughLogicExpression, offSet + 3)
} else {
throw new Throwable("Unknown logic command:" + command)
}
}
}
expr._1.setEncoder(encoder)
expr
}