classUpdateTransformer
final class UpdateTransformer
implements SqlTransformer
Transforms UPDATE statements into SELECT projections with CTE shadowing for SQLite.
SQLite does not support multi-table UPDATE, so this is simpler than MySQL.
Methods§
public function __construct(SqliteParser $parser, SelectTransformer $selectTransformer)Binds the dependencies used by this operation.
Parameters
$parser | SqliteParser | |
$selectTransformer | SelectTransformer |
Calls 1
public function transform(string $sql, array $tables): string{@inheritDoc}
Parameters
$sql | string | |
$tables | array |
Returns
stringThrows
Test cases 7
UpdateTransformerTest::testTransformPreservesUnchangedColumnscallsUpdateTransformerTest::testTransformSimpleUpdatecallsUpdateTransformerTest::testTransformThrowsForNonUpdatecallsUpdateTransformerTest::testTransformUpdateWithMultipleAssignmentscallsUpdateTransformerTest::testTransformUpdateWithOrderByAndLimitcallsUpdateTransformerTest::testTransformWithoutTargetThrowscallsUpdateTransformerTest::testTransformWithShadowDataProducesCtecalls
Called from 1
Calls 6
- method-call SqliteParser::classifyStatement() line 43
- new UnsupportedSqlException line 45
- method-call SqliteParser::extractTargetTable() line 48
- method-call UpdateTransformer::buildProjection() line 55
- method-call SelectTransformer::transform() line 62
- method-call SqliteCteShadowComposer::carryPrefix() line 63
public function buildProjection(
string $sql,
string $targetTable,
array<int, string> $columns,
array<int, string> $primaryKeys = [],
): stringBuild a result-select SQL from an UPDATE statement.
Parameters
$sql | string | |
$targetTable | string | |
$columns | array<int, string> | |
$primaryKeys | array<int, string> |
Returns
stringTest cases 10
UpdateTransformerTest::testBuildProjectionAllColumnsAssignedNoStarFallbackcallsUpdateTransformerTest::testBuildProjectionAssignedColumnNotDuplicatedcallsUpdateTransformerTest::testBuildProjectionAssignedColumnNotDuplicatedInSelectcallsUpdateTransformerTest::testBuildProjectionEmptyAssignmentsEmptyColumnsUsesStarcallsUpdateTransformerTest::testBuildProjectionIncludesAssignmentValuescallsUpdateTransformerTest::testBuildProjectionNoAssignmentsNoColumnsUsesStarcallsUpdateTransformerTest::testBuildProjectionNoColumnscallsUpdateTransformerTest::testBuildProjectionNoColumnsUsesStarFallbackcallsUpdateTransformerTest::testBuildProjectionPreservesAliasFromSourceAndIdentityQualifiercallsUpdateTransformerTest::testBuildProjectionWithoutAliasOrFromHasNoExtraSourceSyntaxcalls
Called from 2
- method-call ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer::transform() packages/ztd-query-sqlite/src/Rewrite/Transformer/UpdateTransformer.php:55
- method-call ZtdQuery\Platform\Sqlite\Rewrite\Transformer\UpdateTransformer::buildProjectionMeta() packages/ztd-query-sqlite/src/Rewrite/Transformer/UpdateTransformer.php:142
Calls 9
- method-call SqliteParser::extractUpdateAssignments() line 83
- method-call SqliteParser::extractUpdateAlias() line 84
- new MutationRowIdentity line 101
- method-call MutationRowIdentity::column() line 103
- function-call
implodeline 110 - method-call SqliteParser::extractUpdateFromClause() line 113
- method-call SqliteParser::extractWhereClause() line 116
- method-call SqliteParser::extractOrderByClause() line 118
- method-call SqliteParser::extractLimitClause() line 120
public function buildProjectionMeta(
string $sql,
array<int, string> $columns,
): array{sql: string, table: string}Build projection metadata for mutation resolver.
Parameters
$sql | string | |
$columns | array<int, string> |
Returns
array{sql: string, table: string}Throws
RuntimeExceptionTest cases 2
Calls 3
- method-call SqliteParser::extractTargetTable() line 136
- new
RuntimeExceptionline 138 - method-call UpdateTransformer::buildProjection() line 142
Private surface 3§
Implementation details, listed for orientation only.
private SqliteParser $parserprivate SelectTransformer $selectTransformerprivate SqliteCteShadowComposer $cteComposerTest cases 114§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 19
UpdateTransformerTest::testBuildProjectionAllColumnsAssignedNoStarFallbackcallsUpdateTransformerTest::testBuildProjectionAssignedColumnNotDuplicatedcallsUpdateTransformerTest::testBuildProjectionAssignedColumnNotDuplicatedInSelectcallsUpdateTransformerTest::testBuildProjectionEmptyAssignmentsEmptyColumnsUsesStarcallsUpdateTransformerTest::testBuildProjectionIncludesAssignmentValuescallsUpdateTransformerTest::testBuildProjectionMetacallsUpdateTransformerTest::testBuildProjectionMetaWithoutTargetThrowscallsUpdateTransformerTest::testBuildProjectionNoAssignmentsNoColumnsUsesStarcallsUpdateTransformerTest::testBuildProjectionNoColumnscallsUpdateTransformerTest::testBuildProjectionNoColumnsUsesStarFallbackcallsUpdateTransformerTest::testBuildProjectionPreservesAliasFromSourceAndIdentityQualifiercallsUpdateTransformerTest::testBuildProjectionWithoutAliasOrFromHasNoExtraSourceSyntaxcallsUpdateTransformerTest::testTransformPreservesUnchangedColumnscallsUpdateTransformerTest::testTransformSimpleUpdatecallsUpdateTransformerTest::testTransformThrowsForNonUpdatecallsUpdateTransformerTest::testTransformUpdateWithMultipleAssignmentscallsUpdateTransformerTest::testTransformUpdateWithOrderByAndLimitcallsUpdateTransformerTest::testTransformWithoutTargetThrowscallsUpdateTransformerTest::testTransformWithShadowDataProducesCtecalls
Other tests reaching this symbol 95
RewriterBench::setUpcallsRewriteTarget::__invokecallsSemanticsTarget::__invokecallsSqliteRewriterTest::testAlterTableUsesShadowedMigrationSelectcallsSqliteRewriterTest::testBuildTableContextIncludesMultipleTablesFromRegistrycallsSqliteRewriterTest::testBuildTableContextMergesColumnsFromMultipleRowscallsSqliteRewriterTest::testBuildTableContextRegistryOnlyTableIncludedcallsSqliteRewriterTest::testBuildTableContextShadowStoreEmptyRowsNoDefinitionPassesThroughcallsSqliteRewriterTest::testBuildTableContextSkipsAlreadyAddedFromShadowStorecallsSqliteRewriterTest::testBuildTableContextUsesDefinitionColumnscallsSqliteRewriterTest::testBuildTableContextWithShadowStoreColumnsInferredcallsSqliteRewriterTest::testCommitRewriteStateKeepsGeneratedIdentitiesAcrossRewritescallsSqliteRewriterTest::testCreateTableReturnsDdlSimulatedcallsSqliteRewriterTest::testCteReferencesAreMatchedCaseInsensitivelyDuringSchemaValidationcallsSqliteRewriterTest::testDdlSimulatedReturnsSqlSelectWhere0callsSqliteRewriterTest::testDeleteEnsuresShadowStorecallsSqliteRewriterTest::testDeleteEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testDeleteEnsuresShadowStoreEntrycallsSqliteRewriterTest::testDeleteEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testDeleteFromBacktickQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromBracketQuotedTableReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromLowercaseReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromQuotedTableWithoutWhereReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithCommentsReturnsSqlWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsSqlWithSelectWhere0callsSqliteRewriterTest::testDeleteFromWithoutWhereReturnsWriteSimulatedcallsSqliteRewriterTest::testDeleteFromWithSemicolonAndWhitespacecallsSqliteRewriterTest::testDeleteResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testDeleteReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testDeleteWithWhereProducesTransformedSqlcallsSqliteRewriterTest::testDropTableReturnsDdlSimulatedcallsSqliteRewriterTest::testEmptyInputThrowsExceptioncallsSqliteRewriterTest::testEmptyResultSelectProducesNoRowscallsSqliteRewriterTest::testGeneratedExpressionIsPresentBeforeTheFirstShadowWritecallsSqliteRewriterTest::testHasSchemaContextWithRegistryOnlycallsSqliteRewriterTest::testHasSchemaContextWithShadowStoreOnlycallsSqliteRewriterTest::testInMemoryAttachPassesThroughUnchangedcallsSqliteRewriterTest::testInsertDoesNotEnsureShadowStoreForTargetTablecallsSqliteRewriterTest::testInsertOnConflictReturnsUpsertMutationcallsSqliteRewriterTest::testInsertOrReplaceReturnsWriteSimulatedWithReplaceMutationcallsSqliteRewriterTest::testInsertResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testInsertReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testInsertRewriteOutputContainsSelectcallsSqliteRewriterTest::testInsertUsesDefaultsFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertUsesIdentityStrategyFromRegistryWithoutShadowRowscallsSqliteRewriterTest::testInsertWithShadowDataProducesTransformedSqlcallsSqliteRewriterTest::testMultiStatementThrowsExceptioncallsSqliteRewriterTest::testPersistentAttachRemainsUnsupportedcallsSqliteRewriterTest::testReadOnlyDiagnosticsPassThroughUnchangedcallsSqliteRewriterTest::testReadPlanHasNoMutationcallsSqliteRewriterTest::testRegisteredViewIsKnownAndMaterializedcallsSqliteRewriterTest::testRemovedTableIsShadowedInsteadOfFallingThroughcallsSqliteRewriterTest::testReplaceReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testRewriteIsDeterministiccallsSqliteRewriterTest::testRewriteMultiplecallsSqliteRewriterTest::testRewriteMultipleEmptyThrowscallsSqliteRewriterTest::testRewriteOutputIsNonEmptycallsSqliteRewriterTest::testSchemaQualifiedSelectUsesShadowCtecallsSqliteRewriterTest::testSelectExistingInShadowStoreIsNotUnknowncallsSqliteRewriterTest::testSelectIgnoresSqlKeywordsInsideLeadingLineCommentcallsSqliteRewriterTest::testSelectKnownTableNoSchemaContextDoesNotThrowcallsSqliteRewriterTest::testSelectReturnsReadKindcallsSqliteRewriterTest::testSelectRewritesTableAfterBlockCommentcallsSqliteRewriterTest::testSelectTableInShadowStoreNotUnknowncallsSqliteRewriterTest::testSelectUnknownTableWithSchemaContextThrowscallsSqliteRewriterTest::testSelectWithMultipleRegisteredTablesIncludesAllcallsSqliteRewriterTest::testSelectWithRegistryOnlyBuildTableContextcallsSqliteRewriterTest::testSelectWithShadowDataColumnsInferredcallsSqliteRewriterTest::testSelectWithShadowDataIncludesCtecallsSqliteRewriterTest::testSelectWithShadowStoreAndRegistryTablesMergedcallsSqliteRewriterTest::testSelectWithShadowStoreOnlyHasSchemaContextcallsSqliteRewriterTest::testSplitStatementsPreservesQuotedSemicolonscallsSqliteRewriterTest::testTransactionStatementRestoresSnapshotOnRollbackcallsSqliteRewriterTest::testUnknownTableAfterDeclaredCteIsRejectedcallsSqliteRewriterTest::testUnsupportedSqlThrowsExceptioncallsSqliteRewriterTest::testUpdateDoesNotPromoteMaterializedUnknownTablecallsSqliteRewriterTest::testUpdateEnsuresShadowStorecallsSqliteRewriterTest::testUpdateEnsuresShadowStoreCalledOnTargetcallsSqliteRewriterTest::testUpdateEnsuresShadowStoreEntrycallsSqliteRewriterTest::testUpdateEnsuresShadowStoreForTargetTablecallsSqliteRewriterTest::testUpdateResolvesTargetAfterBlockCommentcallsSqliteRewriterTest::testUpdateReturnsWriteSimulatedWithMutationcallsSqliteRewriterTest::testWritePlanHasNonNullMutationcallsStatementRewriterTest::testRewriteStatementRejectsUnknownReadSourcescallsStatementRewriterTest::testRewriteStatementSimulatesWritesWithoutApplyingThemcallsStatementRewriterTest::testRewriteStatementUsesShadowRowsForReadscallsSqliteTransformerTest::testCommitRewriteStateKeepsAllocatedIdentitiesAcrossProjectionscallsSqliteTransformerTest::testTransformDeletecallsSqliteTransformerTest::testTransformEmptyThrowscallsSqliteTransformerTest::testTransformInsertcallsSqliteTransformerTest::testTransformSelectcallsSqliteTransformerTest::testTransformUnsupportedThrowscallsSqliteTransformerTest::testTransformUpdatecallsSqliteTransformerTest::testTransformWithEmptyTablesReturnsOriginalcallsSqliteSessionFactoryTestcalls