private def build()

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
  }