org.objectweb.jonas_ejb.lib
Class EjbqlQueryFilterVisitor

java.lang.Object
  |
  +--org.objectweb.jonas_ejb.lib.EjbqlAbstractVisitor
        |
        +--org.objectweb.jonas_ejb.lib.EjbqlQueryFilterVisitor
All Implemented Interfaces:
EJBQLVisitor

public class EjbqlQueryFilterVisitor
extends EjbqlAbstractVisitor

Implementation of a visitor that creates the filter corresponding to the WHERE clause. Created on Sep 6, 2002

Author:
Christophe Ney [cney@batisseurs.com]

Inner classes inherited from class org.objectweb.jonas_ejb.lib.EjbqlAbstractVisitor
EjbqlAbstractVisitor.IdValue, EjbqlAbstractVisitor.VisitorException
 
Constructor Summary
EjbqlQueryFilterVisitor(org.objectweb.medor.query.api.QueryTree _qt, java.lang.Class[] parameterTypes, ASTEJBQL ejbql)
          Constructor
 
Method Summary
 org.objectweb.medor.filter.api.Expression getQueryFilter()
          get the query filter that was built from visiting the syntaxic tree
 java.lang.Object visit(ASTArithmeticExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
arithmetic_expression ::= arithmetic_term [ { + | - } arithmetic_term ] *
 java.lang.Object visit(ASTArithmeticFactor node, java.lang.Object data)
          Push corresponding Expression to the stack.
arithmetic_factor ::= [ + |- ] arithmetic_primary
 java.lang.Object visit(ASTArithmeticLiteral node, java.lang.Object data)
          Node with value set to litteral arithmetic.
 java.lang.Object visit(ASTArithmeticTerm node, java.lang.Object data)
          Push corresponding Expression to the stack.
arithmetic_term ::= arithmetic_factor [ { * | / } arithmetic_factor ]*
 java.lang.Object visit(ASTBetweenExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
between_expression ::= arithmetic_expression [ NOT ] BETWEEN arithmetic_expression AND arithmetic_expression
 java.lang.Object visit(ASTBooleanExpression node, java.lang.Object data)
          Visit child nodes boolean_expression ::= single_valued_path_expression | boolean_literal | input_parameter
 java.lang.Object visit(ASTBooleanLiteral node, java.lang.Object data)
          Node with value set to litteral boolean.
 java.lang.Object visit(ASTCollectionMemberExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
collection_member_expression ::= {single_valued_navigation | identification_variable | input_parameter} [ NOT ] MEMBER [ OF ] collection_valued_path_expression
 java.lang.Object visit(ASTCollectionValuedPathExpression node, java.lang.Object data)
          Push corresponding MedorField to the stack.
collection_valued_path_expression ::= path was in initial BNF collection_valued_path_expression ::= identification_variable. [
 java.lang.Object visit(ASTComparisonExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
comparison_expression ::= string_value { =|<>} string_expression | boolean_value { =|<>} boolean_expression | datetime_value { = | <> | > | < } datetime_expression | entity_bean_value { = | <> } entity_bean_expression | arithmetic_value { = | > | >= | < | <= | <> } single_value_designator
 java.lang.Object visit(ASTConditionalExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
conditional_expression ::= conditional_term [ OR conditional_term ]*
 java.lang.Object visit(ASTConditionalFactor node, java.lang.Object data)
          Push corresponding Expression to the stack.
conditional_factor ::= [ NOT ] conditional_test
 java.lang.Object visit(ASTConditionalTerm node, java.lang.Object data)
          Push corresponding Expression to the stack.
conditional_term ::= conditional_factor [ AND conditional_factor ]*
 java.lang.Object visit(ASTDatetimeExpression node, java.lang.Object data)
          Visit child nodes datetime_expression ::= datetime_value | input_parameter
 java.lang.Object visit(ASTEmptyCollectionComparisonExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
empty_collection_comparison_expression ::= collection_valued_path_expression IS [ NOT ] EMPTY
 java.lang.Object visit(ASTEntityBeanExpression node, java.lang.Object data)
          Visit child nodes entity_bean_expression ::= entity_bean_value | input_parameter
 java.lang.Object visit(ASTFunctionsReturningNumerics node, java.lang.Object data)
          visit child nodes Push corresponding Expression to the stack.
functions_returning_numerics ::= LENGTH (string_expression) | LOCATE (string_expression, string_expression [ , arithmetic_expression ] ) | ABS (arithmetic_expression) | SQRT (arithmetic_expression)
 java.lang.Object visit(ASTFunctionsReturningStrings node, java.lang.Object data)
          visit child nodes Push corresponding Expression to the stack.
functions_returning_strings ::= CONCAT (string_expression, string_expression) | SUBSTRING (string_expression,arithmetic_expression,arithmetic_expression)
 java.lang.Object visit(ASTIdentificationVariable node, java.lang.Object data)
          Node with value set to identification variable string.
 java.lang.Object visit(ASTInExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
in_expression ::= single_valued_path_expression [ NOT ] IN (string_literal [ , string_literal ] * )
 java.lang.Object visit(ASTInputParameter node, java.lang.Object data)
          Node with value set to parameter index (1..n) string.
 java.lang.Object visit(ASTLikeExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
like_expression ::= single_valued_path_expression [ NOT ] LIKE pattern_value [ ESCAPE escape_character ]
 java.lang.Object visit(ASTNullComparisonExpression node, java.lang.Object data)
          Push corresponding Expression to the stack.
null_comparison_expression ::= single_valued_path_expression IS [ NOT ] NULL
 java.lang.Object visit(ASTPath node, java.lang.Object data)
          Push the Node to the stack
 java.lang.Object visit(ASTSingleValuedNavigation node, java.lang.Object data)
          Push corresponding MedorField to the stack.
single_valued_navigation ::= path was in initial BNF single_valued_navigation ::= identification_variable. [
 java.lang.Object visit(ASTSingleValuedPathExpression node, java.lang.Object data)
          Push corresponding MedorField to the stack.
single_valued_path_expression ::= path was in initial BNF single_valued_path_expression ::= {single_valued_navigation | identification_variable}.cmp_field | single_valued_navigation
 java.lang.Object visit(ASTStringExpression node, java.lang.Object data)
          Visit child nodes string_expression ::= string_primary | input_parameter
 java.lang.Object visit(ASTStringLiteral node, java.lang.Object data)
          Node with value set to litteral string.
 java.lang.Object visit(ASTWhereClause node, java.lang.Object data)
          If query contains WHERE clause, visit child nodes
where_clause ::= WHERE conditional_expression
 
Methods inherited from class org.objectweb.jonas_ejb.lib.EjbqlAbstractVisitor
getMedorFieldFromPath, mergePath, splitPath, visit, visit, visit, visit, visit, visit, visit, visit, visit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EjbqlQueryFilterVisitor

public EjbqlQueryFilterVisitor(org.objectweb.medor.query.api.QueryTree _qt,
                               java.lang.Class[] parameterTypes,
                               ASTEJBQL ejbql)
                        throws java.lang.Exception
Constructor
Parameters:
ids - Map with (identifier,JormExtent) pairs
parameterTypes - Type of paramaters of the finder/select method
ejbql - root of the lexical tree of the query
Method Detail

getQueryFilter

public org.objectweb.medor.filter.api.Expression getQueryFilter()
get the query filter that was built from visiting the syntaxic tree

visit

public java.lang.Object visit(ASTWhereClause node,
                              java.lang.Object data)
If query contains WHERE clause, visit child nodes
where_clause ::= WHERE conditional_expression
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTSingleValuedPathExpression node,
                              java.lang.Object data)
Push corresponding MedorField to the stack.
single_valued_path_expression ::= path was in initial BNF single_valued_path_expression ::= {single_valued_navigation | identification_variable}.cmp_field | single_valued_navigation
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTSingleValuedNavigation node,
                              java.lang.Object data)
Push corresponding MedorField to the stack.
single_valued_navigation ::= path was in initial BNF single_valued_navigation ::= identification_variable. [ single_valued_cmr_field. ] * single_valued_cmr_field
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTCollectionValuedPathExpression node,
                              java.lang.Object data)
Push corresponding MedorField to the stack.
collection_valued_path_expression ::= path was in initial BNF collection_valued_path_expression ::= identification_variable. [ single_valued_cmr_field. ] *collection_valued_cmr_field
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTConditionalExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
conditional_expression ::= conditional_term [ OR conditional_term ]*
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTConditionalTerm node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
conditional_term ::= conditional_factor [ AND conditional_factor ]*
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTConditionalFactor node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
conditional_factor ::= [ NOT ] conditional_test
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTBetweenExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
between_expression ::= arithmetic_expression [ NOT ] BETWEEN arithmetic_expression AND arithmetic_expression
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTInExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
in_expression ::= single_valued_path_expression [ NOT ] IN (string_literal [ , string_literal ] * )
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTLikeExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
like_expression ::= single_valued_path_expression [ NOT ] LIKE pattern_value [ ESCAPE escape_character ]
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTNullComparisonExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
null_comparison_expression ::= single_valued_path_expression IS [ NOT ] NULL
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTEmptyCollectionComparisonExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
empty_collection_comparison_expression ::= collection_valued_path_expression IS [ NOT ] EMPTY
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTCollectionMemberExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
collection_member_expression ::= {single_valued_navigation | identification_variable | input_parameter} [ NOT ] MEMBER [ OF ] collection_valued_path_expression
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTComparisonExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
comparison_expression ::= string_value { =|<>} string_expression | boolean_value { =|<>} boolean_expression | datetime_value { = | <> | > | < } datetime_expression | entity_bean_value { = | <> } entity_bean_expression | arithmetic_value { = | > | >= | < | <= | <> } single_value_designator
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTArithmeticExpression node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
arithmetic_expression ::= arithmetic_term [ { + | - } arithmetic_term ] *
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTArithmeticTerm node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
arithmetic_term ::= arithmetic_factor [ { * | / } arithmetic_factor ]*
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTArithmeticFactor node,
                              java.lang.Object data)
Push corresponding Expression to the stack.
arithmetic_factor ::= [ + |- ] arithmetic_primary
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTStringExpression node,
                              java.lang.Object data)
Visit child nodes string_expression ::= string_primary | input_parameter
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTDatetimeExpression node,
                              java.lang.Object data)
Visit child nodes datetime_expression ::= datetime_value | input_parameter
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTBooleanExpression node,
                              java.lang.Object data)
Visit child nodes boolean_expression ::= single_valued_path_expression | boolean_literal | input_parameter
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTEntityBeanExpression node,
                              java.lang.Object data)
Visit child nodes entity_bean_expression ::= entity_bean_value | input_parameter
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTFunctionsReturningStrings node,
                              java.lang.Object data)
visit child nodes Push corresponding Expression to the stack.
functions_returning_strings ::= CONCAT (string_expression, string_expression) | SUBSTRING (string_expression,arithmetic_expression,arithmetic_expression)
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTFunctionsReturningNumerics node,
                              java.lang.Object data)
visit child nodes Push corresponding Expression to the stack.
functions_returning_numerics ::= LENGTH (string_expression) | LOCATE (string_expression, string_expression [ , arithmetic_expression ] ) | ABS (arithmetic_expression) | SQRT (arithmetic_expression)
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTIdentificationVariable node,
                              java.lang.Object data)
Node with value set to identification variable string. Push the Node to the stack
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTStringLiteral node,
                              java.lang.Object data)
Node with value set to litteral string. Push the corresponding Operand to the stack
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTArithmeticLiteral node,
                              java.lang.Object data)
Node with value set to litteral arithmetic. Push the corresponding Operand to the stack
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTBooleanLiteral node,
                              java.lang.Object data)
Node with value set to litteral boolean. Push the corresponding Operand to the stack
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTInputParameter node,
                              java.lang.Object data)
Node with value set to parameter index (1..n) string. Push the corresponding Operand to the stack
Overrides:
visit in class EjbqlAbstractVisitor

visit

public java.lang.Object visit(ASTPath node,
                              java.lang.Object data)
Push the Node to the stack
Overrides:
visit in class EjbqlAbstractVisitor