Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion forward_engineering/ddlProvider/ddlHelpers/sequenceHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -102,6 +102,7 @@ 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', },
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 10 additions & 0 deletions forward_engineering/types/schemaSequenceTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,16 @@ class SequenceDto {
*/
cycle_option

/**
* @type {number}
*/
cache_size

/**
* @type {'t' | 'u' | 'p' | null}
*/
rel_persistance

/**
* @type {string | null}
*/
Expand Down
11 changes: 7 additions & 4 deletions reverse_engineering/helpers/postgresHelpers/sequenceHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@ 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,
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',
ownedByColumn: getOwnedByColumn({ sequence }),
ownedByNone: !sequence.column_name,
Expand Down
17 changes: 10 additions & 7 deletions reverse_engineering/helpers/queryConstants.js
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down