JoinEagerOperation.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const EagerOperation = require('./EagerOperation');
  2. const RelationJoinBuilder = require('./RelationJoinBuilder');
  3. class JoinEagerOperation extends EagerOperation {
  4. constructor(name, opt) {
  5. super(name, opt);
  6. this.joinBuilder = null;
  7. }
  8. onAdd(builder, args) {
  9. const ret = super.onAdd(builder, args);
  10. const modelClass = builder.modelClass();
  11. if (ret) {
  12. this.joinBuilder = new RelationJoinBuilder({
  13. modelClass: modelClass,
  14. expression: this.expression,
  15. filters: this.filters
  16. });
  17. }
  18. return ret;
  19. }
  20. onBefore2(builder) {
  21. // Only now set the options since they may have changed up until now.
  22. this.joinBuilder.setOptions(builder.eagerOptions());
  23. return this.joinBuilder.fetchColumnInfo(builder);
  24. }
  25. onBuild(builder) {
  26. builder.findOptions({
  27. callAfterGetDeeply: true
  28. });
  29. this.joinBuilder.build(builder);
  30. }
  31. onRawResult(builder, rows) {
  32. return this.joinBuilder.rowsToTree(rows);
  33. }
  34. }
  35. module.exports = JoinEagerOperation;