typeorm 0.2.42-dev.93bf96e → 0.2.42-dev.9e844d9

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 (145) hide show
  1. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  2. package/browser/connection/Connection.js +33 -24
  3. package/browser/connection/Connection.js.map +1 -1
  4. package/browser/connection/ConnectionOptionsReader.js +3 -1
  5. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  6. package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  7. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +87 -4
  8. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  9. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  10. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
  11. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  12. package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  13. package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
  14. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  15. package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  16. package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
  17. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  18. package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
  19. package/browser/driver/expo/ExpoQueryRunner.js +30 -0
  20. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  21. package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  22. package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
  23. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  24. package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  25. package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
  26. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  27. package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  28. package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
  29. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  30. package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
  31. package/browser/driver/sqlite/SqliteDriver.js +84 -1
  32. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  33. package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  34. package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
  35. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  36. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  37. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  38. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  39. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  40. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +116 -55
  41. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  42. package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  43. package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
  44. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  45. package/browser/metadata-builder/EntityMetadataValidator.js +1 -1
  46. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  47. package/browser/migration/MigrationExecutor.js +37 -25
  48. package/browser/migration/MigrationExecutor.js.map +1 -1
  49. package/browser/persistence/SubjectExecutor.d.ts +2 -0
  50. package/browser/persistence/SubjectExecutor.js +99 -7
  51. package/browser/persistence/SubjectExecutor.js.map +1 -1
  52. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  53. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  54. package/browser/query-builder/InsertQueryBuilder.js +9 -0
  55. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  56. package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
  57. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  58. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  59. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  60. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  61. package/browser/query-runner/BaseQueryRunner.d.ts +8 -0
  62. package/browser/query-runner/BaseQueryRunner.js +20 -0
  63. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  64. package/browser/query-runner/QueryRunner.d.ts +8 -0
  65. package/browser/query-runner/QueryRunner.js.map +1 -1
  66. package/browser/schema-builder/RdbmsSchemaBuilder.js +36 -30
  67. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  68. package/browser/subscriber/Broadcaster.js +35 -31
  69. package/browser/subscriber/Broadcaster.js.map +1 -1
  70. package/browser/util/PathUtils.d.ts +10 -0
  71. package/browser/util/PathUtils.js +28 -0
  72. package/browser/util/PathUtils.js.map +1 -0
  73. package/connection/BaseConnectionOptions.js.map +1 -1
  74. package/connection/Connection.js +33 -24
  75. package/connection/Connection.js.map +1 -1
  76. package/connection/ConnectionOptionsReader.js +3 -1
  77. package/connection/ConnectionOptionsReader.js.map +1 -1
  78. package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  79. package/driver/better-sqlite3/BetterSqlite3Driver.js +86 -3
  80. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  81. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  82. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
  83. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  84. package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  85. package/driver/capacitor/CapacitorQueryRunner.js +30 -0
  86. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  87. package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  88. package/driver/cordova/CordovaQueryRunner.js +30 -0
  89. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  90. package/driver/expo/ExpoQueryRunner.d.ts +8 -0
  91. package/driver/expo/ExpoQueryRunner.js +30 -0
  92. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  93. package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  94. package/driver/mongodb/MongoQueryRunner.js +20 -0
  95. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  96. package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  97. package/driver/nativescript/NativescriptQueryRunner.js +30 -0
  98. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  99. package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  100. package/driver/react-native/ReactNativeQueryRunner.js +30 -0
  101. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  102. package/driver/sqlite/SqliteDriver.d.ts +13 -0
  103. package/driver/sqlite/SqliteDriver.js +83 -0
  104. package/driver/sqlite/SqliteDriver.js.map +1 -1
  105. package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  106. package/driver/sqlite/SqliteQueryRunner.js +30 -0
  107. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  108. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  109. package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  110. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  111. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  112. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +116 -55
  113. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  114. package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  115. package/driver/sqljs/SqljsQueryRunner.js +30 -0
  116. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  117. package/metadata-builder/EntityMetadataValidator.js +1 -1
  118. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  119. package/migration/MigrationExecutor.js +37 -25
  120. package/migration/MigrationExecutor.js.map +1 -1
  121. package/package.json +1 -1
  122. package/persistence/SubjectExecutor.d.ts +2 -0
  123. package/persistence/SubjectExecutor.js +99 -7
  124. package/persistence/SubjectExecutor.js.map +1 -1
  125. package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  126. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  127. package/query-builder/InsertQueryBuilder.js +9 -0
  128. package/query-builder/InsertQueryBuilder.js.map +1 -1
  129. package/query-builder/relation-id/RelationIdLoader.js +9 -9
  130. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  131. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  132. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  133. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  134. package/query-runner/BaseQueryRunner.d.ts +8 -0
  135. package/query-runner/BaseQueryRunner.js +20 -0
  136. package/query-runner/BaseQueryRunner.js.map +1 -1
  137. package/query-runner/QueryRunner.d.ts +8 -0
  138. package/query-runner/QueryRunner.js.map +1 -1
  139. package/schema-builder/RdbmsSchemaBuilder.js +36 -30
  140. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  141. package/subscriber/Broadcaster.js +35 -31
  142. package/subscriber/Broadcaster.js.map +1 -1
  143. package/util/PathUtils.d.ts +10 -0
  144. package/util/PathUtils.js +34 -0
  145. package/util/PathUtils.js.map +1 -0
@@ -233,7 +233,7 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
233
233
  switch (_a.label) {
234
234
  case 0:
235
235
  tableName = tableOrName instanceof Table_1.Table ? tableOrName.name : tableOrName;
236
- sql = "PRAGMA table_info(\"" + tableName + "\")";
236
+ sql = "PRAGMA table_info(" + this.escapePath(tableName) + ")";
237
237
  return [4 /*yield*/, this.query(sql)];
238
238
  case 1:
239
239
  columns = _a.sent();
@@ -443,8 +443,8 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
443
443
  oldTable = _a;
444
444
  newTable = oldTable.clone();
445
445
  newTable.name = newTableName;
446
- up = new Query_1.Query("ALTER TABLE \"" + oldTable.name + "\" RENAME TO \"" + newTableName + "\"");
447
- down = new Query_1.Query("ALTER TABLE \"" + newTableName + "\" RENAME TO \"" + oldTable.name + "\"");
446
+ up = new Query_1.Query("ALTER TABLE " + this.escapePath(oldTable.name) + " RENAME TO " + this.escapePath(newTableName));
447
+ down = new Query_1.Query("ALTER TABLE " + this.escapePath(newTableName) + " RENAME TO " + this.escapePath(oldTable.name));
448
448
  return [4 /*yield*/, this.executeQueries(up, down)];
449
449
  case 4:
450
450
  _b.sent();
@@ -1237,7 +1237,7 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1237
1237
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1238
1238
  return (0, tslib_1.__generator)(this, function (_a) {
1239
1239
  switch (_a.label) {
1240
- case 0: return [4 /*yield*/, this.query("DELETE FROM \"" + tableName + "\"")];
1240
+ case 0: return [4 /*yield*/, this.query("DELETE FROM " + this.escapePath(tableName))];
1241
1241
  case 1:
1242
1242
  _a.sent();
1243
1243
  return [2 /*return*/];
@@ -1248,13 +1248,18 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1248
1248
  /**
1249
1249
  * Removes all tables from the currently connected database.
1250
1250
  */
1251
- AbstractSqliteQueryRunner.prototype.clearDatabase = function () {
1251
+ AbstractSqliteQueryRunner.prototype.clearDatabase = function (database) {
1252
1252
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1253
- var selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_2, rollbackError_1;
1253
+ var dbPath, selectViewDropsQuery, dropViewQueries, selectTableDropsQuery, dropTableQueries, error_2, rollbackError_1;
1254
1254
  var _this = this;
1255
1255
  return (0, tslib_1.__generator)(this, function (_a) {
1256
1256
  switch (_a.label) {
1257
- case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF;")];
1257
+ case 0:
1258
+ dbPath = undefined;
1259
+ if (database && this.driver.getAttachedDatabaseHandleByRelativePath(database)) {
1260
+ dbPath = this.driver.getAttachedDatabaseHandleByRelativePath(database);
1261
+ }
1262
+ return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF;")];
1258
1263
  case 1:
1259
1264
  _a.sent();
1260
1265
  return [4 /*yield*/, this.startTransaction()];
@@ -1263,14 +1268,14 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1263
1268
  _a.label = 3;
1264
1269
  case 3:
1265
1270
  _a.trys.push([3, 9, 14, 16]);
1266
- selectViewDropsQuery = "SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'";
1271
+ selectViewDropsQuery = dbPath ? "SELECT 'DROP VIEW \"" + dbPath + "\".\"' || name || '\";' as query FROM \"" + dbPath + "\".\"sqlite_master\" WHERE \"type\" = 'view'" : "SELECT 'DROP VIEW \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'view'";
1267
1272
  return [4 /*yield*/, this.query(selectViewDropsQuery)];
1268
1273
  case 4:
1269
1274
  dropViewQueries = _a.sent();
1270
1275
  return [4 /*yield*/, Promise.all(dropViewQueries.map(function (q) { return _this.query(q["query"]); }))];
1271
1276
  case 5:
1272
1277
  _a.sent();
1273
- selectTableDropsQuery = "SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'";
1278
+ selectTableDropsQuery = dbPath ? "SELECT 'DROP TABLE \"" + dbPath + "\".\"' || name || '\";' as query FROM \"" + dbPath + "\".\"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'" : "SELECT 'DROP TABLE \"' || name || '\";' as query FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" != 'sqlite_sequence'";
1274
1279
  return [4 /*yield*/, this.query(selectTableDropsQuery)];
1275
1280
  case 6:
1276
1281
  dropTableQueries = _a.sent();
@@ -1337,66 +1342,97 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1337
1342
  });
1338
1343
  });
1339
1344
  };
1345
+ AbstractSqliteQueryRunner.prototype.loadTableRecords = function (tablePath, tableOrIndex) {
1346
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1347
+ var database, _a, schema, tableName, res;
1348
+ return (0, tslib_1.__generator)(this, function (_b) {
1349
+ switch (_b.label) {
1350
+ case 0:
1351
+ database = undefined;
1352
+ _a = (0, tslib_1.__read)(this.splitTablePath(tablePath), 2), schema = _a[0], tableName = _a[1];
1353
+ if (schema && this.driver.getAttachedDatabasePathRelativeByHandle(schema)) {
1354
+ database = this.driver.getAttachedDatabasePathRelativeByHandle(schema);
1355
+ }
1356
+ return [4 /*yield*/, this.query("SELECT " + (database ? "'" + database + "'" : null) + " as database, " + (schema ? "'" + schema + "'" : null) + " as schema, * FROM " + (schema ? "\"" + schema + "\"." : "") + this.escapePath("sqlite_master") + " WHERE \"type\" = '" + tableOrIndex + "' AND \"" + (tableOrIndex === "table" ? "name" : "tbl_name") + "\" IN ('" + tableName + "')")];
1357
+ case 1:
1358
+ res = _b.sent();
1359
+ return [2 /*return*/, res];
1360
+ }
1361
+ });
1362
+ });
1363
+ };
1364
+ AbstractSqliteQueryRunner.prototype.loadPragmaRecords = function (tablePath, pragma) {
1365
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1366
+ var _a, tableName, res;
1367
+ return (0, tslib_1.__generator)(this, function (_b) {
1368
+ switch (_b.label) {
1369
+ case 0:
1370
+ _a = (0, tslib_1.__read)(this.splitTablePath(tablePath), 2), tableName = _a[1];
1371
+ return [4 /*yield*/, this.query("PRAGMA " + pragma + "(\"" + tableName + "\")")];
1372
+ case 1:
1373
+ res = _b.sent();
1374
+ return [2 /*return*/, res];
1375
+ }
1376
+ });
1377
+ });
1378
+ };
1340
1379
  /**
1341
1380
  * Loads all tables (with given names) from the database and creates a Table from them.
1342
1381
  */
1343
1382
  AbstractSqliteQueryRunner.prototype.loadTables = function (tableNames) {
1344
1383
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1345
- var dbTables, tablesSql, _a, _b, _c, _d, tableNamesString_1, tablesSql, _e, _f, _g, _h, tableNamesString, dbIndicesDef;
1384
+ var dbTables, dbIndicesDef, tablesSql, _a, _b, _c, _d, tableNamesString;
1346
1385
  var _this = this;
1347
- return (0, tslib_1.__generator)(this, function (_j) {
1348
- switch (_j.label) {
1386
+ return (0, tslib_1.__generator)(this, function (_e) {
1387
+ switch (_e.label) {
1349
1388
  case 0:
1350
1389
  // if no tables given then no need to proceed
1351
1390
  if (tableNames && tableNames.length === 0) {
1352
1391
  return [2 /*return*/, []];
1353
1392
  }
1354
1393
  dbTables = [];
1355
- if (!!tableNames) return [3 /*break*/, 2];
1394
+ if (!!tableNames) return [3 /*break*/, 3];
1356
1395
  tablesSql = "SELECT * FROM \"sqlite_master\" WHERE \"type\" = 'table'";
1357
1396
  _b = (_a = dbTables.push).apply;
1358
1397
  _c = [dbTables];
1359
1398
  _d = [[]];
1360
1399
  return [4 /*yield*/, this.query(tablesSql)];
1361
1400
  case 1:
1362
- _b.apply(_a, _c.concat([tslib_1.__spreadArray.apply(void 0, _d.concat([tslib_1.__read.apply(void 0, [_j.sent()]), false]))]));
1363
- return [3 /*break*/, 4];
1364
- case 2:
1365
- tableNamesString_1 = tableNames.map(function (tableName) { return "'" + tableName + "'"; }).join(", ");
1366
- tablesSql = "SELECT * FROM \"sqlite_master\" WHERE \"type\" = 'table' AND \"name\" IN (" + tableNamesString_1 + ")";
1367
- _f = (_e = dbTables.push).apply;
1368
- _g = [dbTables];
1369
- _h = [[]];
1370
- return [4 /*yield*/, this.query(tablesSql)];
1371
- case 3:
1372
- _f.apply(_e, _g.concat([tslib_1.__spreadArray.apply(void 0, _h.concat([tslib_1.__read.apply(void 0, [_j.sent()]), false]))]));
1373
- _j.label = 4;
1374
- case 4:
1375
- // if tables were not found in the db, no need to proceed
1376
- if (dbTables.length === 0) {
1377
- return [2 /*return*/, []];
1378
- }
1401
+ _b.apply(_a, _c.concat([tslib_1.__spreadArray.apply(void 0, _d.concat([tslib_1.__read.apply(void 0, [_e.sent()]), false]))]));
1379
1402
  tableNamesString = dbTables.map(function (_a) {
1380
1403
  var name = _a.name;
1381
1404
  return "'" + name + "'";
1382
1405
  }).join(", ");
1383
1406
  return [4 /*yield*/, this.query("SELECT * FROM \"sqlite_master\" WHERE \"type\" = 'index' AND \"tbl_name\" IN (" + tableNamesString + ")")];
1407
+ case 2:
1408
+ dbIndicesDef = _e.sent();
1409
+ return [3 /*break*/, 6];
1410
+ case 3: return [4 /*yield*/, Promise.all(tableNames.map(function (tableName) { return _this.loadTableRecords(tableName, "table"); }))];
1411
+ case 4:
1412
+ dbTables = (_e.sent()).reduce(function (acc, res) { return ((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(acc), false), (0, tslib_1.__read)(res), false)); }, []).filter(Boolean);
1413
+ return [4 /*yield*/, Promise.all((tableNames !== null && tableNames !== void 0 ? tableNames : []).map(function (tableName) { return _this.loadTableRecords(tableName, "index"); }))];
1384
1414
  case 5:
1385
- dbIndicesDef = _j.sent();
1415
+ dbIndicesDef = (_e.sent()).reduce(function (acc, res) { return ((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(acc), false), (0, tslib_1.__read)(res), false)); }, []).filter(Boolean);
1416
+ _e.label = 6;
1417
+ case 6:
1418
+ // if tables were not found in the db, no need to proceed
1419
+ if (dbTables.length === 0) {
1420
+ return [2 /*return*/, []];
1421
+ }
1386
1422
  // create table schemas for loaded tables
1387
1423
  return [2 /*return*/, Promise.all(dbTables.map(function (dbTable) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
1388
- var table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, uniqueRegexResult, uniqueMappings, uniqueRegex, tableUniquePromises, _b, result, regexp, indicesPromises, indices;
1424
+ var tablePath, table, sql, _a, dbColumns, dbIndices, dbForeignKeys, autoIncrementColumnName, tableSql, autoIncrementIndex, comma, bracket, tableForeignKeyConstraints, uniqueRegexResult, uniqueMappings, uniqueRegex, tableUniquePromises, _b, result, regexp, indicesPromises, indices;
1389
1425
  var _this = this;
1390
1426
  return (0, tslib_1.__generator)(this, function (_c) {
1391
1427
  switch (_c.label) {
1392
1428
  case 0:
1393
- table = new Table_1.Table();
1394
- table.name = dbTable["name"];
1429
+ tablePath = dbTable['database'] && this.driver.getAttachedDatabaseHandleByRelativePath(dbTable['database']) ? this.driver.getAttachedDatabaseHandleByRelativePath(dbTable['database']) + "." + dbTable['name'] : dbTable['name'];
1430
+ table = new Table_1.Table({ name: tablePath });
1395
1431
  sql = dbTable["sql"];
1396
1432
  return [4 /*yield*/, Promise.all([
1397
- this.query("PRAGMA table_info(\"" + dbTable["name"] + "\")"),
1398
- this.query("PRAGMA index_list(\"" + dbTable["name"] + "\")"),
1399
- this.query("PRAGMA foreign_key_list(\"" + dbTable["name"] + "\")"),
1433
+ this.loadPragmaRecords(tablePath, "table_info"),
1434
+ this.loadPragmaRecords(tablePath, "index_list"),
1435
+ this.loadPragmaRecords(tablePath, "foreign_key_list"),
1400
1436
  ])];
1401
1437
  case 1:
1402
1438
  _a = tslib_1.__read.apply(void 0, [_c.sent(), 3]), dbColumns = _a[0], dbIndices = _a[1], dbForeignKeys = _a[2];
@@ -1540,7 +1576,7 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1540
1576
  .map(function (dbIndex) { return dbIndex["name"]; })
1541
1577
  .filter(function (value, index, self) { return self.indexOf(value) === index; }) // unqiue
1542
1578
  .map(function (dbIndexName) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
1543
- var indexDef, condition, dbIndex, indexInfos, indexColumns, isUnique;
1579
+ var indexDef, condition, dbIndex, indexInfos, indexColumns, dbIndexPath, isUnique;
1544
1580
  return (0, tslib_1.__generator)(this, function (_a) {
1545
1581
  switch (_a.label) {
1546
1582
  case 0:
@@ -1553,10 +1589,11 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1553
1589
  indexColumns = indexInfos
1554
1590
  .sort(function (indexInfo1, indexInfo2) { return parseInt(indexInfo1["seqno"]) - parseInt(indexInfo2["seqno"]); })
1555
1591
  .map(function (indexInfo) { return indexInfo["name"]; });
1592
+ dbIndexPath = "" + (dbTable["database"] ? dbTable["database"] + "." : '') + dbIndex["name"];
1556
1593
  isUnique = dbIndex["unique"] === "1" || dbIndex["unique"] === 1;
1557
1594
  return [2 /*return*/, new TableIndex_1.TableIndex({
1558
1595
  table: table,
1559
- name: dbIndex["name"],
1596
+ name: dbIndexPath,
1560
1597
  columnNames: indexColumns,
1561
1598
  isUnique: isUnique,
1562
1599
  where: condition ? condition[1] : undefined
@@ -1587,7 +1624,8 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1587
1624
  if (skipPrimary && hasAutoIncrement)
1588
1625
  throw new error_1.TypeORMError("Sqlite does not support AUTOINCREMENT on composite primary key");
1589
1626
  var columnDefinitions = table.columns.map(function (column) { return _this.buildCreateColumnSql(column, skipPrimary); }).join(", ");
1590
- var sql = "CREATE TABLE \"" + table.name + "\" (" + columnDefinitions;
1627
+ var _a = (0, tslib_1.__read)(this.splitTablePath(table.name), 1), database = _a[0];
1628
+ var sql = "CREATE TABLE " + this.escapePath(table.name) + " (" + columnDefinitions;
1591
1629
  // need for `addColumn()` method, because it recreates table.
1592
1630
  table.columns
1593
1631
  .filter(function (column) { return column.isUnique; })
@@ -1615,12 +1653,20 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1615
1653
  sql += ", " + checksSql;
1616
1654
  }
1617
1655
  if (table.foreignKeys.length > 0 && createForeignKeys) {
1618
- var foreignKeysSql = table.foreignKeys.map(function (fk) {
1656
+ var foreignKeysSql = table.foreignKeys.filter(function (fk) {
1657
+ var _a = (0, tslib_1.__read)(_this.splitTablePath(fk.referencedTableName), 1), referencedDatabase = _a[0];
1658
+ if (referencedDatabase !== database) {
1659
+ return false;
1660
+ }
1661
+ return true;
1662
+ })
1663
+ .map(function (fk) {
1664
+ var _a = (0, tslib_1.__read)(_this.splitTablePath(fk.referencedTableName), 2), referencedTable = _a[1];
1619
1665
  var columnNames = fk.columnNames.map(function (columnName) { return "\"" + columnName + "\""; }).join(", ");
1620
1666
  if (!fk.name)
1621
1667
  fk.name = _this.connection.namingStrategy.foreignKeyName(table, fk.columnNames, _this.getTablePath(fk), fk.referencedColumnNames);
1622
1668
  var referencedColumnNames = fk.referencedColumnNames.map(function (columnName) { return "\"" + columnName + "\""; }).join(", ");
1623
- var constraint = "CONSTRAINT \"" + fk.name + "\" FOREIGN KEY (" + columnNames + ") REFERENCES \"" + fk.referencedTableName + "\" (" + referencedColumnNames + ")";
1669
+ var constraint = "CONSTRAINT \"" + fk.name + "\" FOREIGN KEY (" + columnNames + ") REFERENCES \"" + referencedTable + "\" (" + referencedColumnNames + ")";
1624
1670
  if (fk.onDelete)
1625
1671
  constraint += " ON DELETE " + fk.onDelete;
1626
1672
  if (fk.onUpdate)
@@ -1645,7 +1691,7 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1645
1691
  */
1646
1692
  AbstractSqliteQueryRunner.prototype.dropTableSql = function (tableOrName, ifExist) {
1647
1693
  var tableName = tableOrName instanceof Table_1.Table ? tableOrName.name : tableOrName;
1648
- var query = ifExist ? "DROP TABLE IF EXISTS \"" + tableName + "\"" : "DROP TABLE \"" + tableName + "\"";
1694
+ var query = ifExist ? "DROP TABLE IF EXISTS " + this.escapePath(tableName) : "DROP TABLE " + this.escapePath(tableName);
1649
1695
  return new Query_1.Query(query);
1650
1696
  };
1651
1697
  AbstractSqliteQueryRunner.prototype.createViewSql = function (view) {
@@ -1683,14 +1729,15 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1683
1729
  */
1684
1730
  AbstractSqliteQueryRunner.prototype.createIndexSql = function (table, index) {
1685
1731
  var columns = index.columnNames.map(function (columnName) { return "\"" + columnName + "\""; }).join(", ");
1686
- return new Query_1.Query("CREATE " + (index.isUnique ? "UNIQUE " : "") + "INDEX \"" + index.name + "\" ON \"" + table.name + "\" (" + columns + ") " + (index.where ? "WHERE " + index.where : ""));
1732
+ var _a = (0, tslib_1.__read)(this.splitTablePath(table.name), 2), database = _a[0], tableName = _a[1];
1733
+ return new Query_1.Query("CREATE " + (index.isUnique ? "UNIQUE " : "") + "INDEX " + (database ? "\"" + database + "\"." : "") + this.escapePath(index.name) + " ON \"" + tableName + "\" (" + columns + ") " + (index.where ? "WHERE " + index.where : ""));
1687
1734
  };
1688
1735
  /**
1689
1736
  * Builds drop index sql.
1690
1737
  */
1691
1738
  AbstractSqliteQueryRunner.prototype.dropIndexSql = function (indexOrName) {
1692
1739
  var indexName = indexOrName instanceof TableIndex_1.TableIndex ? indexOrName.name : indexOrName;
1693
- return new Query_1.Query("DROP INDEX \"" + indexName + "\"");
1740
+ return new Query_1.Query("DROP INDEX " + this.escapePath(indexName));
1694
1741
  };
1695
1742
  /**
1696
1743
  * Builds a query for create column.
@@ -1720,10 +1767,10 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1720
1767
  AbstractSqliteQueryRunner.prototype.recreateTable = function (newTable, oldTable, migrateData) {
1721
1768
  if (migrateData === void 0) { migrateData = true; }
1722
1769
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1723
- var upQueries, downQueries, newColumnNames, oldColumnNames;
1770
+ var upQueries, downQueries, _a, databaseNew, tableNameNew, _b, tableNameOld, newColumnNames, oldColumnNames;
1724
1771
  var _this = this;
1725
- return (0, tslib_1.__generator)(this, function (_a) {
1726
- switch (_a.label) {
1772
+ return (0, tslib_1.__generator)(this, function (_c) {
1773
+ switch (_c.label) {
1727
1774
  case 0:
1728
1775
  upQueries = [];
1729
1776
  downQueries = [];
@@ -1732,8 +1779,9 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1732
1779
  upQueries.push(_this.dropIndexSql(index));
1733
1780
  downQueries.push(_this.createIndexSql(oldTable, index));
1734
1781
  });
1735
- // change table name into 'temporary_table'
1736
- newTable.name = "temporary_" + newTable.name;
1782
+ _a = (0, tslib_1.__read)(this.splitTablePath(newTable.name), 2), databaseNew = _a[0], tableNameNew = _a[1];
1783
+ _b = (0, tslib_1.__read)(this.splitTablePath(oldTable.name), 2), tableNameOld = _b[1];
1784
+ newTable.name = tableNameNew = (databaseNew ? databaseNew + "." : "") + "temporary_" + tableNameNew;
1737
1785
  // create new table
1738
1786
  upQueries.push(this.createTableSql(newTable, true));
1739
1787
  downQueries.push(this.dropTableSql(newTable));
@@ -1751,15 +1799,15 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1751
1799
  return newTable.columns.find(function (c) { return c.name === column.name; });
1752
1800
  }).map(function (column) { return "\"" + column.name + "\""; }).join(", ");
1753
1801
  }
1754
- upQueries.push(new Query_1.Query("INSERT INTO \"" + newTable.name + "\"(" + newColumnNames + ") SELECT " + oldColumnNames + " FROM \"" + oldTable.name + "\""));
1755
- downQueries.push(new Query_1.Query("INSERT INTO \"" + oldTable.name + "\"(" + oldColumnNames + ") SELECT " + newColumnNames + " FROM \"" + newTable.name + "\""));
1802
+ upQueries.push(new Query_1.Query("INSERT INTO " + this.escapePath(newTable.name) + "(" + newColumnNames + ") SELECT " + oldColumnNames + " FROM " + this.escapePath(oldTable.name)));
1803
+ downQueries.push(new Query_1.Query("INSERT INTO " + this.escapePath(oldTable.name) + "(" + oldColumnNames + ") SELECT " + newColumnNames + " FROM " + this.escapePath(newTable.name)));
1756
1804
  }
1757
1805
  // drop old table
1758
1806
  upQueries.push(this.dropTableSql(oldTable));
1759
1807
  downQueries.push(this.createTableSql(oldTable, true));
1760
1808
  // rename old table
1761
- upQueries.push(new Query_1.Query("ALTER TABLE \"" + newTable.name + "\" RENAME TO \"" + oldTable.name + "\""));
1762
- downQueries.push(new Query_1.Query("ALTER TABLE \"" + oldTable.name + "\" RENAME TO \"" + newTable.name + "\""));
1809
+ upQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(newTable.name) + " RENAME TO " + this.escapePath(tableNameOld)));
1810
+ downQueries.push(new Query_1.Query("ALTER TABLE " + this.escapePath(oldTable.name) + " RENAME TO " + this.escapePath(tableNameNew)));
1763
1811
  newTable.name = oldTable.name;
1764
1812
  // recreate table indices
1765
1813
  newTable.indices.forEach(function (index) {
@@ -1771,13 +1819,26 @@ var AbstractSqliteQueryRunner = /** @class */ (function (_super) {
1771
1819
  });
1772
1820
  return [4 /*yield*/, this.executeQueries(upQueries, downQueries)];
1773
1821
  case 1:
1774
- _a.sent();
1822
+ _c.sent();
1775
1823
  this.replaceCachedTable(oldTable, newTable);
1776
1824
  return [2 /*return*/];
1777
1825
  }
1778
1826
  });
1779
1827
  });
1780
1828
  };
1829
+ /**
1830
+ * tablePath e.g. "myDB.myTable", "myTable"
1831
+ */
1832
+ AbstractSqliteQueryRunner.prototype.splitTablePath = function (tablePath) {
1833
+ return ((tablePath.indexOf(".") !== -1) ? tablePath.split(".") : [undefined, tablePath]);
1834
+ };
1835
+ /**
1836
+ * Escapes given table or view path. Tolerates leading/trailing dots
1837
+ */
1838
+ AbstractSqliteQueryRunner.prototype.escapePath = function (target, disableEscape) {
1839
+ var tableName = target instanceof Table_1.Table || target instanceof View_1.View ? target.name : target;
1840
+ return tableName.replace(/^\.+|\.+$/g, "").split(".").map(function (i) { return disableEscape ? i : "\"" + i + "\""; }).join(".");
1841
+ };
1781
1842
  return AbstractSqliteQueryRunner;
1782
1843
  }(BaseQueryRunner_1.BaseQueryRunner));
1783
1844
  exports.AbstractSqliteQueryRunner = AbstractSqliteQueryRunner;