import type { Feature } from "../../data/Feature.js";
import type { FeatureSource } from "../../data/FeatureSource.js";
import type { CountResult } from "../CountResult.js";
import type { QueryOptions } from "./QueryOptions.js";
/**
 * Provides query capability for one or more
 * {@link data/FeatureSource!FeatureSource}s.
 */
export interface QueryProvider {
    /**
     * Determines whether this provider can handle queries for the given feature
     * source.
     *
     * @param source The feature source.
     */
    isSupported(source: FeatureSource): boolean;
    /**
     * Queries a given feature source for features that match the query
     * criteria.
     *
     * @param source The source to query.
     * @param where An SQL expression to match against, e.g. "lastName='Smith'".
     * @param options Additional options that affect the query.
     */
    query(source: FeatureSource | FeatureSource[], where: string, options?: QueryOptions): AsyncIterable<Feature>;
    /**
     * Queries a given feature source for a count of features that match the
     * query criteria.
     *
     * @param source The source to query.
     * @param where An SQL expression to match against, e.g. "lastName='Smith'".
     * @param options Additional options that affect the query.
     */
    count(source: FeatureSource, where: string, options?: QueryOptions): Promise<CountResult>;
}
