From c6ec8539fe432b2e2f635bc424b1f8f1c9a4ca50 Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 8 Mar 2024 13:14:46 +0200 Subject: [PATCH 1/4] RE: fix reverse cache and unlogged options for sequences --- .../types/schemaSequenceTypes.js | 10 ++++++++++ .../helpers/postgresHelpers/sequenceHelper.js | 3 +++ reverse_engineering/helpers/queryConstants.js | 17 ++++++++++------- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/forward_engineering/types/schemaSequenceTypes.js b/forward_engineering/types/schemaSequenceTypes.js index 66286e1e..f3c45bcd 100644 --- a/forward_engineering/types/schemaSequenceTypes.js +++ b/forward_engineering/types/schemaSequenceTypes.js @@ -101,6 +101,16 @@ class SequenceDto { */ cycle_option + /** + * @type {number} + */ + cache_size + + /** + * @type {'t' | 'u' | 'p' | null} + */ + rel_persistance + /** * @type {string | null} */ diff --git a/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js b/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js index 3723a42d..915a717b 100644 --- a/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js +++ b/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js @@ -24,6 +24,9 @@ const mapSequenceData = ({ sequence }) => { dataType: sequence.data_type, maxValue: sequence.maximum_value, minValue: sequence.minimum_value, + cache: sequence.cache_size, + temporary: sequence.rel_persistance === 't', + unlogged: sequence.rel_persistance === 'u', cycle: sequence.cycle_option === 'YES', ownedByColumn: getOwnedByColumn({ sequence }), ownedByNone: !sequence.column_name, diff --git a/reverse_engineering/helpers/queryConstants.js b/reverse_engineering/helpers/queryConstants.js index d232380b..cc94ac5b 100644 --- a/reverse_engineering/helpers/queryConstants.js +++ b/reverse_engineering/helpers/queryConstants.js @@ -396,18 +396,21 @@ const queryConstants = { WHERE inher_parent.relnamespace = $1;`, GET_SEQUENCES: ` SELECT DISTINCT ON (sequence_name) - sequence_name, - data_type, - start_value, - minimum_value, - maximum_value, - "increment", - cycle_option, + information_schema."sequences".sequence_name, + information_schema."sequences".data_type, + information_schema."sequences".start_value, + information_schema."sequences".minimum_value, + information_schema."sequences".maximum_value, + information_schema."sequences"."increment", + information_schema."sequences".cycle_option, + pg_catalog.pg_sequences.cache_size, + pg_class.relpersistence as rel_persistance, inner_pg_class.relname AS table_name, pg_attribute.attname AS column_name FROM information_schema."sequences" JOIN pg_class ON pg_class.relname = information_schema."sequences".sequence_name JOIN pg_depend ON pg_depend.objid = pg_class.oid + LEFT JOIN pg_catalog.pg_sequences ON (pg_catalog.pg_sequences.schemaname, pg_catalog.pg_sequences.sequencename) = (information_schema."sequences".sequence_schema, information_schema."sequences".sequence_name) LEFT JOIN pg_class AS inner_pg_class ON pg_depend.refobjid = inner_pg_class.oid LEFT JOIN pg_attribute ON (pg_depend.refobjid, pg_depend.refobjsubid) = (pg_attribute.attrelid, pg_attribute.attnum) WHERE pg_class.relkind = 'S' From a7c77d97d722c8c37526fb26f518c9ad0dfc1fce Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 8 Mar 2024 14:44:39 +0200 Subject: [PATCH 2/4] FE: fix error when alter sequence min value is more than restart value --- .../ddlProvider/ddlHelpers/sequenceHelper.js | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js b/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js index b9b4b297..3122ae92 100644 --- a/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js +++ b/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js @@ -58,7 +58,7 @@ module.exports = ({ sequenceName, sequenceSchemaName ); - const modifiedSequence = _.omitBy(sequence, (value, key) => _.isEqual(value, oldSequence[key])); + const modifiedSequence = getModifiedSequence({ sequence, oldSequence }); const options = getSequenceOptions({ schemaName, sequence: modifiedSequence }); const sequenceType = getAlterSequenceType({ sequence: modifiedSequence }); const newName = modifiedSequence.sequenceName; @@ -105,6 +105,7 @@ module.exports = ({ { getOption, key: 'minValue', clause: 'MINVALUE', }, { getOption, key: 'maxValue', clause: 'MAXVALUE', }, { getOption, key: 'cache', clause: 'CACHE', }, + { getOption, key: 'restart', clause: 'RESTART WITH', }, { getOption: getCycle, key: 'cycle' }, { getOption: getOwnedBy, key: 'ownedByColumn' }, ]; @@ -225,6 +226,23 @@ module.exports = ({ return ''; }; + /** + * @param {{ sequence: Sequence, oldSequence: Sequence }} + * @returns {Sequence} + */ + const getModifiedSequence = ({ sequence, oldSequence }) => { + const modifiedSequence = _.omitBy(sequence, (value, key) => _.isEqual(value, oldSequence[key])); + + if (sequence.minValue > oldSequence.minValue) { + return { + ...modifiedSequence, + restart: sequence.start, + }; + } + + return modifiedSequence; + }; + return { getSequencesScript, createSequenceScript, From 2b353a9a55aef3974356f880763a3e2afb19dad5 Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 8 Mar 2024 15:07:37 +0200 Subject: [PATCH 3/4] RE: fix value type for sequences numeric options --- .../helpers/postgresHelpers/sequenceHelper.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js b/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js index 915a717b..d2a97c66 100644 --- a/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js +++ b/reverse_engineering/helpers/postgresHelpers/sequenceHelper.js @@ -19,12 +19,12 @@ const getOwnedByColumn = ({ sequence }) => { const mapSequenceData = ({ sequence }) => { return { sequenceName: sequence.sequence_name, - increment: sequence.increment, - start: sequence.start_value, + increment: Number(sequence.increment), + start: Number(sequence.start_value), dataType: sequence.data_type, - maxValue: sequence.maximum_value, - minValue: sequence.minimum_value, - cache: sequence.cache_size, + maxValue: Number(sequence.maximum_value), + minValue: Number(sequence.minimum_value), + cache: Number(sequence.cache_size), temporary: sequence.rel_persistance === 't', unlogged: sequence.rel_persistance === 'u', cycle: sequence.cycle_option === 'YES', From 3b129ca51b072a8add4125b6a8e302a57a3e00e7 Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 8 Mar 2024 15:11:36 +0200 Subject: [PATCH 4/4] FE: move up position of restart sequence option --- forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js b/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js index 3122ae92..eb129308 100644 --- a/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js +++ b/forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js @@ -102,10 +102,10 @@ module.exports = ({ { getOption, key: 'dataType', clause: 'AS', }, { getOption, key: 'increment', clause: 'INCREMENT BY', }, { getOption, key: 'start', clause: 'START WITH', }, + { getOption, key: 'restart', clause: 'RESTART WITH', }, { getOption, key: 'minValue', clause: 'MINVALUE', }, { getOption, key: 'maxValue', clause: 'MAXVALUE', }, { getOption, key: 'cache', clause: 'CACHE', }, - { getOption, key: 'restart', clause: 'RESTART WITH', }, { getOption: getCycle, key: 'cycle' }, { getOption: getOwnedBy, key: 'ownedByColumn' }, ];