import { SupportedDbtAdapter } from '../types/dbt';
import { DimensionType, MetricType, type CompiledCustomSqlDimension, type CompiledField, type TableCalculation } from '../types/field';
import { FilterOperator, type FilterRule } from '../types/filter';
import { type WarehouseTypes } from '../types/projects';
import { WeekDay } from '../utils/timeFrames';
export declare const DEFAULT_FILTER_CASE_SENSITIVE = true;
/**
 * Formats computed Date boundaries for relative date operators (IN_THE_PAST, etc.)
 * by converting UTC back to the project timezone before formatting as YYYY-MM-DD.
 * Used only when timezone-aware DATE_TRUNC is enabled.
 */
export declare const createBoundaryDateFormatter: (timezone: string) => (date: Date) => string;
/**
 * Cast a date/timestamp string to warehouse-specific SQL literal.
 * Trino/Athena require explicit timestamp casting; others work with bare strings.
 */
export declare const castDateLiteral: (dateString: string, adapterType: SupportedDbtAdapter | WarehouseTypes) => string;
export declare const renderStringFilterSql: (dimensionSql: string, filter: FilterRule<FilterOperator, unknown>, stringQuoteChar: string, caseSensitive?: boolean) => string;
export declare const renderNumberFilterSql: (dimensionSql: string, filter: FilterRule<FilterOperator, unknown>) => string;
/**
 * Renders filter SQL for DATE-type dimensions.
 *
 * When no explicit boundaryDateFormatter is provided, both boundary
 * computation and formatting default to UTC.  This matches the warehouse's
 * UTC-based DATE_TRUNC and removes any dependency on the server's local
 * timezone.  Callers that enable timezone-aware DATE_TRUNC should pass
 * createBoundaryDateFormatter(timezone) so both sides use the project
 * timezone instead.
 */
export declare const renderDateFilterSql: ({ dimensionSql, filter, adapterType, timezone, boundaryDateFormatter, startOfWeek, baseDimensionSql, useTimezoneAwareDateTrunc, sourceTimezone, }: {
    dimensionSql: string;
    filter: FilterRule<FilterOperator, unknown>;
    adapterType: SupportedDbtAdapter;
    timezone: string;
    boundaryDateFormatter?: (date: Date) => string;
    startOfWeek?: WeekDay | null;
    baseDimensionSql?: string;
    useTimezoneAwareDateTrunc?: boolean;
    sourceTimezone?: string;
}) => string;
/** Renders filter SQL for TIMESTAMP-type dimensions. Both literals and boundaries use the same UTC formatter. */
export declare const renderTimestampFilterSql: ({ dimensionSql, filter, adapterType, timezone, timestampFormatter, startOfWeek, baseDimensionSql, useTimezoneAwareDateTrunc, sourceTimezone, }: {
    dimensionSql: string;
    filter: FilterRule<FilterOperator, unknown>;
    adapterType: SupportedDbtAdapter;
    timezone: string;
    timestampFormatter: (date: Date) => string;
    startOfWeek?: WeekDay | null;
    baseDimensionSql?: string;
    useTimezoneAwareDateTrunc?: boolean;
    sourceTimezone?: string;
}) => string;
export declare const renderBooleanFilterSql: (dimensionSql: string, filter: FilterRule<FilterOperator, unknown>) => string;
export declare const renderTableCalculationFilterRuleSql: (filterRule: FilterRule<FilterOperator, unknown>, field: TableCalculation | undefined, fieldQuoteChar: string, stringQuoteChar: string, escapeString: (string: string) => string, adapterType: SupportedDbtAdapter, startOfWeek: WeekDay | null | undefined, timezone?: string) => string;
export declare const renderFilterRuleSql: (filterRule: FilterRule<FilterOperator, unknown>, fieldType: DimensionType | MetricType, fieldSql: string, stringQuoteChar: string, escapeString: (string: string) => string, startOfWeek: WeekDay | null | undefined, adapterType: SupportedDbtAdapter, timezone?: string, caseSensitive?: boolean, baseDimensionSql?: string, useTimezoneAwareDateTrunc?: boolean, baseTimeIntervalDimensionType?: DimensionType, sourceTimezone?: string) => string;
export declare const renderFilterRuleSqlFromField: (filterRule: FilterRule<FilterOperator, unknown>, field: CompiledField | CompiledCustomSqlDimension, fieldQuoteChar: string, stringQuoteChar: string, escapeString: (string: string) => string, startOfWeek: WeekDay | null | undefined, adapterType: SupportedDbtAdapter, timezone?: string, exploreCaseSensitive?: boolean, baseDimensionSql?: string, useTimezoneAwareDateTrunc?: boolean, sourceTimezone?: string) => string;
//# sourceMappingURL=filtersCompiler.d.ts.map