Interface SqlParser

All Known Implementing Classes:
AbstractSqlParser, AnsiSqlParser, AthenaSqlParser, BigQuerySqlParser, ClickHouseSqlParser, CouchbaseSqlParser, DatabricksSqlParser, DaxSqlParser, Db2SqlParser, GaussDbSqlParser, GreenplumSqlParser, HanaSqlParser, HiveSqlParser, ImpalaSqlParser, InformixSqlParser, MdxSqlParser, MssqlSqlParser, MySqlParser, MySqlSqlParser, NetezzaSqlParser, OdbcSqlParser, OpenEdgeSqlParser, OracleSqlParser, PostgreSqlParser, PrestoSqlParser, RedshiftSqlParser, SnowflakeSqlParser, SoqlSqlParser, SparkSqlParser, SparksqlSqlParser, SybaseSqlParser, TeradataSqlParser, TrinoSqlParser, VerticaSqlParser

public interface SqlParser
Strategy interface for vendor-specific SQL parsing.

This interface defines the contract for all database vendor-specific parsers. Each vendor (Oracle, MySQL, PostgreSQL, etc.) provides its own implementation that handles the vendor-specific tokenization, parsing, and semantic analysis.

Design Pattern: Strategy Pattern

  • The strategy (SqlParser) is selected at runtime based on database vendor
  • All inputs come from ParserContext (immutable)
  • All outputs go to SqlParseResult (immutable)

Usage Example:

 // Get parser for specific vendor
 SqlParser parser = SqlParserFactory.get(EDbVendor.dbvoracle);

 // Build context with inputs
 ParserContext context = new ParserContext.Builder(EDbVendor.dbvoracle)
     .sqlText("SELECT * FROM employees")
     .build();

 // Parse and get result
 SqlParseResult result = parser.parse(context);

 // Access outputs
 TStatementList statements = result.getSqlStatements();
 
Since:
3.2.0.0
See Also:
  • Method Details

    • getVendor

      Get the database vendor this parser handles.
      Returns:
      the database vendor (e.g., dbvoracle, dbvmysql)
    • parse

      Parse SQL from the given context.

      This method performs full parsing including:

      • Tokenization (lexical analysis)
      • Syntax analysis (building parse tree)
      • Semantic analysis (resolving references)

      All inputs come from the context parameter, all outputs go to the result. This ensures clean separation of concerns and thread-safety.

      Parameters:
      context - immutable context containing all parser inputs (SQL text, options, callbacks, etc.)
      Returns:
      immutable result containing all parser outputs (statements, tokens, errors, etc.)
    • tokenize

      Tokenize SQL without parsing or statement extraction.

      This method performs only tokenization (lexical analysis):

      • Tokenization (lexical analysis)

      The result contains tokens but NO statements. Use this when you only need the token stream (e.g., for syntax highlighting, token analysis).

      For statement boundaries without full parsing, use getrawsqlstatements(ParserContext).

      Parameters:
      context - immutable context containing all parser inputs
      Returns:
      immutable result containing tokens only (no statements)
    • getrawsqlstatements

      Extract raw SQL statements without full parsing.

      This method performs:

      • Tokenization (lexical analysis)
      • Raw statement extraction (statement boundary detection)

      This is faster than parse(ParserContext) because it skips detailed syntax checking and semantic analysis. The statements returned have their tokens grouped correctly but no AST (parse tree) is built.

      Use cases:

      • Split a script into individual statements
      • Determine statement types without full parsing
      • Quick validation of statement boundaries
      • Pre-processing before selective parsing

      Equivalent to legacy API: TGSqlParser.getrawsqlstatements()

      Default implementation: For parsers still in delegation phase, this default implementation falls back to tokenize(ParserContext). Parsers extending AbstractSqlParser override this with proper implementation.

      Parameters:
      context - immutable context containing all parser inputs
      Returns:
      immutable result containing tokens and raw statements (no AST)
    • doExtractRawStatements

      Deprecated.
      As of 3.2.0.0, replaced by getrawsqlstatements(ParserContext) which returns a richer SqlParseResult object containing statements, tokens, errors, timing information, and more. This method only returns TStatementList without error information.

      Migration: Use vendorParser.getrawsqlstatements(context) instead, which performs both tokenization and extraction in a single call and returns complete result information via SqlParseResult.

      This method will be removed in a future major version.

      Extract raw statements from already-tokenized source without re-tokenization.

      This method is used when tokens are already available from a previous tokenization step (e.g., via dosqltexttotokenlist()). It performs only raw statement extraction without repeating tokenization.

      Default implementation: Falls back to tokenize() method for vendors that haven't implemented this optimization yet.

      Parameters:
      context - immutable context containing all parser inputs
      tokens - already-tokenized source token list
      Returns:
      statement list containing extracted raw statements
      Since:
      3.2.0.0