classSchemaBuilder
final class SchemaBuilder
Deprecated: Use \SqlSemantics\Facade\Schema::analyze() to read state declarations.
Public API: explicitly declared with
@visibility public.Compatibility entry point for closed catalog binding.
$consume = static fn (\SqlSemantics\Core\SchemaBuilder $value): string => $value::class;
$consume instanceof \Closure // => trueProperties§
public string $defaultSchemaNamespace used for unqualified table declarations and references.
public Dialect $dialectMethods§
public function __construct(
public Dialect $dialect,
string|null $defaultSchema = null,
string|null $grammarVersion = null,
)Parameters
$dialect | Dialect | Language used for declarations and subsequent statement binding |
$defaultSchema | string|null | Defaults to the platform declaration namespace |
$grammarVersion | string|null | sql-parser release tag; null selects its default release |
Calls 2
- method-call Dialect::platform() line 36
- new SchemaAnalyzer line 37
public function build(string ...$sql): SchemaBuilds an independent schema from zero or more SQL strings containing CREATE TABLE statements.
Parameters
$sql | string | DDL strings in declaration order; no arguments builds an empty schema |
Returns
Throws
SemanticException When declarations conflict or use unsupported semanticsLexicalException When SQL contains invalid tokensSyntaxException When SQL does not match the selected grammarTest cases 112
SemanticsBench::setUpcallsColumnReaderTest::testReadPreservesDeclaredNullabilityIndependentlyOfUsagecallsConstraintReaderTest::testReadNamedForeignKeycallsConstraintReaderTest::testReferencesPreservesCompositeForeignKeyOrdercallsIdentifiersTest::testEqualDistinguishesQuotedPostgresCasecallsIdentifiersTest::testNamePreservesQuotedPostgresCaseAndFoldsUnquotedNamescallsIdentifiersTest::testPartsDoesNotSplitDotsInsideQuotedIdentifierscallsIdentifiersTest::testRelationEqualModelsMysqlTableAliasesSeparatelyFromColumnscallsSchemaReaderTest::testColumnNodesPreservesSqliteDeclarationOrdercallsSchemaReaderTest::testPrimaryKeysRejectsMissingColumncallsSchemaReaderTest::testPrimaryKeysResolvesCaseInsensitiveSqliteConstraintColumnscallsSchemaReaderTest::testPrimaryNotNullRespectsSqliteDescExceptioncallsSchemaReaderTest::testReadDeclaredKeysDefaultsAndCheckscallsSchemaReaderTest::testTableRejectsDuplicateDeclarationscallsSchemaReaderTest::testValidateRejectsCreateAsSelectcallsTypeReaderTest::testAffinityPreservesSqliteDeclaredTypescallsTypeReaderTest::testReadPreservesDecimalPrecisionAndScalecallsBinderTest::testBindPreservesSourceTextAndExpressionNodeIdentitycallsBinderTest::testBindPropagatesSyntaxErrorscallsBinderTest::testBindRejectsMissingDeclarationscallsBinderTest::testBindResetsStatementIdentitiesWhenReusingTheBindercallsBinderTest::testBindSelfJoinPreservesOccurrenceIdentityAndNullProvenancecallsBinderTest::testBindUsesTheSchemasDefaultNamespacecallsBoundRelationTest::testKeepsScopeAndRelationAtTheSameStagecallsExpressionBinderTest::testBindsParenthesesAndUnaryOperatorscallsExpressionBinderTest::testCallRetainsNestedCoalesceInputscallsExpressionBinderTest::testOperationPreservesOperatorPrecedencecallsExpressionRulesTest::testArithmeticHandlesNegativePostgresIntegerBoundariescallsExpressionRulesTest::testCallNullIfCanIntroduceNullWithoutAnOuterJoincallsExpressionRulesTest::testCoerceRecordsPostgresCommonTypeConversionscallsExpressionRulesTest::testOperatorNullTestsAreNeverNullablecallsExpressionRulesTest::testPredicateRejectsNonBooleanPostgresInputscallsFromBinderTest::testBindCrossJoinHasNoMatchPredicatecallsFromBinderTest::testJoinedBindsOnBeforeIntroducingThisJoinsNullscallsFromBinderTest::testJoinPropagatesNestedOuterJoinProvenancecallsFromBinderTest::testKindRecognizesRightAndRejectsNaturalcallsFromBinderTest::testRelationFullJoinExtendsBothSidescallsFromBinderTest::testSqliteRespectsExplicitDatabaseNamescallsFromBinderTest::testTableRejectsAliasColumnListscallsLiteralBinderTest::testBindDistinguishesMysqlUnsignedAndDecimalBoundariescallsLiteralBinderTest::testBindDistinguishesSqliteOverflowAsRealcallsLiteralBinderTest::testBindParametersRemainExplicitlyUnknownWithoutBindingscallsLiteralBinderTest::testIntegerClassifiesPostgresWidthsWithoutPhpOverflowcallsNullFactsTest::testCoalesceRequiresANonNullOperandToGuaranteeAValuecallsNullFactsTest::testExtensionsRetainsAllNullableOperandCausescallsNullFactsTest::testStrictComparisonPropagatesNullButBooleanOrDoesNotcallsProjectionBinderTest::testBindExpandsUnqualifiedStarInFromOrdercallsProjectionBinderTest::testItemDecodesMysqlStringAliasescallsProjectionBinderTest::testItemExpandsStarsAndPreservesDuplicateNamescallsProjectionBinderTest::testItemResolvesBarePostgresUnknownLiteralsAsTextcallsProjectionBinderTest::testStarRejectsAnUnknownQualifiercallsScopeTest::testColumnRejectsAmbiguousUnqualifiedNamescallsScopeTest::testCombineRejectsDuplicateAliasescallsScopeTest::testExtendDoesNotMutateTheInputScopecallsScopeTest::testMatchesAliasHidesOriginalTableNamecallsScopeTest::testRejectsReferencesOutsideJoinOperandscallsSelectBinderTest::testBindConstantQueriesWithoutARelationcallsSelectModifiersBinderTest::testOrderingResolvesAliasesAndDirectioncallsSelectModifiersBinderTest::testPaginationReadsMysqlCommaOrdercallsSelectModifiersBinderTest::testPaginationRejectsFetchWithTiesRatherThanDroppingItsMeaningcallsSelectModifiersBinderTest::testRejectsOutOfRangeOrderPositioncallsSelectModifiersBinderTest::testSortExpressionDoesNotResolveAStringLiteralAsAnAliascallsSelectModifiersBinderTest::testSortExpressionResolvesPositionsAndNullPlacementcallsSyntaxGuardTest::testSelectRejectsUnmodeledConstructscallsTableResolverTest::testRejectsMissingTablesInsteadOfInventingColumnscallsTableResolverTest::testResolvesQualifiedDeclarationscallsTypeResolutionTest::testCommonPromotesIntegerOperandscallsTypeResolutionTest::testRejectsUnmodeledCoercioncallsBoundSelectTest::testRetainsRowDependenciesAbsentFromValueLineagecallsColumnBindingTest::testRetainsDeclarationIdentitycallsExpressionKindTest::testDistinguishesNullHandlingOperationscallsExpressionTest::testLineageDeduplicatesByOccurrenceAndColumncallsJoinTest::testRetainsTheMatchTreecallsOrderingTest::testKeepsSortDirectionSeparateFromTheExpressioncallsOutputColumnTest::testDoesNotInventEngineSpecificExpressionLabelscallsTableUseTest::testSeparatesAliasesSharingOneDeclarationcallsPlatformTest::testQueryKeepsProjectionOrdercallsPlatformTest::testSchemaKeepsDeclarationscallsQueryRulesTest::testProjectionItemsPreserveOutputOrdercallsQueryRulesTest::testProjectionTokensExpandQualifiedStarcallsQueryRulesTest::testRelationResolvesAnAliascallsSchemaRulesTest::testPrimaryNotNullPromotesAnIntegerKeycallsSchemaRulesTest::testQualifyPreservesExplicitNamespacescallsSchemaRulesTest::testSchemaNodeRetainsOriginalDeclarationcallsSchemaRulesTest::testTableKeyDistinguishesNamescallsSchemaRulesTest::testValidateAcceptsOrdinaryDeclarationscallsTypeRulesTest::testReadPreservesModifierscallsColumnDefinitionTest::testKeepsDefaultsAsOriginalSyntaxcallsTableConstraintTest::testRetainsCompositeKeyOrdercallsTableDefinitionTest::testQualifiesUnqualifiedNamesWithTheResolutionContextcallsSchemaBuilderTest::testBuildAcceptsSeparateSqlStringsInDeclarationOrdercallsSchemaBuilderTest::testBuildDoesNotAccumulatePreviousDeclarationscallsSchemaBuilderTest::testBuildKeepsExplicitlyQualifiedDeclarationscallsSchemaBuilderTest::testBuildPropagatesInvalidDdlSyntaxcallsSchemaBuilderTest::testBuildRejectsConflictingDeclarationsAcrossSqlStringscallsSchemaBuilderTest::testBuildRetainsTheResolvedLanguageAndNamespacecallsSchemaTest::testRetainsTheDialectAndAllDeclarationscallsTypeDescriptorTest::testDistinguishesStorageAffinityFromDeclaredTypecallsPlatformTest::testQueryKeepsProjectionOrdercallsPlatformTest::testSchemaKeepsDeclarationscallsQueryRulesTest::testJoinedTracksNullableInputcallsQueryRulesTest::testOrderingNodesPreserveDirectioncallsQueryRulesTest::testProjectionItemsPreserveOutputOrdercallsQueryRulesTest::testProjectionTokensExpandQualifiedStarcallsQueryRulesTest::testRelationResolvesAnAliascallsSchemaRulesTest::testColumnNodesPreserveOrdercallsSchemaRulesTest::testPrimaryNotNullPromotesAnIntegerKeycallsSchemaRulesTest::testQualifyPreservesExplicitNamespacescallsSchemaRulesTest::testSchemaNodeRetainsOriginalDeclarationcallsSchemaRulesTest::testTableKeyDistinguishesNamescallsSchemaRulesTest::testValidateAcceptsOrdinaryDeclarationscallsTypeRulesTest::testReadPreservesModifierscalls
Calls 1
- method-call SchemaAnalyzer::read() line 50
Private surface 1§
Implementation details, listed for orientation only.
private SchemaAnalyzer $semanticsTest cases 132§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 7
SchemaBuilderTest::testBuildAcceptsSeparateSqlStringsInDeclarationOrdercallsSchemaBuilderTest::testBuildDoesNotAccumulatePreviousDeclarationscallsSchemaBuilderTest::testBuildKeepsExplicitlyQualifiedDeclarationscallsSchemaBuilderTest::testBuildPropagatesInvalidDdlSyntaxcallsSchemaBuilderTest::testBuildRejectsConflictingDeclarationsAcrossSqlStringscallsSchemaBuilderTest::testBuildRetainsTheResolvedLanguageAndNamespacecallsSchemaBuilderTest::testRejectsAnUnavailableGrammarReleasecalls
Other tests reaching this symbol 125
SemanticsBench::setUpcallsSchemaAnalyzerTestcallsColumnPropertiesTestcallsColumnReaderTest::testReadPreservesDeclaredNullabilityIndependentlyOfUsagecallsConstraintReaderTest::testReadNamedForeignKeycallsConstraintReaderTest::testReferencesPreservesCompositeForeignKeyOrdercallsIdentifiersTest::testEqualDistinguishesQuotedPostgresCasecallsIdentifiersTest::testNamePreservesQuotedPostgresCaseAndFoldsUnquotedNamescallsIdentifiersTest::testPartsDoesNotSplitDotsInsideQuotedIdentifierscallsIdentifiersTest::testRelationEqualModelsMysqlTableAliasesSeparatelyFromColumnscallsSchemaChangesTestcallsSchemaReaderTest::testColumnNodesPreservesSqliteDeclarationOrdercallsSchemaReaderTest::testPrimaryKeysRejectsMissingColumncallsSchemaReaderTest::testPrimaryKeysResolvesCaseInsensitiveSqliteConstraintColumnscallsSchemaReaderTest::testPrimaryNotNullRespectsSqliteDescExceptioncallsSchemaReaderTest::testReadDeclaredKeysDefaultsAndCheckscallsSchemaReaderTest::testTableRejectsDuplicateDeclarationscallsSchemaReaderTest::testValidateRejectsCreateAsSelectcallsStatementListTestcallsTokenGroupsTestcallsTreeTestcallsTypeReaderTest::testAffinityPreservesSqliteDeclaredTypescallsTypeReaderTest::testReadPreservesDecimalPrecisionAndScalecallsBinderTest::testBindPreservesSourceTextAndExpressionNodeIdentitycallsBinderTest::testBindPropagatesSyntaxErrorscallsBinderTest::testBindRejectsMissingDeclarationscallsBinderTest::testBindResetsStatementIdentitiesWhenReusingTheBindercallsBinderTest::testBindSelfJoinPreservesOccurrenceIdentityAndNullProvenancecallsBinderTest::testBindUsesTheSchemasDefaultNamespacecallsBoundRelationTest::testKeepsScopeAndRelationAtTheSameStagecallsExpressionBinderTest::testBindsParenthesesAndUnaryOperatorscallsExpressionBinderTest::testCallRetainsNestedCoalesceInputscallsExpressionBinderTest::testOperationPreservesOperatorPrecedencecallsExpressionRulesTest::testArithmeticHandlesNegativePostgresIntegerBoundariescallsExpressionRulesTest::testCallNullIfCanIntroduceNullWithoutAnOuterJoincallsExpressionRulesTest::testCoerceRecordsPostgresCommonTypeConversionscallsExpressionRulesTest::testOperatorNullTestsAreNeverNullablecallsExpressionRulesTest::testPredicateRejectsNonBooleanPostgresInputscallsFromBinderTest::testBindCrossJoinHasNoMatchPredicatecallsFromBinderTest::testJoinedBindsOnBeforeIntroducingThisJoinsNullscallsFromBinderTest::testJoinPropagatesNestedOuterJoinProvenancecallsFromBinderTest::testKindRecognizesRightAndRejectsNaturalcallsFromBinderTest::testRelationFullJoinExtendsBothSidescallsFromBinderTest::testSqliteRespectsExplicitDatabaseNamescallsFromBinderTest::testTableRejectsAliasColumnListscallsIdentitySequenceTestcallsLiteralBinderTest::testBindDistinguishesMysqlUnsignedAndDecimalBoundariescallsLiteralBinderTest::testBindDistinguishesSqliteOverflowAsRealcallsLiteralBinderTest::testBindParametersRemainExplicitlyUnknownWithoutBindingscallsLiteralBinderTest::testIntegerClassifiesPostgresWidthsWithoutPhpOverflowcallsNullFactsTest::testCoalesceRequiresANonNullOperandToGuaranteeAValuecallsNullFactsTest::testExtensionsRetainsAllNullableOperandCausescallsNullFactsTest::testStrictComparisonPropagatesNullButBooleanOrDoesNotcallsProjectionBinderTest::testBindExpandsUnqualifiedStarInFromOrdercallsProjectionBinderTest::testItemDecodesMysqlStringAliasescallsProjectionBinderTest::testItemExpandsStarsAndPreservesDuplicateNamescallsProjectionBinderTest::testItemResolvesBarePostgresUnknownLiteralsAsTextcallsProjectionBinderTest::testStarRejectsAnUnknownQualifiercallsScopeTest::testColumnRejectsAmbiguousUnqualifiedNamescallsScopeTest::testCombineRejectsDuplicateAliasescallsScopeTest::testExtendDoesNotMutateTheInputScopecallsScopeTest::testMatchesAliasHidesOriginalTableNamecallsScopeTest::testRejectsReferencesOutsideJoinOperandscallsSelectBinderTest::testBindConstantQueriesWithoutARelationcallsSelectModifiersBinderTest::testOrderingResolvesAliasesAndDirectioncallsSelectModifiersBinderTest::testPaginationReadsMysqlCommaOrdercallsSelectModifiersBinderTest::testPaginationRejectsFetchWithTiesRatherThanDroppingItsMeaningcallsSelectModifiersBinderTest::testRejectsOutOfRangeOrderPositioncallsSelectModifiersBinderTest::testSortExpressionDoesNotResolveAStringLiteralAsAnAliascallsSelectModifiersBinderTest::testSortExpressionResolvesPositionsAndNullPlacementcallsSyntaxGuardTest::testSelectRejectsUnmodeledConstructscallsTableResolverTest::testRejectsMissingTablesInsteadOfInventingColumnscallsTableResolverTest::testResolvesQualifiedDeclarationscallsTypeResolutionTest::testCommonPromotesIntegerOperandscallsTypeResolutionTest::testRejectsUnmodeledCoercioncallsDialectTestcallsBoundSelectTest::testRetainsRowDependenciesAbsentFromValueLineagecallsColumnBindingTest::testRetainsDeclarationIdentitycallsExpressionKindTest::testDistinguishesNullHandlingOperationscallsExpressionTest::testLineageDeduplicatesByOccurrenceAndColumncallsJoinKindTestcallsJoinTest::testRetainsTheMatchTreecallsOrderingTest::testKeepsSortDirectionSeparateFromTheExpressioncallsOutputColumnTest::testDoesNotInventEngineSpecificExpressionLabelscallsTableUseTest::testSeparatesAliasesSharingOneDeclarationcallsPlatformTest::testQueryKeepsProjectionOrdercallsPlatformTest::testSchemaKeepsDeclarationscallsNameRulesTestcallsQueryRulesTest::testProjectionItemsPreserveOutputOrdercallsQueryRulesTest::testProjectionTokensExpandQualifiedStarcallsQueryRulesTest::testRelationResolvesAnAliascallsSchemaRulesTest::testPrimaryNotNullPromotesAnIntegerKeycallsSchemaRulesTest::testQualifyPreservesExplicitNamespacescallsSchemaRulesTest::testSchemaNodeRetainsOriginalDeclarationcallsSchemaRulesTest::testTableKeyDistinguishesNamescallsSchemaRulesTest::testValidateAcceptsOrdinaryDeclarationscallsSyntaxRulesTestcallsTypeRulesTest::testReadPreservesModifierscallsColumnDefinitionTest::testKeepsDefaultsAsOriginalSyntaxcallsColumnGenerationTestcallsConstraintKindTestcallsGenerationKindTestcallsInvariantTestcallsTableConstraintTest::testRetainsCompositeKeyOrdercallsTableDefinitionTest::testQualifiesUnqualifiedNamesWithTheResolutionContextcallsSchemaTest::testRetainsTheDialectAndAllDeclarationscallsSemanticExceptionTestcallsNullabilityTestcallsTypeDescriptorTest::testDistinguishesStorageAffinityFromDeclaredTypecallsSchemaTestcallsNameRulesTestcallsPlatformTest::testQueryKeepsProjectionOrdercallsPlatformTest::testSchemaKeepsDeclarationscallsQueryRulesTest::testJoinedTracksNullableInputcallsQueryRulesTest::testOrderingNodesPreserveDirectioncallsQueryRulesTest::testProjectionItemsPreserveOutputOrdercallsQueryRulesTest::testProjectionTokensExpandQualifiedStarcallsQueryRulesTest::testRelationResolvesAnAliascallsSchemaRulesTest::testColumnNodesPreserveOrdercallsSchemaRulesTest::testPrimaryNotNullPromotesAnIntegerKeycallsSchemaRulesTest::testQualifyPreservesExplicitNamespacescallsSchemaRulesTest::testSchemaNodeRetainsOriginalDeclarationcallsSchemaRulesTest::testTableKeyDistinguishesNamescallsSchemaRulesTest::testValidateAcceptsOrdinaryDeclarationscallsTypeRulesTest::testReadPreservesModifierscalls