classTableDefinition
final class TableDefinition
Structured representation of a table's schema metadata.
Values remain opaque to the neutral core until a platform interprets them. This also preserves driver values such as LOB streams and caller literals.
Type Aliases§
RowValue = mixedRow = array<string, RowValue>Properties§
public array<string, ColumnDeclaration> $typedColumnspublic array<string, string> $columnDefaultspublic array<string, IdentityGenerationStrategy> $identityStrategiespublic array<string, string> $generatedExpressionspublic array<string, ForeignKeyDefinition> $foreignKeyspublic TablePartitioning|null $partitioningpublic TablePartitionKey|null $partitionKeypublic TablePartitionRelation|null $partitionRelationpublic array<string, PartialUniqueIndex> $partialUniqueIndexespublic list<string> $columnspublic array<string, string> $columnTypespublic list<string> $primaryKeyspublic list<string> $notNullColumnspublic array<string, list<string>> $uniqueConstraintsMethods§
public function __construct(
public list<string> $columns,
public array<string, string> $columnTypes,
public list<string> $primaryKeys,
public list<string> $notNullColumns,
public array<string, list<string>> $uniqueConstraints,
array<string, ColumnDeclaration> $typedColumns = [],
array<string, string> $columnDefaults = [],
array<string, IdentityGenerationStrategy> $identityStrategies = [],
array<string, string> $generatedExpressions = [],
array<string, ForeignKeyDefinition> $foreignKeys = [],
TablePartitioning|null $partitioning = null,
TablePartitionKey|null $partitionKey = null,
TablePartitionRelation|null $partitionRelation = null,
array<string, PartialUniqueIndex> $partialUniqueIndexes = [],
)Parameters
$columns | list<string> | Column names in declaration order. |
$columnTypes | array<string, string> | Column name => MySQL type string. |
$primaryKeys | list<string> | Primary key column names. |
$notNullColumns | list<string> | Columns with NOT NULL constraint. |
$uniqueConstraints | array<string, list<string>> | Key name => column list. |
$typedColumns | array<string, ColumnDeclaration> | Column name => structured ColumnDeclaration. |
$columnDefaults | array<string, string> | Column name => SQL default expression. |
$identityStrategies | array<string, IdentityGenerationStrategy> | Column name => shadow generation strategy. |
$generatedExpressions | array<string, string> | Column name => database generated expression. |
$foreignKeys | array<string, ForeignKeyDefinition> | Constraint name => foreign-key definition. |
$partitioning | TablePartitioning|null | Named partition selection predicates. |
$partitionKey | TablePartitionKey|null | Declarative partition key metadata. |
$partitionRelation | TablePartitionRelation|null | Parent partition relationship. |
$partialUniqueIndexes | array<string, PartialUniqueIndex> | Partial unique indexes keyed by name. |
Test cases 7
TableDefinitionTest::testCandidateKeysWithPartitionKeyCandidateKeysPartitionMetadataCopiesPreserveOtherSchemaStatecoversTableDefinitionTest::testKeepsEverythingATableDeclaresAboutItselfcoversTableDefinitionTest::testTypedColumnsDefaultsToEmptycoversTableDefinitionTest::testWithPartialUniqueIndexPreservesSchemaAndIndexesByNamecoversTableDefinitionTest::testWithPartitioningPreservesSchemaAndReturnsNewDefinitioncoversTableDefinitionTest::testWithPartitionKeyAnswersATableDividedByThatKeycoversTableDefinitionTest::testWithPartitionRelationAnswersATableThatIsPartOfAnothercovers
public function candidateKeys(): CandidateKeySetCandidate keys.
Returns
Test cases 4
TableDefinitionTest::testCandidateKeysWithPartitionKeyCandidateKeysPartitionMetadataCopiesPreserveOtherSchemaStatecovers and callsInsertMutationTest::testInsertIgnoreSkipsUniqueKeyConflictcallsReplaceMutationTest::testApplyRemovesEveryRowConflictingWithAnyCandidateKeycallsUpsertMutationTest::testApplyUpdatesExistingRowOnUniqueKeyConflictcalls
Calls 1
- static-call CandidateKeySet::fromSchema() line 121
public function withPartitioning(?TablePartitioning $partitioning): selfWith partitioning.
Parameters
$partitioning | ?TablePartitioning |
Returns
selfTest cases 1
Calls 1
- new
selfline 132
public function withPartitionKey(?TablePartitionKey $partitionKey): selfWith partition key.
Parameters
$partitionKey | ?TablePartitionKey |
Returns
selfTest cases 2
Calls 1
- new
selfline 158
public function withPartitionRelation(?TablePartitionRelation $partitionRelation): selfWith partition relation.
Parameters
$partitionRelation | ?TablePartitionRelation |
Returns
selfTest cases 2
Calls 1
- new
selfline 184
public function withPartialUniqueIndex(PartialUniqueIndex $index): selfWith partial unique index.
Parameters
$index | PartialUniqueIndex |
Returns
selfTest cases 1
Calls 1
- new
selfline 213
Test cases 115§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 7
TableDefinitionTest::testCandidateKeysWithPartitionKeyCandidateKeysPartitionMetadataCopiesPreserveOtherSchemaStatecovers and callsTableDefinitionTest::testKeepsEverythingATableDeclaresAboutItselfcovers and callsTableDefinitionTest::testTypedColumnsDefaultsToEmptycovers and callsTableDefinitionTest::testWithPartialUniqueIndexPreservesSchemaAndIndexesByNamecovers and callsTableDefinitionTest::testWithPartitioningPreservesSchemaAndReturnsNewDefinitioncovers and callsTableDefinitionTest::testWithPartitionKeyAnswersATableDividedByThatKeycovers and callsTableDefinitionTest::testWithPartitionRelationAnswersATableThatIsPartOfAnothercovers and calls
Other tests reaching this symbol 108
CascadingShop::registrycallsFakeCopySupportcallsFakeSchemaParser::parsecallsFakeSqlRewriter::rewriteDdlcallsCopySupportTest::testInsertSqlSaysWhenAColumnTheDatabaseNumbersIsBeingWrittenAnywaycallsCopySupportTest::testInsertSqlWritesOneGroupOfValuesPerRowcallsCopySupportTest::testSelectSqlReadsTheColumnsTheStatementIsAboutcallsCopySupportTest::testTargetTakesEveryColumnOfTheTableWhereTheStatementNamedNonecallsCopySupportTest::testTargetTakesTheColumnsTheStatementNamedcallsSchemaRegistryTest::testGetAllClearRegisterAndClearcallsSchemaRegistryTest::testRegisterGetUnregistercallsTableDefinitionRegistryTest::testClearGetAllClearRemovesActiveAndRemovedDefinitionscallsTableDefinitionRegistryTest::testGetAllAnswersEveryTableStillDescribedcallsTableDefinitionRegistryTest::testGetAllRemovedAnswersTheTablesThatWereDroppedcallsTableDefinitionRegistryTest::testHascallsTableDefinitionRegistryTest::testHasAnyTablesIsFalseUntilOneIsRegisteredcallsTableDefinitionRegistryTest::testIsRemovedTellsADroppedTableFromOneThatWasNeverTherecallsTableDefinitionRegistryTest::testRegisterAndGetcallsTableDefinitionRegistryTest::testRemovedDefinitionIsInactiveUntilRegisteredAgaincallsTableDefinitionRegistryTest::testRestorePutsBackWhatWasDroppedAsWellAsWhatWasTherecallsTableDefinitionRegistryTest::testSnapshotRestoreIncludesRemovedDefinitionscallsTableDefinitionRegistryTest::testSnapshotRestoreReplacesRegistryStatecallsTableDefinitionRegistryTest::testUnregisterLeavesNoTraceOfTheTableAtAllcallsSessionTest::testBeginTransactionRollBackTransactionBeginTransactionUsesProvidedTransactionManagerForSchemaRollbackcallsSessionTest::testForeignKeyFailureRestoresShadowStatecallsSessionTest::testParameterBindingCompilerResultColumnTypeResolverParameterBindingCompilerDelegatesCopyTargetsToTheConfiguredPlatformSupportcallsSessionTest::testTableDefinitionReturnsRegisteredSchemaOrNullcallsForeignKeyEndsTest::testReferencedColumnsFallsBackToTheParentsPrimaryKeycallsForeignKeyIntegrityTest::testAssertHoldsChecksNothingThroughAKeyWhoseEndsDisagreecallsForeignKeyIntegrityTest::testAssertHoldsLeavesAKeyWithANullInItAlonecallsForeignKeyIntegrityTest::testAssertHoldsLeavesARowThatDoesNotCarryTheKeyColumnsAlonecallsForeignKeyIntegrityTest::testAssertHoldsPassesAShadowInWhichEveryChildFindsItsParentcallsForeignKeyIntegrityTest::testAssertHoldsRefusesAShadowInWhichAChildReferencesNothingcallsDataMutationTest::testAMutationThatChangesNoRowsCarriesNothingToTheChildrencallsMutationImpactTest::testSynchronizationCountsMixedOperationsOnceEachcallsInsertMutationTest::testInsertIgnoreSkipsUniqueKeyConflictcallsInsertMutationTest::testUniqueConstraintAllowsNullcallsInsertMutationTest::testValidateNotNullThrowsExceptioncallsInsertMutationTest::testValidatePrimaryKeyDuplicateThrowsExceptioncallsInsertMutationTest::testValidateUniqueThrowsExceptioncallsInsertMutationTest::testValidationDisabledByDefaultAllowsDuplicatescallsReplaceMutationTest::testApplyRemovesEveryRowConflictingWithAnyCandidateKeycallsUpdateMutationTest::testUpdateSameRowUniqueDoesNotThrowcallsUpdateMutationTest::testValidateNotNullThrowsExceptioncallsUpdateMutationTest::testValidateUniqueThrowsExceptioncallsUpdateMutationTest::testValidationDisabledByDefaultAllowsNullInNotNullColumncallsRowConstraintsTest::testAssertNoDuplicateUniqueKeyLetsARowNotCollideWithItselfcallsRowConstraintsTest::testAssertNoDuplicateUniqueKeyLetsTwoNullsThroughBecauseNeitherCollidescallsRowConstraintsTest::testAssertNoDuplicateUniqueKeyRefusesARowCollidingWithOneAlreadyTherecallsRowConstraintsTest::testAssertNoNullWhereNoneIsAllowedLetsAColumnTheRowNeverWroteThroughcallsRowConstraintsTest::testAssertNoNullWhereNoneIsAllowedRefusesANullInSuchAColumncallsCreateTableAsSelectMutationTest::testApplyThrowsExceptionWhenTableExistscallsCreateTableAsSelectMutationTest::testApplyWithIfNotExistsSkipsWhenTableExistscallsCreateTableLikeMutationTest::testApplyCopiesSchemaFromSourceTablecallsCreateTableLikeMutationTest::testApplyEnsuresNewTableInShadowStorecallsCreateTableLikeMutationTest::testApplyThrowsExceptionWhenTargetTableExistscallsCreateTableLikeMutationTest::testApplyWithIfNotExistsSkipsWhenTableExistscallsCreateTableMutationTest::testApplyEnsuresTableInShadowStorecallsCreateTableMutationTest::testApplyRegistersTableInSchemacallsCreateTableMutationTest::testApplyThrowsExceptionWhenTableExistscallsCreateTableMutationTest::testApplyWithIfNotExistsCreatesWhenTableDoesNotExistcallsCreateTableMutationTest::testApplyWithIfNotExistsSkipsWhenTableExistscallsCreateTableMutationTest::testTableNameReturnsTableNamecallsDropTableMutationTest::testApplyClearsDataFromShadowStorecallsDropTableMutationTest::testApplyUnregistersTableFromSchemacallsDropTableMutationTest::testApplyWithIfExistsDropsExistingTablecallsSynchronizeMutationTest::testAffectedRowCountCountsMixedInsertUpdateAndDeletecallsSynchronizeMutationTest::testAffectedRowCountMatchesEveryPrimaryKeyAfterAnEarlierMatchcallsSynchronizeMutationTest::testApplyRejectsDuplicateCandidateKeyscallsSynchronizeMutationTest::testApplyRejectsNullInNotNullColumncallsUpsertMutationTest::testApplyUpdatesExistingRowOnUniqueKeyConflictcallsReferentialIntegrityEnforcerTest::testAcceptsExplicitReferenceToNonPrimaryCandidateKeycallsReferentialIntegrityEnforcerTest::testCascadeNormalizesSparseChildRowIndexescallsReferentialIntegrityEnforcerTest::testCompositeDeleteSetNullNormalizesEveryForeignKeyColumncallsReferentialIntegrityEnforcerTest::testCompositePrimaryKeyUpdateCascadesOnlyMatchingChildrencallsReferentialIntegrityEnforcerTest::testDeleteCascadePropagatesAcrossMultipleLevelscallsReferentialIntegrityEnforcerTest::testDeleteCascadeRemovesAllMatchingChildrenAndKeepsOtherscallsReferentialIntegrityEnforcerTest::testDeleteRestrictRejectsParentRemovalcallsReferentialIntegrityEnforcerTest::testDeleteSetNullCarriesOriginalRowIntoNextLevelcallsReferentialIntegrityEnforcerTest::testDeleteSetNullUpdatesChildcallsReferentialIntegrityEnforcerTest::testEmptySelfReferentialCascadeTerminatesWithoutSyntheticEventscallsReferentialIntegrityEnforcerTest::testExplicitReferencedColumnsAreNotReplacedByPrimaryKeycallsReferentialIntegrityEnforcerTest::testFallbackContinuesAfterIdentityMatchedRowcallsReferentialIntegrityEnforcerTest::testFallbackReferencedPrimaryKeyAppearsInUpdateViolationcallsReferentialIntegrityEnforcerTest::testFallbackTransitionPropagatesUpdateAndDeleteFromOneTablecallsReferentialIntegrityEnforcerTest::testIdentityTransitionSkipsIncompleteChangeAndProcessesFollowingChangecallsReferentialIntegrityEnforcerTest::testMatchingConstraintAfterUnrelatedConstraintStillCascadescallsReferentialIntegrityEnforcerTest::testMissingReferencedValuesDoNotStopLaterUpdateOrDeleteCascadescallsReferentialIntegrityEnforcerTest::testMultiTruncateCascadesFromEveryChangedParentTablecallsReferentialIntegrityEnforcerTest::testPrimaryKeyUpdateCascadesThroughOriginalRowIdentitycallsReferentialIntegrityEnforcerTest::testRejectsInsertWhoseParentDoesNotExistcallsReferentialIntegrityEnforcerTest::testRetainedOldKeyDoesNotStopFollowingUpdateCascadecallsReferentialIntegrityEnforcerTest::testRowsWithMissingPrimaryKeyCannotMatchRowsThatHaveTheKeycallsReferentialIntegrityEnforcerTest::testSchemaMutationDoesNotTriggerRowValidationcallsReferentialIntegrityEnforcerTest::testSchemaMutationSkipsRowIntegrityCheckscallsReferentialIntegrityEnforcerTest::testSynchronizeCascadesDeletedRowscallsReferentialIntegrityEnforcerTest::testUpdateCascadeCarriesOriginalRowIntoNextLevelcallsReferentialIntegrityEnforcerTest::testUpdateDoesNotCascadeWhileOldParentKeyStillExistscallsReferentialIntegrityEnforcerTest::testValidationContinuesPastMissingAndNullForeignKeyscallsShadowApplicationTest::testApplyLeavesTheShadowAsItWasWhenTheStatementIsRefusedcallsShadowApplicationTest::testLastInsertIdOfAnswersTheIdentityTheTableSaysIsNumberedcallsShadowApplicationTest::testLastInsertIdOfFallsBackToASingleColumnKeycallsShadowApplicationTest::testLastInsertIdOfIsNothingWhereNoColumnIsNumberedcallsShadowSavepointTest::testOfRemembersWhichTablesThereWerecallsShadowTransactionsTest::testRollBackPutsBackTheRowsTheTablesAndWhatDescribesThemcallsTableTransitionsTest::testOfAnswersOneEntryPerTableSomethingHappenedTocallsTableTransitionsTest::testOfLeavesOutATableNothingHappenedTocallsTableTransitionsTest::testOfReadsTheResultRowsOnlyForTheTableAnUpdateNamescalls
Relations§
Instantiated in 1
Type declarations 13
- type ZtdQuery\Platform\CopySupport packages/ztd-query-core/src/Platform/CopySupport.php:34
- type ZtdQuery\Platform\SchemaParser packages/ztd-query-core/src/Platform/SchemaParser.php:19
- type ZtdQuery\Schema\TableDefinitionRegistry packages/ztd-query-core/src/Schema/TableDefinitionRegistry.php:23
- type ZtdQuery\Schema\TableDefinitionRegistry packages/ztd-query-core/src/Schema/TableDefinitionRegistry.php:32
- type ZtdQuery\Session packages/ztd-query-core/src/Session.php:250
- type ZtdQuery\Shadow\Mutation\Row\InsertMutation packages/ztd-query-core/src/Shadow/Mutation/Row/InsertMutation.php:42
- type ZtdQuery\Shadow\Mutation\Row\InsertMutation packages/ztd-query-core/src/Shadow/Mutation/Row/InsertMutation.php:80
- type ZtdQuery\Shadow\Mutation\Row\UpdateMutation packages/ztd-query-core/src/Shadow/Mutation/Row/UpdateMutation.php:39
- type ZtdQuery\Shadow\Mutation\Row\UpdateMutation packages/ztd-query-core/src/Shadow/Mutation/Row/UpdateMutation.php:67
- type ZtdQuery\Shadow\Mutation\RowConstraints packages/ztd-query-core/src/Shadow/Mutation/RowConstraints.php:32
- type ZtdQuery\Shadow\Mutation\Table\CreateTableMutation packages/ztd-query-core/src/Shadow/Mutation/Table/CreateTableMutation.php:20
- type ZtdQuery\Shadow\Mutation\Table\CreateTableMutation packages/ztd-query-core/src/Shadow/Mutation/Table/CreateTableMutation.php:34
- type ZtdQuery\Shadow\Mutation\Table\SynchronizeMutation packages/ztd-query-core/src/Shadow/Mutation/Table/SynchronizeMutation.php:33