classDeleteTransformer
final class DeleteTransformer
implements SqlTransformer
Transforms DELETE statements into SELECT projections with CTE shadowing.
PostgreSQL differences:
- USING clause instead of multi-table FROM/JOIN
- Double-quote identifiers
Methods§
public function __construct(PgSqlParser $parser, SelectTransformer $selectTransformer)Initializes the collaborators and state used by this delete transformer.
Parameters
$parser | PgSqlParser | |
$selectTransformer | SelectTransformer |
Calls 1
public function transform(string $sql, array $tables): string{@inheritDoc}
Parameters
$sql | string | |
$tables | array |
Returns
stringThrows
Test cases 5
DeleteTransformerTest::testTransformAppliesCteShadowingcallsDeleteTransformerTest::testTransformCoalesceUsesTableContextColumnscallsDeleteTransformerTest::testTransformThrowsOnUnresolvableTargetcallsDeleteTransformerTest::testTransformWithEmptyTableContextcallsDeleteTransformerTest::testTransformWithoutColumnsInContextUsesWildcardcalls
Called from 1
Calls 5
- method-call PgSqlParser::extractDeleteTable() line 43
- new UnsupportedSqlException line 45
- method-call DeleteTransformer::buildProjection() line 49
- method-call SelectTransformer::transform() line 51
- method-call PgSqlCteShadowComposer::carryPrefix() line 52
public function buildProjection(
string $sql,
string $targetTable,
array<int, string> $columns,
): array{sql: string, table: string, tables: array<string, array{alias: string}>}Build a result-select SQL from a DELETE statement.
Parameters
$sql | string | |
$targetTable | string | |
$columns | array<int, string> |
Returns
array{sql: string, table: string, tables: array<string, array{alias: string}>}Test cases 13
DeleteTransformerTest::testBuildProjectionEmptyColumnsWildcardcallsDeleteTransformerTest::testBuildProjectionExactOutputSimplecallsDeleteTransformerTest::testBuildProjectionExactOutputWithAliascallsDeleteTransformerTest::testBuildProjectionExactOutputWithUsingcallsDeleteTransformerTest::testBuildProjectionNoWherecallsDeleteTransformerTest::testBuildProjectionReturnsTablesArraycallsDeleteTransformerTest::testBuildProjectionSimpleDeletecallsDeleteTransformerTest::testBuildProjectionUsesDoubleQuoteIdentifierscallsDeleteTransformerTest::testBuildProjectionWithAliascallsDeleteTransformerTest::testBuildProjectionWithAliasReturnsAliasInTablescallsDeleteTransformerTest::testBuildProjectionWithEmptyColumnsUsesWildcardcallsDeleteTransformerTest::testBuildProjectionWithNoWhereClausecallsDeleteTransformerTest::testBuildProjectionWithUsingClausecalls
Called from 1
Calls 4
- method-call PgSqlParser::extractDeleteAlias() line 65
- function-call
implodeline 74 - method-call PgSqlParser::extractDeleteUsingClause() line 83
- method-call PgSqlParser::extractWhereClause() line 89
Private surface 3§
Implementation details, listed for orientation only.
private PgSqlParser $parserprivate SelectTransformer $selectTransformerprivate PgSqlCteShadowComposer $cteComposerTest cases 162§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 18
DeleteTransformerTest::testBuildProjectionEmptyColumnsWildcardcallsDeleteTransformerTest::testBuildProjectionExactOutputSimplecallsDeleteTransformerTest::testBuildProjectionExactOutputWithAliascallsDeleteTransformerTest::testBuildProjectionExactOutputWithUsingcallsDeleteTransformerTest::testBuildProjectionNoWherecallsDeleteTransformerTest::testBuildProjectionReturnsTablesArraycallsDeleteTransformerTest::testBuildProjectionSimpleDeletecallsDeleteTransformerTest::testBuildProjectionUsesDoubleQuoteIdentifierscallsDeleteTransformerTest::testBuildProjectionWithAliascallsDeleteTransformerTest::testBuildProjectionWithAliasReturnsAliasInTablescallsDeleteTransformerTest::testBuildProjectionWithEmptyColumnsUsesWildcardcallsDeleteTransformerTest::testBuildProjectionWithNoWhereClausecallsDeleteTransformerTest::testBuildProjectionWithUsingClausecallsDeleteTransformerTest::testTransformAppliesCteShadowingcallsDeleteTransformerTest::testTransformCoalesceUsesTableContextColumnscallsDeleteTransformerTest::testTransformThrowsOnUnresolvableTargetcallsDeleteTransformerTest::testTransformWithEmptyTableContextcallsDeleteTransformerTest::testTransformWithoutColumnsInContextUsesWildcardcalls
Other tests reaching this symbol 144
RewriterBench::setUpcallsFullPipelineFuzzTest::testCreateTableRewriteRegistersThenDmlSucceedscallsFullPipelineFuzzTest::testCreateTableThenDeleteDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenInsertDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenSelectDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenUpdateDoesNotCrashcallsFullPipelineFuzzTest::testShadowStoreIntegrityAfterMultipleOperationscallsRewriteCheck::verifycallsRewriteFuzzTest::setUpcallsPgSqlSessionFactoryTestcallsPgSqlRewriterTest::testAlterTableThrowsUnsupportedcallsPgSqlRewriterTest::testBuildTableContextMergesRegistryAndShadowcallsPgSqlRewriterTest::testBuildTableContextRegistryAndShadowBothIncludedcallsPgSqlRewriterTest::testBuildTableContextRegistryOnlyNoShadowcallsPgSqlRewriterTest::testBuildTableContextShadowOnlyDerivesDifferentColumnsAcrossRowscallsPgSqlRewriterTest::testBuildTableContextShadowOnlyDifferentColumnKeyscallsPgSqlRewriterTest::testBuildTableContextShadowOnlyDifferentColumnKeysDetailedcallsPgSqlRewriterTest::testBuildTableContextShadowOnlyWithEmptyRowsNoCtecallsPgSqlRewriterTest::testBuildTableContextShadowOnlyWithRowsDeriveColumnscallsPgSqlRewriterTest::testChildPartitionSelectUsesFilteredParentShadowSourcecallsPgSqlRewriterTest::testChildPartitionWriteMutationTargetsRootParentcallsPgSqlRewriterTest::testCommitIsSkippedcallsPgSqlRewriterTest::testCommitRewriteStateRetainsAllocatedSequenceValuescallsPgSqlRewriterTest::testCreateTableAsSelectNoShadowReturnsSqlWhereFalsecallsPgSqlRewriterTest::testCreateTableAsSelectReturnsDdlWithTransformedSqlcallsPgSqlRewriterTest::testCreateTableAsSelectTransformsSelectPartcallsPgSqlRewriterTest::testCreateTableAsSelectWithRegisteredSourceTablecallsPgSqlRewriterTest::testCreateTableNotAsSelectReturnsSqlWhereFalsecallsPgSqlRewriterTest::testCreateTableReturnsDdlSimulatedcallsPgSqlRewriterTest::testCreateTableReturnsSelectOneWhereFalsecallsPgSqlRewriterTest::testCreateTableWithoutAsSelectReturnsSqlWhereFalsecallsPgSqlRewriterTest::testCteReferencesAreMatchedCaseInsensitivelyDuringSchemaValidationcallsPgSqlRewriterTest::testDefaultPartitionExcludesOnlySpecificSiblingsOfSameParentcallsPgSqlRewriterTest::testDeleteEnsuresDmlTargetInShadowStorecallsPgSqlRewriterTest::testDeleteEnsuresDmlTargetIsCalledForDeletecallsPgSqlRewriterTest::testDeleteEnsuresDmlTargetViaShadowStorecallsPgSqlRewriterTest::testDeleteMutationTableNamecallsPgSqlRewriterTest::testDeleteResolvesTargetAfterBlockCommentcallsPgSqlRewriterTest::testDeleteReturnsWriteSimulatedWithMutationcallsPgSqlRewriterTest::testDeleteSqlIsTransformedcallsPgSqlRewriterTest::testDoBlockPassesThroughWithoutInspectingBodyTablescallsPgSqlRewriterTest::testDropTableReturnsDdlSimulatedcallsPgSqlRewriterTest::testDropTableReturnsSelectOneWhereFalsecallsPgSqlRewriterTest::testDropTableThenCreateDoesNotThrowcallsPgSqlRewriterTest::testEmptyInputThrowsExceptioncallsPgSqlRewriterTest::testEmptyResultSelectProducesNoRowscallsPgSqlRewriterTest::testExplainPassesThroughUnchangedcallsPgSqlRewriterTest::testGeneratedExpressionIsPresentBeforeTheFirstShadowWritecallsPgSqlRewriterTest::testInsertDoesNotCallEnsureDmlTargetcallsPgSqlRewriterTest::testInsertMutationTableNamecallsPgSqlRewriterTest::testInsertResolvesTargetAfterBlockCommentcallsPgSqlRewriterTest::testInsertResultSelectContainsColumnNamescallsPgSqlRewriterTest::testInsertReturnsWriteSimulatedWithMutationcallsPgSqlRewriterTest::testInsertRewriteOutputContainsSelectcallsPgSqlRewriterTest::testInsertSqlIsTransformedcallsPgSqlRewriterTest::testLateralDerivedTableKeepsNestedPhysicalRelationInShadowScopecallsPgSqlRewriterTest::testMergeBuildsAtomicSynchronizationPlancallsPgSqlRewriterTest::testMultiStatementThrowsExceptioncallsPgSqlRewriterTest::testNestedPartitionInsertAllocatesIdentityFromRootRowscallsPgSqlRewriterTest::testReadPlanHasNoMutationcallsPgSqlRewriterTest::testRegisteredTableUpsertProjectsConflictExpressioncallsPgSqlRewriterTest::testRegisteredViewIsKnownAndMaterializedcallsPgSqlRewriterTest::testRewriteCreateTableAsSelectNonCreateStatementDoesNotEnterCtasBranchcallsPgSqlRewriterTest::testRewriteDeleteEnsuresShadowStoreEntrycallsPgSqlRewriterTest::testRewriteDeleteReturnsWriteSimulatedcallsPgSqlRewriterTest::testRewriteDropTableReturnsSelectWhereFalsecallsPgSqlRewriterTest::testRewriteEmptyInputForRewriteMultipleThrowscallsPgSqlRewriterTest::testRewriteInsertDoesNotCallEnsureDmlTargetcallsPgSqlRewriterTest::testRewriteInsertReturnsWriteSimulatedcallsPgSqlRewriterTest::testRewriteInsertUsesDefaultsFromRegistryWithoutShadowRowscallsPgSqlRewriterTest::testRewriteInsertUsesIdentityStrategyFromRegistryWithoutShadowRowscallsPgSqlRewriterTest::testRewriteIsDeterministiccallsPgSqlRewriterTest::testRewriteLeadingWhitespaceTrimsBeforeClassifycallsPgSqlRewriterTest::testRewriteMultiplecallsPgSqlRewriterTest::testRewriteMultipleAllReadStatementscallsPgSqlRewriterTest::testRewriteMultipleEmptycallsPgSqlRewriterTest::testRewriteMultipleEmptyStringThrowscallsPgSqlRewriterTest::testRewriteMultipleLeadingWhitespaceTrimsBeforeClassifycallsPgSqlRewriterTest::testRewriteMultipleMultiStatementcallsPgSqlRewriterTest::testRewriteMultipleSingleStatementcallsPgSqlRewriterTest::testRewriteMultipleWhitespaceOnlyThrowscallsPgSqlRewriterTest::testRewriteMultipleWithDdlcallsPgSqlRewriterTest::testRewriteMultipleWithLeadingTrailingWhitespaceProducesValidSqlcallsPgSqlRewriterTest::testRewriteMultipleWithLeadingWhitespacecallsPgSqlRewriterTest::testRewriteMultipleWithOnlyWhitespaceThrowsAfterTrimcallsPgSqlRewriterTest::testRewriteOutputIsNonEmptycallsPgSqlRewriterTest::testRewriteUpdateEnsuresShadowStoreEntrycallsPgSqlRewriterTest::testRewriteUpdateReturnsWriteSimulatedcallsPgSqlRewriterTest::testRewriteWhitespaceOnlyThrowscallsPgSqlRewriterTest::testRewriteWithLeadingTrailingWhitespaceProducesValidSqlcallsPgSqlRewriterTest::testRewriteWithLeadingWhitespacecallsPgSqlRewriterTest::testRewriteWithLeadingWhitespaceTrimsFirstcallsPgSqlRewriterTest::testRewriteWithOnlyWhitespaceThrowsAfterTrimcallsPgSqlRewriterTest::testRollbackIsSkippedcallsPgSqlRewriterTest::testSchemaQualifiedSelectUsesShadowCtecallsPgSqlRewriterTest::testSelectIgnoresSqlKeywordsInsideLeadingLineCommentcallsPgSqlRewriterTest::testSelectReturnsReadKindcallsPgSqlRewriterTest::testSelectRewritesTableAfterBlockCommentcallsPgSqlRewriterTest::testSelectTableExistsInBothRegistryAndShadowcallsPgSqlRewriterTest::testSelectTableExistsInRegistryOnlycallsPgSqlRewriterTest::testSelectTableExistsInShadowStoreNotRegistrycallsPgSqlRewriterTest::testSelectTransformsCteWithShadowDatacallsPgSqlRewriterTest::testSelectUnknownTableWithSchemaContextThrowscallsPgSqlRewriterTest::testSelectUnknownTableWithShadowContextThrowscallsPgSqlRewriterTest::testSelectWithEmptyShadowGeneratesEmptyCtecallsPgSqlRewriterTest::testSelectWithMultiRowShadowUsesValuescallsPgSqlRewriterTest::testSelectWithNoSchemaContextPassesThroughcallsPgSqlRewriterTest::testSelectWithShadowOnlyDataDerivesColumnscallsPgSqlRewriterTest::testSelectWithShadowOnlyDataMergesColumnsAcrossRowscallsPgSqlRewriterTest::testSelectWithShadowOnlyHasSchemaContextcallsPgSqlRewriterTest::testShowPassesThroughUnchangedcallsPgSqlRewriterTest::testSkippedStatementPassesThroughcallsPgSqlRewriterTest::testSplitStatementsPreservesQuotedSemicolonscallsPgSqlRewriterTest::testStoredTableUpsertProjectsConflictExpressioncallsPgSqlRewriterTest::testTableFunctionDoesNotHideJoinedShadowRelationcallsPgSqlRewriterTest::testTransactionStatementParsesShadowTransactionOperationscallsPgSqlRewriterTest::testTruncateMutationTableNamecallsPgSqlRewriterTest::testTruncateReturnsSelectOneWhereFalsecallsPgSqlRewriterTest::testTruncateReturnsSelectWhereFalsecallsPgSqlRewriterTest::testTruncateReturnsWriteSimulatedWithMutationcallsPgSqlRewriterTest::testUnknownTableAfterDeclaredCteIsRejectedcallsPgSqlRewriterTest::testUnsupportedSqlThrowsExceptioncallsPgSqlRewriterTest::testUpdateDoesNotPromoteMaterializedUnknownTablecallsPgSqlRewriterTest::testUpdateEnsuresDmlTargetInShadowStorecallsPgSqlRewriterTest::testUpdateEnsuresDmlTargetIsCalledForUpdatecallsPgSqlRewriterTest::testUpdateEnsuresDmlTargetViaShadowStorecallsPgSqlRewriterTest::testUpdateMutationTableNamecallsPgSqlRewriterTest::testUpdatePreservesDollarQuotedStringBeforeWherecallsPgSqlRewriterTest::testUpdatePreservesDoubledQuoteStringBeforeWherecallsPgSqlRewriterTest::testUpdatePreservesEscapeStringBeforeWherecallsPgSqlRewriterTest::testUpdateResolvesTargetAfterBlockCommentcallsPgSqlRewriterTest::testUpdateReturnsWriteSimulatedWithMutationcallsPgSqlRewriterTest::testUpdateSqlIsTransformedcallsPgSqlRewriterTest::testWritePlanHasNonNullMutationcallsStatementRewriterTest::testRewriteMutationStagesDdlUntilItIsAppliedcallsStatementRewriterTest::testRewriteStatementShadowsRegisteredTablescallsStatementRewriterTest::testValidateReadTablesRejectsUndeclaredRelationscallsPgSqlTransformerTest::testCommitRewriteStateCommitsGeneratedIdentityValuescallsPgSqlTransformerTest::testTransformDeleteDelegatesToDeleteTransformercallsPgSqlTransformerTest::testTransformInsertDelegatesToInsertTransformercallsPgSqlTransformerTest::testTransformMergeDelegatesToMergeTransformercallsPgSqlTransformerTest::testTransformSelectDelegatesToSelectTransformercallsPgSqlTransformerTest::testTransformUnsupportedStatementThrowscallsPgSqlTransformerTest::testTransformUpdateDelegatesToUpdateTransformercalls