import type { Feature } from "../../data/Feature.js";
import type { FeatureSource } from "../../data/FeatureSource.js";
import type { CountResult } from "../CountResult.js";
import { QueryOptions } from "./QueryOptions.js";
import type { QueryProvider } from "./QueryProvider.js";
/**
 * A base implementation of {@link tasks/query/QueryProvider!QueryProvider}.
 */
export declare abstract class QueryProviderBase implements QueryProvider {
    /**
     * @inheritDoc
     */
    abstract isSupported(source: FeatureSource): boolean;
    /**
     * @inheritDoc
     */
    query(source: FeatureSource | FeatureSource[], where: string, options?: QueryOptions): AsyncIterable<Feature>;
    /**
     * @inheritDoc
     */
    count(source: FeatureSource, where: string, options?: QueryOptions): Promise<CountResult>;
    /**
     * Invoked to perform the work for {@link query}. Default implementation
     * calls {@link _query} for each source. Derived classes can override this
     * method to implement special handling for multiple sources.
     *
     * @param sources The sources to identify.
     * @param where An SQL expression to match against, e.g. "lastName='Smith'".
     * @param options Additional options that affect the query.
     */
    protected _queryMany(sources: FeatureSource[], where: string, options?: QueryOptions): AsyncIterable<Feature>;
    /**
     * Invoked to perform the actual work for {@link query}. Derived classes
     * should override this method rather than query().
     *
     * @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.
     */
    protected abstract _query(source: FeatureSource, where: string, options: QueryOptions): AsyncIterable<Feature>;
    /**
     * Invoked to perform the actual work for {@link count}. Derived classes
     * should override this method rather than count().
     *
     * @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.
     */
    protected abstract _count(source: FeatureSource, where: string, options: QueryOptions): Promise<CountResult>;
}
