import { Artifacts } from '../steps/BaseStep';
import { INameGiver } from './INameGiver';
import { BuilderData } from '../builder';
import { BooleanColumn } from './BooleanColumn';
import { Column } from './Column';
import { DateColumn } from './DateColumn';
import { NumberColumn } from './NumberColumn';
import { Schema } from './Schema';
import { TextColumn } from './TextColumn';
import { IStatementGiver } from '../models';
import { TableAsterisk } from '../TableAsterisk';
type ColumnsObj = {
    [columnName: string]: BooleanColumn | NumberColumn | TextColumn | DateColumn;
};
type TableObj<C extends ColumnsObj> = {
    name: string;
    columns: C;
};
export declare class Table<C extends ColumnsObj = ColumnsObj> implements INameGiver, IStatementGiver {
    private readonly data;
    private mSchema?;
    private readonly mColumns;
    private readonly columnArray;
    constructor(data: TableObj<C>);
    set schema(schema: Schema);
    get schema(): Schema;
    get name(): string;
    get fqName(): string;
    as(alias: string): AliasedTable<typeof this>;
    get columns(): C;
    /** Alias to get columns() */
    get c(): C;
    /**
     * Returns array of table's columns, this is different from
     * columns() property which returns an object with column name as key
     */
    getColumns(): readonly Column[];
    get ASTERISK(): TableAsterisk;
    isColumnExist(column: Column): boolean;
    getStmt(data: BuilderData, artifacts: Artifacts): string;
}
export declare class AliasedTable<T extends Table> implements INameGiver, IStatementGiver {
    readonly table: T;
    readonly alias: string;
    constructor(table: T, alias: string);
    getStmt(data: BuilderData, artifacts: Artifacts): string;
    get name(): string;
    get fqName(): string;
}
export {};
