import { LockedColumn, UniqueFacetIdentifier } from '@/utils/types';
import { ColumnModel, ColumnTypeEnum, FacetColumnRequest, FacetColumnResult, JsonSubColumnModel, Query, QueryBundleRequest, QueryResultBundle, SelectColumn, Table } from '@sage-bionetworks/synapse-types';
/**
 * Retrieve the index of a column using the column name
 * @param name the column name
 * @param result the QueryResultBundle containing the columns
 * @returns The index of the column, or -1 if the column doesn't exist in the result
 */
export declare const getFieldIndex: (name?: string, result?: QueryResultBundle) => number;
/**
 * Retrieve the index of a column using the header column name found inthe query results.
 * Ignores case.
 * @param name the column name
 * @param result the QueryResultBundle containing the columns
 * @returns The index of the column, or -1 if the column doesn't exist in the result
 */
export declare const getHeaderIndex: (name: string, result: QueryResultBundle | undefined) => number;
/**
 * Returns the indices of the selectColumns with the specified type
 * @param columnType
 * @param selectColumns
 */
export declare function getTypeIndices(columnType: ColumnTypeEnum, selectColumns?: SelectColumn[]): number[];
export declare const hasFacetedSelectColumn: (facets?: FacetColumnResult[], selectColumns?: SelectColumn[]) => boolean;
export declare const isSingleNotSetValue: (facet: FacetColumnResult) => boolean;
export declare function removeLockedColumnFromFacetData(data?: QueryResultBundle, lockedColumn?: LockedColumn): QueryResultBundle | undefined;
/**
 * Returns true iff the query has filters applied that can be reset.
 * This includes facet filters and additional filters that are not applied to a locked column.
 */
export declare function hasResettableFilters(query: Query, lockedColumn?: LockedColumn): boolean;
/**
 * Returns true iff a table query can be added to the download list.
 * @param entity
 * @param entityColumnId
 */
export declare function canTableQueryBeAddedToDownloadList<T extends Table = Table>(entity?: T, entityColumnId?: string): boolean;
/**
 * Returns true if the queries necessarily return the same result set, i.e. if they have identical parameters other than
 * limit, offset, sort.
 *
 * Note that this does not query the actual tables, so this only captures the semantic equivalence of the queries.
 */
export declare function queryRequestsHaveSameTotalResults(request1: Query, request2: Query): boolean;
/**
 * Remove null/empty values from the query parameters where an undefined value is equivalent.
 *
 * This will ensure a query object is as simple as possible for URL search parameters and also increases the
 * likelihood of a cache hit.
 * @param q
 */
export declare function removeEmptyQueryParams(q: Query): Query;
/**
 * Given a FacetColumnResult and a set of ColumnModels, return the ColumnModel that
 * matches the FacetColumnResult.
 * @param facet
 * @param columnModels
 */
export declare function getCorrespondingColumnForFacet(facet: FacetColumnResult, columnModels: ColumnModel[]): ColumnModel | JsonSubColumnModel | undefined;
/**
 * Given a set of FacetColumnRequests, return the FacetColumnRequest that matches the given UniqueFacetIdentifier.
 * @param facetDefinition
 * @param selectedFacets
 */
export declare function getCorrespondingSelectedFacet(facetDefinition: UniqueFacetIdentifier, selectedFacets?: FacetColumnRequest[]): FacetColumnRequest | undefined;
export declare function facetObjectMatchesDefinition(facetDefinition: UniqueFacetIdentifier | FacetColumnRequest | FacetColumnResult, facetObject: UniqueFacetIdentifier | FacetColumnRequest | FacetColumnResult): boolean;
export declare function partitionQueryBundleRequestIntoRowsAndMetadata(queryBundleRequest: QueryBundleRequest): {
    rowDataRequest: QueryBundleRequest;
    queryMetadataRequest: QueryBundleRequest;
};
//# sourceMappingURL=queryUtils.d.ts.map