import { CommonTable, WithClause } from "../models/Clause";
/**
 * CTENameConflictResolver is responsible for resolving name conflicts among Common Table Expressions (CTEs).
 * It also sorts the tables in the proper order based on dependencies and recursiveness.
 */
export declare class CTEBuilder {
    private sourceCollector;
    private cteCollector;
    private formatter;
    constructor();
    /**
     * Resolves name conflicts among CommonTables.
     * If there are duplicate CTE names, they must have identical definitions.
     * Also sorts the tables so that:
     * 1. Recursive CTEs come first (CTEs that reference themselves)
     * 2. Then remaining tables are sorted so inner (deeper) CTEs come before outer CTEs
     *
     * @param commonTables The list of CommonTables to check for name conflicts
     * @returns An object containing:
     *          - needRecursive: boolean indicating if any recursive CTEs are present
     *          - commonTables: A new list of CommonTables with resolved name conflicts and proper order
     * @throws Error if there are duplicate CTE names with different definitions
     */
    build(commonTables: CommonTable[]): WithClause;
    /**
     * Resolves duplicate CTE names by checking if they have identical definitions.
     * If definitions differ, throws an error.
     *
     * @param commonTables The list of CTEs to check for duplicates
     * @returns A list of CTEs with duplicates removed
     * @throws Error if there are duplicate CTE names with different definitions
     */
    private resolveDuplicateNames;
    /**
     * Builds a dependency graph of CTEs and identifies recursive CTEs.
     *
     * @param tables The list of CTEs to analyze
     * @returns Object containing the table map, set of recursive CTEs, and dependency map
     */
    private buildDependencyGraph;
    /**
     * Sorts the CTEs using topological sort, with recursive CTEs coming first.
     *
     * @param tables The list of CTEs to sort
     * @param tableMap Map of table names to their CommonTable objects
     * @param recursiveCTEs Set of table names that are recursive (self-referential)
     * @param dependencies Map of table dependencies
     * @returns Sorted list of CTEs
     * @throws Error if a circular reference is detected
     */
    private sortCommonTables;
}
