ManyToManyMySqlModifyMixin.js 964 B

12345678910111213141516171819202122232425
  1. const ManyToManyModifyMixin = require('./ManyToManyModifyMixin');
  2. // We need to override this mixin for mysql because mysql doesn't
  3. // allow referencing the updated/deleted table directly in a subquery.
  4. // We need to wrap the subquery into yet another subquery (sigh).
  5. const ManyToManyMySqlModifyMixin = Operation => {
  6. return class extends ManyToManyModifyMixin(Operation) {
  7. createModifyFilterSubquery(builder) {
  8. const modifyFilterSubquery = super.createModifyFilterSubquery(builder);
  9. return this.wrapIntoYetAnotherSubquery(builder, modifyFilterSubquery);
  10. }
  11. wrapIntoYetAnotherSubquery(builder, modifyFilterSubquery) {
  12. const relatedModelClass = this.relation.relatedModelClass;
  13. const tableRef = builder.tableRefFor(relatedModelClass);
  14. return relatedModelClass
  15. .query()
  16. .childQueryOf(builder)
  17. .from(modifyFilterSubquery.as(tableRef));
  18. }
  19. };
  20. };
  21. module.exports = ManyToManyMySqlModifyMixin;