velocious 1.0.504 → 1.0.505
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.
|
@@ -52,6 +52,23 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
52
52
|
const targetTableData = this.targetTableData
|
|
53
53
|
const previousTargetName = targetTableData.getName()
|
|
54
54
|
|
|
55
|
+
// Column-level `index: true` indexes are named after the table they are created with, and
|
|
56
|
+
// ALTER TABLE ... RENAME does not rename indexes - creating them inside the temp table's
|
|
57
|
+
// CREATE would leak the temp rebuild name permanently. Strip the flags for the temp CREATE
|
|
58
|
+
// and create those indexes explicitly on the temp table with their FINAL names BEFORE the
|
|
59
|
+
// copy: index names are database-global and survive the rename, and a violation (e.g. a new
|
|
60
|
+
// unique index over rows that all receive the same default) fails during INSERT...SELECT,
|
|
61
|
+
// while the original table still exists - never after the swap.
|
|
62
|
+
/** @type {Array<{column: import("../../table-data/table-column.js").default, index: ?, indexArgs: ?}>} */
|
|
63
|
+
const strippedColumnIndexes = []
|
|
64
|
+
|
|
65
|
+
for (const column of targetTableData.getColumns()) {
|
|
66
|
+
if (!column.getIndex()) continue
|
|
67
|
+
|
|
68
|
+
strippedColumnIndexes.push({column, index: column.getIndex(), indexArgs: column.getIndexArgs()})
|
|
69
|
+
column.setIndex(false)
|
|
70
|
+
}
|
|
71
|
+
|
|
55
72
|
targetTableData.setName(tempTableName)
|
|
56
73
|
|
|
57
74
|
let createTableSQLs
|
|
@@ -60,6 +77,8 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
60
77
|
createTableSQLs = await driver.createTableSql(targetTableData)
|
|
61
78
|
} finally {
|
|
62
79
|
targetTableData.setName(previousTargetName)
|
|
80
|
+
|
|
81
|
+
for (const {column, index} of strippedColumnIndexes) column.setIndex(index)
|
|
63
82
|
}
|
|
64
83
|
|
|
65
84
|
const newColumnsSQL = this.columnPairs.map(([, newName]) => options.quoteColumnName(newName)).join(", ")
|
|
@@ -69,6 +88,22 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
69
88
|
|
|
70
89
|
for (const sql of createTableSQLs) sqls.push(sql)
|
|
71
90
|
|
|
91
|
+
for (const {column, indexArgs} of strippedColumnIndexes) {
|
|
92
|
+
const {unique, ...restIndexArgs} = indexArgs || {}
|
|
93
|
+
|
|
94
|
+
restArgsError(restIndexArgs)
|
|
95
|
+
|
|
96
|
+
const createIndexSQLs = await new CreateIndexBase({
|
|
97
|
+
columns: [column.getName()],
|
|
98
|
+
driver,
|
|
99
|
+
name: `index_on_${originalTableName}_${column.getName()}`,
|
|
100
|
+
tableName: tempTableName,
|
|
101
|
+
unique
|
|
102
|
+
}).toSQLs()
|
|
103
|
+
|
|
104
|
+
for (const sql of createIndexSQLs) sqls.push(sql)
|
|
105
|
+
}
|
|
106
|
+
|
|
72
107
|
if (this.columnPairs.length > 0) {
|
|
73
108
|
sqls.push(
|
|
74
109
|
`INSERT INTO ${options.quoteTableName(tempTableName)} (${newColumnsSQL}) ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-rebuilder.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/table-rebuilder.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH;IACE;;;;;;;OAOG;IACH,sFALG;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO;QACf,iBAAiB,EAA9B,MAAM;QACU,eAAe,EAA/B,SAAS;QACqB,WAAW,EAAzC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,EAUA;IAJC,qCAAoB;IACpB,0BAA0C;IAC1C,2BAAsC;IACtC,gCAA8B;IAGhC;;;OAGG;IACH,UAFa,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"table-rebuilder.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/table-rebuilder.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH;IACE;;;;;;;OAOG;IACH,sFALG;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO;QACf,iBAAiB,EAA9B,MAAM;QACU,eAAe,EAA/B,SAAS;QACqB,WAAW,EAAzC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,EAUA;IAJC,qCAAoB;IACpB,0BAA0C;IAC1C,2BAAsC;IACtC,gCAA8B;IAGhC;;;OAGG;IACH,UAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAqF7B;CACF;sBA9HqB,2BAA2B"}
|
|
@@ -47,6 +47,21 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
47
47
|
const tempTableName = `${originalTableName}_velocious_rebuild`;
|
|
48
48
|
const targetTableData = this.targetTableData;
|
|
49
49
|
const previousTargetName = targetTableData.getName();
|
|
50
|
+
// Column-level `index: true` indexes are named after the table they are created with, and
|
|
51
|
+
// ALTER TABLE ... RENAME does not rename indexes - creating them inside the temp table's
|
|
52
|
+
// CREATE would leak the temp rebuild name permanently. Strip the flags for the temp CREATE
|
|
53
|
+
// and create those indexes explicitly on the temp table with their FINAL names BEFORE the
|
|
54
|
+
// copy: index names are database-global and survive the rename, and a violation (e.g. a new
|
|
55
|
+
// unique index over rows that all receive the same default) fails during INSERT...SELECT,
|
|
56
|
+
// while the original table still exists - never after the swap.
|
|
57
|
+
/** @type {Array<{column: import("../../table-data/table-column.js").default, index: ?, indexArgs: ?}>} */
|
|
58
|
+
const strippedColumnIndexes = [];
|
|
59
|
+
for (const column of targetTableData.getColumns()) {
|
|
60
|
+
if (!column.getIndex())
|
|
61
|
+
continue;
|
|
62
|
+
strippedColumnIndexes.push({ column, index: column.getIndex(), indexArgs: column.getIndexArgs() });
|
|
63
|
+
column.setIndex(false);
|
|
64
|
+
}
|
|
50
65
|
targetTableData.setName(tempTableName);
|
|
51
66
|
let createTableSQLs;
|
|
52
67
|
try {
|
|
@@ -54,12 +69,27 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
54
69
|
}
|
|
55
70
|
finally {
|
|
56
71
|
targetTableData.setName(previousTargetName);
|
|
72
|
+
for (const { column, index } of strippedColumnIndexes)
|
|
73
|
+
column.setIndex(index);
|
|
57
74
|
}
|
|
58
75
|
const newColumnsSQL = this.columnPairs.map(([, newName]) => options.quoteColumnName(newName)).join(", ");
|
|
59
76
|
const oldColumnsSQL = this.columnPairs.map(([oldName]) => options.quoteColumnName(oldName)).join(", ");
|
|
60
77
|
const sqls = [];
|
|
61
78
|
for (const sql of createTableSQLs)
|
|
62
79
|
sqls.push(sql);
|
|
80
|
+
for (const { column, indexArgs } of strippedColumnIndexes) {
|
|
81
|
+
const { unique, ...restIndexArgs } = indexArgs || {};
|
|
82
|
+
restArgsError(restIndexArgs);
|
|
83
|
+
const createIndexSQLs = await new CreateIndexBase({
|
|
84
|
+
columns: [column.getName()],
|
|
85
|
+
driver,
|
|
86
|
+
name: `index_on_${originalTableName}_${column.getName()}`,
|
|
87
|
+
tableName: tempTableName,
|
|
88
|
+
unique
|
|
89
|
+
}).toSQLs();
|
|
90
|
+
for (const sql of createIndexSQLs)
|
|
91
|
+
sqls.push(sql);
|
|
92
|
+
}
|
|
63
93
|
if (this.columnPairs.length > 0) {
|
|
64
94
|
sqls.push(`INSERT INTO ${options.quoteTableName(tempTableName)} (${newColumnsSQL}) ` +
|
|
65
95
|
`SELECT ${oldColumnsSQL} FROM ${options.quoteTableName(originalTableName)}`);
|
|
@@ -80,4 +110,4 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
80
110
|
return sqls;
|
|
81
111
|
}
|
|
82
112
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVidWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3RhYmxlLXJlYnVpbGRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxlQUFlLE1BQU0sa0NBQWtDLENBQUE7QUFDOUQsT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxTQUFTLE1BQU0sMkJBQTJCLENBQUE7QUFFakQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyw0Q0FBNEM7SUFDL0Q7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUNoRixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsZUFBZSxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQTtRQUVuRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUE7UUFDaEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxpQkFBaUIsb0JBQW9CLENBQUE7UUFDOUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQTtRQUM1QyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVwRCxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRXRDLElBQUksZUFBZSxDQUFBO1FBRW5CLElBQUksQ0FBQztZQUNILGVBQWUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDaEUsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsZUFBZSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFdEcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRWYsS0FBSyxNQUFNLEdBQUcsSUFBSSxlQUFlO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVqRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQ1AsZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLGFBQWEsSUFBSTtnQkFDMUUsVUFBVSxhQUFhLFNBQVMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQzVFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGNBQWMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUV4SCxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxlQUFlLENBQUM7Z0JBQ2hELE9BQU8sRUFBRSxjQUFjLENBQUMsVUFBVSxFQUFFO2dCQUNwQyxNQUFNO2dCQUNOLElBQUksRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFO2dCQUM5QixTQUFTLEVBQUUsaUJBQWlCO2dCQUM1QixNQUFNLEVBQUUsY0FBYyxDQUFDLFNBQVMsRUFBRTthQUNuQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7WUFFWCxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWU7Z0JBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IENyZWF0ZUluZGV4QmFzZSBmcm9tIFwiLi4vLi4vcXVlcnkvY3JlYXRlLWluZGV4LWJhc2UuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCJcblxuLyoqXG4gKiBFbWl0cyB0aGUgU1FMIHNlcXVlbmNlIGZvciBTUUxpdGUncyBcInJlYnVpbGRcIiBhcHByb2FjaCB0byBzY2hlbWEgY2hhbmdlcy5cbiAqXG4gKiBTUUxpdGUgY2Fubm90IGFkZC9kcm9wIGZvcmVpZ24ta2V5IGNvbnN0cmFpbnRzLCBkcm9wIGNvbHVtbnMgb24gb2xkZXJcbiAqIHZlcnNpb25zLCBjaGFuZ2UgY29sdW1uIHR5cGVzLCBvciBhZGQgQ0hFQ0sgY29uc3RyYWludHMgdmlhIEFMVEVSIFRBQkxFLlxuICogVGhlIHN0YW5kYXJkIHdvcmthcm91bmQgKGh0dHBzOi8vc3FsaXRlLm9yZy9sYW5nX2FsdGVydGFibGUuaHRtbCkgaXMgdG9cbiAqIGNyZWF0ZSBhIG5ldyB0YWJsZSB3aXRoIHRoZSBkZXNpcmVkIHNjaGVtYSwgY29weSByb3dzIG92ZXIsIGRyb3AgdGhlXG4gKiBvcmlnaW5hbCwgYW5kIHJlbmFtZSB0aGUgcmVwbGFjZW1lbnQuXG4gKlxuICogQ2FsbGVyIHBhc3NlcyB0aGUgZGVzaXJlZCBmaW5hbCBzY2hlbWE7IHRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgbWVjaGFuaWNhbFxuICogc2VxdWVuY2UgKENSRUFURSB0ZW1wIC8gSU5TRVJULi4uU0VMRUNUIC8gRFJPUCAvIFJFTkFNRSAvIHJlY3JlYXRlXG4gKiBpbmRleGVzKS4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbnkgRksgdG9nZ2xpbmcgb3IgdHJhbnNhY3Rpb24gc2V0dXBcbiAqIGFyb3VuZCB0aGUgcmV0dXJuZWQgU1FMIOKAlCBgUFJBR01BIGZvcmVpZ25fa2V5c2AgaXMgY29ubmVjdGlvbi1zY29wZWQgYW5kXG4gKiBjYW5ub3QgYmUgZmxpcHBlZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgc28gd3JhcHBpbmcgcG9saWN5IGlzIGxlZnQgdG8gdGhlXG4gKiBjYWxsZXIgKHNlZSBgc3FsL2FsdGVyLXRhYmxlLmpzYCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVRhYmxlUmVidWlsZGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Mub3JpZ2luYWxUYWJsZU5hbWUgLSBOYW1lIG9mIHRoZSBleGlzdGluZyB0YWJsZSB0byByZWJ1aWxkLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YX0gYXJncy50YXJnZXRUYWJsZURhdGEgLSBEZXNpcmVkIGZpbmFsIHNjaGVtYSAoY29sdW1ucyArIGZvcmVpZ24ga2V5cyArIGluZGV4ZXMpLiBUaGUgaW5zdGFuY2UncyBuYW1lIGlzIG92ZXJ3cml0dGVuIGludGVybmFsbHkgZHVyaW5nIGVtaXNzaW9uLlxuICAgKiBAcGFyYW0ge0FycmF5PFtzdHJpbmcsIHN0cmluZ10+fSBhcmdzLmNvbHVtblBhaXJzIC0gUGFpcnMgb2YgW29sZENvbHVtbk5hbWUsIG5ld0NvbHVtbk5hbWVdIGRlc2NyaWJpbmcgaG93IHJvd3MgZnJvbSB0aGUgb3JpZ2luYWwgdGFibGUgc2hvdWxkIHBvcHVsYXRlIHRoZSByZWJ1aWx0IHRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RyaXZlciwgb3JpZ2luYWxUYWJsZU5hbWUsIHRhcmdldFRhYmxlRGF0YSwgY29sdW1uUGFpcnMsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YXJnZXRUYWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhcmdldCB0YWJsZSBkYXRhIHdhcyBnaXZlblwiKVxuXG4gICAgdGhpcy5kcml2ZXIgPSBkcml2ZXJcbiAgICB0aGlzLm9yaWdpbmFsVGFibGVOYW1lID0gb3JpZ2luYWxUYWJsZU5hbWVcbiAgICB0aGlzLnRhcmdldFRhYmxlRGF0YSA9IHRhcmdldFRhYmxlRGF0YVxuICAgIHRoaXMuY29sdW1uUGFpcnMgPSBjb2x1bW5QYWlyc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdG8gc3Fscy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBpbiBvcmRlci5cbiAgICovXG4gIGFzeW5jIHRvU1FMcygpIHtcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmRyaXZlclxuICAgIGNvbnN0IG9wdGlvbnMgPSBkcml2ZXIub3B0aW9ucygpXG4gICAgY29uc3Qgb3JpZ2luYWxUYWJsZU5hbWUgPSB0aGlzLm9yaWdpbmFsVGFibGVOYW1lXG4gICAgY29uc3QgdGVtcFRhYmxlTmFtZSA9IGAke29yaWdpbmFsVGFibGVOYW1lfV92ZWxvY2lvdXNfcmVidWlsZGBcbiAgICBjb25zdCB0YXJnZXRUYWJsZURhdGEgPSB0aGlzLnRhcmdldFRhYmxlRGF0YVxuICAgIGNvbnN0IHByZXZpb3VzVGFyZ2V0TmFtZSA9IHRhcmdldFRhYmxlRGF0YS5nZXROYW1lKClcblxuICAgIHRhcmdldFRhYmxlRGF0YS5zZXROYW1lKHRlbXBUYWJsZU5hbWUpXG5cbiAgICBsZXQgY3JlYXRlVGFibGVTUUxzXG5cbiAgICB0cnkge1xuICAgICAgY3JlYXRlVGFibGVTUUxzID0gYXdhaXQgZHJpdmVyLmNyZWF0ZVRhYmxlU3FsKHRhcmdldFRhYmxlRGF0YSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGFyZ2V0VGFibGVEYXRhLnNldE5hbWUocHJldmlvdXNUYXJnZXROYW1lKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbHVtbnNTUUwgPSB0aGlzLmNvbHVtblBhaXJzLm1hcCgoWywgbmV3TmFtZV0pID0+IG9wdGlvbnMucXVvdGVDb2x1bW5OYW1lKG5ld05hbWUpKS5qb2luKFwiLCBcIilcbiAgICBjb25zdCBvbGRDb2x1bW5zU1FMID0gdGhpcy5jb2x1bW5QYWlycy5tYXAoKFtvbGROYW1lXSkgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUob2xkTmFtZSkpLmpvaW4oXCIsIFwiKVxuXG4gICAgY29uc3Qgc3FscyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBjcmVhdGVUYWJsZVNRTHMpIHNxbHMucHVzaChzcWwpXG5cbiAgICBpZiAodGhpcy5jb2x1bW5QYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICBzcWxzLnB1c2goXG4gICAgICAgIGBJTlNFUlQgSU5UTyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGVtcFRhYmxlTmFtZSl9ICgke25ld0NvbHVtbnNTUUx9KSBgICtcbiAgICAgICAgYFNFTEVDVCAke29sZENvbHVtbnNTUUx9IEZST00gJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKG9yaWdpbmFsVGFibGVOYW1lKX1gXG4gICAgICApXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKGBEUk9QIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShvcmlnaW5hbFRhYmxlTmFtZSl9YClcbiAgICBzcWxzLnB1c2goYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gUkVOQU1FIFRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShvcmlnaW5hbFRhYmxlTmFtZSl9YClcblxuICAgIGZvciAoY29uc3QgdGFibGVEYXRhSW5kZXggb2YgdGFyZ2V0VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgY3JlYXRlSW5kZXhTUUxzID0gYXdhaXQgbmV3IENyZWF0ZUluZGV4QmFzZSh7XG4gICAgICAgIGNvbHVtbnM6IHRhYmxlRGF0YUluZGV4LmdldENvbHVtbnMoKSxcbiAgICAgICAgZHJpdmVyLFxuICAgICAgICBuYW1lOiB0YWJsZURhdGFJbmRleC5nZXROYW1lKCksXG4gICAgICAgIHRhYmxlTmFtZTogb3JpZ2luYWxUYWJsZU5hbWUsXG4gICAgICAgIHVuaXF1ZTogdGFibGVEYXRhSW5kZXguZ2V0VW5pcXVlKClcbiAgICAgIH0pLnRvU1FMcygpXG5cbiAgICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZUluZGV4U1FMcykgc3Fscy5wdXNoKHNxbClcbiAgICB9XG5cbiAgICByZXR1cm4gc3Fsc1xuICB9XG59XG4iXX0=
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVidWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3RhYmxlLXJlYnVpbGRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxlQUFlLE1BQU0sa0NBQWtDLENBQUE7QUFDOUQsT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxTQUFTLE1BQU0sMkJBQTJCLENBQUE7QUFFakQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyw0Q0FBNEM7SUFDL0Q7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUNoRixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsZUFBZSxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQTtRQUVuRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUE7UUFDaEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxpQkFBaUIsb0JBQW9CLENBQUE7UUFDOUQsTUFB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QUMxRSxVQUFVLGFBQWEsU0FBUyxPQUFPLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDNUUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsY0FBYyxPQUFPLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXhILEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDMUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLGVBQWUsQ0FBQztnQkFDaEQsT0FBTyxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BDLE1BQU07Z0JBQ04sSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzlCLFNBQVMsRUFBRSxpQkFBaUI7Z0JBQzVCLE1BQU0sRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFO2FBQ25DLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUVYLEtBQUssTUFBTSxHQUFHLElBQUksZUFBZTtnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ3JlYXRlSW5kZXhCYXNlIGZyb20gXCIuLi8uLi9xdWVyeS9jcmVhdGUtaW5kZXgtYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uLy4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuXG4vKipcbiAqIEVtaXRzIHRoZSBTUUwgc2VxdWVuY2UgZm9yIFNRTGl0ZSdzIFwicmVidWlsZFwiIGFwcHJvYWNoIHRvIHNjaGVtYSBjaGFuZ2VzLlxuICpcbiAqIFNRTGl0ZSBjYW5ub3QgYWRkL2Ryb3AgZm9yZWlnbi1rZXkgY29uc3RyYWludHMsIGRyb3AgY29sdW1ucyBvbiBvbGRlclxuICogdmVyc2lvbnMsIGNoYW5nZSBjb2x1bW4gdHlwZXMsIG9yIGFkZCBDSEVDSyBjb25zdHJhaW50cyB2aWEgQUxURVIgVEFCTEUuXG4gKiBUaGUgc3RhbmRhcmQgd29ya2Fyb3VuZCAoaHR0cHM6Ly9zcWxpdGUub3JnL2xhbmdfYWx0ZXJ0YWJsZS5odG1sKSBpcyB0b1xuICogY3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIGRlc2lyZWQgc2NoZW1hLCBjb3B5IHJvd3Mgb3ZlciwgZHJvcCB0aGVcbiAqIG9yaWdpbmFsLCBhbmQgcmVuYW1lIHRoZSByZXBsYWNlbWVudC5cbiAqXG4gKiBDYWxsZXIgcGFzc2VzIHRoZSBkZXNpcmVkIGZpbmFsIHNjaGVtYTsgdGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBtZWNoYW5pY2FsXG4gKiBzZXF1ZW5jZSAoQ1JFQVRFIHRlbXAgLyBJTlNFUlQuLi5TRUxFQ1QgLyBEUk9QIC8gUkVOQU1FIC8gcmVjcmVhdGVcbiAqIGluZGV4ZXMpLiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGFueSBGSyB0b2dnbGluZyBvciB0cmFuc2FjdGlvbiBzZXR1cFxuICogYXJvdW5kIHRoZSByZXR1cm5lZCBTUUwg4oCUIGBQUkFHTUEgZm9yZWlnbl9rZXlzYCBpcyBjb25uZWN0aW9uLXNjb3BlZCBhbmRcbiAqIGNhbm5vdCBiZSBmbGlwcGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uLCBzbyB3cmFwcGluZyBwb2xpY3kgaXMgbGVmdCB0byB0aGVcbiAqIGNhbGxlciAoc2VlIGBzcWwvYWx0ZXItdGFibGUuanNgKS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzU3FsaXRlVGFibGVSZWJ1aWxkZXIge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5vcmlnaW5hbFRhYmxlTmFtZSAtIE5hbWUgb2YgdGhlIGV4aXN0aW5nIHRhYmxlIHRvIHJlYnVpbGQuXG4gICAqIEBwYXJhbSB7VGFibGVEYXRhfSBhcmdzLnRhcmdldFRhYmxlRGF0YSAtIERlc2lyZWQgZmluYWwgc2NoZW1hIChjb2x1bW5zICsgZm9yZWlnbiBrZXlzICsgaW5kZXhlcykuIFRoZSBpbnN0YW5jZSdzIG5hbWUgaXMgb3ZlcndyaXR0ZW4gaW50ZXJuYWxseSBkdXJpbmcgZW1pc3Npb24uXG4gICAqIEBwYXJhbSB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59IGFyZ3MuY29sdW1uUGFpcnMgLSBQYWlycyBvZiBbb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZV0gZGVzY3JpYmluZyBob3cgcm93cyBmcm9tIHRoZSBvcmlnaW5hbCB0YWJsZSBzaG91bGQgcG9wdWxhdGUgdGhlIHJlYnVpbHQgdGFibGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCBvcmlnaW5hbFRhYmxlTmFtZSwgdGFyZ2V0VGFibGVEYXRhLCBjb2x1bW5QYWlycywgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghKHRhcmdldFRhYmxlRGF0YSBpbnN0YW5jZW9mIFRhYmxlRGF0YSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFyZ2V0IHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLmRyaXZlciA9IGRyaXZlclxuICAgIHRoaXMub3JpZ2luYWxUYWJsZU5hbWUgPSBvcmlnaW5hbFRhYmxlTmFtZVxuICAgIHRoaXMudGFyZ2V0VGFibGVEYXRhID0gdGFyZ2V0VGFibGVEYXRhXG4gICAgdGhpcy5jb2x1bW5QYWlycyA9IGNvbHVtblBhaXJzXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0byBzcWxzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cyB0byBleGVjdXRlIGluIG9yZGVyLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZHJpdmVyXG4gICAgY29uc3Qgb3B0aW9ucyA9IGRyaXZlci5vcHRpb25zKClcbiAgICBjb25zdCBvcmlnaW5hbFRhYmxlTmFtZSA9IHRoaXMub3JpZ2luYWxUYWJsZU5hbWVcbiAgICBjb25zdCB0ZW1wVGFibGVOYW1lID0gYCR7b3JpZ2luYWxUYWJsZU5hbWV9X3ZlbG9jaW91c19yZWJ1aWxkYFxuICAgIGNvbnN0IHRhcmdldFRhYmxlRGF0YSA9IHRoaXMudGFyZ2V0VGFibGVEYXRhXG4gICAgY29uc3QgcHJldmlvdXNUYXJnZXROYW1lID0gdGFyZ2V0VGFibGVEYXRhLmdldE5hbWUoKVxuXG4gICAgLy8gQ29sdW1uLWxldmVsIGBpbmRleDogdHJ1ZWAgaW5kZXhlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHRhYmxlIHRoZXkgYXJlIGNyZWF0ZWQgd2l0aCwgYW5kXG4gICAgLy8gQUxURVIgVEFCTEUgLi4uIFJFTkFNRSBkb2VzIG5vdCByZW5hbWUgaW5kZXhlcyAtIGNyZWF0aW5nIHRoZW0gaW5zaWRlIHRoZSB0ZW1wIHRhYmxlJ3NcbiAgICAvLyBDUkVBVEUgd291bGQgbGVhayB0aGUgdGVtcCByZWJ1aWxkIG5hbWUgcGVybWFuZW50bHkuIFN0cmlwIHRoZSBmbGFncyBmb3IgdGhlIHRlbXAgQ1JFQVRFXG4gICAgLy8gYW5kIGNyZWF0ZSB0aG9zZSBpbmRleGVzIGV4cGxpY2l0bHkgb24gdGhlIHRlbXAgdGFibGUgd2l0aCB0aGVpciBGSU5BTCBuYW1lcyBCRUZPUkUgdGhlXG4gICAgLy8gY29weTogaW5kZXggbmFtZXMgYXJlIGRhdGFiYXNlLWdsb2JhbCBhbmQgc3Vydml2ZSB0aGUgcmVuYW1lLCBhbmQgYSB2aW9sYXRpb24gKGUuZy4gYSBuZXdcbiAgICAvLyB1bmlxdWUgaW5kZXggb3ZlciByb3dzIHRoYXQgYWxsIHJlY2VpdmUgdGhlIHNhbWUgZGVmYXVsdCkgZmFpbHMgZHVyaW5nIElOU0VSVC4uLlNFTEVDVCxcbiAgICAvLyB3aGlsZSB0aGUgb3JpZ2luYWwgdGFibGUgc3RpbGwgZXhpc3RzIC0gbmV2ZXIgYWZ0ZXIgdGhlIHN3YXAuXG4gICAgLyoqIEB0eXBlIHtBcnJheTx7Y29sdW1uOiBpbXBvcnQoXCIuLi8uLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiKS5kZWZhdWx0LCBpbmRleDogPywgaW5kZXhBcmdzOiA/fT59ICovXG4gICAgY29uc3Qgc3RyaXBwZWRDb2x1bW5JbmRleGVzID0gW11cblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhcmdldFRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgIGlmICghY29sdW1uLmdldEluZGV4KCkpIGNvbnRpbnVlXG5cbiAgICAgIHN0cmlwcGVkQ29sdW1uSW5kZXhlcy5wdXNoKHtjb2x1bW4sIGluZGV4OiBjb2x1bW4uZ2V0SW5kZXgoKSwgaW5kZXhBcmdzOiBjb2x1bW4uZ2V0SW5kZXhBcmdzKCl9KVxuICAgICAgY29sdW1uLnNldEluZGV4KGZhbHNlKVxuICAgIH1cblxuICAgIHRhcmdldFRhYmxlRGF0YS5zZXROYW1lKHRlbXBUYWJsZU5hbWUpXG5cbiAgICBsZXQgY3JlYXRlVGFibGVTUUxzXG5cbiAgICB0cnkge1xuICAgICAgY3JlYXRlVGFibGVTUUxzID0gYXdhaXQgZHJpdmVyLmNyZWF0ZVRhYmxlU3FsKHRhcmdldFRhYmxlRGF0YSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGFyZ2V0VGFibGVEYXRhLnNldE5hbWUocHJldmlvdXNUYXJnZXROYW1lKVxuXG4gICAgICBmb3IgKGNvbnN0IHtjb2x1bW4sIGluZGV4fSBvZiBzdHJpcHBlZENvbHVtbkluZGV4ZXMpIGNvbHVtbi5zZXRJbmRleChpbmRleClcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDb2x1bW5zU1FMID0gdGhpcy5jb2x1bW5QYWlycy5tYXAoKFssIG5ld05hbWVdKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShuZXdOYW1lKSkuam9pbihcIiwgXCIpXG4gICAgY29uc3Qgb2xkQ29sdW1uc1NRTCA9IHRoaXMuY29sdW1uUGFpcnMubWFwKChbb2xkTmFtZV0pID0+IG9wdGlvbnMucXVvdGVDb2x1bW5OYW1lKG9sZE5hbWUpKS5qb2luKFwiLCBcIilcblxuICAgIGNvbnN0IHNxbHMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2YgY3JlYXRlVGFibGVTUUxzKSBzcWxzLnB1c2goc3FsKVxuXG4gICAgZm9yIChjb25zdCB7Y29sdW1uLCBpbmRleEFyZ3N9IG9mIHN0cmlwcGVkQ29sdW1uSW5kZXhlcykge1xuICAgICAgY29uc3Qge3VuaXF1ZSwgLi4ucmVzdEluZGV4QXJnc30gPSBpbmRleEFyZ3MgfHwge31cblxuICAgICAgcmVzdEFyZ3NFcnJvcihyZXN0SW5kZXhBcmdzKVxuXG4gICAgICBjb25zdCBjcmVhdGVJbmRleFNRTHMgPSBhd2FpdCBuZXcgQ3JlYXRlSW5kZXhCYXNlKHtcbiAgICAgICAgY29sdW1uczogW2NvbHVtbi5nZXROYW1lKCldLFxuICAgICAgICBkcml2ZXIsXG4gICAgICAgIG5hbWU6IGBpbmRleF9vbl8ke29yaWdpbmFsVGFibGVOYW1lfV8ke2NvbHVtbi5nZXROYW1lKCl9YCxcbiAgICAgICAgdGFibGVOYW1lOiB0ZW1wVGFibGVOYW1lLFxuICAgICAgICB1bmlxdWVcbiAgICAgIH0pLnRvU1FMcygpXG5cbiAgICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZUluZGV4U1FMcykgc3Fscy5wdXNoKHNxbClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb2x1bW5QYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICBzcWxzLnB1c2goXG4gICAgICAgIGBJTlNFUlQgSU5UTyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGVtcFRhYmxlTmFtZSl9ICgke25ld0NvbHVtbnNTUUx9KSBgICtcbiAgICAgICAgYFNFTEVDVCAke29sZENvbHVtbnNTUUx9IEZST00gJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKG9yaWdpbmFsVGFibGVOYW1lKX1gXG4gICAgICApXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKGBEUk9QIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShvcmlnaW5hbFRhYmxlTmFtZSl9YClcbiAgICBzcWxzLnB1c2goYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gUkVOQU1FIFRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShvcmlnaW5hbFRhYmxlTmFtZSl9YClcblxuICAgIGZvciAoY29uc3QgdGFibGVEYXRhSW5kZXggb2YgdGFyZ2V0VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgY3JlYXRlSW5kZXhTUUxzID0gYXdhaXQgbmV3IENyZWF0ZUluZGV4QmFzZSh7XG4gICAgICAgIGNvbHVtbnM6IHRhYmxlRGF0YUluZGV4LmdldENvbHVtbnMoKSxcbiAgICAgICAgZHJpdmVyLFxuICAgICAgICBuYW1lOiB0YWJsZURhdGFJbmRleC5nZXROYW1lKCksXG4gICAgICAgIHRhYmxlTmFtZTogb3JpZ2luYWxUYWJsZU5hbWUsXG4gICAgICAgIHVuaXF1ZTogdGFibGVEYXRhSW5kZXguZ2V0VW5pcXVlKClcbiAgICAgIH0pLnRvU1FMcygpXG5cbiAgICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZUluZGV4U1FMcykgc3Fscy5wdXNoKHNxbClcbiAgICB9XG5cbiAgICByZXR1cm4gc3Fsc1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -52,6 +52,23 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
52
52
|
const targetTableData = this.targetTableData
|
|
53
53
|
const previousTargetName = targetTableData.getName()
|
|
54
54
|
|
|
55
|
+
// Column-level `index: true` indexes are named after the table they are created with, and
|
|
56
|
+
// ALTER TABLE ... RENAME does not rename indexes - creating them inside the temp table's
|
|
57
|
+
// CREATE would leak the temp rebuild name permanently. Strip the flags for the temp CREATE
|
|
58
|
+
// and create those indexes explicitly on the temp table with their FINAL names BEFORE the
|
|
59
|
+
// copy: index names are database-global and survive the rename, and a violation (e.g. a new
|
|
60
|
+
// unique index over rows that all receive the same default) fails during INSERT...SELECT,
|
|
61
|
+
// while the original table still exists - never after the swap.
|
|
62
|
+
/** @type {Array<{column: import("../../table-data/table-column.js").default, index: ?, indexArgs: ?}>} */
|
|
63
|
+
const strippedColumnIndexes = []
|
|
64
|
+
|
|
65
|
+
for (const column of targetTableData.getColumns()) {
|
|
66
|
+
if (!column.getIndex()) continue
|
|
67
|
+
|
|
68
|
+
strippedColumnIndexes.push({column, index: column.getIndex(), indexArgs: column.getIndexArgs()})
|
|
69
|
+
column.setIndex(false)
|
|
70
|
+
}
|
|
71
|
+
|
|
55
72
|
targetTableData.setName(tempTableName)
|
|
56
73
|
|
|
57
74
|
let createTableSQLs
|
|
@@ -60,6 +77,8 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
60
77
|
createTableSQLs = await driver.createTableSql(targetTableData)
|
|
61
78
|
} finally {
|
|
62
79
|
targetTableData.setName(previousTargetName)
|
|
80
|
+
|
|
81
|
+
for (const {column, index} of strippedColumnIndexes) column.setIndex(index)
|
|
63
82
|
}
|
|
64
83
|
|
|
65
84
|
const newColumnsSQL = this.columnPairs.map(([, newName]) => options.quoteColumnName(newName)).join(", ")
|
|
@@ -69,6 +88,22 @@ export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
|
69
88
|
|
|
70
89
|
for (const sql of createTableSQLs) sqls.push(sql)
|
|
71
90
|
|
|
91
|
+
for (const {column, indexArgs} of strippedColumnIndexes) {
|
|
92
|
+
const {unique, ...restIndexArgs} = indexArgs || {}
|
|
93
|
+
|
|
94
|
+
restArgsError(restIndexArgs)
|
|
95
|
+
|
|
96
|
+
const createIndexSQLs = await new CreateIndexBase({
|
|
97
|
+
columns: [column.getName()],
|
|
98
|
+
driver,
|
|
99
|
+
name: `index_on_${originalTableName}_${column.getName()}`,
|
|
100
|
+
tableName: tempTableName,
|
|
101
|
+
unique
|
|
102
|
+
}).toSQLs()
|
|
103
|
+
|
|
104
|
+
for (const sql of createIndexSQLs) sqls.push(sql)
|
|
105
|
+
}
|
|
106
|
+
|
|
72
107
|
if (this.columnPairs.length > 0) {
|
|
73
108
|
sqls.push(
|
|
74
109
|
`INSERT INTO ${options.quoteTableName(tempTableName)} (${newColumnsSQL}) ` +
|