import { DataTableAbstract } from "../datatable_abstract.js";
import type { DatabaseQueryBuilderContract, Dictionary } from "@adonisjs/lucid/types/querybuilder";
import type { LucidModel, ModelQueryBuilderContract } from "@adonisjs/lucid/types/model";
export default class DatabaseDataTable extends DataTableAbstract {
    protected query: DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>;
    protected nullsLast: boolean;
    protected prepared: boolean;
    protected keepSelectBindings: boolean;
    protected disableUserOrdering: boolean;
    constructor(query: DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>);
    static canCreate(source: any): boolean;
    protected getConnection(): import("knex").Knex.Client;
    protected defaultOrdering(): any;
    protected hasOrderColumn(column: string): boolean;
    protected applyOrderColumn(column: string, orderable: Record<string, any>): void;
    protected getNullsLastSql(column: string, direction: string): string;
    protected attachAppends(data: Record<string, any>): Record<string, any>;
    protected getColumnSearchKeyword(i: number, raw?: boolean): string;
    protected applyFilterColumn(query: DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>, columnName: string, keyword: string): void;
    protected resolveRelationColumn(column: string): string;
    protected compileColumnSearch(i: number, column: string, keyword: string): void;
    protected regexColumnSearch(column: string, keyword: string): void;
    protected compileQuerySearch(query: ModelQueryBuilderContract<LucidModel, any> | DatabaseQueryBuilderContract<Dictionary<any, string>>, columnName: string, keyword: string, boolean?: string): void;
    protected prepareKeyword(keyword: string): string;
    protected prepareQuery(): Promise<this>;
    protected filterRecords(): Promise<void>;
    protected hasFilterColumn(columnName: string): boolean;
    protected wrapColumn(column: string): string;
    protected getBaseQueryBuilder(instance?: DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any> | undefined): DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>;
    protected castColumn(column: string): string;
    protected addTablePrefix(query: DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>, column: string): string;
    protected getFilteredQuery(): DatabaseQueryBuilderContract<Dictionary<any, string>> | ModelQueryBuilderContract<LucidModel, any>;
    protected resolveCallback(): any;
    results(): Promise<void | Record<string, any>>;
    dataResults(): Promise<Record<string, any>[]>;
    count(): Promise<number>;
    columnSearch(): void;
    /**
     * Apply the search conditions sent by the DataTables ColumnControl extension.
     *
     * @see https://datatables.net/extensions/columncontrol/server-side
     */
    protected applyColumnControlSearch(index: number, column: string): void;
    protected applyColumnControlList(column: string, list: any[]): void;
    protected compileExactMatch(query: ModelQueryBuilderContract<LucidModel, any> | DatabaseQueryBuilderContract<Dictionary<any, string>>, columnName: string, value: string, boolean?: string): void;
    protected compileColumnControlSearch(column: string, search: {
        value: string;
        logic: string;
        type: string;
        mask?: string;
    }): void;
    protected compileTextSearch(column: string, logic: string, value: string): void;
    protected compileNumberSearch(column: string, logic: string, value: string): void;
    protected compileDateSearch(column: string, logic: string, value: string, mask?: string): void;
    filterColumn(column: string, callback: <T extends abstract new (...args: any) => any>(query: InstanceType<T>, keyword: string) => void): this;
    orderColumns(columns: Record<string, any>, sql: string, bindings?: any[]): this;
    orderColumn(column: string, sql: (<T extends abstract new (...args: any) => any>(query: InstanceType<T>, direction: string) => void) | string | boolean, bindings?: any[]): this;
    orderByNullsLast(): this;
    paging(): void;
    addColumn(name: string, content: (<T extends abstract new (...args: any) => any>(row: InstanceType<T>) => string | number) | string | number, order?: boolean): this;
    globalSearch(keyword: string): void;
    ordering(): void;
}
