From 46aba1d1b947c9b03ba2661367427a818be46324 Mon Sep 17 00:00:00 2001 From: coyoteecd <47973420+coyoteecd@users.noreply.github.com> Date: Mon, 29 Mar 2021 11:26:06 +0300 Subject: [PATCH] fix: [aurora-data-api] Return number of affected rows in UpdatedResult and DeleteResult (#7433) Closes: #7386 --- src/query-builder/DeleteQueryBuilder.ts | 6 +++++- src/query-builder/UpdateQueryBuilder.ts | 4 ++++ test/github-issues/1308/issue-1308.ts | 2 +- test/github-issues/2499/issue-2499.ts | 12 +++++------- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/query-builder/DeleteQueryBuilder.ts b/src/query-builder/DeleteQueryBuilder.ts index 1840a48728..6e14bef959 100644 --- a/src/query-builder/DeleteQueryBuilder.ts +++ b/src/query-builder/DeleteQueryBuilder.ts @@ -73,10 +73,14 @@ export class DeleteQueryBuilder extends QueryBuilder implements const result = await queryRunner.query(sql, parameters); const driver = queryRunner.connection.driver; - if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) { + if (driver instanceof MysqlDriver) { deleteResult.raw = result; deleteResult.affected = result.affectedRows; + } else if (driver instanceof AuroraDataApiDriver) { + deleteResult.raw = result; + deleteResult.affected = result.numberOfRecordsUpdated; + } else if (driver instanceof SqlServerDriver || driver instanceof PostgresDriver || driver instanceof CockroachDriver) { deleteResult.raw = result[0] ? result[0] : null; // don't return 0 because it could confuse. null means that we did not receive this value diff --git a/src/query-builder/UpdateQueryBuilder.ts b/src/query-builder/UpdateQueryBuilder.ts index 19a091da61..1318fae2b0 100644 --- a/src/query-builder/UpdateQueryBuilder.ts +++ b/src/query-builder/UpdateQueryBuilder.ts @@ -110,6 +110,10 @@ export class UpdateQueryBuilder extends QueryBuilder implements updateResult.raw = result; updateResult.affected = result.affectedRows; } + else if (this.connection.driver instanceof AuroraDataApiDriver) { + updateResult.raw = result; + updateResult.affected = result.numberOfRecordsUpdated; + } else if (this.connection.driver instanceof BetterSqlite3Driver) { // only works for better-sqlite3 updateResult.raw = result; updateResult.affected = result.changes; diff --git a/test/github-issues/1308/issue-1308.ts b/test/github-issues/1308/issue-1308.ts index a6d6aecb78..9eb79b333b 100644 --- a/test/github-issues/1308/issue-1308.ts +++ b/test/github-issues/1308/issue-1308.ts @@ -11,7 +11,7 @@ describe("github issues > #1308 Raw Postgresql Update query result is always an (connections = await createTestingConnections({ entities: [new EntitySchema(AuthorSchema), new EntitySchema(PostSchema)], dropSchema: true, - enabledDrivers: ["postgres", "mysql", "mariadb"], + enabledDrivers: ["postgres", "mysql", "mariadb", "aurora-data-api"], })) ); beforeEach(() => reloadTestingDatabases(connections)); diff --git a/test/github-issues/2499/issue-2499.ts b/test/github-issues/2499/issue-2499.ts index a514261842..e8a1974388 100644 --- a/test/github-issues/2499/issue-2499.ts +++ b/test/github-issues/2499/issue-2499.ts @@ -11,18 +11,16 @@ describe("github issues > #2499 Postgres DELETE query result is useless", () => entities: [__dirname + "/entity/*{.js,.ts}"], schemaCreate: true, dropSchema: true, + // skip test for sqlite because sqlite doesn't return any data on delete + // sqljs -- the same + // mongodb requires another test and it is also doesn't return correct number + // of removed documents (possibly a bug with mongodb itself) + enabledDrivers: ["mysql", "mariadb", "mssql", "postgres", "aurora-data-api"] })); beforeEach(() => reloadTestingDatabases(connections)); after(() => closeTestingConnections(connections)); it("should return correct number of affected rows for mysql, mariadb, postgres", () => Promise.all(connections.map(async connection => { - // skip test for sqlite because sqlite doesn't return any data on delete - // sqljs -- the same - // mongodb requires another test and it is also doesn't return correct number - // of removed documents (possibly a bug with mongodb itself) - if (["mysql", "mariadb", "mssql", "postgres"].indexOf(connection.name) === -1) { - return; - } const repo = connection.getRepository(Foo); await repo.save({ id: 1, description: "test1" });