import * as elements from '@yellicode/elements'; import { Logger } from '@yellicode/core'; import { TypeNameProvider } from '@yellicode/elements'; import { Database, Table, Column } from './model/database'; import { TypeAssociationInfo } from './model/type-association-info'; import { SqlObjectNameProvider } from './providers/sql-object-name-provider'; import { SqlColumnSpecProvider } from './providers/sql-column-spec-provider'; import { DbOptions } from './db-options'; export declare class DbBuilder, TTable extends Table, TColumn extends Column> { private columnRelationships; protected logger: Logger; protected objectNameProvider: SqlObjectNameProvider; protected columnSpecProvider: SqlColumnSpecProvider; protected typeNameProvider: TypeNameProvider; private tableFilters; constructor(options?: DbOptions, logger?: Logger); /** * Adds a filter expression that filters out the types from which the builder should create tables. * You can add multiple filters by calling this function multiple times, the filters will be applied * in the order in which you call them. * @param predicate A function that returns true if a table should be created for the given type. */ addTableFilter(predicate: (type: elements.Type) => boolean): this; protected createDatabase(db: Database, model: elements.Model, associationMap: Map): TDatabase; protected createTable(table: Table, type: elements.Type | null): TTable; protected createColumn(column: Column, property: elements.Property): TColumn; build(model: elements.Model): TDatabase; private resolveColumnRelationships; private shouldCreateTableForType; protected buildTableDefinitionFromType(type: elements.Type, associationMap: Map): Table | null; private buildColumnDefinition; private buildColumnDefinitionFromProperty; /** * Uses the current typeNameProvider to get the sql type name for the specified type. */ protected getSqlTypeName(typedElement: elements.TypedElement): string; protected getIdentityColumnName(type: elements.Type): string; private static logAssociations; }