import { DatabaseDialect } from './database-dialect';
import { ITableSchema } from './schema-inspector';
import { IPrismaQueryExpression } from './prisma-queryable';
export interface ISqlQueryResult {
    sql: string;
    parameters: any[];
    estimatedCost?: number;
    usedIndexes?: string[];
}
export interface IQueryPlanInfo {
    operation: 'SELECT' | 'COUNT' | 'AGGREGATE';
    tableScans: string[];
    indexUsage: {
        [tableName: string]: string[];
    };
    joinStrategy?: 'HASH' | 'NESTED_LOOP' | 'MERGE';
    estimatedRows?: number;
}
export interface ISqlBuilderOptions {
    enableQueryOptimization?: boolean;
    enableIndexHints?: boolean;
    maxParameterCount?: number;
    useCompiledStatements?: boolean;
    enableQueryPlan?: boolean;
}
export declare class AdvancedSqlQueryBuilder {
    private dialect;
    private schema;
    private parameterIndex;
    private parameterMap;
    private options;
    private usedTables;
    private joinConditions;
    private queryPlan;
    constructor(dialect: DatabaseDialect, schema: ITableSchema, options?: ISqlBuilderOptions);
    buildSelectQuery(expression: IPrismaQueryExpression): ISqlQueryResult;
    buildCountQuery(expression: IPrismaQueryExpression): ISqlQueryResult;
    buildAggregationQuery(expression: IPrismaQueryExpression, aggregationType: 'MIN' | 'MAX' | 'SUM' | 'AVG', columnName: string): ISqlQueryResult;
    private buildWhereClause;
    private buildCondition;
    private buildFieldCondition;
    private buildInCondition;
    private buildStringOperation;
    private buildFullTextSearch;
    private buildArrayCondition;
    private buildSelectClause;
    private buildFromClause;
    private buildJoinClauses;
    private buildJoinClause;
    private buildOrderByClause;
    private buildLimitClause;
    private getParameterPlaceholder;
    private quoteIdentifier;
    private normalizeValue;
    private reset;
    private buildLogicalOperator;
    private buildGroupByClause;
    private buildHavingClause;
    private getOptimalCountField;
    private validateAggregationColumn;
    private optimizeQuery;
    private optimizeCountQuery;
    private optimizeAggregationQuery;
    private addIndexHints;
    private analyzeWhereForIndexUsage;
    private calculateQueryCost;
    private getUsedIndexes;
    private getArrayType;
    private buildArrayElementCondition;
    private buildJsonArraySome;
    private buildEmptyCheck;
}
