classRelationChoice
final class RelationChoice
Public API: explicitly declared with
@visibility public.Selects a set of relations for each row using one discriminator column.
$choice = \SqlFixture\Plan\RelationChoice::on('comments.kind');
$choice = $choice->when('post', \SqlFixture\Plan\Relation::manyToOne('comments.target_id', 'posts.id'));
$choice = $choice->when('none');
count($choice->cases) // => 2Properties§
public ColumnRef $discriminatorpublic list<ChoiceCase> $cases = []public ?ChoiceCase $fallback = nullMethods§
public function __construct(
public ColumnRef $discriminator,
public list<ChoiceCase> $cases = [],
public ?ChoiceCase $fallback = null,
)Parameters
$discriminator | ColumnRef | |
$cases | list<ChoiceCase> | |
$fallback | ?ChoiceCase |
Calls 2
- method-call ColumnRef::isComposite() line 30
- new ChoiceDefinitionException line 31
public static function on(string|ColumnRef $discriminator): selfStarts an immutable choice for a table column.
Parameters
$discriminator | string|ColumnRef |
Returns
selfTest cases 37
CaseSelectionTest::testCheckArrivalRejectsAConflictingExplicitCasecallsCaseSelectionTest::testSelectDoesNotConstrainAnUnrelatedIncomingRelationcallsCaseSelectionTest::testSelectInfersTheCaseFromAnInverseRelationcallsCaseSelectionTest::testSelectRejectsAnInverseFallbackWithoutAValuecallsCaseSelectionTest::testSelectRejectsUnknownValuescallsCaseSelectionTest::testSelectUsesFallbackOnlyForSuppliedValuescallsCaseSelectionTest::testSelectUsesStrictValuescallsChoiceBindingsTest::testChildColumnsDeduplicatesOverlappingCompositeKeysAsAListcallsChoiceBindingsTest::testChildColumnsExcludesKeysOnOtherTablescallsChoiceBindingsTest::testFixClearsOnlyInactiveKeyscallsChoiceBindingsTest::testFixNullsAnAbsentOptionalParentcallsChoiceBindingsTest::testFixProcessesOptionalParentsAfterRequiredRelationscallsChoiceBindingsTest::testFixRejectsExplicitInactiveReferencescallsInverseRelationsTest::testKeyLeavesUnconditionalRelationsIndependentcallsInverseRelationsTest::testUniqueVisitsEquivalentInverseCasesOncecallsRowChoicesTest::testResolveInfersInverseValuesAndKeepsOtherChoicescallsRowChoicesTest::testResolveKeepsExplicitNullAndClearsInactiveKeyscallsRowChoicesTest::testResolvePreservesAnUnconditionalArrivalcallsRowChoicesTest::testResolveReplacesAnEquivalentInverseCandidateWithTheSelectedEdgecallsRowChoicesTest::testResolveSelectsPerRowWithoutChangingTheSourcePlancallsRowChoicesTest::testResolveSkipsEarlierChoicesForOtherTablescallsChoiceSyntaxTest::testPrintPreservesCompositeRelationsAndEscapedLiteralscallsChoiceValidationTest::testValidateAllowsExclusiveBindingscallsChoiceValidationTest::testValidateChoiceAllowsMultipleRelationsWithinACasecallsChoiceValidationTest::testValidateRelationAcceptsIndependentBindingscallsPlanContentsTest::testKeepsTheSubjectAndCollectsEveryCandidateTablecallsFixturePlanTest::testSelectKeepsTheSubjectWhenABranchHasNoRelationscallsFixturePlanTest::testSelectRetainsPartsBeforeAndAfterTheChoicecallsFixturePlanTest::testWithChoiceKeepsEveryPotentialTableInOrdercallsFixturePlanTest::testWithChoiceKeepsExistingSubjectsAndOrdinaryRelationscallsRelationChoiceTest::testBranchesIncludesTheFallbackLastcallsRelationChoiceTest::testOnAcceptsAReferenceOrStringcallsRelationChoiceTest::testOtherwiseKeepsExplicitCasesAndTheirOrdercallsRelationChoiceTest::testRelationsFlattensCasesIncludingTheFallbackcallsRelationChoiceTest::testRelationsRetainsMultipleRequirementsWithinOneBranchcallsRelationChoiceTest::testWhenAndOtherwiseNormalizeNamedVariadicRelationscallsRelationChoiceTest::testWhenPreservesTypesAndDoesNotChangeTheOriginalcalls
Called from 1
Calls 2
- new
selfline 40 - static-call ColumnRef::from() line 40
public function when(string|int|bool|null $value, Relation ...$relations): selfAdds a case; an empty relation list explicitly means no relationship.
Parameters
$value | string|int|bool|null | |
$relations | Relation |
Returns
selfCalls 4
- new ChoiceDefinitionException line 51
- new
selfline 55 - new ChoiceCase line 55
- function-call
array_valuesline 55
public function otherwise(Relation ...$relations): selfHandles explicitly supplied values not named by a case.
Parameters
$relations | Relation |
Returns
selfCalls 4
- new ChoiceDefinitionException line 65
- new
selfline 68 - new ChoiceCase line 68
- function-call
array_valuesline 68
public function branches(): list<ChoiceCase>Includes the fallback when inspecting every possible branch.
Returns
list<ChoiceCase>Called from 3
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::print() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:91
- method-call SqlFixture\Plan\Choice\ChoiceValidation::validateChoice() packages/sql-fixture/src/Plan/Choice/ChoiceValidation.php:51
- method-call SqlFixture\Plan\RelationChoice::relations() packages/sql-fixture/src/Plan/RelationChoice.php:87
public function relations(): list<Relation>Lists every potential relation without selecting a branch.
Returns
list<Relation>Called from 3
- method-call SqlFixture\Fixture\Choice\CaseSelection::select() packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:38
- method-call SqlFixture\Fixture\Choice\CaseSelection::checkArrival() packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:53
- method-call SqlFixture\Fixture\Choice\ChoiceBindings::fix() packages/sql-fixture/src/Fixture/Choice/ChoiceBindings.php:26
Calls 1
- method-call RelationChoice::branches() line 87
Test cases 47§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 7
RelationChoiceTest::testBranchesIncludesTheFallbackLastcallsRelationChoiceTest::testOnAcceptsAReferenceOrStringcallsRelationChoiceTest::testOtherwiseKeepsExplicitCasesAndTheirOrdercallsRelationChoiceTest::testRelationsFlattensCasesIncludingTheFallbackcallsRelationChoiceTest::testRelationsRetainsMultipleRequirementsWithinOneBranchcallsRelationChoiceTest::testWhenAndOtherwiseNormalizeNamedVariadicRelationscallsRelationChoiceTest::testWhenPreservesTypesAndDoesNotChangeTheOriginalcalls
Other tests reaching this symbol 40
CaseSelectionTest::testCheckArrivalRejectsAConflictingExplicitCasecallsCaseSelectionTest::testSelectDoesNotConstrainAnUnrelatedIncomingRelationcallsCaseSelectionTest::testSelectInfersTheCaseFromAnInverseRelationcallsCaseSelectionTest::testSelectRejectsAnInverseFallbackWithoutAValuecallsCaseSelectionTest::testSelectRejectsUnknownValuescallsCaseSelectionTest::testSelectUsesFallbackOnlyForSuppliedValuescallsCaseSelectionTest::testSelectUsesStrictValuescallsChoiceBindingsTest::testChildColumnsDeduplicatesOverlappingCompositeKeysAsAListcallsChoiceBindingsTest::testChildColumnsExcludesKeysOnOtherTablescallsChoiceBindingsTest::testFixClearsOnlyInactiveKeyscallsChoiceBindingsTest::testFixNullsAnAbsentOptionalParentcallsChoiceBindingsTest::testFixProcessesOptionalParentsAfterRequiredRelationscallsChoiceBindingsTest::testFixRejectsExplicitInactiveReferencescallsChoiceValueExceptionTestcallsInverseRelationsTest::testKeyLeavesUnconditionalRelationsIndependentcallsInverseRelationsTest::testUniqueVisitsEquivalentInverseCasesOncecallsResolvedRowTestcallsRowChoicesTest::testResolveInfersInverseValuesAndKeepsOtherChoicescallsRowChoicesTest::testResolveKeepsExplicitNullAndClearsInactiveKeyscallsRowChoicesTest::testResolvePreservesAnUnconditionalArrivalcallsRowChoicesTest::testResolveReplacesAnEquivalentInverseCandidateWithTheSelectedEdgecallsRowChoicesTest::testResolveSelectsPerRowWithoutChangingTheSourcePlancallsRowChoicesTest::testResolveSkipsEarlierChoicesForOtherTablescallsRecursiveRelationExceptionTestcallsRelationValueExceptionTestcallsRowBindingsTestcallsPlanGeneratorTestcallsChoiceCaseTestcallsChoiceDefinitionExceptionTestcallsChoiceLiteralTestcallsChoiceSyntaxTest::testPrintPreservesCompositeRelationsAndEscapedLiteralscallsChoiceValidationTest::testValidateAllowsExclusiveBindingscallsChoiceValidationTest::testValidateChoiceAllowsMultipleRelationsWithinACasecallsChoiceValidationTest::testValidateRelationAcceptsIndependentBindingscallsPlanContentsTest::testKeepsTheSubjectAndCollectsEveryCandidateTablecallsFixturePlanTest::testSelectKeepsTheSubjectWhenABranchHasNoRelationscallsFixturePlanTest::testSelectRetainsPartsBeforeAndAfterTheChoicecallsFixturePlanTest::testWithChoiceKeepsEveryPotentialTableInOrdercallsFixturePlanTest::testWithChoiceKeepsExistingSubjectsAndOrdinaryRelationscallsFixtureProviderTestcalls
Relations§
Static calls 1
Method calls 5
- method-call SqlFixture\Fixture\Choice\CaseSelection::select() packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:38
- method-call SqlFixture\Fixture\Choice\CaseSelection::checkArrival() packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:53
- method-call SqlFixture\Fixture\Choice\ChoiceBindings::fix() packages/sql-fixture/src/Fixture/Choice/ChoiceBindings.php:26
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::print() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:91
- method-call SqlFixture\Plan\Choice\ChoiceValidation::validateChoice() packages/sql-fixture/src/Plan/Choice/ChoiceValidation.php:51
Type checks 2
Type declarations 12
- type SqlFixture\Fixture\Choice\CaseSelection packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:23
- type SqlFixture\Fixture\Choice\CaseSelection packages/sql-fixture/src/Fixture/Choice/CaseSelection.php:51
- type SqlFixture\Fixture\Choice\ChoiceBindings packages/sql-fixture/src/Fixture/Choice/ChoiceBindings.php:24
- type SqlFixture\Fixture\Choice\ChoiceBindings packages/sql-fixture/src/Fixture/Choice/ChoiceBindings.php:52
- type SqlFixture\Plan\Choice\ChoiceSyntax packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:25
- type SqlFixture\Plan\Choice\ChoiceSyntax packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:88
- type SqlFixture\Plan\Choice\ChoiceValidation packages/sql-fixture/src/Plan/Choice/ChoiceValidation.php:39
- type SqlFixture\Plan\Choice\ChoiceValidation packages/sql-fixture/src/Plan/Choice/ChoiceValidation.php:63
- type SqlFixture\Plan\FixturePlan packages/sql-fixture/src/Plan/FixturePlan.php:80
- type SqlFixture\Plan\FixturePlan packages/sql-fixture/src/Plan/FixturePlan.php:133
- type SqlFixture\Plan\FixturePlan packages/sql-fixture/src/Plan/FixturePlan.php:150
- type SqlFixture\Plan\PlanPrinter::print() packages/sql-fixture/src/Plan/PlanPrinter.php:22