import { SortFourTables } from './sort_four_tables'; import { FilterFourTables } from './filter_four_tables'; import { GroupFourTables } from './group_four_tables'; import { EnforceNonEmptyRecord, ValueOrNestedValueRecord, ValueRecord } from '../../record'; import { Value } from '../../value'; import { Subtable } from '../subtable'; import { Table } from '../one/table'; import { SelectScalar } from '../selection/select_scalar'; import { SelectRows } from '../selection/select_rows'; import { SelectVector } from '../selection/select_vector'; import { AggregatableTable } from '../aggregatable_table'; import { SelectStatement } from '../../statements/select_statement'; import { JoinFifthTable } from '../five/join_fifth_table'; import { SelectGuaranteedSingleRow } from '../selection/select_guaranteed_single_row'; import { SelectSetsOfRows } from '../selection/select_sets_of_rows'; export declare class JoinFourthTable { private readonly statement; constructor(statement: SelectStatement); filter(predicate: (first: T1, second: T2, third: T3, fourth: T4) => boolean): FilterFourTables; filter

(provided: P, predicate: (parameters: P, first: T1, second: T2, third: T3, fourth: T4) => boolean): FilterFourTables; sortBy(sortBy: (first: T1, second: T2, third: T3, fourth: T4) => Value): SortFourTables; sortDescendinglyBy(sortBy: (first: T1, second: T2, third: T3, fourth: T4) => Value): SortFourTables; join(otherTable: Table, left: (firstTable: T1, secondTable: T2, thirdTable: T3, fourthTable: T4) => K, right: (thirdTable: U) => K): JoinFifthTable; select(firstName: string, secondName: string, thirdName: string, fourthName: string): SelectSetsOfRows<{ [first in K]: T1; } & { [second in K]: T2; } & { [third in K]: T3; } & { [fourth in K]: T4; }>; map(f: (first: T1, second: T2, third: T3, fourth: T4) => EnforceNonEmptyRecord & U): SelectRows; map(tableInSubquery: Table, f: (s: Subtable, first: T1, second: T2, third: T3, fourth: T4) => EnforceNonEmptyRecord & U): SelectRows; get(f: (first: T1, second: T2, third: T3, fourth: T4) => U): SelectVector; count(): SelectScalar; max(f: (first: T1, second: T2, third: T3, fourth: T4) => V): SelectScalar; min(f: (first: T1, second: T2, third: T3, fourth: T4) => V): SelectScalar; sum(f: (first: T1, second: T2, third: T3, fourth: T4) => V): SelectScalar; average(f: (first: T1, second: T2, third: T3, fourth: T4) => V): SelectScalar; aggregate(aggregation: (first: AggregatableTable, second: AggregatableTable, third: AggregatableTable, fourth: AggregatableTable, count: () => number) => EnforceNonEmptyRecord & A): SelectGuaranteedSingleRow; groupBy(getKey: (first: T1, second: T2, third: T3, fourth: T4) => EnforceNonEmptyRecord & K): GroupFourTables; }