| 519 | } |
| 520 | |
| 521 | static _validateIncludedElements(options, tableNames) { |
| 522 | if (!options.model) options.model = this; |
| 523 | |
| 524 | tableNames = tableNames || {}; |
| 525 | options.includeNames = []; |
| 526 | options.includeMap = {}; |
| 527 | |
| 528 | /* Legacy */ |
| 529 | options.hasSingleAssociation = false; |
| 530 | options.hasMultiAssociation = false; |
| 531 | |
| 532 | if (!options.parent) { |
| 533 | options.topModel = options.model; |
| 534 | options.topLimit = options.limit; |
| 535 | } |
| 536 | |
| 537 | options.include = options.include.map(include => { |
| 538 | include = this._conformInclude(include); |
| 539 | include.parent = options; |
| 540 | include.topLimit = options.topLimit; |
| 541 | |
| 542 | this._validateIncludedElement.call(options.model, include, tableNames, options); |
| 543 | |
| 544 | if (include.duplicating === undefined) { |
| 545 | include.duplicating = include.association.isMultiAssociation; |
| 546 | } |
| 547 | |
| 548 | include.hasDuplicating = include.hasDuplicating || include.duplicating; |
| 549 | include.hasRequired = include.hasRequired || include.required; |
| 550 | |
| 551 | options.hasDuplicating = options.hasDuplicating || include.hasDuplicating; |
| 552 | options.hasRequired = options.hasRequired || include.required; |
| 553 | |
| 554 | options.hasWhere = options.hasWhere || include.hasWhere || !!include.where; |
| 555 | return include; |
| 556 | }); |
| 557 | |
| 558 | for (const include of options.include) { |
| 559 | include.hasParentWhere = options.hasParentWhere || !!options.where; |
| 560 | include.hasParentRequired = options.hasParentRequired || !!options.required; |
| 561 | |
| 562 | if (include.subQuery !== false && options.hasDuplicating && options.topLimit) { |
| 563 | if (include.duplicating) { |
| 564 | include.subQuery = include.subQuery || false; |
| 565 | include.subQueryFilter = include.hasRequired; |
| 566 | } else { |
| 567 | include.subQuery = include.hasRequired; |
| 568 | include.subQueryFilter = false; |
| 569 | } |
| 570 | } else { |
| 571 | include.subQuery = include.subQuery || false; |
| 572 | if (include.duplicating) { |
| 573 | include.subQueryFilter = include.subQuery; |
| 574 | } else { |
| 575 | include.subQueryFilter = false; |
| 576 | include.subQuery = include.subQuery || include.hasParentRequired && include.hasRequired && !include.separate; |
| 577 | } |
| 578 | } |