fix: find table sequence (#1101)
This commit is contained in:
parent
ba94dfaf6c
commit
395c441b21
@ -387,6 +387,13 @@ pgOnly()('collection inherits', () => {
|
||||
});
|
||||
|
||||
expect(a2.get('id')).toEqual(2);
|
||||
|
||||
db.collection({
|
||||
name: 'd',
|
||||
inherits: ['c'],
|
||||
});
|
||||
|
||||
await db.sync();
|
||||
});
|
||||
|
||||
it('should update inherit field when parent field update', async () => {
|
||||
|
@ -34,12 +34,22 @@ export class SyncRunner {
|
||||
if (childAttributes.id && childAttributes.id.autoIncrement) {
|
||||
for (const parent of parentTables) {
|
||||
const sequenceNameResult = await queryInterface.sequelize.query(
|
||||
`select pg_get_serial_sequence('"${parent}"', 'id')`,
|
||||
`SELECT column_default FROM information_schema.columns WHERE
|
||||
table_name='${parent}' and "column_name" = 'id';`,
|
||||
{
|
||||
transaction,
|
||||
},
|
||||
);
|
||||
const sequenceName = sequenceNameResult[0][0]['pg_get_serial_sequence'];
|
||||
const columnDefault = sequenceNameResult[0][0]['column_default'];
|
||||
|
||||
if (!columnDefault) {
|
||||
throw new Error(`Can't find sequence name of ${parent}`);
|
||||
}
|
||||
|
||||
const regex = new RegExp(/nextval\('(\w+)\'.*\)/);
|
||||
const match = regex.exec(columnDefault);
|
||||
|
||||
const sequenceName = match[1];
|
||||
|
||||
const sequenceCurrentValResult = await queryInterface.sequelize.query(
|
||||
`select last_value from ${sequenceName}`,
|
||||
@ -47,7 +57,7 @@ export class SyncRunner {
|
||||
transaction,
|
||||
},
|
||||
);
|
||||
const sequenceCurrentVal = sequenceCurrentValResult[0][0]['last_value'];
|
||||
const sequenceCurrentVal = parseInt(sequenceCurrentValResult[0][0]['last_value']);
|
||||
|
||||
if (sequenceCurrentVal > maxSequenceVal) {
|
||||
maxSequenceName = sequenceName;
|
||||
@ -58,19 +68,21 @@ export class SyncRunner {
|
||||
|
||||
await this.createTable(tableName, childAttributes, options, model, parentTables);
|
||||
|
||||
const parentsDeep = Array.from(db.inheritanceMap.getParents(inheritedCollection.name)).map(
|
||||
(parent) => db.getCollection(parent).model.tableName,
|
||||
);
|
||||
|
||||
const sequenceTables = [...parentsDeep, tableName];
|
||||
|
||||
for (const sequenceTable of sequenceTables) {
|
||||
await queryInterface.sequelize.query(
|
||||
`alter table "${sequenceTable}" alter column id set default nextval('${maxSequenceName}')`,
|
||||
{
|
||||
transaction,
|
||||
},
|
||||
if (maxSequenceName) {
|
||||
const parentsDeep = Array.from(db.inheritanceMap.getParents(inheritedCollection.name)).map(
|
||||
(parent) => db.getCollection(parent).model.tableName,
|
||||
);
|
||||
|
||||
const sequenceTables = [...parentsDeep, tableName];
|
||||
|
||||
for (const sequenceTable of sequenceTables) {
|
||||
await queryInterface.sequelize.query(
|
||||
`alter table "${sequenceTable}" alter column id set default nextval('${maxSequenceName}')`,
|
||||
{
|
||||
transaction,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (options.alter) {
|
||||
|
Loading…
Reference in New Issue
Block a user