Module org.firebirdsql.jaybird
Package org.firebirdsql.jaybird.parser

# Class StatementDetector

java.lang.Object
org.firebirdsql.jaybird.parser.StatementDetector

All Implemented Interfaces:
  `TokenVisitor`

@InternalApi public final class StatementDetector extends Object implements TokenVisitor
Detects the type of statement, and - optionally - whether a DML statement has a `RETURNING` clause.

If the detected statement type is `UPDATE`, `DELETE`, `INSERT`, `UPDATE OR INSERT` and `MERGE`, it identifies the affected table and - optionally - whether or not a `RETURNING` clause is present (delegated to a `ReturningClauseDetector`).

The types of statements detected are informed by the needs of Jaybird, and may change between point releases.

Since:
  5
Author:
  Mark Rotteveel

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `StatementDetector()`
  Detect statement type and returning clause.
  `StatementDetector(boolean detectReturning)`
  Detect statement type and - optionally - returning clause.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `complete(VisitorRegistrar visitorRegistrar)`
  Signals that the last token was produced and the statement text was fully parsed.
  `static LocalStatementType`
  `determineLocalStatementType(String sql)`
  Determines the local statement type of `sql`.
  `LocalStatementType`
  `getStatementType()`
  `StatementIdentification`
  `toStatementIdentification()`
  `void`
  `visitToken(Token token, VisitorRegistrar visitorRegistrar)`
  Notifies the visitor of a token.

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

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

- ## Constructor Details

  - ### StatementDetector

    public StatementDetector()
    Detect statement type and returning clause.
    See Also:
      - `StatementDetector(boolean)`

  - ### StatementDetector

    public StatementDetector(boolean detectReturning)
    Detect statement type and - optionally - returning clause.
    Parameters:
      `detectReturning` - `true` detect returning clause, `false` do not detect returning clause

- ## Method Details

  - ### determineLocalStatementType

    public static LocalStatementType determineLocalStatementType(String sql)
    Determines the local statement type of `sql`.

    The return values of this method are decided by the needs of Jaybird, and do not necessarily cover all statement types, and they may change between point releases.

    Parameters:
      `sql` - statement text
    Returns:
      local statement type
    Since:
      6

  - ### visitToken

    public void visitToken(Token token, VisitorRegistrar visitorRegistrar)
    Description copied from interface: `TokenVisitor`
    Notifies the visitor of a token.
    Specified by:
      `visitToken` in interface `TokenVisitor`
    Parameters:
      `token` - Token
      `visitorRegistrar` - Visitor registrar (can be used to remove itself, or add other visitors)

  - ### complete

    public void complete(VisitorRegistrar visitorRegistrar)
    Description copied from interface: `TokenVisitor`
    Signals that the last token was produced and the statement text was fully parsed.
    Specified by:
      `complete` in interface `TokenVisitor`
    Parameters:
      `visitorRegistrar` - Visitor registrar (can be used to remove itself, or add other visitors)

  - ### toStatementIdentification

    public StatementIdentification toStatementIdentification()

  - ### getStatementType

    public LocalStatementType getStatementType()
    Returns:
      detected statement type, `UNKNOWN` when no tokens have been received (nothing was parsed)