PageRenderTime 47ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/release-0.0.0-rc0/hive/external/metastore/src/java/org/apache/hadoop/hive/metastore/parser/Filter.g

#
text | 130 lines | 108 code | 22 blank | 0 comment | 0 complexity | 414e0530986153452125525b78ad88d1 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, JSON, CPL-1.0
  1. grammar Filter;
  2. options
  3. {
  4. k=3;
  5. }
  6. // Package headers
  7. @header {
  8. package org.apache.hadoop.hive.metastore.parser;
  9. import org.apache.hadoop.hive.metastore.parser.ExpressionTree;
  10. import org.apache.hadoop.hive.metastore.parser.ExpressionTree.LeafNode;
  11. import org.apache.hadoop.hive.metastore.parser.ExpressionTree.Operator;
  12. import org.apache.hadoop.hive.metastore.parser.ExpressionTree.LogicalOperator;
  13. }
  14. @lexer::header {package org.apache.hadoop.hive.metastore.parser;}
  15. @members {
  16. public ExpressionTree tree = new ExpressionTree();
  17. public static String TrimQuotes (String input) {
  18. if (input.length () > 1) {
  19. if ((input.charAt (0) == '"' && input.charAt (input.length () - 1) == '"')
  20. || (input.charAt (0) == '\'' && input.charAt (input.length () - 1) == '\'')) {
  21. return input.substring (1, input.length () - 1);
  22. }
  23. }
  24. return input;
  25. }
  26. }
  27. @rulecatch{
  28. catch (RecognitionException e){
  29. throw e;
  30. }
  31. }
  32. //main rule
  33. filter
  34. :
  35. orExpression
  36. ;
  37. orExpression
  38. :
  39. andExpression (KW_OR andExpression { tree.addIntermediateNode(LogicalOperator.OR); } )*
  40. ;
  41. andExpression
  42. :
  43. expression (KW_AND expression { tree.addIntermediateNode(LogicalOperator.AND); } )*
  44. ;
  45. expression
  46. :
  47. LPAREN orExpression RPAREN
  48. |
  49. operatorExpression
  50. ;
  51. operatorExpression
  52. @init {
  53. boolean isReverseOrder = false;
  54. }
  55. :
  56. (
  57. (key = Identifier op = operator value = StringLiteral)
  58. |
  59. (value = StringLiteral op = operator key = Identifier) { isReverseOrder = true; }
  60. )
  61. {
  62. LeafNode node = new LeafNode();
  63. node.keyName = key.getText();
  64. node.value = TrimQuotes(value.getText());
  65. node.operator = op;
  66. node.isReverseOrder = isReverseOrder;
  67. tree.addLeafNode(node);
  68. };
  69. operator returns [Operator op]
  70. :
  71. t = (LESSTHAN | LESSTHANOREQUALTO | GREATERTHAN | GREATERTHANOREQUALTO | KW_LIKE | EQUAL | NOTEQUAL)
  72. {
  73. $op = Operator.fromString(t.getText().toUpperCase());
  74. };
  75. // Keywords
  76. KW_AND : 'AND';
  77. KW_OR : 'OR';
  78. KW_LIKE : 'LIKE';
  79. // Operators
  80. LPAREN : '(' ;
  81. RPAREN : ')' ;
  82. EQUAL : '=';
  83. NOTEQUAL : '<>';
  84. LESSTHANOREQUALTO : '<=';
  85. LESSTHAN : '<';
  86. GREATERTHANOREQUALTO : '>=';
  87. GREATERTHAN : '>';
  88. // LITERALS
  89. fragment
  90. Letter
  91. : 'a'..'z' | 'A'..'Z'
  92. ;
  93. fragment
  94. Digit
  95. :
  96. '0'..'9'
  97. ;
  98. StringLiteral
  99. :
  100. ( '\'' ( ~('\''|'\\') | ('\\' .) )* '\''
  101. | '\"' ( ~('\"'|'\\') | ('\\' .) )* '\"'
  102. )
  103. ;
  104. Identifier
  105. :
  106. (Letter | Digit) (Letter | Digit | '_')*
  107. ;
  108. WS : (' '|'\r'|'\t'|'\n')+ { skip(); } ;