| 496 | } |
| 497 | |
| 498 | static _validateIncludedElements(options, tableNames) { |
| 499 | if (!options.model) options.model = this; |
| 500 | |
| 501 | tableNames = tableNames || {}; |
| 502 | options.includeNames = []; |
| 503 | options.includeMap = {}; |
| 504 | |
| 505 | /* Legacy */ |
| 506 | options.hasSingleAssociation = false; |
| 507 | options.hasMultiAssociation = false; |
| 508 | |
| 509 | if (!options.parent) { |
| 510 | options.topModel = options.model; |
| 511 | options.topLimit = options.limit; |
| 512 | } |
| 513 | |
| 514 | options.include = options.include.map(include => { |
| 515 | include = this._conformInclude(include); |
| 516 | include.parent = options; |
| 517 | include.topLimit = options.topLimit; |
| 518 | |
| 519 | this._validateIncludedElement.call(options.model, include, tableNames, options); |
| 520 | |
| 521 | if (include.duplicating === undefined) { |
| 522 | include.duplicating = include.association.isMultiAssociation; |
| 523 | } |
| 524 | |
| 525 | include.hasDuplicating = include.hasDuplicating || include.duplicating; |
| 526 | include.hasRequired = include.hasRequired || include.required; |
| 527 | |
| 528 | options.hasDuplicating = options.hasDuplicating || include.hasDuplicating; |
| 529 | options.hasRequired = options.hasRequired || include.required; |
| 530 | |
| 531 | options.hasWhere = options.hasWhere || include.hasWhere || !!include.where; |
| 532 | return include; |
| 533 | }); |
| 534 | |
| 535 | for (const include of options.include) { |
| 536 | include.hasParentWhere = options.hasParentWhere || !!options.where; |
| 537 | include.hasParentRequired = options.hasParentRequired || !!options.required; |
| 538 | |
| 539 | if (include.subQuery !== false && options.hasDuplicating && options.topLimit) { |
| 540 | if (include.duplicating) { |
| 541 | include.subQuery = include.subQuery || false; |
| 542 | include.subQueryFilter = include.hasRequired; |
| 543 | } else { |
| 544 | include.subQuery = include.hasRequired; |
| 545 | include.subQueryFilter = false; |
| 546 | } |
| 547 | } else { |
| 548 | include.subQuery = include.subQuery || false; |
| 549 | if (include.duplicating) { |
| 550 | include.subQueryFilter = include.subQuery; |
| 551 | } else { |
| 552 | include.subQueryFilter = false; |
| 553 | include.subQuery = include.subQuery || include.hasParentRequired && include.hasRequired && !include.separate; |
| 554 | } |
| 555 | } |