import { Observable } from 'rxjs'; import { PolarisQueryBase, PolarisQueryResult } from '../../../generic'; import { TimeInstantQuery, TimeRangeQuery, TimeSeries, TimeSeriesInstant, TimeSeriesQuery, TimeSeriesQueryResultType } from '../../query-model'; import { NativeQueryBuilder, NativeQueryBuilderFactoryFn } from '../native-query-builder'; import { QueryContent, SubqueryQueryContent } from '../query-content'; import { SubqueryBuilderContainer } from '../subquery-builder-content'; /** * Common superclass for all `TimeSeriesQuery` implementations. * * This class takes care of storing the `QueryContent` and executing the `NativeQueryBuilder` to * assemble a DB-native query, as well as executing it. */ export declare abstract class TimeSeriesQueryBase> extends PolarisQueryBase implements TimeSeriesQuery { abstract readonly resultType: TimeSeriesQueryResultType; /** The actual content of this query. */ protected queryContent: QueryContent; /** The factory used to create a new NativeQueryBuilder instance. */ protected queryBuilderFactoryFn: NativeQueryBuilderFactoryFn; /** * Creates a new instance of `TimeSeriesQueryBase`. * * @param predecessor The query that precedes this one in the chain. This should be `null`, * if this is the first query in the chain. * @param queryContent The actual content of this query. * @param queryBuilderFactoryFn The factory used to create a new NativeQueryBuilder instance. */ constructor(predecessor: TimeSeriesQueryBase, queryContent: QueryContent, queryBuilderFactoryFn: NativeQueryBuilderFactoryFn); /** * Creates a new instance of a `TimeRangeQuery` and sets its query content. */ protected abstract createTimeRangeQuery(queryContent: QueryContent): TimeRangeQuery & TimeSeriesQueryBase>; /** * Creates a new instance of a `TimeInstantQuery` and sets its query content. */ protected abstract createTimeInstantQuery(queryContent: QueryContent): TimeInstantQuery & TimeSeriesQueryBase>; protected executeInternal(queryChain: TimeSeriesQueryBase[]): Promise>; protected toObservableInternal(queryChain: TimeSeriesQueryBase[]): Observable>; /** * Creates a `NativeQueryBuilder` adds the entire `queryChain` to it. */ protected prepareNativeQueryBuilder(queryChain: TimeSeriesQueryBase[]): NativeQueryBuilder; /** * Builds a native query from the provided `queryChain`. */ protected buildNativeQuery(queryChain: TimeSeriesQueryBase[]): TimeSeriesQuery; /** * Creates a `NativeQueryBuilder` for each subquery in `queryContent`. */ protected createSubqueryBuilders(queryContent: Q): SubqueryBuilderContainer; }