classRelationCursor
final class RelationCursor
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
Tracks the unread position of one DBML relation statement.
Properties§
public string $sourcepublic int $offset = 0Methods§
public function __construct(public string $source, public int $offset = 0)Opens a statement at its first character.
Parameters
$source | string | |
$offset | int |
public function readIdentifier(string $expected): stringConsumes a quoted or unquoted identifier at the current cursor.
Parameters
$expected | string |
Returns
stringTest cases 2
Called from 4
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:34
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:97
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:105
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:113
Calls 4
- function-call
preg_matchline 32 - class-const RelationCursor::IDENTIFIER() line 32
- new UnexpectedPlanTokenException line 33
- function-call
strlenline 36
public function readOperator(): RelationKindConsumes a supported relation operator.
Returns
Test cases 1
Called from 1
Calls 3
- method-call RelationCursor::peek() line 53
- static-call RelationKind::tryFrom() line 54
- new UnexpectedPlanTokenException line 57
public function readOptionalMarker(): boolConsumes an optional endpoint marker when present.
Returns
boolTest cases 1
Called from 2
Calls 1
- method-call RelationCursor::peek() line 70
public function skipWhitespace(): voidAdvances the cursor past whitespace.
Test cases 1
Called from 10
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:32
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:41
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:44
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:47
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:41
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:47
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:70
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:72
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:112
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:114
Calls 2
- method-call RelationCursor::peek() line 84
- function-call
trimline 84
public function expectEnd(): voidRejects trailing input after the relation statement.
Test cases 1
Called from 3
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:48
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:35
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:49
Calls 2
- function-call
strlenline 95 - new UnexpectedPlanTokenException line 96
public function peek(): ?stringReads the next character without advancing the cursor.
Returns
?stringTest cases 6
RelationCursorTest::testExpectEndAcceptsAnExhaustedStatementcallsRelationCursorTest::testPeekDoesNotAdvancecallsRelationCursorTest::testReadIdentifierConsumesQuotedNamescallsRelationCursorTest::testReadOperatorConsumesDirectioncallsRelationCursorTest::testReadOptionalMarkerLeavesUnmarkedInputAlonecallsRelationCursorTest::testSkipWhitespaceStopsBeforeIdentifiercalls
Called from 13
- method-call SqlFixture\Plan\Choice\ChoiceLiteral::read() packages/sql-fixture/src/Plan/Choice/ChoiceLiteral.php:23
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:33
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:59
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:63
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:69
- method-call SqlFixture\Plan\Parsing\RelationCursor::readOperator() packages/sql-fixture/src/Plan/Parsing/RelationCursor.php:53
- method-call SqlFixture\Plan\Parsing\RelationCursor::readOptionalMarker() packages/sql-fixture/src/Plan/Parsing/RelationCursor.php:70
- method-call SqlFixture\Plan\Parsing\RelationCursor::skipWhitespace() packages/sql-fixture/src/Plan/Parsing/RelationCursor.php:84
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:62
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:74
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:99
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:104
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:116
Private surface 1§
Implementation details, listed for orientation only.
private const IDENTIFIER = '/\G(?:`([^`]+)`|"([^"]+)"|([A-Za-z_][A-Za-z0-9_$]*))/'Test cases 57§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 6
RelationCursorTest::testExpectEndAcceptsAnExhaustedStatementcallsRelationCursorTest::testPeekDoesNotAdvancecallsRelationCursorTest::testReadIdentifierConsumesQuotedNamescallsRelationCursorTest::testReadOperatorConsumesDirectioncallsRelationCursorTest::testReadOptionalMarkerLeavesUnmarkedInputAlonecallsRelationCursorTest::testSkipWhitespaceStopsBeforeIdentifiercalls
Other tests reaching this symbol 51
PostgreSqlEndToEndTestcallsSqliteIntegrationTestcallsCaseSelectionTestcallsChoiceBindingsTestcallsChoiceValueExceptionTestcallsInverseRelationsTestcallsResolvedRowTestcallsRowChoicesTestcallsConnectedTablesTestcallsOverrideSpecsTestcallsRecursiveRelationExceptionTestcallsRelationCountsTestcallsRelationProjectionTestcallsRelationValueExceptionTestcallsRowBindingsTestcallsRowMaterializerTestcallsGenerationRunTestcallsPlanGeneratorTestcallsPlanSchemaExceptionTestcallsPlanSchemaValidatorTestcallsEndpointValidatorTestcallsConstructorHydrationTestcallsPropertyHydrationTestcallsChoiceCaseTestcallsChoiceDefinitionExceptionTestcallsChoiceLiteralTest::testIntegerAcceptsNegativeValuescallsChoiceLiteralTest::testReadPreservesTypeAndAdvancesTheCursorcallsChoiceLiteralTest::testReadStartsAtTheSuppliedOffsetcallsChoiceSyntaxTest::testReadRelationsAllowsEmptyBranchesAndQuotedNamescallsChoiceValidationTestcallsPlanContentsTestcallsColumnRefTestcallsFixturePlanTestcallsPlanStatementsTestcallsRelationReaderTest::testBuildRelationsCarriesOptionalityToEachTargetcallsRelationReaderTest::testParseStatementExpandsGroupedTargetscallsRelationReaderTest::testReadEndpointPreservesQuotedIdentifierscallsRelationReaderTest::testReadTargetsReadsACompositeEndpointcallsPlanParserTestcallsPlanPrinterTestcallsPlanStructureExceptionTestcallsPlanSyntaxExceptionTestcallsPlanTablesTestcallsRelationGroupsTestcallsStatementPrinterTestcallsRelationChoiceTestcallsRelationTestcallsPlanValidationTestcallsTableNameTestcallsFixtureProviderTestcallsSqlSchemaProviderTestcalls
Relations§
Instantiated in 2
Method calls 30
- method-call SqlFixture\Plan\Choice\ChoiceLiteral::read() packages/sql-fixture/src/Plan/Choice/ChoiceLiteral.php:23
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:32
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:33
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:41
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:44
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:47
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::parse() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:48
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:59
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:63
- method-call SqlFixture\Plan\Choice\ChoiceSyntax::readRelations() packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:69
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:34
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:35
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:41
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:43
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:44
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:45
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:47
- method-call SqlFixture\Plan\Parsing\RelationReader::parseStatement() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:49
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:62
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:70
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:72
- method-call SqlFixture\Plan\Parsing\RelationReader::readTargets() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:74
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:97
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:99
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:104
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:105
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:112
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:113
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:114
- method-call SqlFixture\Plan\Parsing\RelationReader::readEndpoint() packages/sql-fixture/src/Plan/Parsing/RelationReader.php:116
Type declarations 4
- type SqlFixture\Plan\Choice\ChoiceLiteral packages/sql-fixture/src/Plan/Choice/ChoiceLiteral.php:21
- type SqlFixture\Plan\Choice\ChoiceLiteral packages/sql-fixture/src/Plan/Choice/ChoiceLiteral.php:45
- type SqlFixture\Plan\Choice\ChoiceSyntax packages/sql-fixture/src/Plan/Choice/ChoiceSyntax.php:57
- type SqlFixture\Plan\Parsing\RelationReader packages/sql-fixture/src/Plan/Parsing/RelationReader.php:21