typeorm 0.3.18-dev.0f11739 → 0.3.18-dev.173910e

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.
Files changed (101) hide show
  1. package/browser/cache/DbQueryResultCache.js +3 -0
  2. package/browser/cache/DbQueryResultCache.js.map +1 -1
  3. package/browser/driver/cockroachdb/CockroachQueryRunner.js +8 -0
  4. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  5. package/browser/driver/cordova/CordovaQueryRunner.js +8 -0
  6. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  7. package/browser/driver/expo/ExpoQueryRunner.js +9 -2
  8. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  9. package/browser/driver/mysql/MysqlQueryRunner.js +9 -1
  10. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  11. package/browser/driver/oracle/OracleQueryRunner.js +8 -0
  12. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  13. package/browser/driver/postgres/PostgresQueryRunner.js +8 -0
  14. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  15. package/browser/driver/react-native/ReactNativeQueryRunner.js +10 -2
  16. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  17. package/browser/driver/sap/SapQueryRunner.js +9 -3
  18. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  19. package/browser/driver/spanner/SpannerQueryRunner.js +6 -0
  20. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  21. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  22. package/browser/driver/sqlite/SqliteQueryRunner.js +61 -46
  23. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  24. package/browser/driver/sqljs/SqljsQueryRunner.js +11 -3
  25. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  26. package/browser/driver/sqlserver/SqlServerQueryRunner.js +6 -0
  27. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  28. package/browser/metadata/ColumnMetadata.js +4 -0
  29. package/browser/metadata/ColumnMetadata.js.map +1 -1
  30. package/browser/metadata/EntityMetadata.d.ts +3 -3
  31. package/browser/metadata/EntityMetadata.js +7 -3
  32. package/browser/metadata/EntityMetadata.js.map +1 -1
  33. package/browser/persistence/EntityPersistExecutor.js +1 -1
  34. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  35. package/browser/query-builder/QueryExpressionMap.d.ts +2 -1
  36. package/browser/query-builder/QueryExpressionMap.js +0 -4
  37. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  38. package/browser/query-builder/SelectQueryBuilder.js +1 -1
  39. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  40. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -0
  41. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +28 -0
  42. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  43. package/browser/subscriber/Broadcaster.d.ts +10 -0
  44. package/browser/subscriber/Broadcaster.js +46 -0
  45. package/browser/subscriber/Broadcaster.js.map +1 -1
  46. package/browser/subscriber/EntitySubscriberInterface.d.ts +9 -0
  47. package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
  48. package/browser/subscriber/event/QueryEvent.d.ts +50 -0
  49. package/browser/subscriber/event/QueryEvent.js +3 -0
  50. package/browser/subscriber/event/QueryEvent.js.map +1 -0
  51. package/cache/DbQueryResultCache.js +3 -0
  52. package/cache/DbQueryResultCache.js.map +1 -1
  53. package/driver/cockroachdb/CockroachQueryRunner.js +8 -0
  54. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  55. package/driver/cordova/CordovaQueryRunner.js +8 -0
  56. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  57. package/driver/expo/ExpoQueryRunner.js +9 -2
  58. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  59. package/driver/mysql/MysqlQueryRunner.js +9 -1
  60. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  61. package/driver/oracle/OracleQueryRunner.js +8 -0
  62. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  63. package/driver/postgres/PostgresQueryRunner.js +8 -0
  64. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  65. package/driver/react-native/ReactNativeQueryRunner.js +10 -2
  66. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  67. package/driver/sap/SapQueryRunner.js +9 -3
  68. package/driver/sap/SapQueryRunner.js.map +1 -1
  69. package/driver/spanner/SpannerQueryRunner.js +6 -0
  70. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  71. package/driver/sqlite/SqliteDriver.js.map +1 -1
  72. package/driver/sqlite/SqliteQueryRunner.js +61 -46
  73. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  74. package/driver/sqljs/SqljsQueryRunner.js +11 -3
  75. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  76. package/driver/sqlserver/SqlServerQueryRunner.js +6 -0
  77. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  78. package/metadata/ColumnMetadata.js +4 -0
  79. package/metadata/ColumnMetadata.js.map +1 -1
  80. package/metadata/EntityMetadata.d.ts +3 -3
  81. package/metadata/EntityMetadata.js +7 -3
  82. package/metadata/EntityMetadata.js.map +1 -1
  83. package/package.json +1 -1
  84. package/persistence/EntityPersistExecutor.js +1 -1
  85. package/persistence/EntityPersistExecutor.js.map +1 -1
  86. package/query-builder/QueryExpressionMap.d.ts +2 -1
  87. package/query-builder/QueryExpressionMap.js +0 -4
  88. package/query-builder/QueryExpressionMap.js.map +1 -1
  89. package/query-builder/SelectQueryBuilder.js +1 -1
  90. package/query-builder/SelectQueryBuilder.js.map +1 -1
  91. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +9 -0
  92. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +28 -0
  93. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  94. package/subscriber/Broadcaster.d.ts +10 -0
  95. package/subscriber/Broadcaster.js +46 -0
  96. package/subscriber/Broadcaster.js.map +1 -1
  97. package/subscriber/EntitySubscriberInterface.d.ts +9 -0
  98. package/subscriber/EntitySubscriberInterface.js.map +1 -1
  99. package/subscriber/event/QueryEvent.d.ts +50 -0
  100. package/subscriber/event/QueryEvent.js +4 -0
  101. package/subscriber/event/QueryEvent.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/driver/sqlite/SqliteDriver.ts"],"names":[],"mappings":"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","file":"SqliteDriver.js","sourcesContent":["import mkdirp from \"mkdirp\"\nimport path from \"path\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { SqliteQueryRunner } from \"./SqliteQueryRunner\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { filepathToName, isAbsolute } from \"../../util/PathUtils\"\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class SqliteDriver extends AbstractSqliteDriver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SqliteConnectionOptions\n\n /**\n * SQLite underlying library.\n */\n sqlite: any\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n\n this.connection = connection\n this.options = connection.options as SqliteConnectionOptions\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined\n this.databaseConnection.close((err: any) =>\n err ? fail(err) : ok(),\n )\n })\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner) this.queryRunner = new SqliteQueryRunner(this)\n\n return this.queryRunner\n }\n\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\"\n }\n\n return super.normalizeType(column)\n }\n\n async afterConnect(): Promise<void> {\n return this.attachDatabases()\n }\n\n /**\n * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.\n */\n buildTableName(\n tableName: string,\n _schema?: string,\n database?: string,\n ): string {\n if (!database) return tableName\n if (this.getAttachedDatabaseHandleByRelativePath(database))\n return `${this.getAttachedDatabaseHandleByRelativePath(\n database,\n )}.${tableName}`\n\n if (database === this.options.database) return tableName\n\n // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)\n const identifierHash = filepathToName(database)\n // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable\n const absFilepath = isAbsolute(database)\n ? database\n : path.join(this.getMainDatabasePath(), database)\n\n this.attachedDatabases[database] = {\n attachFilepathAbsolute: absFilepath,\n attachFilepathRelative: database,\n attachHandle: identifierHash,\n }\n\n return `${identifierHash}.${tableName}`\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n if (\n this.options.flags === undefined ||\n !(this.options.flags & this.sqlite.OPEN_URI)\n ) {\n await this.createDatabaseDirectory(this.options.database)\n }\n\n const databaseConnection: any = await new Promise((ok, fail) => {\n if (this.options.flags === undefined) {\n const connection = new this.sqlite.Database(\n this.options.database,\n (err: any) => {\n if (err) return fail(err)\n ok(connection)\n },\n )\n } else {\n const connection = new this.sqlite.Database(\n this.options.database,\n this.options.flags,\n (err: any) => {\n if (err) return fail(err)\n ok(connection)\n },\n )\n }\n })\n\n // Internal function to run a command on the connection and fail if an error occured.\n function run(line: string): Promise<void> {\n return new Promise((ok, fail) => {\n databaseConnection.run(line, (err: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n // in the options, if encryption key for SQLCipher is setted.\n // Must invoke key pragma before trying to do any other interaction with the database.\n if (this.options.key) {\n await run(`PRAGMA key = ${JSON.stringify(this.options.key)}`)\n }\n\n if (this.options.enableWAL) {\n await run(`PRAGMA journal_mode = WAL`)\n }\n\n if (\n this.options.busyTimeout &&\n typeof this.options.busyTimeout === \"number\" &&\n this.options.busyTimeout > 0\n ) {\n await run(`PRAGMA busy_timeout = ${this.options.busyTimeout}`)\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n await run(`PRAGMA foreign_keys = ON`)\n\n return databaseConnection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sqlite3\")\n this.sqlite = sqlite.verbose()\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"sqlite3\")\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(fullPath: string): Promise<void> {\n await mkdirp(path.dirname(fullPath))\n }\n\n /**\n * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName\n * during EntityMetadata production (see EntityMetadata#buildTablePath)\n *\n * https://sqlite.org/lang_attach.html\n */\n protected async attachDatabases() {\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {\n attachHandle,\n attachFilepathAbsolute,\n } of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(attachFilepathAbsolute)\n await this.connection.query(\n `ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`,\n )\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database\n return path.dirname(\n isAbsolute(optionsDb)\n ? optionsDb\n : path.join(process.cwd(), optionsDb),\n )\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/driver/sqlite/SqliteDriver.ts"],"names":[],"mappings":"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","file":"SqliteDriver.js","sourcesContent":["import mkdirp from \"mkdirp\"\nimport path from \"path\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { SqliteQueryRunner } from \"./SqliteQueryRunner\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { filepathToName, isAbsolute } from \"../../util/PathUtils\"\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class SqliteDriver extends AbstractSqliteDriver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SqliteConnectionOptions\n\n /**\n * SQLite underlying library.\n */\n sqlite: any\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n super(connection)\n this.connection = connection\n this.options = connection.options as SqliteConnectionOptions\n this.database = this.options.database\n\n // load sqlite package\n this.loadDependencies()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined\n this.databaseConnection.close((err: any) =>\n err ? fail(err) : ok(),\n )\n })\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner) this.queryRunner = new SqliteQueryRunner(this)\n\n return this.queryRunner\n }\n\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\"\n }\n\n return super.normalizeType(column)\n }\n\n async afterConnect(): Promise<void> {\n return this.attachDatabases()\n }\n\n /**\n * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.\n */\n buildTableName(\n tableName: string,\n _schema?: string,\n database?: string,\n ): string {\n if (!database) return tableName\n if (this.getAttachedDatabaseHandleByRelativePath(database))\n return `${this.getAttachedDatabaseHandleByRelativePath(\n database,\n )}.${tableName}`\n\n if (database === this.options.database) return tableName\n\n // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)\n const identifierHash = filepathToName(database)\n // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable\n const absFilepath = isAbsolute(database)\n ? database\n : path.join(this.getMainDatabasePath(), database)\n\n this.attachedDatabases[database] = {\n attachFilepathAbsolute: absFilepath,\n attachFilepathRelative: database,\n attachHandle: identifierHash,\n }\n\n return `${identifierHash}.${tableName}`\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n if (\n this.options.flags === undefined ||\n !(this.options.flags & this.sqlite.OPEN_URI)\n ) {\n await this.createDatabaseDirectory(this.options.database)\n }\n\n const databaseConnection: any = await new Promise((ok, fail) => {\n if (this.options.flags === undefined) {\n const connection = new this.sqlite.Database(\n this.options.database,\n (err: any) => {\n if (err) return fail(err)\n ok(connection)\n },\n )\n } else {\n const connection = new this.sqlite.Database(\n this.options.database,\n this.options.flags,\n (err: any) => {\n if (err) return fail(err)\n ok(connection)\n },\n )\n }\n })\n\n // Internal function to run a command on the connection and fail if an error occured.\n function run(line: string): Promise<void> {\n return new Promise((ok, fail) => {\n databaseConnection.run(line, (err: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n // in the options, if encryption key for SQLCipher is setted.\n // Must invoke key pragma before trying to do any other interaction with the database.\n if (this.options.key) {\n await run(`PRAGMA key = ${JSON.stringify(this.options.key)}`)\n }\n\n if (this.options.enableWAL) {\n await run(`PRAGMA journal_mode = WAL`)\n }\n\n if (\n this.options.busyTimeout &&\n typeof this.options.busyTimeout === \"number\" &&\n this.options.busyTimeout > 0\n ) {\n await run(`PRAGMA busy_timeout = ${this.options.busyTimeout}`)\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n await run(`PRAGMA foreign_keys = ON`)\n\n return databaseConnection\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sqlite3\")\n this.sqlite = sqlite.verbose()\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"sqlite3\")\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(fullPath: string): Promise<void> {\n await mkdirp(path.dirname(fullPath))\n }\n\n /**\n * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName\n * during EntityMetadata production (see EntityMetadata#buildTablePath)\n *\n * https://sqlite.org/lang_attach.html\n */\n protected async attachDatabases() {\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {\n attachHandle,\n attachFilepathAbsolute,\n } of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(attachFilepathAbsolute)\n await this.connection.query(\n `ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`,\n )\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database\n return path.dirname(\n isAbsolute(optionsDb)\n ? optionsDb\n : path.join(process.cwd(), optionsDb),\n )\n }\n}\n"],"sourceRoot":"../.."}
@@ -4,6 +4,7 @@ import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQuer
4
4
  import { Broadcaster } from "../../subscriber/Broadcaster";
5
5
  import { ConnectionIsNotSetError } from "../../error/ConnectionIsNotSetError";
6
6
  import { QueryResult } from "../../query-runner/QueryResult";
7
+ import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
7
8
  /**
8
9
  * Runs queries on a single sqlite database connection.
9
10
  *
@@ -41,63 +42,77 @@ export class SqliteQueryRunner extends AbstractSqliteQueryRunner {
41
42
  const connection = this.driver.connection;
42
43
  const options = connection.options;
43
44
  const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
45
+ const broadcasterResult = new BroadcasterResult();
46
+ const broadcaster = this.broadcaster;
47
+ broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
44
48
  if (!connection.isInitialized) {
45
49
  throw new ConnectionIsNotSetError("sqlite");
46
50
  }
47
51
  return new Promise(async (ok, fail) => {
48
- const databaseConnection = await this.connect();
49
- this.driver.connection.logger.logQuery(query, parameters, this);
50
- const queryStartTime = +new Date();
51
- const isInsertQuery = query.startsWith("INSERT ");
52
- const isDeleteQuery = query.startsWith("DELETE ");
53
- const isUpdateQuery = query.startsWith("UPDATE ");
54
- const execute = async () => {
55
- if (isInsertQuery || isDeleteQuery || isUpdateQuery) {
56
- await databaseConnection.run(query, parameters, handler);
57
- }
58
- else {
59
- await databaseConnection.all(query, parameters, handler);
60
- }
61
- };
62
- const handler = function (err, rows) {
63
- if (err && err.toString().indexOf("SQLITE_BUSY:") !== -1) {
64
- if (typeof options.busyErrorRetry === "number" &&
65
- options.busyErrorRetry > 0) {
66
- setTimeout(execute, options.busyErrorRetry);
67
- return;
68
- }
69
- }
70
- // log slow queries if maxQueryExecution time is set
71
- const queryEndTime = +new Date();
72
- const queryExecutionTime = queryEndTime - queryStartTime;
73
- if (maxQueryExecutionTime &&
74
- queryExecutionTime > maxQueryExecutionTime)
75
- connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
76
- if (err) {
77
- connection.logger.logQueryError(err, query, parameters, this);
78
- fail(new QueryFailedError(query, parameters, err));
79
- }
80
- else {
81
- const result = new QueryResult();
82
- if (isInsertQuery) {
83
- result.raw = this["lastID"];
52
+ try {
53
+ const databaseConnection = await this.connect();
54
+ this.driver.connection.logger.logQuery(query, parameters, this);
55
+ const queryStartTime = +new Date();
56
+ const isInsertQuery = query.startsWith("INSERT ");
57
+ const isDeleteQuery = query.startsWith("DELETE ");
58
+ const isUpdateQuery = query.startsWith("UPDATE ");
59
+ const execute = async () => {
60
+ if (isInsertQuery || isDeleteQuery || isUpdateQuery) {
61
+ await databaseConnection.run(query, parameters, handler);
84
62
  }
85
63
  else {
86
- result.raw = rows;
64
+ await databaseConnection.all(query, parameters, handler);
87
65
  }
88
- if (Array.isArray(rows)) {
89
- result.records = rows;
66
+ };
67
+ const handler = function (err, rows) {
68
+ if (err && err.toString().indexOf("SQLITE_BUSY:") !== -1) {
69
+ if (typeof options.busyErrorRetry === "number" &&
70
+ options.busyErrorRetry > 0) {
71
+ setTimeout(execute, options.busyErrorRetry);
72
+ return;
73
+ }
90
74
  }
91
- result.affected = this["changes"];
92
- if (useStructuredResult) {
93
- ok(result);
75
+ // log slow queries if maxQueryExecution time is set
76
+ const queryEndTime = +new Date();
77
+ const queryExecutionTime = queryEndTime - queryStartTime;
78
+ if (maxQueryExecutionTime &&
79
+ queryExecutionTime > maxQueryExecutionTime)
80
+ connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
81
+ if (err) {
82
+ connection.logger.logQueryError(err, query, parameters, this);
83
+ broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
84
+ return fail(new QueryFailedError(query, parameters, err));
94
85
  }
95
86
  else {
96
- ok(result.raw);
87
+ const result = new QueryResult();
88
+ if (isInsertQuery) {
89
+ result.raw = this["lastID"];
90
+ }
91
+ else {
92
+ result.raw = rows;
93
+ }
94
+ broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, result.raw, undefined);
95
+ if (Array.isArray(rows)) {
96
+ result.records = rows;
97
+ }
98
+ result.affected = this["changes"];
99
+ if (useStructuredResult) {
100
+ ok(result);
101
+ }
102
+ else {
103
+ ok(result.raw);
104
+ }
97
105
  }
98
- }
99
- };
100
- await execute();
106
+ };
107
+ await execute();
108
+ }
109
+ catch (err) {
110
+ fail(err);
111
+ }
112
+ finally {
113
+ await broadcasterResult.wait();
114
+ console.log("Finally", query, broadcasterResult.count);
115
+ }
101
116
  });
102
117
  }
103
118
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/driver/sqlite/SqliteQueryRunner.ts"],"names":[],"mappings":"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","file":"SqliteQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\"\nimport { SqliteDriver } from \"./SqliteDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class SqliteQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: SqliteDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqliteDriver) {\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 query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n const options = connection.options as SqliteConnectionOptions\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime\n\n if (!connection.isInitialized) {\n throw new ConnectionIsNotSetError(\"sqlite\")\n }\n\n return new Promise(async (ok, fail) => {\n const databaseConnection = await this.connect()\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n const isInsertQuery = query.startsWith(\"INSERT \")\n const isDeleteQuery = query.startsWith(\"DELETE \")\n const isUpdateQuery = query.startsWith(\"UPDATE \")\n\n const execute = async () => {\n if (isInsertQuery || isDeleteQuery || isUpdateQuery) {\n await databaseConnection.run(query, parameters, handler)\n } else {\n await databaseConnection.all(query, parameters, handler)\n }\n }\n\n const handler = function (err: any, rows: any) {\n if (err && err.toString().indexOf(\"SQLITE_BUSY:\") !== -1) {\n if (\n typeof options.busyErrorRetry === \"number\" &&\n options.busyErrorRetry > 0\n ) {\n setTimeout(execute, options.busyErrorRetry)\n return\n }\n }\n\n // log slow queries if maxQueryExecution time is set\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n if (err) {\n connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n fail(new QueryFailedError(query, parameters, err))\n } else {\n const result = new QueryResult()\n\n if (isInsertQuery) {\n result.raw = this[\"lastID\"]\n } else {\n result.raw = rows\n }\n\n if (Array.isArray(rows)) {\n result.records = rows\n }\n\n result.affected = this[\"changes\"]\n\n if (useStructuredResult) {\n ok(result)\n } else {\n ok(result.raw)\n }\n }\n }\n\n await execute()\n })\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/driver/sqlite/SqliteQueryRunner.ts"],"names":[],"mappings":"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","file":"SqliteQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\"\nimport { SqliteDriver } from \"./SqliteDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class SqliteQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: SqliteDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqliteDriver) {\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 query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n const options = connection.options as SqliteConnectionOptions\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime\n const broadcasterResult = new BroadcasterResult()\n const broadcaster = this.broadcaster\n\n broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n\n if (!connection.isInitialized) {\n throw new ConnectionIsNotSetError(\"sqlite\")\n }\n\n return new Promise(async (ok, fail) => {\n try {\n const databaseConnection = await this.connect()\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n const isInsertQuery = query.startsWith(\"INSERT \")\n const isDeleteQuery = query.startsWith(\"DELETE \")\n const isUpdateQuery = query.startsWith(\"UPDATE \")\n\n const execute = async () => {\n if (isInsertQuery || isDeleteQuery || isUpdateQuery) {\n await databaseConnection.run(query, parameters, handler)\n } else {\n await databaseConnection.all(query, parameters, handler)\n }\n }\n\n const handler = function (err: any, rows: any) {\n if (err && err.toString().indexOf(\"SQLITE_BUSY:\") !== -1) {\n if (\n typeof options.busyErrorRetry === \"number\" &&\n options.busyErrorRetry > 0\n ) {\n setTimeout(execute, options.busyErrorRetry)\n return\n }\n }\n\n // log slow queries if maxQueryExecution time is set\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n if (err) {\n connection.logger.logQueryError(\n err,\n query,\n parameters,\n this,\n )\n broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n false,\n undefined,\n undefined,\n err,\n )\n\n return fail(\n new QueryFailedError(query, parameters, err),\n )\n } else {\n const result = new QueryResult()\n\n if (isInsertQuery) {\n result.raw = this[\"lastID\"]\n } else {\n result.raw = rows\n }\n\n broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n result.raw,\n undefined,\n )\n\n if (Array.isArray(rows)) {\n result.records = rows\n }\n\n result.affected = this[\"changes\"]\n\n if (useStructuredResult) {\n ok(result)\n } else {\n ok(result.raw)\n }\n }\n }\n\n await execute()\n } catch (err) {\n fail(err)\n } finally {\n await broadcasterResult.wait()\n console.log(\"Finally\", query, broadcasterResult.count)\n }\n })\n }\n}\n"],"sourceRoot":"../.."}
@@ -3,6 +3,7 @@ import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQuer
3
3
  import { Broadcaster } from "../../subscriber/Broadcaster";
4
4
  import { QueryFailedError } from "../../error/QueryFailedError";
5
5
  import { QueryResult } from "../../query-runner/QueryResult";
6
+ import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
6
7
  /**
7
8
  * Runs queries on a single sqlite database connection.
8
9
  */
@@ -63,7 +64,9 @@ export class SqljsQueryRunner extends AbstractSqliteQueryRunner {
63
64
  throw new QueryRunnerAlreadyReleasedError();
64
65
  const command = query.trim().split(" ", 1)[0];
65
66
  const databaseConnection = this.driver.databaseConnection;
67
+ const broadcasterResult = new BroadcasterResult();
66
68
  this.driver.connection.logger.logQuery(query, parameters, this);
69
+ this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
67
70
  const queryStartTime = +new Date();
68
71
  let statement;
69
72
  try {
@@ -83,6 +86,7 @@ export class SqljsQueryRunner extends AbstractSqliteQueryRunner {
83
86
  while (statement.step()) {
84
87
  records.push(statement.getAsObject());
85
88
  }
89
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, records, undefined);
86
90
  const result = new QueryResult();
87
91
  result.affected = databaseConnection.getRowsModified();
88
92
  result.records = records;
@@ -98,12 +102,16 @@ export class SqljsQueryRunner extends AbstractSqliteQueryRunner {
98
102
  return result.raw;
99
103
  }
100
104
  }
101
- catch (e) {
105
+ catch (err) {
102
106
  if (statement) {
103
107
  statement.free();
104
108
  }
105
- this.driver.connection.logger.logQueryError(e, query, parameters, this);
106
- throw new QueryFailedError(query, parameters, e);
109
+ this.driver.connection.logger.logQueryError(err, query, parameters, this);
110
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
111
+ throw new QueryFailedError(query, parameters, err);
112
+ }
113
+ finally {
114
+ await broadcasterResult.wait();
107
115
  }
108
116
  }
109
117
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/driver/sqljs/SqljsQueryRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6CAA6C,CAAA;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AAExF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,yBAAyB;IAW3D,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,MAAmB;QAC3B,KAAK,EAAE,CAAA;QAfX;;WAEG;QACK,YAAO,GAAG,KAAK,CAAA;QAanB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,KAAK;QACf,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;SACvB;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,OAAO,KAAK,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACnB,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;SACrB;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACP,KAAa,EACb,aAAoB,EAAE,EACtB,mBAAmB,GAAG,KAAK;QAE3B,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,+BAA+B,EAAE,CAAA;QAEhE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAA;QACzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAC/D,MAAM,cAAc,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;QAClC,IAAI,SAAc,CAAA;QAClB,IAAI;YACA,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YAC7C,IAAI,UAAU,EAAE;gBACZ,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,OAAO,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACtC,CAAA;gBAED,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;aAC7B;YAED,oDAAoD;YACpD,MAAM,qBAAqB,GACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAA;YAC7C,MAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;YAChC,MAAM,kBAAkB,GAAG,YAAY,GAAG,cAAc,CAAA;YACxD,IACI,qBAAqB;gBACrB,kBAAkB,GAAG,qBAAqB;gBAE1C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CACtC,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,IAAI,CACP,CAAA;YAEL,MAAM,OAAO,GAAU,EAAE,CAAA;YAEzB,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;aACxC;YAED,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;YAEhC,MAAM,CAAC,QAAQ,GAAG,kBAAkB,CAAC,eAAe,EAAE,CAAA;YACtD,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;YACxB,MAAM,CAAC,GAAG,GAAG,OAAO,CAAA;YAEpB,SAAS,CAAC,IAAI,EAAE,CAAA;YAEhB,IAAI,OAAO,KAAK,QAAQ,EAAE;gBACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;aACtB;YAED,IAAI,mBAAmB,EAAE;gBACrB,OAAO,MAAM,CAAA;aAChB;iBAAM;gBACH,OAAO,MAAM,CAAC,GAAG,CAAA;aACpB;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,SAAS,EAAE;gBACX,SAAS,CAAC,IAAI,EAAE,CAAA;aACnB;YAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CACvC,CAAC,EACD,KAAK,EACL,UAAU,EACV,IAAI,CACP,CAAA;YACD,MAAM,IAAI,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;SACnD;IACL,CAAC;CACJ","file":"SqljsQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { SqljsDriver } from \"./SqljsDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class SqljsQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Flag to determine if a modification has happened since the last time this query runner has requested a save.\n */\n private isDirty = false\n\n /**\n * Database driver used by connection.\n */\n driver: SqljsDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqljsDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n // -------------------------------------------------------------------------\n // Public methods\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 private async flush() {\n if (this.isDirty) {\n await this.driver.autoSave()\n this.isDirty = false\n }\n }\n\n async release(): Promise<void> {\n await this.flush()\n return super.release()\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n await super.commitTransaction()\n if (!this.isTransactionActive) {\n await this.flush()\n }\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 command = query.trim().split(\" \", 1)[0]\n\n const databaseConnection = this.driver.databaseConnection\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n let statement: any\n try {\n statement = databaseConnection.prepare(query)\n if (parameters) {\n parameters = parameters.map((p) =>\n typeof p !== \"undefined\" ? p : null,\n )\n\n statement.bind(parameters)\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\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 const records: any[] = []\n\n while (statement.step()) {\n records.push(statement.getAsObject())\n }\n\n const result = new QueryResult()\n\n result.affected = databaseConnection.getRowsModified()\n result.records = records\n result.raw = records\n\n statement.free()\n\n if (command !== \"SELECT\") {\n this.isDirty = true\n }\n\n if (useStructuredResult) {\n return result\n } else {\n return result.raw\n }\n } catch (e) {\n if (statement) {\n statement.free()\n }\n\n this.driver.connection.logger.logQueryError(\n e,\n query,\n parameters,\n this,\n )\n throw new QueryFailedError(query, parameters, e)\n }\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/driver/sqljs/SqljsQueryRunner.ts"],"names":[],"mappings":"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","file":"SqljsQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { SqljsDriver } from \"./SqljsDriver\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport { BroadcasterResult } from \"../../subscriber/BroadcasterResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class SqljsQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Flag to determine if a modification has happened since the last time this query runner has requested a save.\n */\n private isDirty = false\n\n /**\n * Database driver used by connection.\n */\n driver: SqljsDriver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqljsDriver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n }\n\n // -------------------------------------------------------------------------\n // Public methods\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 private async flush() {\n if (this.isDirty) {\n await this.driver.autoSave()\n this.isDirty = false\n }\n }\n\n async release(): Promise<void> {\n await this.flush()\n return super.release()\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n await super.commitTransaction()\n if (!this.isTransactionActive) {\n await this.flush()\n }\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 command = query.trim().split(\" \", 1)[0]\n\n const databaseConnection = this.driver.databaseConnection\n const broadcasterResult = new BroadcasterResult()\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n this.broadcaster.broadcastBeforeQueryEvent(\n broadcasterResult,\n query,\n parameters,\n )\n\n const queryStartTime = +new Date()\n let statement: any\n try {\n statement = databaseConnection.prepare(query)\n if (parameters) {\n parameters = parameters.map((p) =>\n typeof p !== \"undefined\" ? p : null,\n )\n\n statement.bind(parameters)\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\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 const records: any[] = []\n\n while (statement.step()) {\n records.push(statement.getAsObject())\n }\n\n this.broadcaster.broadcastAfterQueryEvent(\n broadcasterResult,\n query,\n parameters,\n true,\n queryExecutionTime,\n records,\n undefined,\n )\n\n const result = new QueryResult()\n\n result.affected = databaseConnection.getRowsModified()\n result.records = records\n result.raw = records\n\n statement.free()\n\n if (command !== \"SELECT\") {\n this.isDirty = true\n }\n\n if (useStructuredResult) {\n return result\n } else {\n return result.raw\n }\n } catch (err) {\n if (statement) {\n statement.free()\n }\n\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 throw new QueryFailedError(query, parameters, err)\n } finally {\n await broadcasterResult.wait()\n }\n }\n}\n"],"sourceRoot":"../.."}
@@ -17,6 +17,7 @@ import { TypeORMError } from "../../error";
17
17
  import { QueryLock } from "../../query-runner/QueryLock";
18
18
  import { MetadataTableType } from "../types/MetadataTableType";
19
19
  import { InstanceChecker } from "../../util/InstanceChecker";
20
+ import { BroadcasterResult } from "../../subscriber/BroadcasterResult";
20
21
  /**
21
22
  * Runs queries on a single SQL Server database connection.
22
23
  */
@@ -160,8 +161,10 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
160
161
  if (this.isReleased)
161
162
  throw new QueryRunnerAlreadyReleasedError();
162
163
  const release = await this.lock.acquire();
164
+ const broadcasterResult = new BroadcasterResult();
163
165
  try {
164
166
  this.driver.connection.logger.logQuery(query, parameters, this);
167
+ this.broadcaster.broadcastBeforeQueryEvent(broadcasterResult, query, parameters);
165
168
  const pool = await (this.mode === "slave"
166
169
  ? this.driver.obtainSlaveConnection()
167
170
  : this.driver.obtainMasterConnection());
@@ -190,6 +193,7 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
190
193
  const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
191
194
  const queryEndTime = +new Date();
192
195
  const queryExecutionTime = queryEndTime - queryStartTime;
196
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
193
197
  if (maxQueryExecutionTime &&
194
198
  queryExecutionTime > maxQueryExecutionTime) {
195
199
  this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
@@ -225,9 +229,11 @@ export class SqlServerQueryRunner extends BaseQueryRunner {
225
229
  }
226
230
  catch (err) {
227
231
  this.driver.connection.logger.logQueryError(err, query, parameters, this);
232
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
228
233
  throw err;
229
234
  }
230
235
  finally {
236
+ await broadcasterResult.wait();
231
237
  release();
232
238
  }
233
239
  }