Skip to content

Commit

Permalink
feat: Implement deferrable foreign keys for SAP HANA (#6104)
Browse files Browse the repository at this point in the history
* Implement deferrable foreign keys for SAP HANA

* Fix code style

Co-authored-by: Lucian Mocanu <lucian.mocanu@nexontis.com>
  • Loading branch information
alumni and Lucian Mocanu committed Feb 19, 2022
1 parent 136015b commit 1f54c70
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/driver/sap/SapQueryRunner.ts
Expand Up @@ -508,6 +508,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "), // "CHECK_TIME" is "INITIALLY_IMMEDIATE" or "INITIALLY DEFERRED"
});
});

Expand Down Expand Up @@ -620,6 +621,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
});
});

Expand Down Expand Up @@ -966,6 +968,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
});
});

Expand Down Expand Up @@ -1110,6 +1113,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
});
});

Expand Down Expand Up @@ -1185,6 +1189,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
});
});

Expand Down Expand Up @@ -1705,6 +1710,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
referencedColumnNames: foreignKeys.map(dbFk => dbFk["REFERENCED_COLUMN_NAME"]),
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
});
});

Expand Down Expand Up @@ -1799,6 +1805,9 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
const onUpdate = fk.onUpdate === "NO ACTION" ? "RESTRICT" : fk.onUpdate;
constraint += ` ON UPDATE ${onUpdate}`;
}
if (fk.deferrable) {
constraint += ` ${fk.deferrable}`;
}

return constraint;
}).join(", ");
Expand Down Expand Up @@ -1960,6 +1969,10 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner {
sql += ` ON UPDATE ${onUpdate}`;
}

if (foreignKey.deferrable) {
sql += ` ${foreignKey.deferrable}`;
}

return new Query(sql);
}

Expand Down

0 comments on commit 1f54c70

Please sign in to comment.