/**
 * Represents a position in the SQL text
 */
export interface Position {
    line: number;
    column: number;
}
/**
 * Represents a scope range for identifier renaming
 */
export interface ScopeRange {
    start: number;
    end: number;
}
/**
 * Result of renameability check
 */
export interface Renameability {
    canRename: boolean;
    currentName?: string;
    type?: 'cte' | 'table_alias' | 'column_alias';
    scopeRange?: ScopeRange;
    reason?: string;
}
/**
 * Handles safe renaming of SQL identifiers within plain SQL strings.
 *
 * @example
 * ```typescript
 * const renamer = new SqlIdentifierRenamer();
 * const sql = 'SELECT u.id FROM users u';
 * const result = renamer.renameIdentifier(sql, 'u', 'users_alias');
 * ```
 * Related tests: packages/core/tests/transformers/SqlIdentifierRenamer.test.ts
 */
export declare class SqlIdentifierRenamer {
    /**
     * Safely renames identifiers in SQL string while preserving context
     * @param sql SQL string to modify
     * @param renames Map of original identifiers to new identifiers
     * @returns Modified SQL string with renamed identifiers
     */
    renameIdentifiers(sql: string, renames: Map<string, string>): string;
    /**
     * Renames a single identifier in SQL string
     * @param sql SQL string to modify
     * @param oldIdentifier Original identifier to replace
     * @param newIdentifier New identifier to replace with
     * @returns Modified SQL string
     */
    renameIdentifier(sql: string, oldIdentifier: string, newIdentifier: string): string;
    /**
     * Renames a single identifier within a specified scope range
     * @param sql SQL string to modify
     * @param oldIdentifier Original identifier to replace
     * @param newIdentifier New identifier to replace with
     * @param scopeRange Optional scope range to limit replacement
     * @returns Modified SQL string
     */
    renameIdentifierInScope(sql: string, oldIdentifier: string, newIdentifier: string, scopeRange?: ScopeRange): string;
    /**
     * Checks if an identifier at the given position can be renamed
     * @param sql SQL string
     * @param position Position in the SQL text
     * @returns Renameability result
     */
    checkRenameability(sql: string, position: Position): Renameability;
    /**
     * Renames identifier at the specified position
     * @param sql SQL string
     * @param position Position in the SQL text
     * @param newName New identifier name
     * @returns Modified SQL string
     */
    renameAtPosition(sql: string, position: Position, newName: string): string;
    /**
     * Convert line/column position to character index
     */
    private positionToCharIndex;
    /**
     * Check if position is inside a string literal
     */
    private isInsideStringLiteral;
    /**
     * Get identifier at the specified character position
     */
    private getIdentifierAtPosition;
    /**
     * Determine the type of identifier (improved logic)
     */
    private determineIdentifierType;
    /**
     * Calculate scope range for the identifier
     */
    private calculateScopeRange;
    /**
     * Safely replaces SQL identifiers while preserving word boundaries and context
     * Uses character-by-character parsing instead of regex for better maintainability
     * @param sql SQL string to modify
     * @param oldIdentifier Original identifier to replace
     * @param newIdentifier New identifier to replace with
     * @returns Modified SQL string
     */
    private replaceIdentifierSafely;
    /**
     * Validates that the rename operation was successful
     * @param originalSql Original SQL string
     * @param modifiedSql Modified SQL string after rename
     * @param oldIdentifier Old identifier that was replaced
     * @param newIdentifier New identifier that was added
     * @returns True if rename appears successful
     */
    validateRename(originalSql: string, modifiedSql: string, oldIdentifier: string, newIdentifier: string): boolean;
    /**
     * Extract and potentially replace quoted identifiers
     */
    private extractAndReplaceQuotedIdentifier;
    /**
     * Extract and potentially replace bracketed identifiers [identifier]
     */
    private extractAndReplaceBracketedIdentifier;
    /**
     * Extract quoted string (handles quotes)
     */
    private extractQuotedString;
    /**
     * Extract line comment
     */
    private extractLineComment;
    /**
     * Extract block comment
     */
    private extractBlockComment;
    /**
     * Check if character code can start an identifier
     */
    private isIdentifierStartChar;
    /**
     * Check if character code can be part of an identifier
     */
    private isIdentifierChar;
    /**
     * Check if the identifier matches at the given position (case-insensitive)
     */
    private matchesIdentifierAt;
    /**
     * Validate word boundaries
     */
    private hasValidWordBoundaries;
    /**
     * Counts word boundary occurrences of an identifier in SQL
     * @param sql SQL string to search
     * @param identifier Identifier to count
     * @returns Number of occurrences
     */
    private countWordOccurrences;
}
