typeorm 0.3.23-dev.184f463 → 0.3.23-dev.274bdf2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/cache/DbQueryResultCache.js +1 -1
- package/browser/cache/DbQueryResultCache.js.map +1 -1
- package/browser/cache/RedisQueryResultCache.js +1 -1
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/data-source/BaseDataSourceOptions.d.ts +1 -1
- package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
- package/browser/data-source/DataSource.js +2 -1
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +2 -2
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +8 -8
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +18 -18
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js +8 -8
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.js +7 -6
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js +2 -2
- package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +7 -7
- package/browser/driver/mysql/MysqlQueryRunner.js +17 -17
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js +6 -6
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +7 -7
- package/browser/driver/oracle/OracleQueryRunner.js +15 -15
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +4 -4
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js +53 -46
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +1 -1
- package/browser/driver/sap/SapQueryRunner.js +48 -25
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerQueryRunner.js +10 -10
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.js +11 -11
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js +7 -7
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +9 -9
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/driver/types/GeoJsonTypes.d.ts +20 -15
- package/browser/driver/types/GeoJsonTypes.js.map +1 -1
- package/browser/index.d.ts +1 -0
- package/browser/index.js +1 -0
- package/browser/index.js.map +1 -1
- package/browser/logger/AbstractLogger.d.ts +1 -1
- package/browser/logger/AbstractLogger.js +5 -1
- package/browser/logger/AbstractLogger.js.map +1 -1
- package/browser/logger/FormattedConsoleLogger.d.ts +13 -0
- package/browser/logger/FormattedConsoleLogger.js +55 -0
- package/browser/logger/FormattedConsoleLogger.js.map +1 -0
- package/browser/logger/Logger.d.ts +1 -0
- package/browser/logger/Logger.js.map +1 -1
- package/browser/logger/LoggerFactory.d.ts +1 -1
- package/browser/logger/LoggerFactory.js +3 -0
- package/browser/logger/LoggerFactory.js.map +1 -1
- package/browser/persistence/SubjectChangedColumnsComputer.js +23 -9
- package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/browser/platform/PlatformTools.d.ts +5 -0
- package/browser/platform/PlatformTools.js +16 -0
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +1 -1
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/repository/MongoRepository.d.ts +1 -1
- package/browser/repository/MongoRepository.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +6 -6
- package/browser/subscriber/Broadcaster.js +1 -1
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/cache/DbQueryResultCache.js +1 -1
- package/cache/DbQueryResultCache.js.map +1 -1
- package/cache/RedisQueryResultCache.js +1 -1
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/data-source/BaseDataSourceOptions.d.ts +1 -1
- package/data-source/BaseDataSourceOptions.js.map +1 -1
- package/data-source/DataSource.js +2 -1
- package/data-source/DataSource.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +2 -2
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +8 -8
- package/driver/cockroachdb/CockroachQueryRunner.js +18 -18
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.js +8 -8
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.js +7 -6
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/expo/legacy/ExpoLegacyQueryRunner.js +2 -2
- package/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +7 -7
- package/driver/mysql/MysqlQueryRunner.js +17 -17
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js +6 -6
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.d.ts +7 -7
- package/driver/oracle/OracleQueryRunner.js +15 -15
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +4 -4
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +53 -46
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +1 -1
- package/driver/sap/SapQueryRunner.js +48 -25
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerQueryRunner.js +10 -10
- package/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.js +11 -11
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.js +7 -7
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +9 -9
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/driver/types/GeoJsonTypes.d.ts +20 -15
- package/driver/types/GeoJsonTypes.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/index.mjs +2 -0
- package/logger/AbstractLogger.d.ts +1 -1
- package/logger/AbstractLogger.js +5 -1
- package/logger/AbstractLogger.js.map +1 -1
- package/logger/FormattedConsoleLogger.d.ts +13 -0
- package/logger/FormattedConsoleLogger.js +59 -0
- package/logger/FormattedConsoleLogger.js.map +1 -0
- package/logger/Logger.d.ts +1 -0
- package/logger/Logger.js.map +1 -1
- package/logger/LoggerFactory.d.ts +1 -1
- package/logger/LoggerFactory.js +3 -0
- package/logger/LoggerFactory.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectChangedColumnsComputer.js +23 -9
- package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/platform/PlatformTools.d.ts +5 -0
- package/platform/PlatformTools.js +16 -0
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +1 -1
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/repository/MongoRepository.d.ts +1 -1
- package/repository/MongoRepository.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +6 -6
- package/subscriber/Broadcaster.js +1 -1
- package/subscriber/Broadcaster.js.map +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError";
|
|
2
1
|
import { QueryFailedError } from "../../error/QueryFailedError";
|
|
3
|
-
import {
|
|
4
|
-
import { Broadcaster } from "../../subscriber/Broadcaster";
|
|
2
|
+
import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError";
|
|
5
3
|
import { QueryResult } from "../../query-runner/QueryResult";
|
|
4
|
+
import { Broadcaster } from "../../subscriber/Broadcaster";
|
|
6
5
|
import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
|
|
6
|
+
import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQueryRunner";
|
|
7
7
|
/**
|
|
8
8
|
* Runs queries on a single sqlite database connection.
|
|
9
9
|
*/
|
|
@@ -32,54 +32,61 @@ export class ReactNativeQueryRunner extends AbstractSqliteQueryRunner {
|
|
|
32
32
|
/**
|
|
33
33
|
* Executes a given SQL query.
|
|
34
34
|
*/
|
|
35
|
-
query(query, parameters, useStructuredResult = false) {
|
|
35
|
+
async query(query, parameters, useStructuredResult = false) {
|
|
36
36
|
if (this.isReleased)
|
|
37
37
|
throw new QueryRunnerAlreadyReleasedError();
|
|
38
|
+
const databaseConnection = await this.connect();
|
|
39
|
+
this.driver.connection.logger.logQuery(query, parameters, this);
|
|
40
|
+
await this.broadcaster.broadcast("BeforeQuery", query, parameters);
|
|
41
|
+
const broadcasterResult = new BroadcasterResult();
|
|
42
|
+
const queryStartTime = Date.now();
|
|
38
43
|
return new Promise(async (ok, fail) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
44
|
+
try {
|
|
45
|
+
databaseConnection.executeSql(query, parameters, async (raw) => {
|
|
46
|
+
// log slow queries if maxQueryExecution time is set
|
|
47
|
+
const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
|
|
48
|
+
const queryEndTime = Date.now();
|
|
49
|
+
const queryExecutionTime = queryEndTime - queryStartTime;
|
|
50
|
+
this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
|
|
51
|
+
if (maxQueryExecutionTime &&
|
|
52
|
+
queryExecutionTime > maxQueryExecutionTime)
|
|
53
|
+
this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
|
|
54
|
+
if (broadcasterResult.promises.length > 0)
|
|
55
|
+
await Promise.all(broadcasterResult.promises);
|
|
56
|
+
const result = new QueryResult();
|
|
57
|
+
if (raw?.hasOwnProperty("rowsAffected")) {
|
|
58
|
+
result.affected = raw.rowsAffected;
|
|
59
|
+
}
|
|
60
|
+
if (raw?.hasOwnProperty("rows")) {
|
|
61
|
+
const records = [];
|
|
62
|
+
for (let i = 0; i < raw.rows.length; i++) {
|
|
63
|
+
records.push(raw.rows.item(i));
|
|
64
|
+
}
|
|
65
|
+
result.raw = records;
|
|
66
|
+
result.records = records;
|
|
67
|
+
}
|
|
68
|
+
// return id of inserted row, if query was insert statement.
|
|
69
|
+
if (query.substr(0, 11) === "INSERT INTO") {
|
|
70
|
+
result.raw = raw.insertId;
|
|
71
|
+
}
|
|
72
|
+
if (useStructuredResult) {
|
|
73
|
+
ok(result);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
ok(result.raw);
|
|
63
77
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
else {
|
|
75
|
-
ok(result.raw);
|
|
76
|
-
}
|
|
77
|
-
}, async (err) => {
|
|
78
|
-
this.driver.connection.logger.logQueryError(err, query, parameters, this);
|
|
79
|
-
this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
|
|
78
|
+
}, async (err) => {
|
|
79
|
+
this.driver.connection.logger.logQueryError(err, query, parameters, this);
|
|
80
|
+
this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
|
|
81
|
+
fail(new QueryFailedError(query, parameters, err));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
fail(err);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
80
88
|
await broadcasterResult.wait();
|
|
81
|
-
|
|
82
|
-
});
|
|
89
|
+
}
|
|
83
90
|
});
|
|
84
91
|
}
|
|
85
92
|
// -------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/react-native/ReactNativeQueryRunner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/react-native/ReactNativeQueryRunner.ts"],"names":[],"mappings":"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","file":"ReactNativeQueryRunner.js","sourcesContent":["import { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { ReactNativeDriver } from \"./ReactNativeDriver\"\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class ReactNativeQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n // @ts-ignore temporary, we need to fix the issue with the AbstractSqliteDriver and circular errors\n driver: ReactNativeDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: ReactNativeDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const databaseConnection = await this.connect()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n await this.broadcaster.broadcast(\"BeforeQuery\", query, parameters)\n\n const broadcasterResult = new BroadcasterResult()\n\n const queryStartTime = Date.now()\n\n return new Promise(async (ok, fail) => {\n try {\n databaseConnection.executeSql(\n query,\n parameters,\n async (raw: any) => {\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = Date.now()\n const queryExecutionTime = queryEndTime - queryStartTime\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n raw,\n undefined,\n )\n\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n this.driver.connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n if (broadcasterResult.promises.length > 0)\n await Promise.all(broadcasterResult.promises)\n\n const result = new QueryResult()\n\n if (raw?.hasOwnProperty(\"rowsAffected\")) {\n result.affected = raw.rowsAffected\n }\n\n if (raw?.hasOwnProperty(\"rows\")) {\n const records = []\n for (let i = 0; i < raw.rows.length; i++) {\n records.push(raw.rows.item(i))\n }\n\n result.raw = records\n result.records = records\n }\n\n // return id of inserted row, if query was insert statement.\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId\n }\n\n if (useStructuredResult) {\n ok(result)\n } else {\n ok(result.raw)\n }\n },\n async (err: any) => {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n false,\n undefined,\n undefined,\n err,\n )\n\n fail(new QueryFailedError(query, parameters, err))\n },\n )\n } catch (err) {\n fail(err)\n } finally {\n await broadcasterResult.wait()\n }\n })\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Parametrizes given object of values. Used to create column=value queries.\n */\n protected parametrize(\n objectLiteral: ObjectLiteral,\n startIndex: number = 0,\n ): string[] {\n return Object.keys(objectLiteral).map((key, index) => `\"${key}\"` + \"=?\")\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -11,8 +11,8 @@ import { TableUnique } from "../../schema-builder/table/TableUnique";
|
|
|
11
11
|
import { View } from "../../schema-builder/view/View";
|
|
12
12
|
import { Query } from "../Query";
|
|
13
13
|
import { IsolationLevel } from "../types/IsolationLevel";
|
|
14
|
-
import { SapDriver } from "./SapDriver";
|
|
15
14
|
import { ReplicationMode } from "../types/ReplicationMode";
|
|
15
|
+
import { SapDriver } from "./SapDriver";
|
|
16
16
|
/**
|
|
17
17
|
* Runs queries on a single SQL Server database connection.
|
|
18
18
|
*/
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { promisify } from "util";
|
|
2
|
+
import { QueryFailedError, TypeORMError } from "../../error";
|
|
1
3
|
import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError";
|
|
2
4
|
import { TransactionAlreadyStartedError } from "../../error/TransactionAlreadyStartedError";
|
|
3
5
|
import { TransactionNotStartedError } from "../../error/TransactionNotStartedError";
|
|
4
6
|
import { BaseQueryRunner } from "../../query-runner/BaseQueryRunner";
|
|
7
|
+
import { QueryLock } from "../../query-runner/QueryLock";
|
|
8
|
+
import { QueryResult } from "../../query-runner/QueryResult";
|
|
5
9
|
import { Table } from "../../schema-builder/table/Table";
|
|
6
10
|
import { TableCheck } from "../../schema-builder/table/TableCheck";
|
|
7
11
|
import { TableColumn } from "../../schema-builder/table/TableColumn";
|
|
@@ -10,15 +14,11 @@ import { TableIndex } from "../../schema-builder/table/TableIndex";
|
|
|
10
14
|
import { TableUnique } from "../../schema-builder/table/TableUnique";
|
|
11
15
|
import { View } from "../../schema-builder/view/View";
|
|
12
16
|
import { Broadcaster } from "../../subscriber/Broadcaster";
|
|
17
|
+
import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
|
|
18
|
+
import { InstanceChecker } from "../../util/InstanceChecker";
|
|
13
19
|
import { OrmUtils } from "../../util/OrmUtils";
|
|
14
20
|
import { Query } from "../Query";
|
|
15
|
-
import { QueryFailedError, TypeORMError } from "../../error";
|
|
16
|
-
import { QueryResult } from "../../query-runner/QueryResult";
|
|
17
|
-
import { QueryLock } from "../../query-runner/QueryLock";
|
|
18
21
|
import { MetadataTableType } from "../types/MetadataTableType";
|
|
19
|
-
import { InstanceChecker } from "../../util/InstanceChecker";
|
|
20
|
-
import { promisify } from "util";
|
|
21
|
-
import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
|
|
22
22
|
/**
|
|
23
23
|
* Runs queries on a single SQL Server database connection.
|
|
24
24
|
*/
|
|
@@ -132,30 +132,30 @@ export class SapQueryRunner extends BaseQueryRunner {
|
|
|
132
132
|
if (this.isReleased)
|
|
133
133
|
throw new QueryRunnerAlreadyReleasedError();
|
|
134
134
|
const release = await this.lock.acquire();
|
|
135
|
+
const databaseConnection = await this.connect();
|
|
135
136
|
let statement;
|
|
136
137
|
const result = new QueryResult();
|
|
138
|
+
this.driver.connection.logger.logQuery(query, parameters, this);
|
|
139
|
+
await this.broadcaster.broadcast("BeforeQuery", query, parameters);
|
|
137
140
|
const broadcasterResult = new BroadcasterResult();
|
|
138
141
|
try {
|
|
139
|
-
const
|
|
140
|
-
this.driver.connection.logger.logQuery(query, parameters, this);
|
|
141
|
-
this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
|
|
142
|
-
const queryStartTime = +new Date();
|
|
142
|
+
const queryStartTime = Date.now();
|
|
143
143
|
const isInsertQuery = query.substr(0, 11) === "INSERT INTO";
|
|
144
144
|
if (parameters?.some(Array.isArray)) {
|
|
145
|
-
statement = await promisify(databaseConnection.prepare.
|
|
145
|
+
statement = await promisify(databaseConnection.prepare).call(databaseConnection, query);
|
|
146
146
|
}
|
|
147
147
|
let raw;
|
|
148
148
|
try {
|
|
149
149
|
raw = statement
|
|
150
|
-
? await promisify(statement.exec.
|
|
151
|
-
: await promisify(databaseConnection.exec.
|
|
150
|
+
? await promisify(statement.exec).call(statement, parameters)
|
|
151
|
+
: await promisify(databaseConnection.exec).call(databaseConnection, query, parameters, {});
|
|
152
152
|
}
|
|
153
153
|
catch (err) {
|
|
154
154
|
throw new QueryFailedError(query, parameters, err);
|
|
155
155
|
}
|
|
156
156
|
// log slow queries if maxQueryExecution time is set
|
|
157
157
|
const maxQueryExecutionTime = this.driver.connection.options.maxQueryExecutionTime;
|
|
158
|
-
const queryEndTime =
|
|
158
|
+
const queryEndTime = Date.now();
|
|
159
159
|
const queryExecutionTime = queryEndTime - queryStartTime;
|
|
160
160
|
this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
|
|
161
161
|
if (maxQueryExecutionTime &&
|
|
@@ -208,17 +208,40 @@ export class SapQueryRunner extends BaseQueryRunner {
|
|
|
208
208
|
async stream(query, parameters, onEnd, onError) {
|
|
209
209
|
if (this.isReleased)
|
|
210
210
|
throw new QueryRunnerAlreadyReleasedError();
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
211
|
+
const release = await this.lock.acquire();
|
|
212
|
+
let statement;
|
|
213
|
+
let resultSet;
|
|
214
|
+
const cleanup = async () => {
|
|
215
|
+
if (resultSet) {
|
|
216
|
+
await promisify(resultSet.close).call(resultSet);
|
|
217
|
+
}
|
|
218
|
+
if (statement) {
|
|
219
|
+
await promisify(statement.drop).call(statement);
|
|
220
|
+
}
|
|
221
|
+
release();
|
|
222
|
+
};
|
|
223
|
+
try {
|
|
224
|
+
const databaseConnection = await this.connect();
|
|
225
|
+
this.driver.connection.logger.logQuery(query, parameters, this);
|
|
226
|
+
statement = await promisify(databaseConnection.prepare).call(databaseConnection, query);
|
|
227
|
+
resultSet = await promisify(statement.executeQuery).call(statement, parameters);
|
|
228
|
+
const stream = this.driver.streamClient.createObjectStream(resultSet);
|
|
229
|
+
stream.on("end", async () => {
|
|
230
|
+
await cleanup();
|
|
231
|
+
onEnd?.();
|
|
232
|
+
});
|
|
233
|
+
stream.on("error", async (error) => {
|
|
234
|
+
this.driver.connection.logger.logQueryError(error, query, parameters, this);
|
|
235
|
+
await cleanup();
|
|
236
|
+
onError?.(error);
|
|
237
|
+
});
|
|
238
|
+
return stream;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
this.driver.connection.logger.logQueryError(error, query, parameters, this);
|
|
242
|
+
await cleanup();
|
|
243
|
+
throw new QueryFailedError(query, parameters, error);
|
|
244
|
+
}
|
|
222
245
|
}
|
|
223
246
|
/**
|
|
224
247
|
* Returns all available database names including system databases.
|