typeorm 0.2.42-dev.f7c1f7d → 0.2.43-dev.60a5b84
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/common/DeepPartial.d.ts +3 -3
- package/browser/common/DeepPartial.js.map +1 -1
- package/browser/connection/BaseConnectionOptions.js.map +1 -1
- package/browser/connection/Connection.js +33 -24
- package/browser/connection/Connection.js.map +1 -1
- package/browser/connection/ConnectionOptionsReader.js +3 -1
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/decorator/listeners/AfterRecover.d.ts +4 -0
- package/browser/decorator/listeners/AfterRecover.js +16 -0
- package/browser/decorator/listeners/AfterRecover.js.map +1 -0
- package/browser/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/AfterSoftRemove.js +16 -0
- package/browser/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/browser/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/browser/decorator/listeners/BeforeRecover.js +16 -0
- package/browser/decorator/listeners/BeforeRecover.js.map +1 -0
- package/browser/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js +16 -0
- package/browser/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +87 -4
- package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/browser/driver/expo/ExpoQueryRunner.js +30 -0
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
- package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite/SqliteDriver.js +84 -1
- package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +118 -57
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/index.d.ts +4 -0
- package/browser/index.js +4 -0
- package/browser/index.js.map +1 -1
- package/browser/metadata/EntityMetadata.d.ts +16 -0
- package/browser/metadata/EntityMetadata.js +16 -0
- package/browser/metadata/EntityMetadata.js.map +1 -1
- package/browser/metadata/types/EventListenerTypes.d.ts +5 -1
- package/browser/metadata/types/EventListenerTypes.js +4 -0
- package/browser/metadata/types/EventListenerTypes.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +37 -25
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/SubjectExecutor.d.ts +2 -2
- package/browser/persistence/SubjectExecutor.js +6 -6
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +9 -0
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +44 -30
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +8 -0
- package/browser/query-runner/BaseQueryRunner.js +20 -0
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +8 -0
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/TreeRepository.js +2 -1
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +36 -30
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +40 -0
- package/browser/subscriber/Broadcaster.js +191 -31
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/browser/subscriber/event/RecoverEvent.d.ts +6 -0
- package/browser/subscriber/event/RecoverEvent.js +3 -0
- package/browser/subscriber/event/RecoverEvent.js.map +1 -0
- package/browser/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/browser/subscriber/event/SoftRemoveEvent.js +3 -0
- package/browser/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/browser/util/PathUtils.d.ts +10 -0
- package/browser/util/PathUtils.js +28 -0
- package/browser/util/PathUtils.js.map +1 -0
- package/commands/MigrationShowCommand.js +3 -4
- package/commands/MigrationShowCommand.js.map +1 -1
- package/common/DeepPartial.d.ts +3 -3
- package/common/DeepPartial.js.map +1 -1
- package/connection/BaseConnectionOptions.js.map +1 -1
- package/connection/Connection.js +33 -24
- package/connection/Connection.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +3 -1
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/decorator/listeners/AfterRecover.d.ts +4 -0
- package/decorator/listeners/AfterRecover.js +20 -0
- package/decorator/listeners/AfterRecover.js.map +1 -0
- package/decorator/listeners/AfterSoftRemove.d.ts +4 -0
- package/decorator/listeners/AfterSoftRemove.js +20 -0
- package/decorator/listeners/AfterSoftRemove.js.map +1 -0
- package/decorator/listeners/BeforeRecover.d.ts +4 -0
- package/decorator/listeners/BeforeRecover.js +20 -0
- package/decorator/listeners/BeforeRecover.js.map +1 -0
- package/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
- package/decorator/listeners/BeforeSoftRemove.js +20 -0
- package/decorator/listeners/BeforeSoftRemove.js.map +1 -0
- package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
- package/driver/better-sqlite3/BetterSqlite3Driver.js +86 -3
- package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
- package/driver/capacitor/CapacitorQueryRunner.js +30 -0
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
- package/driver/cordova/CordovaQueryRunner.js +30 -0
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.d.ts +8 -0
- package/driver/expo/ExpoQueryRunner.js +30 -0
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
- package/driver/mongodb/MongoQueryRunner.js +20 -0
- package/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
- package/driver/nativescript/NativescriptQueryRunner.js +30 -0
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
- package/driver/react-native/ReactNativeQueryRunner.js +30 -0
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sqlite/SqliteDriver.d.ts +13 -0
- package/driver/sqlite/SqliteDriver.js +83 -0
- package/driver/sqlite/SqliteDriver.js.map +1 -1
- package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
- package/driver/sqlite/SqliteQueryRunner.js +30 -0
- package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +118 -57
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
- package/driver/sqljs/SqljsQueryRunner.js +30 -0
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/index.js.map +1 -1
- package/index.mjs +8 -0
- package/metadata/EntityMetadata.d.ts +16 -0
- package/metadata/EntityMetadata.js +16 -0
- package/metadata/EntityMetadata.js.map +1 -1
- package/metadata/types/EventListenerTypes.d.ts +5 -1
- package/metadata/types/EventListenerTypes.js +4 -0
- package/metadata/types/EventListenerTypes.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +4 -0
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +1 -1
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/migration/MigrationExecutor.js +37 -25
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +1 -1
- package/persistence/SubjectExecutor.d.ts +2 -2
- package/persistence/SubjectExecutor.js +6 -6
- package/persistence/SubjectExecutor.js.map +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
- package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +9 -0
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +44 -30
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +9 -9
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
- package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/query-runner/BaseQueryRunner.d.ts +8 -0
- package/query-runner/BaseQueryRunner.js +20 -0
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +8 -0
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/TreeRepository.js +2 -1
- package/repository/TreeRepository.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +36 -30
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +40 -0
- package/subscriber/Broadcaster.js +191 -31
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/EntitySubscriberInterface.d.ts +18 -0
- package/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/subscriber/event/RecoverEvent.d.ts +6 -0
- package/subscriber/event/RecoverEvent.js +4 -0
- package/subscriber/event/RecoverEvent.js.map +1 -0
- package/subscriber/event/SoftRemoveEvent.d.ts +6 -0
- package/subscriber/event/SoftRemoveEvent.js +4 -0
- package/subscriber/event/SoftRemoveEvent.js.map +1 -0
- package/typeorm-class-transformer-shim.js +20 -0
- package/typeorm-model-shim.js +20 -0
- package/util/PathUtils.d.ts +10 -0
- package/util/PathUtils.js +34 -0
- package/util/PathUtils.js.map +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __awaiter, __extends, __generator } from "tslib";
|
|
1
|
+
import { __asyncValues, __awaiter, __extends, __generator } from "tslib";
|
|
2
2
|
import mkdirp from "mkdirp";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import { DriverPackageNotInstalledError } from "../../error/DriverPackageNotInstalledError";
|
|
@@ -6,6 +6,7 @@ import { DriverOptionNotSetError } from "../../error/DriverOptionNotSetError";
|
|
|
6
6
|
import { PlatformTools } from "../../platform/PlatformTools";
|
|
7
7
|
import { AbstractSqliteDriver } from "../sqlite-abstract/AbstractSqliteDriver";
|
|
8
8
|
import { BetterSqlite3QueryRunner } from "./BetterSqlite3QueryRunner";
|
|
9
|
+
import { filepathToName, isAbsolute } from "../../util/PathUtils";
|
|
9
10
|
/**
|
|
10
11
|
* Organizes communication with sqlite DBMS.
|
|
11
12
|
*/
|
|
@@ -55,6 +56,34 @@ var BetterSqlite3Driver = /** @class */ (function (_super) {
|
|
|
55
56
|
}
|
|
56
57
|
return _super.prototype.normalizeType.call(this, column);
|
|
57
58
|
};
|
|
59
|
+
BetterSqlite3Driver.prototype.afterConnect = function () {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
61
|
+
return __generator(this, function (_a) {
|
|
62
|
+
return [2 /*return*/, this.attachDatabases()];
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.
|
|
68
|
+
*/
|
|
69
|
+
BetterSqlite3Driver.prototype.buildTableName = function (tableName, _schema, database) {
|
|
70
|
+
if (!database)
|
|
71
|
+
return tableName;
|
|
72
|
+
if (this.getAttachedDatabaseHandleByRelativePath(database))
|
|
73
|
+
return this.getAttachedDatabaseHandleByRelativePath(database) + "." + tableName;
|
|
74
|
+
if (database === this.options.database)
|
|
75
|
+
return tableName;
|
|
76
|
+
// we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)
|
|
77
|
+
var identifierHash = filepathToName(database);
|
|
78
|
+
// decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable
|
|
79
|
+
var absFilepath = isAbsolute(database) ? database : path.join(this.getMainDatabasePath(), database);
|
|
80
|
+
this.attachedDatabases[database] = {
|
|
81
|
+
attachFilepathAbsolute: absFilepath,
|
|
82
|
+
attachFilepathRelative: database,
|
|
83
|
+
attachHandle: identifierHash,
|
|
84
|
+
};
|
|
85
|
+
return identifierHash + "." + tableName;
|
|
86
|
+
};
|
|
58
87
|
// -------------------------------------------------------------------------
|
|
59
88
|
// Protected Methods
|
|
60
89
|
// -------------------------------------------------------------------------
|
|
@@ -68,7 +97,7 @@ var BetterSqlite3Driver = /** @class */ (function (_super) {
|
|
|
68
97
|
switch (_f.label) {
|
|
69
98
|
case 0:
|
|
70
99
|
if (!(this.options.database !== ":memory:")) return [3 /*break*/, 2];
|
|
71
|
-
return [4 /*yield*/, this.createDatabaseDirectory(this.options.database)];
|
|
100
|
+
return [4 /*yield*/, this.createDatabaseDirectory(path.dirname(this.options.database))];
|
|
72
101
|
case 1:
|
|
73
102
|
_f.sent();
|
|
74
103
|
_f.label = 2;
|
|
@@ -109,11 +138,11 @@ var BetterSqlite3Driver = /** @class */ (function (_super) {
|
|
|
109
138
|
/**
|
|
110
139
|
* Auto creates database directory if it does not exist.
|
|
111
140
|
*/
|
|
112
|
-
BetterSqlite3Driver.prototype.createDatabaseDirectory = function (
|
|
141
|
+
BetterSqlite3Driver.prototype.createDatabaseDirectory = function (dbPath) {
|
|
113
142
|
return __awaiter(this, void 0, void 0, function () {
|
|
114
143
|
return __generator(this, function (_a) {
|
|
115
144
|
switch (_a.label) {
|
|
116
|
-
case 0: return [4 /*yield*/, mkdirp(
|
|
145
|
+
case 0: return [4 /*yield*/, mkdirp(dbPath)];
|
|
117
146
|
case 1:
|
|
118
147
|
_a.sent();
|
|
119
148
|
return [2 /*return*/];
|
|
@@ -121,6 +150,60 @@ var BetterSqlite3Driver = /** @class */ (function (_super) {
|
|
|
121
150
|
});
|
|
122
151
|
});
|
|
123
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName
|
|
155
|
+
* during EntityMetadata production (see EntityMetadata#buildTablePath)
|
|
156
|
+
*
|
|
157
|
+
* https://sqlite.org/lang_attach.html
|
|
158
|
+
*/
|
|
159
|
+
BetterSqlite3Driver.prototype.attachDatabases = function () {
|
|
160
|
+
var e_1, _a;
|
|
161
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
162
|
+
var _b, _c, _d, attachHandle, attachFilepathAbsolute, e_1_1;
|
|
163
|
+
return __generator(this, function (_e) {
|
|
164
|
+
switch (_e.label) {
|
|
165
|
+
case 0:
|
|
166
|
+
_e.trys.push([0, 7, 8, 13]);
|
|
167
|
+
_b = __asyncValues(Object.values(this.attachedDatabases));
|
|
168
|
+
_e.label = 1;
|
|
169
|
+
case 1: return [4 /*yield*/, _b.next()];
|
|
170
|
+
case 2:
|
|
171
|
+
if (!(_c = _e.sent(), !_c.done)) return [3 /*break*/, 6];
|
|
172
|
+
_d = _c.value, attachHandle = _d.attachHandle, attachFilepathAbsolute = _d.attachFilepathAbsolute;
|
|
173
|
+
return [4 /*yield*/, this.createDatabaseDirectory(path.dirname(attachFilepathAbsolute))];
|
|
174
|
+
case 3:
|
|
175
|
+
_e.sent();
|
|
176
|
+
return [4 /*yield*/, this.connection.query("ATTACH \"" + attachFilepathAbsolute + "\" AS \"" + attachHandle + "\"")];
|
|
177
|
+
case 4:
|
|
178
|
+
_e.sent();
|
|
179
|
+
_e.label = 5;
|
|
180
|
+
case 5: return [3 /*break*/, 1];
|
|
181
|
+
case 6: return [3 /*break*/, 13];
|
|
182
|
+
case 7:
|
|
183
|
+
e_1_1 = _e.sent();
|
|
184
|
+
e_1 = { error: e_1_1 };
|
|
185
|
+
return [3 /*break*/, 13];
|
|
186
|
+
case 8:
|
|
187
|
+
_e.trys.push([8, , 11, 12]);
|
|
188
|
+
if (!(_c && !_c.done && (_a = _b.return))) return [3 /*break*/, 10];
|
|
189
|
+
return [4 /*yield*/, _a.call(_b)];
|
|
190
|
+
case 9:
|
|
191
|
+
_e.sent();
|
|
192
|
+
_e.label = 10;
|
|
193
|
+
case 10: return [3 /*break*/, 12];
|
|
194
|
+
case 11:
|
|
195
|
+
if (e_1) throw e_1.error;
|
|
196
|
+
return [7 /*endfinally*/];
|
|
197
|
+
case 12: return [7 /*endfinally*/];
|
|
198
|
+
case 13: return [2 /*return*/];
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
BetterSqlite3Driver.prototype.getMainDatabasePath = function () {
|
|
204
|
+
var optionsDb = this.options.database;
|
|
205
|
+
return path.dirname(isAbsolute(optionsDb) ? optionsDb : path.join(this.options.baseDirectory, optionsDb));
|
|
206
|
+
};
|
|
124
207
|
return BetterSqlite3Driver;
|
|
125
208
|
}(AbstractSqliteDriver));
|
|
126
209
|
export { BetterSqlite3Driver };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3Driver.ts"],"names":[],"mappings":"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","file":"BetterSqlite3Driver.js","sourcesContent":["import mkdirp from \"mkdirp\";\nimport path from \"path\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { Connection } from \"../../connection/Connection\";\nimport { ColumnType } from \"../types/ColumnTypes\";\nimport { QueryRunner } from \"../../query-runner/QueryRunner\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { BetterSqlite3ConnectionOptions } from \"./BetterSqlite3ConnectionOptions\";\nimport { BetterSqlite3QueryRunner } from \"./BetterSqlite3QueryRunner\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class BetterSqlite3Driver extends AbstractSqliteDriver {\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BetterSqlite3ConnectionOptions;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n this.connection = connection;\n this.options = connection.options as BetterSqlite3ConnectionOptions;\n this.database = this.options.database;\n\n // validate options to make sure everything is set\n if (!this.options.database)\n throw new DriverOptionNotSetError(\"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 this.queryRunner = undefined;\n this.databaseConnection.close();\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new BetterSqlite3QueryRunner(this);\n\n return this.queryRunner;\n }\n\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number | null, scale?: number }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\";\n }\n\n return super.normalizeType(column);\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n // not to create database directory if is in memory\n if (this.options.database !== \":memory:\")\n await this.createDatabaseDirectory(this.options.database);\n\n const {\n database,\n readonly = false,\n fileMustExist = false,\n timeout = 5000,\n verbose = null,\n prepareDatabase\n } = this.options;\n const databaseConnection = this.sqlite(database, { readonly, fileMustExist, timeout, verbose });\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 databaseConnection.exec(`PRAGMA key = ${JSON.stringify(this.options.key)}`);\n }\n\n // function to run before a database is used in typeorm.\n if (typeof prepareDatabase === \"function\") {\n prepareDatabase(databaseConnection);\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 databaseConnection.exec(`PRAGMA foreign_keys = ON`);\n\n // turn on WAL mode to enhance performance\n databaseConnection.exec(`PRAGMA journal_mode = WAL`);\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(\"better-sqlite3\");\n this.sqlite = sqlite;\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"better-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"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3Driver.ts"],"names":[],"mappings":"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","file":"BetterSqlite3Driver.js","sourcesContent":["import mkdirp from \"mkdirp\";\nimport path from \"path\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { Connection } from \"../../connection/Connection\";\nimport { ColumnType } from \"../types/ColumnTypes\";\nimport { QueryRunner } from \"../../query-runner/QueryRunner\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport { BetterSqlite3ConnectionOptions } from \"./BetterSqlite3ConnectionOptions\";\nimport { BetterSqlite3QueryRunner } from \"./BetterSqlite3QueryRunner\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport { filepathToName, isAbsolute } from \"../../util/PathUtils\";\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class BetterSqlite3Driver extends AbstractSqliteDriver {\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BetterSqlite3ConnectionOptions;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n this.connection = connection;\n this.options = connection.options as BetterSqlite3ConnectionOptions;\n this.database = this.options.database;\n\n // validate options to make sure everything is set\n if (!this.options.database)\n throw new DriverOptionNotSetError(\"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 this.queryRunner = undefined;\n this.databaseConnection.close();\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new BetterSqlite3QueryRunner(this);\n\n return this.queryRunner;\n }\n\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number | null, scale?: number }): 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(tableName: string, _schema?: string, database?: string): string {\n\n if (!database) return tableName;\n if (this.getAttachedDatabaseHandleByRelativePath(database)) return `${this.getAttachedDatabaseHandleByRelativePath(database)}.${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) ? database : 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 // not to create database directory if is in memory\n if (this.options.database !== \":memory:\")\n await this.createDatabaseDirectory(path.dirname(this.options.database));\n\n const {\n database,\n readonly = false,\n fileMustExist = false,\n timeout = 5000,\n verbose = null,\n prepareDatabase\n } = this.options;\n const databaseConnection = this.sqlite(database, { readonly, fileMustExist, timeout, verbose });\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 databaseConnection.exec(`PRAGMA key = ${JSON.stringify(this.options.key)}`);\n }\n\n // function to run before a database is used in typeorm.\n if (typeof prepareDatabase === \"function\") {\n prepareDatabase(databaseConnection);\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 databaseConnection.exec(`PRAGMA foreign_keys = ON`);\n\n // turn on WAL mode to enhance performance\n databaseConnection.exec(`PRAGMA journal_mode = WAL`);\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(\"better-sqlite3\");\n this.sqlite = sqlite;\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"better-sqlite3\");\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(dbPath: string): Promise<void> {\n await mkdirp(dbPath);\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\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {attachHandle, attachFilepathAbsolute} of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(path.dirname(attachFilepathAbsolute));\n await this.connection.query(`ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`);\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database;\n return path.dirname(isAbsolute(optionsDb) ? optionsDb : path.join(this.options.baseDirectory!, optionsDb));\n }\n\n}\n"],"sourceRoot":"../.."}
|
|
@@ -15,8 +15,18 @@ export declare class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner
|
|
|
15
15
|
private cacheSize;
|
|
16
16
|
private stmtCache;
|
|
17
17
|
private getStmt;
|
|
18
|
+
/**
|
|
19
|
+
* Called before migrations are run.
|
|
20
|
+
*/
|
|
21
|
+
beforeMigration(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Called after migrations are run.
|
|
24
|
+
*/
|
|
25
|
+
afterMigration(): Promise<void>;
|
|
18
26
|
/**
|
|
19
27
|
* Executes a given SQL query.
|
|
20
28
|
*/
|
|
21
29
|
query(query: string, parameters?: any[], useStructuredResult?: boolean): Promise<any>;
|
|
30
|
+
protected loadTableRecords(tablePath: string, tableOrIndex: "table" | "index"): Promise<any>;
|
|
31
|
+
protected loadPragmaRecords(tablePath: string, pragma: string): Promise<any>;
|
|
22
32
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __awaiter, __extends, __generator } from "tslib";
|
|
1
|
+
import { __awaiter, __extends, __generator, __read } from "tslib";
|
|
2
2
|
import { QueryRunnerAlreadyReleasedError } from "../../error/QueryRunnerAlreadyReleasedError";
|
|
3
3
|
import { QueryFailedError } from "../../error/QueryFailedError";
|
|
4
4
|
import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQueryRunner";
|
|
@@ -57,6 +57,36 @@ var BetterSqlite3QueryRunner = /** @class */ (function (_super) {
|
|
|
57
57
|
});
|
|
58
58
|
});
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Called before migrations are run.
|
|
62
|
+
*/
|
|
63
|
+
BetterSqlite3QueryRunner.prototype.beforeMigration = function () {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF")];
|
|
68
|
+
case 1:
|
|
69
|
+
_a.sent();
|
|
70
|
+
return [2 /*return*/];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Called after migrations are run.
|
|
77
|
+
*/
|
|
78
|
+
BetterSqlite3QueryRunner.prototype.afterMigration = function () {
|
|
79
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
80
|
+
return __generator(this, function (_a) {
|
|
81
|
+
switch (_a.label) {
|
|
82
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = ON")];
|
|
83
|
+
case 1:
|
|
84
|
+
_a.sent();
|
|
85
|
+
return [2 /*return*/];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
60
90
|
/**
|
|
61
91
|
* Executes a given SQL query.
|
|
62
92
|
*/
|
|
@@ -114,6 +144,39 @@ var BetterSqlite3QueryRunner = /** @class */ (function (_super) {
|
|
|
114
144
|
});
|
|
115
145
|
});
|
|
116
146
|
};
|
|
147
|
+
// -------------------------------------------------------------------------
|
|
148
|
+
// Protected Methods
|
|
149
|
+
// -------------------------------------------------------------------------
|
|
150
|
+
BetterSqlite3QueryRunner.prototype.loadTableRecords = function (tablePath, tableOrIndex) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
152
|
+
var _a, database, tableName, res;
|
|
153
|
+
return __generator(this, function (_b) {
|
|
154
|
+
switch (_b.label) {
|
|
155
|
+
case 0:
|
|
156
|
+
_a = __read(this.splitTablePath(tablePath), 2), database = _a[0], tableName = _a[1];
|
|
157
|
+
return [4 /*yield*/, this.query("SELECT " + (database ? "'" + database + "'" : null) + " as database, * FROM " + this.escapePath((database ? database + "." : "") + "sqlite_master") + " WHERE \"type\" = '" + tableOrIndex + "' AND \"" + (tableOrIndex === "table" ? "name" : "tbl_name") + "\" IN ('" + tableName + "')")];
|
|
158
|
+
case 1:
|
|
159
|
+
res = _b.sent();
|
|
160
|
+
return [2 /*return*/, res];
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
BetterSqlite3QueryRunner.prototype.loadPragmaRecords = function (tablePath, pragma) {
|
|
166
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
167
|
+
var _a, database, tableName, res;
|
|
168
|
+
return __generator(this, function (_b) {
|
|
169
|
+
switch (_b.label) {
|
|
170
|
+
case 0:
|
|
171
|
+
_a = __read(this.splitTablePath(tablePath), 2), database = _a[0], tableName = _a[1];
|
|
172
|
+
return [4 /*yield*/, this.query("PRAGMA " + (database ? "\"" + database + "\"." : "") + pragma + "(\"" + tableName + "\")")];
|
|
173
|
+
case 1:
|
|
174
|
+
res = _b.sent();
|
|
175
|
+
return [2 /*return*/, res];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
};
|
|
117
180
|
return BetterSqlite3QueryRunner;
|
|
118
181
|
}(AbstractSqliteQueryRunner));
|
|
119
182
|
export { BetterSqlite3QueryRunner };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"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","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\";\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 BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize;\n } else {\n this.cacheSize = 100;\n }\n }\n\n private cacheSize: number;\n private stmtCache = new Map<string, any>();\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query);\n if (!stmt) {\n const databaseConnection = await this.connect();\n stmt = databaseConnection.prepare(query);\n this.stmtCache.set(query, stmt);\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value;\n this.stmtCache.delete(key);\n }\n }\n return stmt;\n } else {\n const databaseConnection = await this.connect();\n return databaseConnection.prepare(query);\n }\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const connection = this.driver.connection;\n\n parameters = parameters || [];\n for (let i = 0; i < parameters.length; i++) {\n // in \"where\" clauses the parameters are not escaped by the driver\n if (typeof parameters[i] === \"boolean\")\n parameters[i] = +parameters[i];\n }\n\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n\n const stmt = await this.getStmt(query);\n\n try {\n const result = new QueryResult();\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters);\n\n result.raw = raw;\n\n if (Array.isArray(raw)) {\n result.records = raw;\n }\n\n } else {\n const raw = stmt.run.apply(stmt, parameters);\n result.affected = raw.changes;\n result.raw = raw.lastInsertRowid;\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n if (!useStructuredResult) {\n return result.raw;\n }\n\n return result;\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n throw new QueryFailedError(query, parameters, err);\n }\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"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","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\";\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 BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize;\n } else {\n this.cacheSize = 100;\n }\n }\n\n private cacheSize: number;\n private stmtCache = new Map<string, any>();\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query);\n if (!stmt) {\n const databaseConnection = await this.connect();\n stmt = databaseConnection.prepare(query);\n this.stmtCache.set(query, stmt);\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value;\n this.stmtCache.delete(key);\n }\n }\n return stmt;\n } else {\n const databaseConnection = await this.connect();\n return databaseConnection.prepare(query);\n }\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(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const connection = this.driver.connection;\n\n parameters = parameters || [];\n for (let i = 0; i < parameters.length; i++) {\n // in \"where\" clauses the parameters are not escaped by the driver\n if (typeof parameters[i] === \"boolean\")\n parameters[i] = +parameters[i];\n }\n\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n\n const stmt = await this.getStmt(query);\n\n try {\n const result = new QueryResult();\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters);\n\n result.raw = raw;\n\n if (Array.isArray(raw)) {\n result.records = raw;\n }\n\n } else {\n const raw = stmt.run.apply(stmt, parameters);\n result.affected = raw.changes;\n result.raw = raw.lastInsertRowid;\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n if (!useStructuredResult) {\n return result.raw;\n }\n\n return result;\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n throw new QueryFailedError(query, parameters, err);\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadTableRecords(tablePath: string, tableOrIndex: \"table\" | \"index\") {\n const [database, tableName] = this.splitTablePath(tablePath);\n const res = await this.query(`SELECT ${database ? `'${database}'` : null} as database, * FROM ${this.escapePath(`${database ? `${database}.` : \"\"}sqlite_master`)} WHERE \"type\" = '${tableOrIndex}' AND \"${tableOrIndex === \"table\" ? \"name\" : \"tbl_name\"}\" IN ('${tableName}')`);\n return res;\n }\n protected async loadPragmaRecords(tablePath: string, pragma: string) {\n const [database, tableName] = this.splitTablePath(tablePath);\n const res = await this.query(`PRAGMA ${database ? `\"${database}\".` : \"\"}${pragma}(\"${tableName}\")`);\n return res;\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -10,6 +10,14 @@ export declare class CapacitorQueryRunner extends AbstractSqliteQueryRunner {
|
|
|
10
10
|
*/
|
|
11
11
|
driver: CapacitorDriver;
|
|
12
12
|
constructor(driver: CapacitorDriver);
|
|
13
|
+
/**
|
|
14
|
+
* Called before migrations are run.
|
|
15
|
+
*/
|
|
16
|
+
beforeMigration(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Called after migrations are run.
|
|
19
|
+
*/
|
|
20
|
+
afterMigration(): Promise<void>;
|
|
13
21
|
executeSet(set: {
|
|
14
22
|
statement: string;
|
|
15
23
|
values?: any[];
|
|
@@ -19,6 +19,36 @@ var CapacitorQueryRunner = /** @class */ (function (_super) {
|
|
|
19
19
|
_this.broadcaster = new Broadcaster(_this);
|
|
20
20
|
return _this;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Called before migrations are run.
|
|
24
|
+
*/
|
|
25
|
+
CapacitorQueryRunner.prototype.beforeMigration = function () {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
27
|
+
return __generator(this, function (_a) {
|
|
28
|
+
switch (_a.label) {
|
|
29
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF")];
|
|
30
|
+
case 1:
|
|
31
|
+
_a.sent();
|
|
32
|
+
return [2 /*return*/];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Called after migrations are run.
|
|
39
|
+
*/
|
|
40
|
+
CapacitorQueryRunner.prototype.afterMigration = function () {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
42
|
+
return __generator(this, function (_a) {
|
|
43
|
+
switch (_a.label) {
|
|
44
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = ON")];
|
|
45
|
+
case 1:
|
|
46
|
+
_a.sent();
|
|
47
|
+
return [2 /*return*/];
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
};
|
|
22
52
|
CapacitorQueryRunner.prototype.executeSet = function (set) {
|
|
23
53
|
return __awaiter(this, void 0, void 0, function () {
|
|
24
54
|
var databaseConnection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/capacitor/CapacitorQueryRunner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/capacitor/CapacitorQueryRunner.ts"],"names":[],"mappings":"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","file":"CapacitorQueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport { QueryFailedError } from \"../../error/QueryFailedError\";\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport { CapacitorDriver } from \"./CapacitorDriver\";\nimport { Broadcaster } from \"../../subscriber/Broadcaster\";\nimport { ObjectLiteral } from \"../../common/ObjectLiteral\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class CapacitorQueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: CapacitorDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: CapacitorDriver) {\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 async executeSet(set: { statement: string; values?: any[] }[]) {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError();\n\n const databaseConnection = await this.connect();\n\n return databaseConnection.executeSet(set, false);\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters?: any[], useStructuredResult = false): 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\n const command = query.substr(0, query.indexOf(\" \"));\n\n try {\n let raw: any;\n\n if (\n [ \"BEGIN\", \"ROLLBACK\", \"COMMIT\", \"CREATE\", \"ALTER\", \"DROP\" ].indexOf(\n command\n ) !== -1\n ) {\n raw = await databaseConnection.execute(query, false);\n } else if ([ \"INSERT\", \"UPDATE\", \"DELETE\" ].indexOf(command) !== -1) {\n raw = await databaseConnection.run(query, parameters, false);\n } else {\n raw = await databaseConnection.query(query, parameters || []);\n }\n\n const result = new QueryResult();\n\n if (raw?.hasOwnProperty('values')) {\n result.raw = raw.values;\n result.records = raw.values;\n }\n\n if (raw?.hasOwnProperty('changes')) {\n result.affected = raw.changes.changes;\n result.raw = raw.changes.lastId || raw.changes.changes;\n }\n\n if (!useStructuredResult) {\n return result.raw;\n }\n\n return result;\n } catch (err) {\n this.driver.connection.logger.logQueryError(\n err,\n query,\n parameters,\n this\n );\n\n throw new QueryFailedError(query, parameters, err);\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(objectLiteral: ObjectLiteral): string[] {\n return Object.keys(objectLiteral).map((key) => `\"${key}\"` + \"=?\");\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -10,6 +10,14 @@ export declare class CordovaQueryRunner extends AbstractSqliteQueryRunner {
|
|
|
10
10
|
*/
|
|
11
11
|
driver: CordovaDriver;
|
|
12
12
|
constructor(driver: CordovaDriver);
|
|
13
|
+
/**
|
|
14
|
+
* Called before migrations are run.
|
|
15
|
+
*/
|
|
16
|
+
beforeMigration(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Called after migrations are run.
|
|
19
|
+
*/
|
|
20
|
+
afterMigration(): Promise<void>;
|
|
13
21
|
/**
|
|
14
22
|
* Executes a given SQL query.
|
|
15
23
|
*/
|
|
@@ -20,6 +20,36 @@ var CordovaQueryRunner = /** @class */ (function (_super) {
|
|
|
20
20
|
_this.broadcaster = new Broadcaster(_this);
|
|
21
21
|
return _this;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Called before migrations are run.
|
|
25
|
+
*/
|
|
26
|
+
CordovaQueryRunner.prototype.beforeMigration = function () {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
28
|
+
return __generator(this, function (_a) {
|
|
29
|
+
switch (_a.label) {
|
|
30
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF")];
|
|
31
|
+
case 1:
|
|
32
|
+
_a.sent();
|
|
33
|
+
return [2 /*return*/];
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Called after migrations are run.
|
|
40
|
+
*/
|
|
41
|
+
CordovaQueryRunner.prototype.afterMigration = function () {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
43
|
+
return __generator(this, function (_a) {
|
|
44
|
+
switch (_a.label) {
|
|
45
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = ON")];
|
|
46
|
+
case 1:
|
|
47
|
+
_a.sent();
|
|
48
|
+
return [2 /*return*/];
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
};
|
|
23
53
|
/**
|
|
24
54
|
* Executes a given SQL query.
|
|
25
55
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/cordova/CordovaQueryRunner.ts"],"names":[],"mappings":"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","file":"CordovaQueryRunner.js","sourcesContent":["import {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {CordovaDriver} from \"./CordovaDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { TypeORMError } from \"../../error\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class CordovaQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: CordovaDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: CordovaDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n\n try {\n const raw = await new Promise<any>(async (ok, fail) => {\n databaseConnection.executeSql(query, parameters,\n (raw: any) => ok(raw),\n (err: any) => fail(err)\n )\n });\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n }\n\n const result = new QueryResult();\n\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId;\n } else {\n let resultSet = [];\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i));\n }\n\n result.records = resultSet;\n result.raw = resultSet;\n }\n\n if (useStructuredResult) {\n return result;\n } else {\n return result.raw;\n }\n\n } catch (err) {\n this.driver.connection.logger.logQueryError(err, query, parameters, this);\n throw new QueryFailedError(query, parameters, err);\n }\n }\n\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise<InsertResult> {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise<InsertResult>(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async startTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async commitTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async rollbackTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n async clearDatabase(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF;`);\n try {\n const selectViewDropsQuery = `SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'`;\n const dropViewQueries: ObjectLiteral[] = await this.query(selectViewDropsQuery);\n\n const selectTableDropsQuery = `SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'`;\n const dropTableQueries: ObjectLiteral[] = await this.query(selectTableDropsQuery);\n\n await Promise.all(dropViewQueries.map(q => this.query(q[\"query\"])));\n await Promise.all(dropTableQueries.map(q => this.query(q[\"query\"])));\n } finally {\n await this.query(`PRAGMA foreign_keys = ON;`);\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(objectLiteral: ObjectLiteral, startIndex: number = 0): string[] {\n return Object.keys(objectLiteral).map((key, index) => `\"${key}\"` + \"=?\");\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/cordova/CordovaQueryRunner.ts"],"names":[],"mappings":"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","file":"CordovaQueryRunner.js","sourcesContent":["import {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {CordovaDriver} from \"./CordovaDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { TypeORMError } from \"../../error\";\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n */\nexport class CordovaQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: CordovaDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: CordovaDriver) {\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(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n\n try {\n const raw = await new Promise<any>(async (ok, fail) => {\n databaseConnection.executeSql(query, parameters,\n (raw: any) => ok(raw),\n (err: any) => fail(err)\n )\n });\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime) {\n this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n }\n\n const result = new QueryResult();\n\n if (query.substr(0, 11) === \"INSERT INTO\") {\n result.raw = raw.insertId;\n } else {\n let resultSet = [];\n for (let i = 0; i < raw.rows.length; i++) {\n resultSet.push(raw.rows.item(i));\n }\n\n result.records = resultSet;\n result.raw = resultSet;\n }\n\n if (useStructuredResult) {\n return result;\n } else {\n return result.raw;\n }\n\n } catch (err) {\n this.driver.connection.logger.logQueryError(err, query, parameters, this);\n throw new QueryFailedError(query, parameters, err);\n }\n }\n\n /**\n * Insert a new row with given values into the given table.\n * Returns value of the generated column if given and generate column exist in the table.\n // todo: implement new syntax\n async insert(tableName: string, keyValues: ObjectLiteral): Promise<InsertResult> {\n const keys = Object.keys(keyValues);\n const columns = keys.map(key => `\"${key}\"`).join(\", \");\n const values = keys.map(key => \"?\").join(\",\");\n const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];\n const sql = columns.length > 0 ? (`INSERT INTO \"${tableName}\"(${columns}) VALUES (${values})`) : `INSERT INTO \"${tableName}\" DEFAULT VALUES`;\n const parameters = keys.map(key => keyValues[key]);\n\n return new Promise<InsertResult>(async (ok, fail) => {\n this.driver.connection.logger.logQuery(sql, parameters, this);\n const __this = this;\n const databaseConnection = await this.connect();\n databaseConnection.executeSql(sql, parameters, (resultSet: any) => {\n const generatedMap = generatedColumns.reduce((map, generatedColumn) => {\n const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === \"increment\" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n ok({\n result: undefined,\n generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n });\n }, (err: any) => {\n __this.driver.connection.logger.logQueryError(err, sql, parameters, this);\n fail(err);\n });\n });\n }*/\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async startTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async commitTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Would start a transaction but this driver does not support transactions.\n */\n async rollbackTransaction(): Promise<void> {\n throw new TypeORMError('Transactions are not supported by the Cordova driver')\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful with using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n */\n async clearDatabase(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF;`);\n try {\n const selectViewDropsQuery = `SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'`;\n const dropViewQueries: ObjectLiteral[] = await this.query(selectViewDropsQuery);\n\n const selectTableDropsQuery = `SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'`;\n const dropTableQueries: ObjectLiteral[] = await this.query(selectTableDropsQuery);\n\n await Promise.all(dropViewQueries.map(q => this.query(q[\"query\"])));\n await Promise.all(dropTableQueries.map(q => this.query(q[\"query\"])));\n } finally {\n await this.query(`PRAGMA foreign_keys = ON;`);\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(objectLiteral: ObjectLiteral, startIndex: number = 0): string[] {\n return Object.keys(objectLiteral).map((key, index) => `\"${key}\"` + \"=?\");\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -42,6 +42,14 @@ export declare class ExpoQueryRunner extends AbstractSqliteQueryRunner {
|
|
|
42
42
|
* Issuing separate statements for `COMMIT` or `ROLLBACK` aren't necessary.
|
|
43
43
|
*/
|
|
44
44
|
rollbackTransaction(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Called before migrations are run.
|
|
47
|
+
*/
|
|
48
|
+
beforeMigration(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Called after migrations are run.
|
|
51
|
+
*/
|
|
52
|
+
afterMigration(): Promise<void>;
|
|
45
53
|
/**
|
|
46
54
|
* Executes a given SQL query.
|
|
47
55
|
*/
|
|
@@ -106,6 +106,36 @@ var ExpoQueryRunner = /** @class */ (function (_super) {
|
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* Called before migrations are run.
|
|
111
|
+
*/
|
|
112
|
+
ExpoQueryRunner.prototype.beforeMigration = function () {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
114
|
+
return __generator(this, function (_a) {
|
|
115
|
+
switch (_a.label) {
|
|
116
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF")];
|
|
117
|
+
case 1:
|
|
118
|
+
_a.sent();
|
|
119
|
+
return [2 /*return*/];
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Called after migrations are run.
|
|
126
|
+
*/
|
|
127
|
+
ExpoQueryRunner.prototype.afterMigration = function () {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
129
|
+
return __generator(this, function (_a) {
|
|
130
|
+
switch (_a.label) {
|
|
131
|
+
case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = ON")];
|
|
132
|
+
case 1:
|
|
133
|
+
_a.sent();
|
|
134
|
+
return [2 /*return*/];
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
};
|
|
109
139
|
/**
|
|
110
140
|
* Executes a given SQL query.
|
|
111
141
|
*/
|