import type { Knex } from 'knex';
import type { MetadataRow } from '../database_adapter.js';
import { DatabaseAdapter } from '../database_adapter.js';
import type { DataRecord } from '../../types/data_record.js';
import type { StorageService } from '../../storage/storage_service.js';
export interface PostgreSQLConfig {
    host: string;
    port?: number;
    user: string;
    password: string;
    database: string;
    ssl?: boolean;
}
export interface SQLiteConfig {
    filename: string;
    client?: 'sqlite3' | 'better-sqlite3';
    enableForeignKeys?: boolean;
    busyTimeout?: number;
}
/**
 * Knex-based implementation with extended querying capabilities.
 */
export declare class KnexDatabaseAdapter extends DatabaseAdapter {
    #private;
    constructor(config: Knex.Config, storage: StorageService);
    /**
     * Create a KnexDatabaseAdapter for PostgreSQL with simplified configuration
     */
    static forPostgreSQL(pgConfig: PostgreSQLConfig, storage: StorageService, tableName?: string): KnexDatabaseAdapter;
    /**
     * Create a KnexDatabaseAdapter for SQLite with simplified configuration
     */
    static forSQLite(sqliteConfig: SQLiteConfig, storage: StorageService, tableName?: string): KnexDatabaseAdapter;
    save(meta: MetadataRow): Promise<DataRecord>;
    delete(id: string, name: string): Promise<void>;
    getById(id: string, name: string): Promise<DataRecord | undefined>;
    getLatestByName(name: string): Promise<DataRecord | undefined>;
    doesTableExists(name: string): Promise<boolean>;
    createTable(name: string): Promise<void>;
    getFirstByName(name: string): Promise<DataRecord | undefined>;
    getByDateRange(name: string, startDate: Date, endDate?: Date, limit?: number): Promise<DataRecord[]>;
    getAfterDate(name: string, afterDate: Date, limit?: number): Promise<DataRecord[]>;
    getLatestBefore(name: string, beforeDate: Date): Promise<DataRecord | undefined>;
    getLatestRecordsBefore(name: string, beforeDate: Date, limit: number): Promise<DataRecord[]>;
    hasRecordsAfterDate(name: string, afterDate: Date): Promise<boolean>;
    countByDateRange(name: string, startDate: Date, endDate?: Date): Promise<number>;
    saveBatch(metadataList: MetadataRow[]): Promise<DataRecord[]>;
    deleteBatch(deleteRequests: Array<{
        id: string;
        name: string;
    }>): Promise<void>;
    getByIdsBatch(requests: Array<{
        id: string;
        name: string;
    }>): Promise<DataRecord[]>;
    getAllAssetsPaginated(name: string, offset?: number, limit?: number): Promise<{
        records: DataRecord[];
        total: number;
    }>;
    close(): Promise<void>;
}
//# sourceMappingURL=knex_database_adapter.d.ts.map