classPgSqlQueryGuard
final class PgSqlQueryGuard
Public API: explicitly declared with
@visibility public.Classifies PostgreSQL SQL statements into QueryKind categories.
$guard = new \ZtdQuery\Platform\Postgres\Rewrite\PgSqlQueryGuard(new \ZtdQuery\Platform\Postgres\Sql\PgSqlParser());
$guard->classify('SELECT 1') === \ZtdQuery\Rewrite\QueryKind::READ // => true
$guard->classify('DELETE FROM users') === \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED // => true
$guard->classify('BEGIN') === \ZtdQuery\Rewrite\QueryKind::SKIPPED // => true
$guard->classify('VACUUM') // => nullMethods§
public function __construct(PgSqlParser $parser)Initializes the collaborators and state used by this query guard.
Parameters
$parser | PgSqlParser |
public function classify(string $sql): ?QueryKindPublic API: explicitly declared with
@visibility public.Classify a SQL string into READ/WRITE_SIMULATED/DDL_SIMULATED/SKIPPED or null.
Parameters
$sql | string |
Returns
$guard = new \ZtdQuery\Platform\Postgres\Rewrite\PgSqlQueryGuard(new \ZtdQuery\Platform\Postgres\Sql\PgSqlParser());
$guard->classify('SELECT 1') === \ZtdQuery\Rewrite\QueryKind::READ // => true
$guard->classify('DELETE FROM users') === \ZtdQuery\Rewrite\QueryKind::WRITE_SIMULATED // => true
$guard->classify('BEGIN') === \ZtdQuery\Rewrite\QueryKind::SKIPPED // => true
$guard->classify('VACUUM') // => nullTest cases 45
ClassifyFuzzTest::testClassifyAlterTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyCreateTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyDeleteReturnsWriteSimulatedOrNullcallsClassifyFuzzTest::testClassifyDropTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyInsertReturnsWriteSimulatedOrNullcallsClassifyFuzzTest::testClassifyNeverThrowsAndIsDeterministiccallsClassifyFuzzTest::testClassifySelectReturnsReadOrNullcallsClassifyFuzzTest::testClassifyUpdateReturnsWriteSimulatedOrNullcallsRewriteCheck::verifycallsRewriteFuzzTest::testClassifyRewriteAgreementcallsPgSqlQueryGuardTest::testAlterTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testBeginClassifiesAsSkippedcallsPgSqlQueryGuardTest::testClassifiesSafeExplainAndRejectsExecutingWritecallsPgSqlQueryGuardTest::testClassifyAlterTableLowercaseIsDdlcallsPgSqlQueryGuardTest::testClassifyDropTableLowercaseIsDdlcallsPgSqlQueryGuardTest::testClassifySelectLowercaseIsReadcallsPgSqlQueryGuardTest::testClassifySetTransactionIsSkippedcallsPgSqlQueryGuardTest::testClassifyStartTransactionIsSkippedcallsPgSqlQueryGuardTest::testClassifyTruncateLowercaseIsWritecallsPgSqlQueryGuardTest::testClassifyWithDeleteIsWritecallsPgSqlQueryGuardTest::testClassifyWithSelectIsReadcallsPgSqlQueryGuardTest::testCommitClassifiesAsSkippedcallsPgSqlQueryGuardTest::testCreateTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testCreateTemporaryTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testDeleteClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testDoBlockClassifiesAsPassthroughReadcallsPgSqlQueryGuardTest::testDropTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testDropTableIfExistsClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testEmptyStringReturnsNullcallsPgSqlQueryGuardTest::testGarbageInputReturnsNullcallsPgSqlQueryGuardTest::testGarbageReturnsNullcallsPgSqlQueryGuardTest::testInsertClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testMergeClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testNullReturnFromClassifyIsDistinctFromSkippedcallsPgSqlQueryGuardTest::testReleaseSavepointClassifiesAsSkippedcallsPgSqlQueryGuardTest::testRollbackClassifiesAsSkippedcallsPgSqlQueryGuardTest::testSavepointClassifiesAsSkippedcallsPgSqlQueryGuardTest::testSelectClassifiesAsReadcallsPgSqlQueryGuardTest::testSetCommandReturnsNullcallsPgSqlQueryGuardTest::testShowCommandClassifiesAsReadcallsPgSqlQueryGuardTest::testTruncateClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testUnsupportedReturnsNullcallsPgSqlQueryGuardTest::testUpdateClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testWithInsertClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testWithSelectClassifiesAsReadcalls
Called from 1
Calls 6
- static-call PgSqlReadOnlyDiagnosticStatement::isSafe() line 46
- class-const QueryKind::READ() line 47
- method-call PgSqlParser::classifyStatement() line 49
- class-const QueryKind::WRITE_SIMULATED() line 57
- class-const QueryKind::DDL_SIMULATED() line 58
- class-const QueryKind::SKIPPED() line 59
Private surface 1§
Implementation details, listed for orientation only.
private PgSqlParser $parserTest cases 182§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 35
PgSqlQueryGuardTest::testAlterTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testBeginClassifiesAsSkippedcallsPgSqlQueryGuardTest::testClassifiesSafeExplainAndRejectsExecutingWritecallsPgSqlQueryGuardTest::testClassifyAlterTableLowercaseIsDdlcallsPgSqlQueryGuardTest::testClassifyDropTableLowercaseIsDdlcallsPgSqlQueryGuardTest::testClassifySelectLowercaseIsReadcallsPgSqlQueryGuardTest::testClassifySetTransactionIsSkippedcallsPgSqlQueryGuardTest::testClassifyStartTransactionIsSkippedcallsPgSqlQueryGuardTest::testClassifyTruncateLowercaseIsWritecallsPgSqlQueryGuardTest::testClassifyWithDeleteIsWritecallsPgSqlQueryGuardTest::testClassifyWithSelectIsReadcallsPgSqlQueryGuardTest::testCommitClassifiesAsSkippedcallsPgSqlQueryGuardTest::testCreateTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testCreateTemporaryTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testDeleteClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testDoBlockClassifiesAsPassthroughReadcallsPgSqlQueryGuardTest::testDropTableClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testDropTableIfExistsClassifiesAsDdlSimulatedcallsPgSqlQueryGuardTest::testEmptyStringReturnsNullcallsPgSqlQueryGuardTest::testGarbageInputReturnsNullcallsPgSqlQueryGuardTest::testGarbageReturnsNullcallsPgSqlQueryGuardTest::testInsertClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testMergeClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testNullReturnFromClassifyIsDistinctFromSkippedcallsPgSqlQueryGuardTest::testReleaseSavepointClassifiesAsSkippedcallsPgSqlQueryGuardTest::testRollbackClassifiesAsSkippedcallsPgSqlQueryGuardTest::testSavepointClassifiesAsSkippedcallsPgSqlQueryGuardTest::testSelectClassifiesAsReadcallsPgSqlQueryGuardTest::testSetCommandReturnsNullcallsPgSqlQueryGuardTest::testShowCommandClassifiesAsReadcallsPgSqlQueryGuardTest::testTruncateClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testUnsupportedReturnsNullcallsPgSqlQueryGuardTest::testUpdateClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testWithInsertClassifiesAsWriteSimulatedcallsPgSqlQueryGuardTest::testWithSelectClassifiesAsReadcalls
Other tests reaching this symbol 147
RewriterBench::setUpcallsClassifyFuzzTest::setUpcallsClassifyFuzzTest::testClassifyAlterTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyCreateTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyDeleteReturnsWriteSimulatedOrNullcallsClassifyFuzzTest::testClassifyDropTableReturnsDdlSimulatedOrNullcallsClassifyFuzzTest::testClassifyInsertReturnsWriteSimulatedOrNullcallsClassifyFuzzTest::testClassifyNeverThrowsAndIsDeterministiccallsClassifyFuzzTest::testClassifySelectReturnsReadOrNullcallsClassifyFuzzTest::testClassifyUpdateReturnsWriteSimulatedOrNullcallsFullPipelineFuzzTest::testCreateTableRewriteRegistersThenDmlSucceedscallsFullPipelineFuzzTest::testCreateTableThenDeleteDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenInsertDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenSelectDoesNotCrashcallsFullPipelineFuzzTest::testCreateTableThenUpdateDoesNotCrashcallsFullPipelineFuzzTest::testShadowStoreIntegrityAfterMultipleOperationscallsRewriteCheck::verifycallsRewriteFuzzTest::setUpcallsRewriteFuzzTest::testClassifyRewriteAgreementcallsPgSqlSessionFactoryTestcallsPgSqlRewriterTest::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::testValidateReadTablesRejectsUndeclaredRelationscalls
Relations§
Instantiated in 1
Method calls 1
Type declarations 4
- type ZtdQuery\Platform\Postgres\Rewrite\PgSqlRewriter packages/ztd-query-postgres/src/Rewrite/PgSqlRewriter.php:62
- type ZtdQuery\Platform\Postgres\Rewrite\PgSqlRewriter packages/ztd-query-postgres/src/Rewrite/PgSqlRewriter.php:77
- type ZtdQuery\Platform\Postgres\Rewrite\StatementRewriter packages/ztd-query-postgres/src/Rewrite/StatementRewriter.php:32
- type ZtdQuery\Platform\Postgres\Rewrite\StatementRewriter packages/ztd-query-postgres/src/Rewrite/StatementRewriter.php:45