docs: @Override
      protected AstNode parseCustomStatement( DdlTokenStream tokens,
                                              AstNode parentNode ) throws ParsingException {
          assert tokens != null;
          assert parentNode != null;
  
          AstNode result = null;
  
          if (tokens.matches(STMT_COMMENT_ON)) {
              result = parseCommentStatement(tokens, parentNode);
          } else if (tokens.matches(STMT_ANALYZE)) {
              return parseStatement(tokens, STMT_ANALYZE, parentNode, TYPE_ANALYZE_STATEMENT);
          } else if (tokens.matches(STMT_ASSOCIATE_STATISTICS)) {
              return parseStatement(tokens, STMT_ASSOCIATE_STATISTICS, parentNode, TYPE_ASSOCIATE_STATISTICS_STATEMENT);
          } else if (tokens.matches(STMT_AUDIT)) {
              return parseStatement(tokens, STMT_AUDIT, parentNode, TYPE_AUDIT_STATEMENT);
          } else if (tokens.matches(STMT_COMMIT_FORCE) || tokens.matches(STMT_COMMIT_WORK) || tokens.matches(STMT_COMMIT_WRITE)) {
              return parseStatement(tokens, STMT_COMMIT, parentNode, TYPE_COMMIT_STATEMENT);
          } else if (tokens.matches(STMT_DISASSOCIATE_STATISTICS)) {
              return parseStatement(tokens, STMT_DISASSOCIATE_STATISTICS, parentNode, TYPE_DISASSOCIATE_STATISTICS_STATEMENT);
          } else if (tokens.matches(STMT_EXPLAIN_PLAN)) {
              return parseStatement(tokens, STMT_EXPLAIN_PLAN, parentNode, TYPE_EXPLAIN_PLAN_STATEMENT);
          } else if (tokens.matches(STMT_FLASHBACK)) {
              return parseStatement(tokens, STMT_FLASHBACK, parentNode, TYPE_FLASHBACK_STATEMENT);
          } else if (tokens.matches(STMT_LOCK_TABLE)) {
              return parseStatement(tokens, STMT_LOCK_TABLE, parentNode, TYPE_LOCK_TABLE_STATEMENT);
          } else if (tokens.matches(STMT_MERGE)) {
              return parseStatement(tokens, STMT_MERGE, parentNode, TYPE_MERGE_STATEMENT);
          } else if (tokens.matches(STMT_NOAUDIT)) {
              return parseStatement(tokens, STMT_NOAUDIT, parentNode, TYPE_NOAUDIT_STATEMENT);
          } else if (tokens.matches(STMT_PURGE)) {
              return parseStatement(tokens, STMT_PURGE, parentNode, TYPE_PURGE_STATEMENT);
          } else if (tokens.matches(STMT_RENAME)) {
              return parseStatement(tokens, STMT_RENAME, parentNode, TYPE_RENAME_STATEMENT);
          } else if (tokens.matches(STMT_ROLLBACK)) {
              return parseStatement(tokens, STMT_ROLLBACK, parentNode, TYPE_ROLLBACK_STATEMENT);
          } else if (tokens.matches(STMT_ROLLBACK_WORK)) {
              return parseStatement(tokens, STMT_ROLLBACK_WORK, parentNode, TYPE_ROLLBACK_STATEMENT);
          } else if (tokens.matches(STMT_ROLLBACK_TO_SAVEPOINT)) {
              return parseStatement(tokens, STMT_ROLLBACK_TO_SAVEPOINT, parentNode, TYPE_ROLLBACK_STATEMENT);
          } else if (tokens.matches(STMT_SAVEPOINT)) {
              return parseStatement(tokens, STMT_SAVEPOINT, parentNode, TYPE_SAVEPOINT_STATEMENT);
          } else if (tokens.matches(STMT_TRUNCATE)) {
              return parseStatement(tokens, STMT_TRUNCATE, parentNode, TYPE_TRUNCATE_STATEMENT);
          }
  
          if (result == null) {
              result = super.parseCustomStatement(tokens, parentNode);
          }
          return result;
      }