import { TableSource } from "../models/Clause";
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
/**
 * A visitor that collects all table source names from a SQL query structure.
 *
 * When selectableOnly is true (default behavior):
 * - Includes only table sources from FROM and JOIN clauses
 * - Excludes inline queries, subqueries, and CTEs
 *
 * When selectableOnly is false:
 * - Scans all parts of the query including WITH clauses, subqueries, etc.
 * - Collects all table sources from the entire query
 * - Excludes tables that are managed by CTEs
 *
 * For UNION-like queries, it scans both the left and right parts.
 */
export declare class TableSourceCollector implements SqlComponentVisitor<void> {
    private handlers;
    private tableSources;
    private visitedNodes;
    private tableNameMap;
    private selectableOnly;
    private cteNames;
    private isRootVisit;
    constructor(selectableOnly?: boolean);
    /**
     * Gets all collected table sources
     */
    getTableSources(): TableSource[];
    /**
     * Reset the collection of table sources
     */
    private reset;
    /**
     * Gets a unique identifier for a table source
     */
    private getTableIdentifier;
    collect(query: SqlComponent): TableSource[];
    /**
     * Main entry point for the visitor pattern.
     * Implements the shallow visit pattern to distinguish between root and recursive visits.
     */
    visit(arg: SqlComponent): void;
    /**
     * Internal visit method used for all nodes.
     * This separates the visit flag management from the actual node visitation logic.
     */
    private visitNode;
    /**
     * Collects all CTE names to exclude them from real table sources
     */
    private collectCTEs;
    private visitSimpleSelectQuery;
    private visitBinarySelectQuery;
    private visitValuesQuery;
    private visitWithClause;
    private visitCommonTable;
    private visitFromClause;
    private visitSourceExpression;
    private visitTableSource;
    /**
     * Checks if a table name is a CTE name
     */
    private isCTETable;
    private visitParenSource;
    private visitSubQuerySource;
    private visitInlineQuery;
    private visitJoinClause;
    private visitJoinOnClause;
    private visitJoinUsingClause;
    private visitWhereClause;
    private visitGroupByClause;
    private visitHavingClause;
    private visitOrderByClause;
    private visitWindowFrameClause;
    private visitLimitClause;
    private visitOffsetClause;
    private visitFetchClause;
    private visitForClause;
    private visitOrderByItem;
    private visitSelectClause;
    private visitSelectItem;
    private visitParenExpression;
    private visitBinaryExpression;
    private visitUnaryExpression;
    private visitCaseExpression;
    private visitSwitchCaseArgument;
    private visitCaseKeyValuePair;
    private visitBetweenExpression;
    private visitFunctionCall;
    private visitArrayExpression;
    private visitTupleExpression;
    private visitCastExpression;
}
