import { FilterTable } from './filter_table'; import { SortTable } from './sort_table'; import { GroupTable } from './group_table'; import { JoinSecondTable } from '../two/join_second_table'; import { EnforceNonEmptyRecord, TableAggregationRecord, ValueOrNestedValueRecord, ValueRecord } from '../../record'; import { Value } from '../../value'; import { Subtable } from '../subtable'; import { SelectScalar } from '../selection/select_scalar'; import { SelectRows } from '../selection/select_rows'; import { SelectVector } from '../selection/select_vector'; import { AggregatableTable, Count } from '../aggregatable_table'; import { Constructor } from '../../statements/select_statement'; import { SelectGuaranteedSingleRow } from '../selection/select_guaranteed_single_row'; export declare type Columns = { [P in keyof T]: 'string' | 'number' | 'boolean'; }; export declare class Table { readonly typeConstructor: Constructor; readonly tableName: string; readonly columns: Columns; private readonly statement; constructor(typeConstructor: Constructor, tableName: string, columns: Columns); filter(predicate: (table: T) => boolean): FilterTable; filter

(provided: P, predicate: (parameters: P, table: T) => boolean): FilterTable; sortBy(sortBy: (table: T) => Value): SortTable; sortDescendinglyBy(sortBy: (table: T) => Value): SortTable; join(otherTable: Table, left: (firstTable: T) => K, right: (secondTable: U) => K): JoinSecondTable; map(f: (table: T) => EnforceNonEmptyRecord & U): SelectRows; map(tableInSubquery: Table, f: (s: Subtable, x: T) => EnforceNonEmptyRecord & U): SelectRows; get(f: (table: T) => U): SelectVector; count(): SelectScalar; max(f: (table: T) => V): SelectScalar; min(f: (table: T) => V): SelectScalar; sum(f: (table: T) => V): SelectScalar; average(f: (table: T) => V): SelectScalar; aggregate(aggregation: (table: AggregatableTable, count: () => Count) => EnforceNonEmptyRecord & A): SelectGuaranteedSingleRow; groupBy(getKey: (table: T) => EnforceNonEmptyRecord & K): GroupTable; } export declare function defineTable(typeConstructor: Constructor, tableName: string, columns: Columns): Table;