finally drop temp table

This commit is contained in:
Pierre Noël 2022-11-15 18:57:13 +01:00
parent e2234ed9f1
commit 306d5c4abc

View File

@ -295,75 +295,86 @@ const cleanOrderColumnsForOldDatabases = async ({
if (hasOrderColumn(attribute) && id) { if (hasOrderColumn(attribute) && id) {
const tempOrderTableName = `tempOrderTableName_${now}`; const tempOrderTableName = `tempOrderTableName_${now}`;
await db.connection try {
.raw( await db.connection
` .raw(
CREATE TEMPORARY TABLE :tempOrderTableName: `
SELECT CREATE TEMPORARY TABLE :tempOrderTableName:
SELECT
id,
(
SELECT count(*)
FROM :joinTableName: b
WHERE a.:orderColumnName: >= b.:orderColumnName: AND a.:joinColumnName: = b.:joinColumnName: AND a.:joinColumnName: = :id
) AS src_order
FROM :joinTableName: a`,
{
tempOrderTableName,
joinTableName: joinTable.name,
orderColumnName,
joinColumnName: joinColumn.name,
id, id,
( }
SELECT count(*) )
FROM :joinTableName: b .transacting(trx);
WHERE a.:orderColumnName: >= b.:orderColumnName: AND a.:joinColumnName: = b.:joinColumnName: AND a.:joinColumnName: = :id await db.connection
) AS src_order .raw(
FROM :joinTableName: a`, `UPDATE ?? as a, (SELECT * FROM ??) AS b
{
tempOrderTableName,
joinTableName: joinTable.name,
orderColumnName,
joinColumnName: joinColumn.name,
id,
}
)
.transacting(trx);
await db.connection
.raw(
`UPDATE ?? as a, (SELECT * FROM ??) AS b
SET ?? = b.src_order SET ?? = b.src_order
WHERE a.id = b.id`, WHERE a.id = b.id`,
[joinTable.name, tempOrderTableName, orderColumnName] [joinTable.name, tempOrderTableName, orderColumnName]
) )
.transacting(trx); .transacting(trx);
await db.connection.raw(`DROP TEMPORARY TABLE ${tempOrderTableName}`).transacting(trx); } finally {
await db.connection
.raw(`DROP TEMPORARY TABLE IF EXISTS ${tempOrderTableName}`)
.transacting(trx);
}
} }
if (hasInverseOrderColumn(attribute) && !isEmpty(inverseRelIds)) { if (hasInverseOrderColumn(attribute) && !isEmpty(inverseRelIds)) {
const tempInvOrderTableName = `tempInvOrderTableName_${now}`; const tempInvOrderTableName = `tempInvOrderTableName_${now}`;
await db.connection try {
.raw( await db.connection
` .raw(
CREATE TEMPORARY TABLE ?? `
SELECT CREATE TEMPORARY TABLE ??
id, SELECT
( id,
SELECT count(*) (
FROM ?? b SELECT count(*)
WHERE a.?? >= b.?? AND a.?? = b.?? AND a.?? IN (${inverseRelIds FROM ?? b
.map(() => '?') WHERE a.?? >= b.?? AND a.?? = b.?? AND a.?? IN (${inverseRelIds
.join(', ')}) .map(() => '?')
) AS inv_order .join(', ')})
FROM ?? a`, ) AS inv_order
[ FROM ?? a`,
tempInvOrderTableName, [
joinTable.name, tempInvOrderTableName,
inverseOrderColumnName, joinTable.name,
inverseOrderColumnName, inverseOrderColumnName,
inverseJoinColumn.name, inverseOrderColumnName,
inverseJoinColumn.name, inverseJoinColumn.name,
inverseJoinColumn.name, inverseJoinColumn.name,
...inverseRelIds, inverseJoinColumn.name,
joinTable.name, ...inverseRelIds,
] joinTable.name,
) ]
.transacting(trx); )
await db.connection .transacting(trx);
.raw( await db.connection
`UPDATE ?? as a, (SELECT * FROM ??) AS b .raw(
SET ?? = b.inv_order `UPDATE ?? as a, (SELECT * FROM ??) AS b
WHERE a.id = b.id`, SET ?? = b.inv_order
[joinTable.name, tempInvOrderTableName, inverseOrderColumnName] WHERE a.id = b.id`,
) [joinTable.name, tempInvOrderTableName, inverseOrderColumnName]
.transacting(trx); )
await db.connection.raw(`DROP TEMPORARY TABLE ${tempInvOrderTableName}`).transacting(trx); .transacting(trx);
} finally {
await db.connection
.raw(`DROP TEMPORARY TABLE IF EXISTS ${tempInvOrderTableName}`)
.transacting(trx);
}
} }
}; };