// Package: com.lightningkite.ktordb
// Generated by Khrysalis - this file will be overwritten.
import { Aggregate } from './Aggregate'
import { Condition } from './Condition'
import { ReifiedType, setUpDataClass } from '@lightningkite/khrysalis-runtime'

//! Declares com.lightningkite.ktordb.GroupCountQuery
export class GroupCountQuery<Model extends any> {
    public constructor(public readonly condition: Condition<Model> = new Condition.Always<Model>(), public readonly groupBy: (keyof Model & string)) {
    }
    public static properties = ["condition", "groupBy"]
    public static propertyTypes(Model: ReifiedType) { return {condition: [Condition, Model], groupBy: [String, Model]} }
    copy: (values: Partial<GroupCountQuery<Model>>) => this;
    equals: (other: any) => boolean;
    hashCode: () => number;
}
setUpDataClass(GroupCountQuery)

//! Declares com.lightningkite.ktordb.AggregateQuery
export class AggregateQuery<Model extends any> {
    public constructor(public readonly aggregate: Aggregate, public readonly condition: Condition<Model> = new Condition.Always<Model>(), public readonly property: (keyof Model & string)) {
    }
    public static properties = ["aggregate", "condition", "property"]
    public static propertyTypes(Model: ReifiedType) { return {aggregate: [Aggregate], condition: [Condition, Model], property: [String, Model]} }
    copy: (values: Partial<AggregateQuery<Model>>) => this;
    equals: (other: any) => boolean;
    hashCode: () => number;
}
setUpDataClass(AggregateQuery)

//! Declares com.lightningkite.ktordb.GroupAggregateQuery
export class GroupAggregateQuery<Model extends any> {
    public constructor(public readonly aggregate: Aggregate, public readonly condition: Condition<Model> = new Condition.Always<Model>(), public readonly groupBy: (keyof Model & string), public readonly property: (keyof Model & string)) {
    }
    public static properties = ["aggregate", "condition", "groupBy", "property"]
    public static propertyTypes(Model: ReifiedType) { return {aggregate: [Aggregate], condition: [Condition, Model], groupBy: [String, Model], property: [String, Model]} }
    copy: (values: Partial<GroupAggregateQuery<Model>>) => this;
    equals: (other: any) => boolean;
    hashCode: () => number;
}
setUpDataClass(GroupAggregateQuery)
