Skip to content

Commit

Permalink
Fixed an error when creating a structure file for
Browse files Browse the repository at this point in the history
Fixed an error when creating structure.sql file for a database, when it is necessary to create a relation for tables that refer to each other.
  • Loading branch information
turone committed May 23, 2024
1 parent f1bc397 commit 71a0284
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
5 changes: 4 additions & 1 deletion lib/dbms.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,23 @@ const getPreviousVersion = async (modelPath) => {
const create = async (modelPath, outputPath = modelPath) => {
console.log('Generating SQL DDL script ' + shorten(outputPath));
const model = await loadModel(modelPath);
const modelRemain = {};
model.order.forEach((value) => (modelRemain[value] = null));
const script = [];
const ins = [];
const upd = [];
const { createEntity, registerEntity } = dbms[model.database.driver];
for (const name of model.order) {
const entity = model.entities.get(name);
if (metaschema.KIND_STORED.includes(entity.kind)) {
script.push(createEntity(model, name), '');
script.push(createEntity(model, name, modelRemain), '');
if (model.entities.get('Identifier')) {
const { inserts, updates } = registerEntity(model, name);
ins.push(inserts);
upd.push(updates);
}
}
delete modelRemain[name];
}
if (ins.length) script.push(...ins, '', ...upd, '');
const dbPath = path.join(outputPath, 'database.sql');
Expand Down
8 changes: 6 additions & 2 deletions lib/pg.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ const flatFields = (fields) => {
return flat;
};

const createEntity = (model, name) => {
const createEntity = (model, name, modelRemain = {}) => {
const entity = model.entities.get(name);
const sql = [];
const idx = [];
Expand Down Expand Up @@ -183,7 +183,10 @@ const createEntity = (model, name) => {
const ref = model.entities.get(def.type);
if (!ref) throw new Error(`Unknown schema: ${def.type}`);
const refId = ref.kind === 'registry';
idx.push(foreignKey(name, field, def, refId));
const fKey = foreignKey(name, field, def, refId);
if (def.type in modelRemain && def.type !== name) {
modelRemain[def.type] = fKey;
} else idx.push(fKey);
}
}
}
Expand All @@ -201,6 +204,7 @@ const createEntity = (model, name) => {
}
sql[sql.length - 1] = sql[sql.length - 1].slice(0, -1);
sql.push(');');
if (modelRemain[name]) idx.push(modelRemain[name]);
return sql.join('\n') + '\n\n' + idx.join('\n');
};

Expand Down

0 comments on commit 71a0284

Please sign in to comment.