import { Datum, PlywoodValue } from '../datatypes';
import { SQLDialect } from '../dialect/baseDialect';
import { DatasetFullType } from '../types';
import { ChainableExpression, Expression, ExpressionJS, ExpressionTypeContext, ExpressionValue, Indexer, Splits, SubstitutionFn } from './baseExpression';
import { Aggregate } from './mixins/aggregate';
export declare class SplitExpression extends ChainableExpression implements Aggregate {
    static op: string;
    static fromJS(parameters: ExpressionJS): SplitExpression;
    keys: string[];
    splits: Splits;
    dataName: string;
    constructor(parameters: ExpressionValue);
    valueOf(): ExpressionValue;
    toJS(): ExpressionJS;
    equals(other: SplitExpression | undefined): boolean;
    changeSplits(splits: Splits): SplitExpression;
    numSplits(): number;
    isMultiSplit(): boolean;
    protected _toStringParameters(_indent?: int): string[];
    updateTypeContext(typeContext: DatasetFullType): DatasetFullType;
    firstSplitName(): string;
    firstSplitExpression(): Expression;
    getArgumentExpressions(): Expression[];
    mapSplits<T>(fn: (name: string, expression?: Expression) => T): T[];
    mapSplitExpressions<T>(fn: (expression: Expression, name?: string) => T): Record<string, T>;
    addSplits(splits: Splits): SplitExpression;
    calc(datum: Datum): PlywoodValue;
    getSQL(_dialect: SQLDialect): string;
    getSelectSQL(dialect: SQLDialect): string[];
    getGroupBySQL(dialect: SQLDialect): string[];
    getShortGroupBySQL(): string[];
    fullyDefined(): boolean;
    simplify(): Expression;
    _substituteHelper(substitutionFn: SubstitutionFn, indexer: Indexer, depth: int, nestDiff: int, typeContext: DatasetFullType): ExpressionTypeContext;
    transformExpressions(fn: (expression: Expression, name?: string) => Expression): SplitExpression;
    filterFromDatum(datum: Datum): Expression;
    hasKey(key: string): boolean;
    isLinear(): boolean;
    maxBucketNumber(): number;
}
//# sourceMappingURL=splitExpression.d.ts.map