diff --git a/src/query-builder/QueryBuilder.ts b/src/query-builder/QueryBuilder.ts index a9ff7154e..50084ba71 100644 --- a/src/query-builder/QueryBuilder.ts +++ b/src/query-builder/QueryBuilder.ts @@ -1599,7 +1599,7 @@ export class QueryBuilder { return object; }, {}); this.setParameters(params); - return "UPDATE " + tableName + " " + (alias ? this.escapeAlias(alias) : "") + " SET " + updateSet; + return "UPDATE " + this.escapeTable(tableName) + " " + (alias ? this.escapeAlias(alias) : "") + " SET " + updateSet; } throw new Error("No query builder type is specified."); diff --git a/test/github-issues/512/entity/Post.ts b/test/github-issues/512/entity/Post.ts new file mode 100644 index 000000000..a4252fcb3 --- /dev/null +++ b/test/github-issues/512/entity/Post.ts @@ -0,0 +1,17 @@ +import {Entity} from "../../../../src/decorator/entity/Entity"; +import {PrimaryGeneratedColumn} from "../../../../src/decorator/columns/PrimaryGeneratedColumn"; +import {Column} from "../../../../src/decorator/columns/Column"; + +@Entity("Posts") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column() + title: string; + + @Column("date") + date: string; + +} \ No newline at end of file diff --git a/test/github-issues/512/issue-512.ts b/test/github-issues/512/issue-512.ts new file mode 100644 index 000000000..9c70d80f5 --- /dev/null +++ b/test/github-issues/512/issue-512.ts @@ -0,0 +1,30 @@ +import "reflect-metadata"; +import {createTestingConnections, closeTestingConnections, reloadTestingDatabases} from "../../utils/test-utils"; +import {Connection} from "../../../src/connection/Connection"; +import {Post} from "./entity/Post"; +import {expect} from "chai"; + +describe("github issues > #512 Table name escaping in UPDATE in QueryBuilder", () => { + + let connections: Connection[]; + before(async () => connections = await createTestingConnections({ + entities: [__dirname + "/entity/*{.js,.ts}"], + schemaCreate: true, + dropSchemaOnConnection: true, + })); + beforeEach(() => reloadTestingDatabases(connections)); + after(() => closeTestingConnections(connections)); + + it("should escape table name using driver's escape function in UPDATE", () => Promise.all(connections.map(async connection => { + const driver = connection.driver; + const queryBuilder = connection.entityManager.createQueryBuilder(Post, "post"); + const query = queryBuilder + .update({ + title: "Some Title", + }) + .getSql(); + + return query.should.contain(driver.escapeTableName("Posts")); + }))); + +});