From e389d4015c580ec3cdc81836ae910899aa901552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ad=C3=A1mek?= Date: Mon, 4 May 2020 17:23:02 +0200 Subject: [PATCH] feat(sql): add `execute()` method to `SqlEntityManager` Shortcut to `em.driver.execute()`, which as opposed to `em.getConnection().execute()` converts errors to custom exceptions. --- packages/knex/src/SqlEntityManager.ts | 8 ++++++-- tests/EntityManager.mysql.test.ts | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/knex/src/SqlEntityManager.ts b/packages/knex/src/SqlEntityManager.ts index 85dfaca0398d..7e1d0623c4cd 100644 --- a/packages/knex/src/SqlEntityManager.ts +++ b/packages/knex/src/SqlEntityManager.ts @@ -1,5 +1,5 @@ -import Knex from 'knex'; -import { AnyEntity, EntityManager, EntityName, EntityRepository, Utils } from '@mikro-orm/core'; +import Knex, { QueryBuilder as KnexQueryBuilder, Raw } from 'knex'; +import { AnyEntity, EntityData, EntityManager, EntityName, EntityRepository, QueryResult, Utils } from '@mikro-orm/core'; import { AbstractSqlDriver } from './AbstractSqlDriver'; import { QueryBuilder } from './query'; import { SqlEntityRepository } from './SqlEntityRepository'; @@ -21,6 +21,10 @@ export class SqlEntityManager e return this.getConnection(type).getKnex(); } + async execute | EntityData[] = EntityData[]>(queryOrKnex: string | KnexQueryBuilder | Raw, params: any[] = [], method: 'all' | 'get' | 'run' = 'all'): Promise { + return this.getDriver().execute(queryOrKnex, params, method, this.getTransactionContext()); + } + getRepository, U extends EntityRepository = SqlEntityRepository>(entityName: EntityName): U { return super.getRepository(entityName); } diff --git a/tests/EntityManager.mysql.test.ts b/tests/EntityManager.mysql.test.ts index c8f7f9d085c9..9088ed147a1f 100644 --- a/tests/EntityManager.mysql.test.ts +++ b/tests/EntityManager.mysql.test.ts @@ -1976,6 +1976,13 @@ describe('EntityManagerMySql', () => { await expect(driver.execute('select uuid from author2')).rejects.toThrow(InvalidFieldNameException); }); + test('em.execute()', async () => { + const res1 = await orm.em.execute('insert into author2 (name, email) values (?, ?)', ['name', 'email']); + expect(res1).toMatchObject({ affectedRows: 1, insertId: 1 }); + const res2 = await orm.em.execute('select 1 as count'); + expect(res2).toMatchObject([{ count: 1 }]); + }); + afterAll(async () => orm.close(true)); });