/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { type GraphManagerState, type LambdaFunction, type ValueSpecification, SimpleFunctionExpression } from '@finos/legend-graph';
import { COLUMN_SORT_TYPE } from '../../../../graph/QueryBuilderMetaModelConst.js';
import type { QueryResultSetModifierState, SortColumnState } from '../QueryResultSetModifierState.js';
export type ResultModifierValueSpecOptions = {
    overridingLimit?: number | undefined;
    withDataOverflowCheck?: boolean | undefined;
};
export declare abstract class ResultModifierValueSpecificationBuilder {
    _currentResultModifierFunc: SimpleFunctionExpression | undefined;
    readonly graphManagerState: GraphManagerState;
    options: ResultModifierValueSpecOptions | undefined;
    distinct: boolean;
    sortColumns: SortColumnState[] | undefined;
    limit?: number | undefined;
    slice: [number, number] | undefined;
    constructor(graphManagerState: GraphManagerState);
    get currentExpression(): SimpleFunctionExpression;
    abstract get distinctFunctionName(): string;
    abstract get sortFunctionName(): string;
    abstract get limitFunctionName(): string;
    abstract get sliceFunctionName(): string;
    abstract get ascFunctionname(): string;
    abstract get descFunctionName(): string;
    get supportedResultModifiersFunctions(): string[];
    getSortTypeFunctionName(sortType: COLUMN_SORT_TYPE): string;
    setCurrentResultModifierFunction(val: SimpleFunctionExpression): void;
    withOptions(options: ResultModifierValueSpecOptions | undefined): ResultModifierValueSpecificationBuilder;
    withDistinct(distinct: boolean): ResultModifierValueSpecificationBuilder;
    withSortColumns(sortCols: SortColumnState[] | undefined): ResultModifierValueSpecificationBuilder;
    withLimit(limit: number | undefined): ResultModifierValueSpecificationBuilder;
    withSlice(slice: [number, number] | undefined): ResultModifierValueSpecificationBuilder;
    buildDistinctFunction(): void;
    buildSortFunction(sortColumns: SortColumnState[]): void;
    buildSortExpression(sortColumnState: SortColumnState): SimpleFunctionExpression;
    abstract buildColumnValueSpec(colName: string): ValueSpecification;
    buildLimitFunction(limit?: number | undefined): void;
    buildSliceFunction(slice: [number, number]): void;
    build(lambdaFunction: LambdaFunction): LambdaFunction;
}
export declare class TDSResultModifierValueSpecificationBuilder extends ResultModifierValueSpecificationBuilder {
    get limitFunctionName(): string;
    get sliceFunctionName(): string;
    get sortFunctionName(): string;
    get distinctFunctionName(): string;
    get ascFunctionname(): string;
    get descFunctionName(): string;
    buildColumnValueSpec(columnName: string): ValueSpecification;
}
export declare class TypedResultModifierValueSpecificationBuilder extends ResultModifierValueSpecificationBuilder {
    get limitFunctionName(): string;
    get sliceFunctionName(): string;
    get ascFunctionname(): string;
    get descFunctionName(): string;
    get sortFunctionName(): string;
    get distinctFunctionName(): string;
    buildColumnValueSpec(columnName: string): ValueSpecification;
}
export declare const appendResultSetModifier: (resultModifierState: QueryResultSetModifierState, lambdaFunction: LambdaFunction, isTyped: boolean, options?: ResultModifierValueSpecOptions | undefined) => LambdaFunction;
//# sourceMappingURL=ResultModifierValueSpecificationBuilder.d.ts.map