export interface Collection<T = string> {
    /**
     * Horizontal filtering like selecting only certain columns
     */
    select?: T[];
    /**
     * Outer array represents 'and' conditions, inner array represents 'or' conditions
     */
    where?: Where<T>[][];
    /** Sets maximal number of entities to take */
    t?: number;
    /** Sets number of entities to skip */
    sk?: number;
    /**
     * Defines the ordering of the results
     */
    orderBy?: Order[];
    /**
     * This is a foreign key relationship (one-to-many, many-to-many, or one-to-one).
     * E.g., user has many roles, user has one profile, user has many permissions.
     * Use includes to get all related data by using the foreign key relationship.
     */
    includes?: T[];
    /**
     * Defines the grouping of the results
     */
    groupBy?: T[];
    /**
     * Outer array represents 'and' conditions, inner array represents 'or' conditions
     */
    having?: Where<T>[][];
    /**
     * If true, returns the total number of records that match the query, not the data.
     */
    count?: boolean;
}
export interface Order<T = string> {
    /**
     * The column to order by
     */
    column: T;
    /**
     * The direction of the ordering (ASC or DESC)
     */
    direction?: "ASC" | "DESC";
    /**
     * Handling of null values in the ordering
     */
    nulls?: "nullsFirst" | "nullsLast";
}
export interface Where<T = string> {
    /**
     * The column to apply the condition on
     */
    column: T;
    /**
     * The value to compare the column against
     */
    value: unknown;
    /**
     * The operator to use for comparison
     */
    operator: FilterOperator;
}
export type FilterOperator = "=" | ">" | ">=" | "<" | "<=" | "<>" | "!=" | "LIKE" | "ILIKE" | "~" | "~*" | "IN" | "IS" | "IS DISTINCT FROM" | "@@" | "contains" | "<@" | "&&" | "&<" | "&>" | "-|-" | "NOT" | "OR" | "AND" | "ALL" | "ANY" | "IsNotNull" | "IsNull";
export interface CollectionResult<T> {
    /**
     * Total number of items matching the query
     */
    total: number;
    /**
     * Array of items resulting from the query
     */
    items: T[];
}
