From 614e0d32758c13b59139d349d4682a5bafc3ca88 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Mon, 29 Mar 2021 20:18:44 +0200 Subject: [PATCH] feat(PostgreSQL): unique keys management --- src/common/index-types/postgresql.js | 2 +- src/main/libs/clients/PostgreSQLClient.js | 32 +++++++++-------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/common/index-types/postgresql.js b/src/common/index-types/postgresql.js index bda80696..edc2f2a3 100644 --- a/src/common/index-types/postgresql.js +++ b/src/common/index-types/postgresql.js @@ -1,5 +1,5 @@ module.exports = [ 'PRIMARY', - 'KEY', + 'INDEX', 'UNIQUE' ]; diff --git a/src/main/libs/clients/PostgreSQLClient.js b/src/main/libs/clients/PostgreSQLClient.js index 17fe7cf4..c4aa0298 100644 --- a/src/main/libs/clients/PostgreSQLClient.js +++ b/src/main/libs/clients/PostgreSQLClient.js @@ -301,7 +301,7 @@ export class PostgreSQLClient extends AntaresCore { SELECT pg_index.indexrelid, pg_class.oid FROM pg_index, pg_class WHERE pg_class.relname = '${table}' AND pg_class.oid = pg_index.indrelid), ndx_cols AS ( - SELECT pg_class.relname, UNNEST(i.indkey) AS col_ndx, CASE i.indisprimary WHEN TRUE THEN 'PRIMARY' ELSE CASE i.indisunique WHEN TRUE THEN 'UNIQUE' ELSE 'KEY' END END AS CONSTRAINT_TYPE, pg_class.oid + SELECT pg_class.relname, UNNEST(i.indkey) AS col_ndx, CASE i.indisprimary WHEN TRUE THEN 'PRIMARY' ELSE CASE i.indisunique WHEN TRUE THEN 'UNIQUE' ELSE 'INDEX' END END AS CONSTRAINT_TYPE, pg_class.oid FROM pg_class JOIN pg_index i ON (pg_class.oid = i.indexrelid) JOIN ndx_list ON (pg_class.oid = ndx_list.indexrelid) @@ -1052,17 +1052,13 @@ export class PostgreSQLClient extends AntaresCore { // ADD INDEX indexChanges.additions.forEach(addition => { - const fields = addition.fields.map(field => `\`${field}\``).join(','); - let type = addition.type; + const fields = addition.fields.map(field => `${field}`).join(','); + const type = addition.type; if (type === 'PRIMARY') alterColumns.push(`ADD PRIMARY KEY (${fields})`); - else { - if (type === 'UNIQUE') - type = 'UNIQUE INDEX'; - - alterColumns.push(`ADD ${type} \`${addition.name}\` (${fields})`); - } + else if (type === 'UNIQUE') + alterColumns.push(`ADD CONSTRAINT ${addition.name} UNIQUE (${fields})`); }); // ADD FOREIGN KEYS @@ -1108,19 +1104,15 @@ export class PostgreSQLClient extends AntaresCore { if (change.oldType === 'PRIMARY') alterColumns.push('DROP PRIMARY KEY'); else - alterColumns.push(`DROP INDEX \`${change.oldName}\``); + alterColumns.push(`DROP CONSTRAINT ${change.oldName}`); - const fields = change.fields.map(field => `\`${field}\``).join(','); - let type = change.type; + const fields = change.fields.map(field => `${field}`).join(','); + const type = change.type; if (type === 'PRIMARY') alterColumns.push(`ADD PRIMARY KEY (${fields})`); - else { - if (type === 'UNIQUE') - type = 'UNIQUE INDEX'; - - alterColumns.push(`ADD ${type} \`${change.name}\` (${fields})`); - } + else if (type === 'UNIQUE') + alterColumns.push(`ADD CONSTRAINT ${change.name} UNIQUE (${fields})`); }); // CHANGE FOREIGN KEYS @@ -1139,12 +1131,12 @@ export class PostgreSQLClient extends AntaresCore { if (deletion.type === 'PRIMARY') alterColumns.push('DROP PRIMARY KEY'); else - alterColumns.push(`DROP INDEX \`${deletion.name}\``); + alterColumns.push(`DROP CONSTRAINT ${deletion.name}`); }); // DROP FOREIGN KEYS foreignChanges.deletions.forEach(deletion => { - alterColumns.push(`DROP FOREIGN KEY \`${deletion.constraintName}\``); + alterColumns.push(`DROP FOREIGN KEY ${deletion.constraintName}`); }); if (alterColumns.length) sql += `ALTER TABLE "${table}" ${alterColumns.join(', ')}; `;