From c353401e963f86d13f3f9f84b10b5a5cc667ac3f Mon Sep 17 00:00:00 2001 From: Umed Khudoiberdiev Date: Wed, 23 Mar 2016 16:02:25 +0500 Subject: [PATCH] removed deprecated createMysqlConnection method --- sample/sample1-simple-entity/app.ts | 24 ++++---- sample/sample10-mixed/app.ts | 26 ++++----- sample/sample2-one-to-one/app.ts | 24 ++++---- sample/sample3-many-to-one/app.ts | 24 ++++---- sample/sample4-many-to-many/app.ts | 24 ++++---- sample/sample5-subscribers/app.ts | 24 +++++--- sample/sample6-abstract-table/app.ts | 23 ++++---- sample/sample7-pagination/app.ts | 23 ++++---- sample/sample8-self-referencing/app.ts | 24 ++++---- sample/sample9-entity-listeners/app.ts | 25 ++++---- src/connection/ConnectionManager.ts | 32 +++++++--- src/typeorm.ts | 74 +++++++++++++----------- test/integration/sample2-one-to-one.ts | 29 +++++----- test/integration/sample3-many-to-one.ts | 31 +++++----- test/integration/sample4-many-to-many.ts | 38 ++++++------ 15 files changed, 251 insertions(+), 194 deletions(-) diff --git a/sample/sample1-simple-entity/app.ts b/sample/sample1-simple-entity/app.ts index 036d1816e..2ecb6f728 100644 --- a/sample/sample1-simple-entity/app.ts +++ b/sample/sample1-simple-entity/app.ts @@ -1,18 +1,20 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Post} from "./entity/Post"; -import {ConnectionOptions} from "../../src/connection/ConnectionOptions"; -// first create a connection -let options: ConnectionOptions = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post] }; -createMysqlConnection(options, [Post]).then(connection => { +createConnection(options).then(connection => { let post = new Post(); post.text = "Hello how are you?"; diff --git a/sample/sample10-mixed/app.ts b/sample/sample10-mixed/app.ts index c4c6a497a..aa0365001 100644 --- a/sample/sample10-mixed/app.ts +++ b/sample/sample10-mixed/app.ts @@ -1,24 +1,24 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostDetails} from "./entity/PostDetails"; import {Image} from "./entity/Image"; -import {ImageDetails} from "./entity/ImageDetails"; import {Cover} from "./entity/Cover"; import {Category} from "./entity/Category"; -import {Chapter} from "./entity/Chapter"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "test", - password: "test", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"] }; -createMysqlConnection(options, [Post, PostDetails, Image, ImageDetails, Cover, Category, Chapter]).then(connection => { - +createConnection(options).then(connection => { let postRepository = connection.getRepository(Post); let postCover = new Cover(); diff --git a/sample/sample2-one-to-one/app.ts b/sample/sample2-one-to-one/app.ts index b09d89a15..3ca89121b 100644 --- a/sample/sample2-one-to-one/app.ts +++ b/sample/sample2-one-to-one/app.ts @@ -1,6 +1,5 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {CreateConnectionParameters, createConnection} from "../../src/typeorm"; import {Post} from "./entity/Post"; -import {ConnectionOptions} from "../../src/connection/ConnectionOptions"; import {PostDetails} from "./entity/PostDetails"; import {PostCategory} from "./entity/PostCategory"; import {PostMetadata} from "./entity/PostMetadata"; @@ -8,17 +7,20 @@ import {PostImage} from "./entity/PostImage"; import {PostInformation} from "./entity/PostInformation"; import {PostAuthor} from "./entity/PostAuthor"; -// first create a connection -let options: ConnectionOptions = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor] }; -createMysqlConnection(options, [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor]).then(connection => { +createConnection(options).then(connection => { let details = new PostDetails(); details.authorName = "Umed"; diff --git a/sample/sample3-many-to-one/app.ts b/sample/sample3-many-to-one/app.ts index 64b51c50f..c06b52d90 100644 --- a/sample/sample3-many-to-one/app.ts +++ b/sample/sample3-many-to-one/app.ts @@ -1,4 +1,4 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {CreateConnectionParameters, createConnection} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostDetails} from "./entity/PostDetails"; import {PostCategory} from "./entity/PostCategory"; @@ -7,18 +7,20 @@ import {PostImage} from "./entity/PostImage"; import {PostInformation} from "./entity/PostInformation"; import {PostAuthor} from "./entity/PostAuthor"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor] }; -createMysqlConnection(options, [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor]).then(connection => { - +createConnection(options).then(connection => { let details = new PostDetails(); details.authorName = "Umed"; details.comment = "about post"; diff --git a/sample/sample4-many-to-many/app.ts b/sample/sample4-many-to-many/app.ts index 6174040ae..d07e3b16d 100644 --- a/sample/sample4-many-to-many/app.ts +++ b/sample/sample4-many-to-many/app.ts @@ -1,19 +1,21 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {CreateConnectionParameters, createConnection} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostDetails} from "./entity/PostDetails"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"] }; -createMysqlConnection(options, [__dirname + "/entity"]).then(connection => { - +createConnection(options).then(connection => { let details1 = new PostDetails(); details1.comment = "People"; diff --git a/sample/sample5-subscribers/app.ts b/sample/sample5-subscribers/app.ts index 655978835..e6cd91eed 100644 --- a/sample/sample5-subscribers/app.ts +++ b/sample/sample5-subscribers/app.ts @@ -1,19 +1,25 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostCategory} from "./entity/PostCategory"; import {PostAuthor} from "./entity/PostAuthor"; +import {EverythingSubscriber} from "./subscriber/EverythingSubscriber"; // first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post, PostAuthor, PostCategory], + subscribers: [EverythingSubscriber] }; -createMysqlConnection(options, [__dirname + "/entity"], [__dirname + "/subscriber"]).then(connection => { +createConnection(options).then(connection => { let category1 = new PostCategory(); category1.name = "post category #1"; diff --git a/sample/sample6-abstract-table/app.ts b/sample/sample6-abstract-table/app.ts index 972780eec..39b28f88f 100644 --- a/sample/sample6-abstract-table/app.ts +++ b/sample/sample6-abstract-table/app.ts @@ -1,20 +1,23 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostCategory} from "./entity/PostCategory"; import {PostAuthor} from "./entity/PostAuthor"; import {Blog} from "./entity/Blog"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"] }; -createMysqlConnection(options, [__dirname + "/entity"]).then(connection => { +createConnection(options).then(connection => { let category1 = new PostCategory(); category1.name = "post category #1"; diff --git a/sample/sample7-pagination/app.ts b/sample/sample7-pagination/app.ts index feb9d2506..39dcbf953 100644 --- a/sample/sample7-pagination/app.ts +++ b/sample/sample7-pagination/app.ts @@ -1,19 +1,22 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostCategory} from "./entity/PostCategory"; import {PostAuthor} from "./entity/PostAuthor"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"] }; -createMysqlConnection(options, [__dirname + "/entity"]).then(connection => { +createConnection(options).then(connection => { let postRepository = connection.getRepository(Post); const posts: Post[] = []; diff --git a/sample/sample8-self-referencing/app.ts b/sample/sample8-self-referencing/app.ts index 6078d8883..389edfdd6 100644 --- a/sample/sample8-self-referencing/app.ts +++ b/sample/sample8-self-referencing/app.ts @@ -1,18 +1,20 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Category} from "./entity/Category"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"] }; -createMysqlConnection(options, [Category]).then(connection => { - +createConnection(options).then(connection => { let categoryRepository = connection.getRepository(Category); let category1 = new Category(); diff --git a/sample/sample9-entity-listeners/app.ts b/sample/sample9-entity-listeners/app.ts index 8735f4e8e..8062dfe24 100644 --- a/sample/sample9-entity-listeners/app.ts +++ b/sample/sample9-entity-listeners/app.ts @@ -1,20 +1,23 @@ -import {createMysqlConnection} from "../../src/typeorm"; +import {CreateConnectionParameters, createConnection} from "../../src/typeorm"; import {Post} from "./entity/Post"; import {PostCategory} from "./entity/PostCategory"; import {PostAuthor} from "./entity/PostAuthor"; -// first create a connection -let options = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true +const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entityDirectories: [__dirname + "/entity"], + subscriberDirectories: [__dirname + "/subscriber"] }; -createMysqlConnection(options, [__dirname + "/entity"], [__dirname + "/subscriber"]).then(connection => { - +createConnection(options).then(connection => { let category1 = new PostCategory(); category1.name = "post category #1"; diff --git a/src/connection/ConnectionManager.ts b/src/connection/ConnectionManager.ts index 660fc173c..5310bfe16 100644 --- a/src/connection/ConnectionManager.ts +++ b/src/connection/ConnectionManager.ts @@ -57,6 +57,10 @@ export class ConnectionManager { if (!name) { name = "default"; } + const existConnection = this.connections.find(connection => connection.name === name); + if (existConnection) + this.connections.splice(this.connections.indexOf(existConnection), 1); + const connection = new Connection( name, driver); this.connections.push(connection); return connection; @@ -107,12 +111,7 @@ export class ConnectionManager { paths = connectionNameOrPaths; } - const allSubscriberClasses = importClassesFromDirectories(paths); - const subscribers = defaultMetadataStorage - .findOrmEventSubscribersForClasses(allSubscriberClasses) - .map(metadata => this.createContainerInstance(metadata.target)); - - this.getConnection(connectionName).addSubscribers(subscribers); + this.importSubscribers(connectionName, importClassesFromDirectories(paths)); } /** @@ -127,7 +126,6 @@ export class ConnectionManager { } else { entities = connectionNameOrEntities; } - const entityMetadatas = this.entityMetadataBuilder.build(entities); const entityListenerMetadatas = defaultMetadataStorage.findEntityListenersForClasses(entities); @@ -135,6 +133,26 @@ export class ConnectionManager { this.getConnection(connectionName).addEntityListenerMetadatas(entityListenerMetadatas); } + /** + * Imports entities for the given connection. If connection name is not given then default connection is used. + */ + importSubscribers(subscriberClasses: Function[]): void; + importSubscribers(connectionName: string, subscriberClasses: Function[]): void; + importSubscribers(connectionNameOrSubscriberClasses: string|Function[], subscriberClasses?: Function[]): void { + let connectionName = "default"; + if (subscriberClasses) { + connectionName = connectionNameOrSubscriberClasses; + } else { + subscriberClasses = connectionNameOrSubscriberClasses; + } + + const subscribers = defaultMetadataStorage + .findOrmEventSubscribersForClasses(subscriberClasses) + .map(metadata => this.createContainerInstance(metadata.target)); + + this.getConnection(connectionName).addSubscribers(subscribers); + } + // ------------------------------------------------------------------------- // Private Methods // ------------------------------------------------------------------------- diff --git a/src/typeorm.ts b/src/typeorm.ts index a38da8e93..38a99a63c 100644 --- a/src/typeorm.ts +++ b/src/typeorm.ts @@ -10,16 +10,50 @@ let mysql = require("mysql"); */ export const connectionManager = new ConnectionManager(); +/** + * All options to help to create a new connection. + */ export interface CreateConnectionParameters { + + /** + * Driver type. Mysql is the only driver supported at this moment. + */ driver: "mysql"; + + /** + * Database connection options. + */ + connectionOptions: ConnectionOptions; + + /** + * Connection name. By default its called "default". Different connections must have different names. + */ connectionName?: string; - connectionOptions?: ConnectionOptions; + + /** + * Entities to be loaded for the new connection. + */ entities?: Function[]; + + /** + * Subscribers to be loaded for the new connection. + */ subscribers?: Function[]; + + /** + * List of directories from where entities will be loaded. + */ entityDirectories?: string[]; + + /** + * List of directories from where subscribers will be loaded. + */ subscriberDirectories?: string[]; } +/** + * Creates a new connection with the database. + */ export function createConnection(parameters: CreateConnectionParameters): Promise { let connection: Connection; @@ -34,46 +68,16 @@ export function createConnection(parameters: CreateConnectionParameters): Promis if (parameters.entityDirectories && parameters.entityDirectories.length > 0) connectionManager.importEntitiesFromDirectories(parameters.connectionName, parameters.entityDirectories); - if (parameters.entities) { + if (parameters.entities) connectionManager.importEntities(parameters.connectionName, parameters.entities); - } if (parameters.subscriberDirectories && parameters.subscriberDirectories.length > 0) connectionManager.importSubscribersFromDirectories(parameters.connectionName, parameters.subscriberDirectories); - // if (parameters.subscribers) - // connectionManager.importSubscribers(parameters.subscribers); + if (parameters.subscribers) + connectionManager.importSubscribers(parameters.subscribers); return connection .connect(parameters.connectionOptions) .then(() => connection); -} - - -/** - * Creates a new connection to mysql. Imports documents and subscribers from the given directories. - * @deprecated - */ -export function createMysqlConnection(options: string, documentDirectories: string[]|Function[], subscriberDirectories?: string[]): Promise; -export function createMysqlConnection(options: ConnectionOptions, documentDirectories: string[]|Function[], subscriberDirectories?: string[]): Promise; -export function createMysqlConnection(configuration: string|ConnectionOptions, documentDirectories: string[]|Function[], subscriberDirectories?: string[]): Promise { - if (typeof configuration === "string") { - configuration = { url: configuration }; - } - - connectionManager.createConnection(new MysqlDriver(mysql)); - - if (documentDirectories && documentDirectories.length > 0) { - if (typeof documentDirectories[0] === "string") { - connectionManager.importEntitiesFromDirectories( documentDirectories); - } else { - connectionManager.importEntities( documentDirectories); - } - } - - if (subscriberDirectories && subscriberDirectories.length > 0) - connectionManager.importSubscribersFromDirectories(subscriberDirectories); - - const connection = connectionManager.getConnection(); - return connection.connect( configuration).then(() => connection); -} +} \ No newline at end of file diff --git a/test/integration/sample2-one-to-one.ts b/test/integration/sample2-one-to-one.ts index 200df8457..b1d6cf279 100644 --- a/test/integration/sample2-one-to-one.ts +++ b/test/integration/sample2-one-to-one.ts @@ -1,8 +1,7 @@ import * as chai from "chai"; import {expect} from "chai"; import {Connection} from "../../src/connection/Connection"; -import {createMysqlConnection} from "../../src/typeorm"; -import {ConnectionOptions} from "../../src/connection/ConnectionOptions"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Repository} from "../../src/repository/Repository"; import {SchemaCreator} from "../../src/schema-creator/SchemaCreator"; import {PostDetails} from "../../sample/sample2-one-to-one/entity/PostDetails"; @@ -20,21 +19,25 @@ describe("one-to-one", function() { // Configuration // ------------------------------------------------------------------------- - let options: ConnectionOptions = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true + const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor] }; - + // connect to db let connection: Connection; before(function() { - return createMysqlConnection(options, [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor]).then(conn => { - connection = conn; - }).catch(e => console.log("Error during connection to db: " + e)); + return createConnection(options) + .then(con => connection = con) + .catch(e => console.log("Error during connection to db: " + e)); }); after(function() { diff --git a/test/integration/sample3-many-to-one.ts b/test/integration/sample3-many-to-one.ts index ad2ff5056..f3c2a890e 100644 --- a/test/integration/sample3-many-to-one.ts +++ b/test/integration/sample3-many-to-one.ts @@ -1,8 +1,7 @@ import * as chai from "chai"; import {expect} from "chai"; import {Connection} from "../../src/connection/Connection"; -import {createMysqlConnection} from "../../src/typeorm"; -import {ConnectionOptions} from "../../src/connection/ConnectionOptions"; +import {createConnection, CreateConnectionParameters} from "../../src/typeorm"; import {Repository} from "../../src/repository/Repository"; import {SchemaCreator} from "../../src/schema-creator/SchemaCreator"; import {PostDetails} from "../../sample/sample3-many-to-one/entity/PostDetails"; @@ -20,23 +19,27 @@ describe("many-to-one", function() { // Configuration // ------------------------------------------------------------------------- - let options: ConnectionOptions = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true + const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true + }, + entities: [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor] }; - + // connect to db let connection: Connection; before(function() { - return createMysqlConnection(options, [Post, PostDetails, PostCategory, PostMetadata, PostImage, PostInformation, PostAuthor]).then(conn => { - connection = conn; - }).catch(e => console.log("Error during connection to db: " + e)); + return createConnection(options) + .then(con => connection = con) + .catch(e => console.log("Error during connection to db: " + e)); }); - + after(function() { connection.close(); }); diff --git a/test/integration/sample4-many-to-many.ts b/test/integration/sample4-many-to-many.ts index cd1a826d6..fcf96c284 100644 --- a/test/integration/sample4-many-to-many.ts +++ b/test/integration/sample4-many-to-many.ts @@ -1,8 +1,7 @@ import * as chai from "chai"; import {expect} from "chai"; import {Connection} from "../../src/connection/Connection"; -import {createMysqlConnection} from "../../src/typeorm"; -import {ConnectionOptions} from "../../src/connection/ConnectionOptions"; +import {CreateConnectionParameters, createConnection} from "../../src/typeorm"; import {Repository} from "../../src/repository/Repository"; import {SchemaCreator} from "../../src/schema-creator/SchemaCreator"; import {PostDetails} from "../../sample/sample4-many-to-many/entity/PostDetails"; @@ -18,27 +17,32 @@ describe("many-to-many", function() { // Configuration // ------------------------------------------------------------------------- - let options: ConnectionOptions = { - host: "192.168.99.100", - port: 3306, - username: "root", - password: "admin", - database: "test", - autoSchemaCreate: true, - logging: { - logOnlyFailedQueries: true, - logFailedQueryError: true - } + const options: CreateConnectionParameters = { + driver: "mysql", + connectionOptions: { + host: "192.168.99.100", + port: 3306, + username: "root", + password: "admin", + database: "test", + autoSchemaCreate: true, + logging: { + logOnlyFailedQueries: true, + logFailedQueryError: true + } + }, + entityDirectories: [__dirname + "/../../sample/sample4-many-to-many/entity"] }; - + // connect to db let connection: Connection; before(function() { - return createMysqlConnection(options, [__dirname + "/../../sample/sample4-many-to-many/entity"]).then(conn => { - connection = conn; - }).catch(e => console.log("Error during connection to db: " + e)); + return createConnection(options) + .then(con => connection = con) + .catch(e => console.log("Error during connection to db: " + e)); }); + after(function() { connection.close(); });