12345678910111213141516171819202122232425 |
- const ManyToManyModifyMixin = require('./ManyToManyModifyMixin');
- // We need to override this mixin for mysql because mysql doesn't
- // allow referencing the updated/deleted table directly in a subquery.
- // We need to wrap the subquery into yet another subquery (sigh).
- const ManyToManyMySqlModifyMixin = Operation => {
- return class extends ManyToManyModifyMixin(Operation) {
- createModifyFilterSubquery(builder) {
- const modifyFilterSubquery = super.createModifyFilterSubquery(builder);
- return this.wrapIntoYetAnotherSubquery(builder, modifyFilterSubquery);
- }
- wrapIntoYetAnotherSubquery(builder, modifyFilterSubquery) {
- const relatedModelClass = this.relation.relatedModelClass;
- const tableRef = builder.tableRefFor(relatedModelClass);
- return relatedModelClass
- .query()
- .childQueryOf(builder)
- .from(modifyFilterSubquery.as(tableRef));
- }
- };
- };
- module.exports = ManyToManyMySqlModifyMixin;
|