Package org.apache.cayenne.ejbql.parser

# Class EJBQL

java.lang.Object
org.apache.cayenne.ejbql.parser.EJBQL

All Implemented Interfaces:
  `EJBQLConstants`, `EJBQLTreeConstants`

public class EJBQL extends Object implements EJBQLTreeConstants, EJBQLConstants

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `EJBQL.EJBQLDefaultParser`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `Token`
  `jj_nt`
  Next token.
  `protected JJTEJBQLState`
  `jjtree`
  `Token`
  `token`
  Current token.
  `EJBQLTokenManager`
  `token_source`
  Generated Token Manager.

  ### Fields inherited from interface org.apache.cayenne.ejbql.parser.EJBQLConstants

  `ABS, ALL, AND, ANY, AS, ASC, AVG, BETWEEN, BOOLEAN_LITERAL, BOTH, BY, CHARACTER_LITERAL, COMMA, CONCAT, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DECIMAL_LITERAL, DEFAULT, DELETE, DESC, DIGIT, DISTINCT, DIV, DOT, EMPTY, EOF, EQ, ESCAPE, EXISTS, EXPONENT, FETCH, FROM, GE, GROUP, GT, HAVING, IDENTIFIER, IN, INNER, INTEGER_LITERAL, IS, JOIN, LE, LEADING, LEFT, LENGTH, LETTER, LIKE, LOCATE, LOWER, LT, MAX, MEMBER, MIN, MINUS, MOD, NE, NEW, NOT, NULL, OBJECT, OF, OR, ORDER, OUTER, PLUS, SELECT, SET, SIZE, SOME, SQRT, STRING_LITERAL, SUBSTRING, SUM, TIMES, tokenImage, TRAILING, TRIM, UPDATE, UPPER, WHERE`

  ### Fields inherited from interface org.apache.cayenne.ejbql.parser.EJBQLTreeConstants

  `JJTABS, JJTABSTRACTSCHEMANAME, JJTADD, JJTAGGREGATE, JJTALL, JJTAND, JJTANY, JJTASCENDING, JJTAVERAGE, JJTBETWEEN, JJTBOOLEANLITERAL, JJTCLASSNAME, JJTCONCAT, JJTCONSTRUCTOR, JJTCONSTRUCTORPARAMETER, JJTCONSTRUCTORPARAMETERS, JJTCOUNT, JJTCURRENTDATE, JJTCURRENTTIME, JJTCURRENTTIMESTAMP, JJTDBPATH, JJTDECIMALLITERAL, JJTDELETE, JJTDESCENDING, JJTDISTINCT, JJTDIVIDE, JJTEQUALS, JJTESCAPECHARACTER, JJTEXISTS, JJTFROM, JJTFROMITEM, JJTGREATEROREQUAL, JJTGREATERTHAN, JJTGROUPBY, JJTHAVING, JJTIDENTIFICATIONVARIABLE, JJTIDENTIFIER, JJTIN, JJTINNERFETCHJOIN, JJTINNERJOIN, JJTINTEGERLITERAL, JJTISEMPTY, JJTISNULL, JJTLENGTH, JJTLESSOREQUAL, JJTLESSTHAN, JJTLIKE, JJTLOCATE, JJTLOWER, JJTMAX, JJTMEMBEROF, JJTMIN, JJTMOD, JJTMULTIPLY, JJTNAMEDINPUTPARAMETER, JJTNEGATIVE, jjtNodeName, JJTNOT, JJTNOTEQUALS, JJTOR, JJTORDERBY, JJTORDERBYITEM, JJTOUTERFETCHJOIN, JJTOUTERJOIN, JJTPATH, JJTPATTERNVALUE, JJTPOSITIONALINPUTPARAMETER, JJTSELECT, JJTSELECTCLAUSE, JJTSELECTEXPRESSION, JJTSELECTEXPRESSIONS, JJTSIZE, JJTSQRT, JJTSTRINGLITERAL, JJTSUBSELECT, JJTSUBSTRING, JJTSUBTRACT, JJTSUM, JJTTOK, JJTTRIM, JJTTRIMBOTH, JJTTRIMCHARACTER, JJTTRIMLEADING, JJTTRIMTRAILING, JJTUPDATE, JJTUPDATEFIELD, JJTUPDATEITEM, JJTUPDATEVALUE, JJTUPPER, JJTVOID, JJTWHERE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EJBQL(InputStream stream)`
  Constructor with InputStream.
  `EJBQL(InputStream stream, String encoding)`
  Constructor with InputStream and supplied encoding
  `EJBQL(Reader stream)`
  Constructor.
  `EJBQL(String source)`
  `EJBQL(EJBQLTokenManager tm)`
  Constructor with generated Token Manager.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final void`
  `abs()`
  `final void`
  `abstract_schema_name()`
  `final void`
  `aggregate_path()`
  `final void`
  `aggregate_select_expression()`
  `final void`
  `all_expression()`
  `final void`
  `all_or_any_expression()`
  `final void`
  `any_expression()`
  `final void`
  `arithmetic_comp()`
  `final void`
  `arithmetic_expression()`
  `final void`
  `arithmetic_factor()`
  `final void`
  `arithmetic_term()`
  `final void`
  `arithmetic_value()`
  `final void`
  `avg()`
  `final void`
  `between_expression()`
  `final void`
  `boolean_comp()`
  `final void`
  `boolean_expression()`
  `final void`
  `boolean_literal()`
  `final void`
  `boolean_primary()`
  `final void`
  `boolean_value()`
  `final void`
  `classname()`
  `final void`
  `collection_member_declaration()`
  `final void`
  `collection_member_expression()`
  `final void`
  `comparison_expression()`
  `final void`
  `concat()`
  `final void`
  `conditional_expression()`
  `final void`
  `conditional_factor()`
  `final void`
  `conditional_primary()`
  `final void`
  `conditional_term()`
  `final void`
  `constructor_expression()`
  `final void`
  `constructor_parameter()`
  `final void`
  `constructor_parameters()`
  `final void`
  `count()`
  `final void`
  `datetime_comp()`
  `final void`
  `datetime_expression()`
  `final void`
  `datetime_primary()`
  `final void`
  `db_path()`
  `final void`
  `decimal_literal()`
  `final void`
  `delete_statement()`
  `final void`
  `disable_tracing()`
  Disable tracing.
  `final void`
  `distinct()`
  `final void`
  `distinct_path()`
  `final void`
  `empty_collection_comparison_expression()`
  `final void`
  `enable_tracing()`
  Enable tracing.
  `final void`
  `entity_bean_expression()`
  `final void`
  `entity_bean_value()`
  `final void`
  `entity_comp()`
  `final void`
  `enum_comp()`
  `final void`
  `enum_expression()`
  `final void`
  `enum_literal()`
  `final void`
  `enum_primary()`
  `final void`
  `EQ()`
  `final void`
  `escape_character()`
  `final void`
  `exists_expression()`
  `final void`
  `fetch_join()`
  `final void`
  `from_clause()`
  `final void`
  `from_item()`
  `final void`
  `functions_returning_datetime()`
  `final void`
  `functions_returning_numerics()`
  `final void`
  `functions_returning_strings()`
  `final void`
  `GE()`
  `ParseException`
  `generateParseException()`
  Generate ParseException.
  `final Token`
  `getNextToken()`
  Get the next Token.
  `final Token`
  `getToken(int index)`
  Get the specific Token.
  `final void`
  `groupby_clause()`
  `final void`
  `groupby_item()`
  `final void`
  `GT()`
  `final void`
  `having_clause()`
  `final void`
  `identification_variable()`
  `final void`
  `identification_variable_declaration()`
  `final void`
  `in_expression()`
  `final void`
  `inner_fetch_join()`
  `final void`
  `inner_join()`
  `final void`
  `input_parameter()`
  `final void`
  `integer_literal()`
  `final void`
  `LE()`
  `final void`
  `length()`
  `final void`
  `like_expression()`
  `final void`
  `literal_or_param()`
  `final void`
  `locate()`
  `final void`
  `lower()`
  `final void`
  `LT()`
  `final void`
  `max()`
  `final void`
  `min()`
  `final void`
  `mod()`
  `final void`
  `named_input_parameter()`
  `final void`
  `NE()`
  `final void`
  `negative()`
  `final void`
  `new_value()`
  `final void`
  `null_comparison_expression()`
  `final void`
  `numeric_literal()`
  `final void`
  `object_path()`
  `final void`
  `orderby_clause()`
  `final void`
  `orderby_item()`
  `final void`
  `outer_fetch_join()`
  `final void`
  `outer_join()`
  `final Node`
  `parseQuery()`
  `final void`
  `path()`
  `final void`
  `path_component()`
  `final void`
  `pattern_value()`
  `final void`
  `positional_input_parameter()`
  `void`
  `ReInit(InputStream stream)`
  Reinitialise.
  `void`
  `ReInit(InputStream stream, String encoding)`
  Reinitialise.
  `void`
  `ReInit(Reader stream)`
  Reinitialise.
  `void`
  `ReInit(EJBQLTokenManager tm)`
  Reinitialise.
  `final void`
  `select_clause()`
  `final void`
  `select_expression()`
  `final void`
  `select_expressions()`
  `final void`
  `select_statement()`
  `final void`
  `set_clause()`
  `final void`
  `simple_cond_expression()`
  `final void`
  `simple_entity_expression()`
  `final void`
  `simple_select_clause()`
  `final void`
  `size()`
  `final void`
  `some_expression()`
  `final void`
  `sqrt()`
  `final void`
  `string_comp()`
  `final void`
  `string_expression()`
  `final void`
  `string_literal()`
  `final void`
  `string_primary()`
  `final void`
  `string_value()`
  `final void`
  `subquery()`
  `final void`
  `subquery_from_clause()`
  `final void`
  `subquery_from_item()`
  `final void`
  `subselect_expression()`
  `final void`
  `subselect_expressions()`
  `final void`
  `substring()`
  `final void`
  `sum()`
  `final void`
  `tok()`
  `final void`
  `trim()`
  `final void`
  `trim_character()`
  `final void`
  `trim_specification()`
  `final void`
  `update_clause()`
  `final void`
  `update_field()`
  `final void`
  `update_item()`
  `final void`
  `update_statement()`
  `final void`
  `upper()`
  `final void`
  `where_clause()`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### jjtree

    protected JJTEJBQLState jjtree

  - ### token_source

    public EJBQLTokenManager token_source
    Generated Token Manager.

  - ### token

    public Token token
    Current token.

  - ### jj_nt

    public Token jj_nt
    Next token.

- ## Constructor Details

  - ### EJBQL

    public EJBQL(String source)

  - ### EJBQL

    public EJBQL(InputStream stream)
    Constructor with InputStream.

  - ### EJBQL

    public EJBQL(InputStream stream, String encoding)
    Constructor with InputStream and supplied encoding

  - ### EJBQL

    public EJBQL(Reader stream)
    Constructor.

  - ### EJBQL

    public EJBQL(EJBQLTokenManager tm)
    Constructor with generated Token Manager.

- ## Method Details

  - ### parseQuery

    public final Node parseQuery() throws ParseException
    Throws:
      `ParseException`

  - ### select_statement

    public final void select_statement() throws ParseException
    Throws:
      `ParseException`

  - ### update_statement

    public final void update_statement() throws ParseException
    Throws:
      `ParseException`

  - ### delete_statement

    public final void delete_statement() throws ParseException
    Throws:
      `ParseException`

  - ### from_clause

    public final void from_clause() throws ParseException
    Throws:
      `ParseException`

  - ### identification_variable_declaration

    public final void identification_variable_declaration() throws ParseException
    Throws:
      `ParseException`

  - ### from_item

    public final void from_item() throws ParseException
    Throws:
      `ParseException`

  - ### subquery_from_clause

    public final void subquery_from_clause() throws ParseException
    Throws:
      `ParseException`

  - ### subquery_from_item

    public final void subquery_from_item() throws ParseException
    Throws:
      `ParseException`

  - ### inner_join

    public final void inner_join() throws ParseException
    Throws:
      `ParseException`

  - ### collection_member_declaration

    public final void collection_member_declaration() throws ParseException
    Throws:
      `ParseException`

  - ### outer_join

    public final void outer_join() throws ParseException
    Throws:
      `ParseException`

  - ### fetch_join

    public final void fetch_join() throws ParseException
    Throws:
      `ParseException`

  - ### outer_fetch_join

    public final void outer_fetch_join() throws ParseException
    Throws:
      `ParseException`

  - ### inner_fetch_join

    public final void inner_fetch_join() throws ParseException
    Throws:
      `ParseException`

  - ### path

    public final void path() throws ParseException
    Throws:
      `ParseException`

  - ### db_path

    public final void db_path() throws ParseException
    Throws:
      `ParseException`

  - ### object_path

    public final void object_path() throws ParseException
    Throws:
      `ParseException`

  - ### update_clause

    public final void update_clause() throws ParseException
    Throws:
      `ParseException`

  - ### set_clause

    public final void set_clause() throws ParseException
    Throws:
      `ParseException`

  - ### update_item

    public final void update_item() throws ParseException
    Throws:
      `ParseException`

  - ### update_field

    public final void update_field() throws ParseException
    Throws:
      `ParseException`

  - ### new_value

    public final void new_value() throws ParseException
    Throws:
      `ParseException`

  - ### simple_entity_expression

    public final void simple_entity_expression() throws ParseException
    Throws:
      `ParseException`

  - ### select_clause

    public final void select_clause() throws ParseException
    Throws:
      `ParseException`

  - ### simple_select_clause

    public final void simple_select_clause() throws ParseException
    Throws:
      `ParseException`

  - ### select_expressions

    public final void select_expressions() throws ParseException
    Throws:
      `ParseException`

  - ### select_expression

    public final void select_expression() throws ParseException
    Throws:
      `ParseException`

  - ### subselect_expressions

    public final void subselect_expressions() throws ParseException
    Throws:
      `ParseException`

  - ### subselect_expression

    public final void subselect_expression() throws ParseException
    Throws:
      `ParseException`

  - ### constructor_expression

    public final void constructor_expression() throws ParseException
    Throws:
      `ParseException`

  - ### classname

    public final void classname() throws ParseException
    Throws:
      `ParseException`

  - ### constructor_parameters

    public final void constructor_parameters() throws ParseException
    Throws:
      `ParseException`

  - ### constructor_parameter

    public final void constructor_parameter() throws ParseException
    Throws:
      `ParseException`

  - ### aggregate_select_expression

    public final void aggregate_select_expression() throws ParseException
    Throws:
      `ParseException`

  - ### distinct

    public final void distinct() throws ParseException
    Throws:
      `ParseException`

  - ### aggregate_path

    public final void aggregate_path() throws ParseException
    Throws:
      `ParseException`

  - ### distinct_path

    public final void distinct_path() throws ParseException
    Throws:
      `ParseException`

  - ### count

    public final void count() throws ParseException
    Throws:
      `ParseException`

  - ### avg

    public final void avg() throws ParseException
    Throws:
      `ParseException`

  - ### max

    public final void max() throws ParseException
    Throws:
      `ParseException`

  - ### min

    public final void min() throws ParseException
    Throws:
      `ParseException`

  - ### sum

    public final void sum() throws ParseException
    Throws:
      `ParseException`

  - ### where_clause

    public final void where_clause() throws ParseException
    Throws:
      `ParseException`

  - ### groupby_clause

    public final void groupby_clause() throws ParseException
    Throws:
      `ParseException`

  - ### groupby_item

    public final void groupby_item() throws ParseException
    Throws:
      `ParseException`

  - ### having_clause

    public final void having_clause() throws ParseException
    Throws:
      `ParseException`

  - ### subquery

    public final void subquery() throws ParseException
    Throws:
      `ParseException`

  - ### conditional_expression

    public final void conditional_expression() throws ParseException
    Throws:
      `ParseException`

  - ### conditional_term

    public final void conditional_term() throws ParseException
    Throws:
      `ParseException`

  - ### conditional_factor

    public final void conditional_factor() throws ParseException
    Throws:
      `ParseException`

  - ### conditional_primary

    public final void conditional_primary() throws ParseException
    Throws:
      `ParseException`

  - ### simple_cond_expression

    public final void simple_cond_expression() throws ParseException
    Throws:
      `ParseException`

  - ### between_expression

    public final void between_expression() throws ParseException
    Throws:
      `ParseException`

  - ### in_expression

    public final void in_expression() throws ParseException
    Throws:
      `ParseException`

  - ### literal_or_param

    public final void literal_or_param() throws ParseException
    Throws:
      `ParseException`

  - ### like_expression

    public final void like_expression() throws ParseException
    Throws:
      `ParseException`

  - ### null_comparison_expression

    public final void null_comparison_expression() throws ParseException
    Throws:
      `ParseException`

  - ### empty_collection_comparison_expression

    public final void empty_collection_comparison_expression() throws ParseException
    Throws:
      `ParseException`

  - ### collection_member_expression

    public final void collection_member_expression() throws ParseException
    Throws:
      `ParseException`

  - ### exists_expression

    public final void exists_expression() throws ParseException
    Throws:
      `ParseException`

  - ### all_or_any_expression

    public final void all_or_any_expression() throws ParseException
    Throws:
      `ParseException`

  - ### any_expression

    public final void any_expression() throws ParseException
    Throws:
      `ParseException`

  - ### some_expression

    public final void some_expression() throws ParseException
    Throws:
      `ParseException`

  - ### all_expression

    public final void all_expression() throws ParseException
    Throws:
      `ParseException`

  - ### comparison_expression

    public final void comparison_expression() throws ParseException
    Throws:
      `ParseException`

  - ### string_comp

    public final void string_comp() throws ParseException
    Throws:
      `ParseException`

  - ### boolean_comp

    public final void boolean_comp() throws ParseException
    Throws:
      `ParseException`

  - ### enum_comp

    public final void enum_comp() throws ParseException
    Throws:
      `ParseException`

  - ### entity_comp

    public final void entity_comp() throws ParseException
    Throws:
      `ParseException`

  - ### arithmetic_comp

    public final void arithmetic_comp() throws ParseException
    Throws:
      `ParseException`

  - ### datetime_comp

    public final void datetime_comp() throws ParseException
    Throws:
      `ParseException`

  - ### arithmetic_value

    public final void arithmetic_value() throws ParseException
    Throws:
      `ParseException`

  - ### arithmetic_expression

    public final void arithmetic_expression() throws ParseException
    Throws:
      `ParseException`

  - ### arithmetic_term

    public final void arithmetic_term() throws ParseException
    Throws:
      `ParseException`

  - ### arithmetic_factor

    public final void arithmetic_factor() throws ParseException
    Throws:
      `ParseException`

  - ### negative

    public final void negative() throws ParseException
    Throws:
      `ParseException`

  - ### string_value

    public final void string_value() throws ParseException
    Throws:
      `ParseException`

  - ### string_expression

    public final void string_expression() throws ParseException
    Throws:
      `ParseException`

  - ### string_primary

    public final void string_primary() throws ParseException
    Throws:
      `ParseException`

  - ### datetime_expression

    public final void datetime_expression() throws ParseException
    Throws:
      `ParseException`

  - ### datetime_primary

    public final void datetime_primary() throws ParseException
    Throws:
      `ParseException`

  - ### boolean_value

    public final void boolean_value() throws ParseException
    Throws:
      `ParseException`

  - ### boolean_expression

    public final void boolean_expression() throws ParseException
    Throws:
      `ParseException`

  - ### boolean_primary

    public final void boolean_primary() throws ParseException
    Throws:
      `ParseException`

  - ### enum_expression

    public final void enum_expression() throws ParseException
    Throws:
      `ParseException`

  - ### enum_primary

    public final void enum_primary() throws ParseException
    Throws:
      `ParseException`

  - ### enum_literal

    public final void enum_literal() throws ParseException
    Throws:
      `ParseException`

  - ### entity_bean_value

    public final void entity_bean_value() throws ParseException
    Throws:
      `ParseException`

  - ### entity_bean_expression

    public final void entity_bean_expression() throws ParseException
    Throws:
      `ParseException`

  - ### functions_returning_strings

    public final void functions_returning_strings() throws ParseException
    Throws:
      `ParseException`

  - ### concat

    public final void concat() throws ParseException
    Throws:
      `ParseException`

  - ### substring

    public final void substring() throws ParseException
    Throws:
      `ParseException`

  - ### trim

    public final void trim() throws ParseException
    Throws:
      `ParseException`

  - ### lower

    public final void lower() throws ParseException
    Throws:
      `ParseException`

  - ### upper

    public final void upper() throws ParseException
    Throws:
      `ParseException`

  - ### trim_specification

    public final void trim_specification() throws ParseException
    Throws:
      `ParseException`

  - ### functions_returning_numerics

    public final void functions_returning_numerics() throws ParseException
    Throws:
      `ParseException`

  - ### length

    public final void length() throws ParseException
    Throws:
      `ParseException`

  - ### locate

    public final void locate() throws ParseException
    Throws:
      `ParseException`

  - ### abs

    public final void abs() throws ParseException
    Throws:
      `ParseException`

  - ### sqrt

    public final void sqrt() throws ParseException
    Throws:
      `ParseException`

  - ### mod

    public final void mod() throws ParseException
    Throws:
      `ParseException`

  - ### size

    public final void size() throws ParseException
    Throws:
      `ParseException`

  - ### functions_returning_datetime

    public final void functions_returning_datetime() throws ParseException
    Throws:
      `ParseException`

  - ### orderby_clause

    public final void orderby_clause() throws ParseException
    Throws:
      `ParseException`

  - ### orderby_item

    public final void orderby_item() throws ParseException
    Throws:
      `ParseException`

  - ### abstract_schema_name

    public final void abstract_schema_name() throws ParseException
    Throws:
      `ParseException`

  - ### tok

    public final void tok() throws ParseException
    Throws:
      `ParseException`

  - ### identification_variable

    public final void identification_variable() throws ParseException
    Throws:
      `ParseException`

  - ### path_component

    public final void path_component() throws ParseException
    Throws:
      `ParseException`

  - ### numeric_literal

    public final void numeric_literal() throws ParseException
    Throws:
      `ParseException`

  - ### integer_literal

    public final void integer_literal() throws ParseException
    Throws:
      `ParseException`

  - ### decimal_literal

    public final void decimal_literal() throws ParseException
    Throws:
      `ParseException`

  - ### boolean_literal

    public final void boolean_literal() throws ParseException
    Throws:
      `ParseException`

  - ### string_literal

    public final void string_literal() throws ParseException
    Throws:
      `ParseException`

  - ### input_parameter

    public final void input_parameter() throws ParseException
    Throws:
      `ParseException`

  - ### named_input_parameter

    public final void named_input_parameter() throws ParseException
    Throws:
      `ParseException`

  - ### positional_input_parameter

    public final void positional_input_parameter() throws ParseException
    Throws:
      `ParseException`

  - ### pattern_value

    public final void pattern_value() throws ParseException
    Throws:
      `ParseException`

  - ### escape_character

    public final void escape_character() throws ParseException
    Throws:
      `ParseException`

  - ### trim_character

    public final void trim_character() throws ParseException
    Throws:
      `ParseException`

  - ### EQ

    public final void EQ() throws ParseException
    Throws:
      `ParseException`

  - ### NE

    public final void NE() throws ParseException
    Throws:
      `ParseException`

  - ### GT

    public final void GT() throws ParseException
    Throws:
      `ParseException`

  - ### GE

    public final void GE() throws ParseException
    Throws:
      `ParseException`

  - ### LT

    public final void LT() throws ParseException
    Throws:
      `ParseException`

  - ### LE

    public final void LE() throws ParseException
    Throws:
      `ParseException`

  - ### ReInit

    public void ReInit(InputStream stream)
    Reinitialise.

  - ### ReInit

    public void ReInit(InputStream stream, String encoding)
    Reinitialise.

  - ### ReInit

    public void ReInit(Reader stream)
    Reinitialise.

  - ### ReInit

    public void ReInit(EJBQLTokenManager tm)
    Reinitialise.

  - ### getNextToken

    public final Token getNextToken()
    Get the next Token.

  - ### getToken

    public final Token getToken(int index)
    Get the specific Token.

  - ### generateParseException

    public ParseException generateParseException()
    Generate ParseException.

  - ### enable_tracing

    public final void enable_tracing()
    Enable tracing.

  - ### disable_tracing

    public final void disable_tracing()
    Disable tracing.