private def build()

in spark/hbase-spark/src/main/scala/org/apache/hadoop/hbase/spark/DynamicLogicExpression.scala [230:279]


  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
  }