mirror of
https://github.com/typeorm/typeorm.git
synced 2025-12-08 21:26:23 +00:00
added join table and column metadatas
This commit is contained in:
parent
c435802678
commit
3a55d797ed
13
src/decorator/relations/JoinColumn.ts
Normal file
13
src/decorator/relations/JoinColumn.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import {defaultMetadataStorage} from "../../typeorm";
|
||||
import {JoinTableOptions} from "../../metadata-builder/options/JoinTableOptions";
|
||||
import {JoinColumnMetadata} from "../../metadata-builder/metadata/JoinColumnMetadata";
|
||||
|
||||
/**
|
||||
*/
|
||||
export function JoinColumn<T>(options: JoinTableOptions): Function {
|
||||
return function (object: Object, propertyName: string) {
|
||||
const metadata = new JoinColumnMetadata(object.constructor, propertyName, options);
|
||||
defaultMetadataStorage().addJoinColumnMetadata(metadata);
|
||||
};
|
||||
}
|
||||
|
||||
13
src/decorator/relations/JoinTable.ts
Normal file
13
src/decorator/relations/JoinTable.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import {defaultMetadataStorage} from "../../typeorm";
|
||||
import {JoinTableOptions} from "../../metadata-builder/options/JoinTableOptions";
|
||||
import {JoinTableMetadata} from "../../metadata-builder/metadata/JoinTableMetadata";
|
||||
|
||||
/**
|
||||
*/
|
||||
export function JoinTable<T>(options: JoinTableOptions): Function {
|
||||
return function (object: Object, propertyName: string) {
|
||||
const metadata = new JoinTableMetadata(object.constructor, propertyName, options);
|
||||
defaultMetadataStorage().addJoinTableMetadata(metadata);
|
||||
};
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@ import {ColumnMetadata} from "./metadata/ColumnMetadata";
|
||||
import {EventSubscriberMetadata} from "./metadata/EventSubscriberMetadata";
|
||||
import {EntityListenerMetadata} from "./metadata/EntityListenerMetadata";
|
||||
import {NamingStrategyMetadata} from "./metadata/NamingStrategyMetadata";
|
||||
import {JoinColumnMetadata} from "./metadata/JoinColumnMetadata";
|
||||
import {JoinTableMetadata} from "./metadata/JoinTableMetadata";
|
||||
|
||||
/**
|
||||
* Storage all metadatas of all available types: tables, fields, subscribers, relations, etc.
|
||||
@ -27,6 +29,8 @@ export class MetadataStorage {
|
||||
private compoundIndexMetadatas: CompoundIndexMetadata[] = [];
|
||||
private namingStrategyMetadatas: NamingStrategyMetadata[] = [];
|
||||
private relationMetadatas: RelationMetadata[] = [];
|
||||
private joinColumnMetadatas: JoinColumnMetadata[] = [];
|
||||
private joinTableMetadatas: JoinTableMetadata[] = [];
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Adder Methods
|
||||
@ -100,6 +104,18 @@ export class MetadataStorage {
|
||||
this.entityListenerMetadatas.push(metadata);
|
||||
}
|
||||
|
||||
addJoinTableMetadata(metadata: JoinTableMetadata) {
|
||||
// if (this.hasFieldMetadataOnProperty(metadata.target, metadata.propertyName)) // todo later
|
||||
// throw new MetadataAlreadyExistsError("EventListener", metadata.target);
|
||||
this.joinTableMetadatas.push(metadata);
|
||||
}
|
||||
|
||||
addJoinColumnMetadata(metadata: JoinColumnMetadata) {
|
||||
// if (this.hasFieldMetadataOnProperty(metadata.target, metadata.propertyName)) // todo later
|
||||
// throw new MetadataAlreadyExistsError("EventListener", metadata.target);
|
||||
this.joinColumnMetadatas.push(metadata);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Public Methods
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
35
src/metadata-builder/metadata/JoinColumnMetadata.ts
Normal file
35
src/metadata-builder/metadata/JoinColumnMetadata.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import {PropertyMetadata} from "./PropertyMetadata";
|
||||
import {JoinColumnOptions} from "../options/JoinColumnOptions";
|
||||
|
||||
/**
|
||||
*/
|
||||
export class JoinColumnMetadata extends PropertyMetadata {
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Public Properties
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Naming strategy used to generate and normalize column name.
|
||||
*/
|
||||
// namingStrategy: NamingStrategyInterface;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Readonly Properties
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Join table options.
|
||||
*/
|
||||
readonly options: JoinColumnOptions;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Constructor
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
constructor(target: Function, propertyName: string, options: JoinColumnOptions) {
|
||||
super(target, propertyName);
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
}
|
||||
35
src/metadata-builder/metadata/JoinTableMetadata.ts
Normal file
35
src/metadata-builder/metadata/JoinTableMetadata.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import {PropertyMetadata} from "./PropertyMetadata";
|
||||
import {JoinTableOptions} from "../options/JoinTableOptions";
|
||||
|
||||
/**
|
||||
*/
|
||||
export class JoinTableMetadata extends PropertyMetadata {
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Public Properties
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Naming strategy used to generate and normalize column name.
|
||||
*/
|
||||
// namingStrategy: NamingStrategyInterface;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Readonly Properties
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Join table options.
|
||||
*/
|
||||
readonly options: JoinTableOptions;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Constructor
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
constructor(target: Function, propertyName: string, options: JoinTableOptions) {
|
||||
super(target, propertyName);
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
}
|
||||
16
src/metadata-builder/options/JoinColumnOptions.ts
Normal file
16
src/metadata-builder/options/JoinColumnOptions.ts
Normal file
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Describes column options.
|
||||
*/
|
||||
export interface JoinColumnOptions {
|
||||
|
||||
/**
|
||||
* Name of the column.
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* Name of the column in the entity to which this column is referenced.
|
||||
*/
|
||||
referencedColumnName?: string;
|
||||
|
||||
}
|
||||
24
src/metadata-builder/options/JoinTableOptions.ts
Normal file
24
src/metadata-builder/options/JoinTableOptions.ts
Normal file
@ -0,0 +1,24 @@
|
||||
import {JoinColumnOptions} from "./JoinColumnOptions";
|
||||
|
||||
/**
|
||||
* Describes all relation's options.
|
||||
*/
|
||||
export interface JoinTableOptions {
|
||||
|
||||
/**
|
||||
* Name of the table that will be created to store values of the both tables (join table).
|
||||
* By default is auto generated.
|
||||
*/
|
||||
name?: string;
|
||||
|
||||
/**
|
||||
* First column of the join table.
|
||||
*/
|
||||
joinColumn?: JoinColumnOptions;
|
||||
|
||||
/**
|
||||
* Second (inverse) column of the join table.
|
||||
*/
|
||||
inverseJoinColumn?: JoinColumnOptions;
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user