コード例 #1
0
ファイル: Helpers.java プロジェクト: NightOfTwelve/longerian
  // statement <- COLUMN COMPARE VALUE
  // | COLUMN IS NULL
  private static void parseStatement(Lexer lexer) {
    // both possibilities start with COLUMN
    if (lexer.currentToken() != Lexer.TOKEN_COLUMN) {
      throw new IllegalArgumentException("syntax error, expected column name");
    }
    lexer.advance();

    // statement <- COLUMN COMPARE VALUE
    if (lexer.currentToken() == Lexer.TOKEN_COMPARE) {
      lexer.advance();
      if (lexer.currentToken() != Lexer.TOKEN_VALUE) {
        throw new IllegalArgumentException("syntax error, expected quoted string");
      }
      lexer.advance();
      return;
    }

    // statement <- COLUMN IS NULL
    if (lexer.currentToken() == Lexer.TOKEN_IS) {
      lexer.advance();
      if (lexer.currentToken() != Lexer.TOKEN_NULL) {
        throw new IllegalArgumentException("syntax error, expected NULL");
      }
      lexer.advance();
      return;
    }

    // didn't get anything good after COLUMN
    throw new IllegalArgumentException("syntax error after column name");
  }
コード例 #2
0
ファイル: Helpers.java プロジェクト: NightOfTwelve/longerian
 // expression <- ( expression ) | statement [AND_OR ( expression ) |
 // statement] *
 // | statement [AND_OR expression]*
 private static void parseExpression(Lexer lexer) {
   for (; ; ) {
     // ( expression )
     if (lexer.currentToken() == Lexer.TOKEN_OPEN_PAREN) {
       lexer.advance();
       parseExpression(lexer);
       if (lexer.currentToken() != Lexer.TOKEN_CLOSE_PAREN) {
         throw new IllegalArgumentException("syntax error, unmatched parenthese");
       }
       lexer.advance();
     } else {
       // statement
       parseStatement(lexer);
     }
     if (lexer.currentToken() != Lexer.TOKEN_AND_OR) {
       break;
     }
     lexer.advance();
   }
 }
コード例 #3
0
ファイル: Helpers.java プロジェクト: NightOfTwelve/longerian
 /** Checks whether this looks like a legitimate selection parameter */
 public static void validateSelection(String selection, Set<String> allowedColumns) {
   try {
     if (selection == null || selection.length() == 0) {
       return;
     }
     Lexer lexer = new Lexer(selection, allowedColumns);
     parseExpression(lexer);
     if (lexer.currentToken() != Lexer.TOKEN_END) {
       throw new IllegalArgumentException("syntax error");
     }
   } catch (RuntimeException ex) {
     if (Constants.LOGV) {
       Log.d(Constants.TAG, "invalid selection [" + selection + "] triggered " + ex);
     } else if (Config.LOGD) {
       Log.d(Constants.TAG, "invalid selection triggered " + ex);
     }
     throw ex;
   }
 }