From a595fedc2e159e2eb0c4c5d76bff31ac98da3df2 Mon Sep 17 00:00:00 2001 From: Umed Khudoiberdiev Date: Wed, 27 May 2020 23:53:36 +0300 Subject: [PATCH] fix: SqlQueryRunner.hasColumn was not working (#6146) * fixed #5718 * removed .only --- src/driver/sqlserver/SqlServerQueryRunner.ts | 2 +- test/functional/query-runner/has-column.ts | 33 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/functional/query-runner/has-column.ts diff --git a/src/driver/sqlserver/SqlServerQueryRunner.ts b/src/driver/sqlserver/SqlServerQueryRunner.ts index 43ee49dba9..06677627af 100644 --- a/src/driver/sqlserver/SqlServerQueryRunner.ts +++ b/src/driver/sqlserver/SqlServerQueryRunner.ts @@ -359,7 +359,7 @@ export class SqlServerQueryRunner extends BaseQueryRunner implements QueryRunner async hasColumn(tableOrName: Table|string, columnName: string): Promise { const parsedTableName = this.parseTableName(tableOrName); const schema = parsedTableName.schema === "SCHEMA_NAME()" ? parsedTableName.schema : `'${parsedTableName.schema}'`; - const sql = `SELECT * FROM "${parsedTableName.database}"."INFORMATION_SCHEMA"."TABLES" WHERE "TABLE_NAME" = '${parsedTableName.name}' AND "COLUMN_NAME" = '${columnName}' AND "TABLE_SCHEMA" = ${schema}`; + const sql = `SELECT * FROM "${parsedTableName.database}"."INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = '${parsedTableName.name}' AND "COLUMN_NAME" = '${columnName}' AND "TABLE_SCHEMA" = ${schema}`; const result = await this.query(sql); return result.length ? true : false; } diff --git a/test/functional/query-runner/has-column.ts b/test/functional/query-runner/has-column.ts new file mode 100644 index 0000000000..75903b8b73 --- /dev/null +++ b/test/functional/query-runner/has-column.ts @@ -0,0 +1,33 @@ +import "reflect-metadata"; +import {Connection} from "../../../src/connection/Connection"; +import {closeTestingConnections, createTestingConnections} from "../../utils/test-utils"; + +describe("query runner > has column", () => { + + let connections: Connection[]; + before(async () => { + connections = await createTestingConnections({ + entities: [__dirname + "/entity/*{.js,.ts}"], + schemaCreate: true, + dropSchema: true, + }); + }); + after(() => closeTestingConnections(connections)); + + it("should correctly check if column exist", () => Promise.all(connections.map(async connection => { + const queryRunner = connection.createQueryRunner(); + + let hasIdColumn = await queryRunner.hasColumn("post", "id"); + let hasNameColumn = await queryRunner.hasColumn("post", "name"); + let hasVersionColumn = await queryRunner.hasColumn("post", "version"); + let hasDescriptionColumn = await queryRunner.hasColumn("post", "description"); + + hasIdColumn.should.be.true; + hasNameColumn.should.be.true; + hasVersionColumn.should.be.true; + hasDescriptionColumn.should.be.false; + + await queryRunner.release(); + }))); + +});