import { ReturnExpression } from "lambda-expression";
import { ValueTypeToParse } from "./core/utils";
import { DatabaseHelper } from "./database-helper";
import { FieldType } from "./core/enums/field-type";
import { PrimaryKeyType } from "./core/enums/primary-key-type";
import { GetMapper } from "./mapper/interface-get-mapper";
import { MetadataTableBase } from "./metadata-table-base";
import { WhereBuilder } from "./crud/where-builder";
import { DatabaseTypes } from "./definitions";
export declare class MetadataTable<T> extends MetadataTableBase<T> {
    private _databaseHelper;
    private _getMapper;
    readOnly: boolean;
    tableName: string;
    instance: T;
    private _autoMapperCalled;
    private _expressionUtils;
    constructor(_newable: new () => T, _databaseHelper: DatabaseHelper, _getMapper: GetMapper, readOnly?: boolean, tableName?: string);
    column<TReturn>(expression: ReturnExpression<TReturn, T>, type?: (new () => TReturn) | DatabaseTypes, primaryKeyType?: PrimaryKeyType): MetadataTable<T>;
    hasQueryFilter(whereCallback: (where: WhereBuilder<T>) => void): MetadataTable<T>;
    hasMany<TArray, TReturn extends TArray[]>(expression: ReturnExpression<TReturn, T>, type: new () => TArray, tableName: string): MetadataTable<T>;
    referenceKey<TKey, TReturn>(expression: ReturnExpression<TKey, T>, expressionKey: ReturnExpression<TReturn, TKey>, type?: new () => TReturn): MetadataTable<T>;
    reference<TReturn>(expression: ReturnExpression<TReturn, T>, type?: new () => TReturn): MetadataTable<T>;
    key<TReturn>(expression: ReturnExpression<TReturn, T>, primaryKeyType?: PrimaryKeyType, type?: new () => TReturn): MetadataTable<T>;
    ignore<TReturn>(expression: ReturnExpression<TReturn, T>): MetadataTable<T>;
    autoMapper(references?: boolean, referencesId?: boolean, referencesIdRecursive?: boolean): MetadataTable<T>;
    protected getTypeByValue(value: ValueTypeToParse): FieldType;
    private validInstanceMapper;
    private validExpressionMapper;
    private columnName;
    private getTypeByExpression;
    private getMapper;
    private isKeyColumn;
    private autoMapperColumns;
    private addReference;
    private mapperReference;
    private getMapperColumnReference;
    private autoColumnsModelReferencesRecursive;
    private addDependencyArray;
}
