classPdoExtension
final class PdoExtension
implements ExtensionInterface
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
The PDO API, which every other extension's statements eventually reach.
Methods§
public function name(): stringThe name the command line selects this extension by.
Returns
stringTest cases 1
public function description(): stringWhat the extension covers.
Returns
stringTest cases 1
public function sinks(): list<SinkSpec>The PDO calls that carry a statement or bind a value to one.
Returns
list<SinkSpec>Test cases 86
CallEvaluatorTest::testApplyPrepareHandsBackAHandleLaterCallsFindcallsCallEvaluatorTest::testApplySinkBindsWhatAQueryCallCarriescallsCallEvaluatorTest::testApplySinkHandsBackAHandleNamingThePreparingCallcallsCallEvaluatorTest::testDispatchResolvesAcrossTheImplementationsTheSourceDeclarescallsCallEvaluatorTest::testEvaluateAppliesOnlyPossibleCallWritescallsCallEvaluatorTest::testEvaluateFollowsAFreeFunctionOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFollowsAMethodOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFollowsAStaticCallOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFunctionGivesUpWhenTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateInstantiationGivesTheDriverItsTypecallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAClassNoExtensionModelscallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAModelledClassOnlyFromItsOwnBodycallsCallEvaluatorTest::testEvaluateMethodGivesUpWhenTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateReadsExternalInputThroughAFunctioncallsCallEvaluatorTest::testEvaluateRecordsAQueryCallcallsCallEvaluatorTest::testEvaluateStaticGivesUpWhenTheClassIsNotWrittencallsCallEvaluatorTest::testFollowReadsTheSameCallOnceForTheSameArgumentscallsCallEvaluatorTest::testFollowStopsAtRecursioncallsCallEvaluatorTest::testFollowStopsAtTheDepthLimitcallsCallEvaluatorTest::testRecordStatementsIgnoresACallWithoutItsStatementcallsCallEvaluatorTest::testSiteKeyOfTellsTwoCallsOnOneLineApartcallsCallEvaluatorTest::testSiteOfNamesWhereTheCallIsWrittencallsCallEvaluatorTest::testTheCallMethodsAreReachedDirectlycallsCallersTest::testOfFindsNoCallersOfAMethodWrittenOutsideAnyClasscallsCallersTest::testOfFindsTheInstantiationsOfAClassForItsConstructorcallsCallersTest::testOfKeepsTheCallsThatCanReachTheMethodInTheOrderWrittencallsCallersTest::testOfSkipsClassesAnExtensionModelscallsDeriverTest::testClassOfNamesTheNearestClassANodeIsWrittenIncallsDeriverTest::testNameOfNamesABodyTheWayItIsReportedcallsDeriverTest::testRunKeepsReadingPastTheSearchBudgetOnlyAtDepthZerocallsDeriverTest::testRunReadsTheGoalsAfterRunningEachArrivalForwardcallsDeriverTest::testScopeOfAClosureNamesTheEnclosingBodycallsDeriverTest::testScopeOfNamesTheFileTheBodyAndTheClassOfAPointcallsDeriverTest::testSolveAtExitsDoesNotHandBackWhatItFoundOnceTheBudgetRanOutcallsDeriverTest::testSolveAtExitsEvaluatesTheGoalsInTheScopeOfTheBodycallsDeriverTest::testSolveAtExitsIsRememberedApartFromSolvingAtTheBodycallsDeriverTest::testSolveAtExitsReadsGoalsAtEveryReturnAndAtTheEndcallsDeriverTest::testSolveAtExitsRemembersWhatItFoundForTheSameBodyGoalsAndDepthcallsDeriverTest::testSolveAtExitsTakesACallOfTheBodyItselfAsRecursioncallsDeriverTest::testSolveAtExitsTellsBodiesGoalsAndDepthsApartcallsDeriverTest::testSolveEvaluatesTheGoalsInTheScopeOfTheBodyThePointIsIncallsDeriverTest::testSolveForgetsWhatItFoundOnceTheBudgetRanOutcallsDeriverTest::testSolveGivesOneSolutionPerBranchWithCorrelatedValuescallsDeriverTest::testSolveKeepsTheRunsOfEveryWayInApartWhileTheBudgetAffordsThemcallsDeriverTest::testSolveLeavesAParameterNothingPassesOpenAsAParametercallsDeriverTest::testSolveLeavesAParameterOpenForTheBudgetOnceTheCallsAreTooDeepcallsDeriverTest::testSolveMarksEverySolutionTruncatedWhenCallsWereLeftOutcallsDeriverTest::testSolveMarksTheWaysInJoinedForWantOfBudgetAsCombinedcallsDeriverTest::testSolveReadsAParameterAtEveryCallOfItsBodycallsDeriverTest::testSolveReadsWhatTheGoalsNeedWithTheNamesItWasGivencallsDeriverTest::testSolveRemembersWhatItFoundForTheSamePointGoalsAndDepthcallsDeriverTest::testSolveSharesTheRunsTheBudgetAffordsAmongTheWaysIncallsDeriverTest::testSolveTakesACallOfTheBodyThePointIsInAsRecursioncallsDeriverTest::testSolveTellsPointsGoalsAndDepthsApartcallsDeriverTest::testSolveUnlessSpentGivesNothingOnceTheBudgetIsSpentcallsDeriverTest::testSolveUnlessSpentSolvesWhileTheBudgetLastscallsFreeNamesTest::testSinkArgumentsOfNamesTheArgumentsADatabaseCallsResultDependsOncallsInterpreterTest::testAnalyzeBindsWhatAnExecuteBindsToTheStatementItsHandleCameFromcallsInterpreterTest::testAnalyzeBindsWhatANullsafeExecuteBindscallsInterpreterTest::testAnalyzeGivesEveryCallTheWholeBudgetcallsInterpreterTest::testAnalyzeKeepsWhatEveryCallBindscallsInterpreterTest::testAnalyzeReadsEveryStatementFromTheCallThatIssuesItcallsInterpreterTest::testAnalyzeSpendsNoMoreThanTheBudgetItIsGivencallsInterpreterTest::testReceiverOfJoinsEveryWayTheReceiverCanBecallsInterpreterTest::testRecordStatementsFilesTheStatementsOfEveryReadingUnderThePreparedHandlecallsInterpreterTest::testRecordStatementsMarksAStatementCombinedWhenEitherTheTextOrTheReadingIscallsInterpreterTest::testRecordStatementsRecordsACallNothingCouldBeReadFromAsUnreadcallsInterpreterTest::testRecordStatementsSkipsAReadingWithoutTheStatementcallsInterpreterTest::testSinkOfTellsADatabaseCallFromAnotherCallOfTheSameNamecallsInterpreterTest::testUnidentifiedCoversANullsafeCallButNotAFunctionCallcallsInterpreterTest::testUnidentifiedIsTrueOnlyForATextCarryingCallOnSomethingUnknowncallsInterpreterTest::testVisitHandsBackWhatAnExecuteBindscallsInterpreterTest::testVisitRecordsAStatementAndHandsBackNothingToBindLatercallsInterpreterTest::testVisitRecordsNothingForACallWithoutItsStatementcallsSinkFinderTest::testEnclosingBodyFindsTheFunctionACallIsWrittenIncallsSinkFinderTest::testFindAllTakesInTheCallsThatOnlyBindValuescallsSinkFinderTest::testFindCollectsTheCallsWrittenLikeDatabaseCallscallsSinkFinderTest::testFindIgnoresACallWrittenWithoutANamecallsSinkFinderTest::testNamesOfKeepsOnlyTheCallsThatCarryAStatementcallsSinkMatcherTest::testByNameCollectsEveryCallWrittenWithThatNamecallsSinkMatcherTest::testMatchMethodFindsTheCallOnAKnownReceivercallsSinkMatcherTest::testMatchMethodIgnoresAReceiverNothingIsKnownAboutcallsSinkMatcherTest::testModelsSaysWhetherAnExtensionAlreadyStandsForTheReceivercallsExtensionInterfaceTest::testSinksAreIdentifiedUniquelyWithinAnExtensioncallsPdoExtensionTest::testEverySinkIsDescribedExactlycallsPdoExtensionTest::testSinksCoverQueryingPreparingAndBindingcalls
Calls 6
- new SinkSpec line 47
- class-const SinkCallKind::Method() line 47
- class-const SinkRole::Query() line 47
- class-const SinkRole::Prepare() line 54
- class-const SinkRole::Execute() line 63
- class-const SinkRole::Bind() line 71
public function globals(): array<string, string>The extension declares no globals.
Returns
array<string, string>Test cases 107§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 5
PdoExtensionTest::testDescriptionMentionsWhatItCoverscallsPdoExtensionTest::testEverySinkIsDescribedExactlycallsPdoExtensionTest::testGlobalsAreEmptyBecauseTheHandleIsNotReachedThroughOnecallsPdoExtensionTest::testNameIsHowTheCommandLineSelectsItcallsPdoExtensionTest::testSinksCoverQueryingPreparingAndBindingcalls
Other tests reaching this symbol 102
CatalogCommandTestcallsUsageTextTestcallsCallEvaluatorTest::testApplyPrepareHandsBackAHandleLaterCallsFindcallsCallEvaluatorTest::testApplySinkBindsWhatAQueryCallCarriescallsCallEvaluatorTest::testApplySinkHandsBackAHandleNamingThePreparingCallcallsCallEvaluatorTest::testDispatchResolvesAcrossTheImplementationsTheSourceDeclarescallsCallEvaluatorTest::testEvaluateAppliesOnlyPossibleCallWritescallsCallEvaluatorTest::testEvaluateFollowsAFreeFunctionOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFollowsAMethodOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFollowsAStaticCallOfTheAnalyzedSourcecallsCallEvaluatorTest::testEvaluateFunctionGivesUpWhenTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateInstantiationGivesTheDriverItsTypecallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAClassNoExtensionModelscallsCallEvaluatorTest::testEvaluateMethodFollowsIntoAModelledClassOnlyFromItsOwnBodycallsCallEvaluatorTest::testEvaluateMethodGivesUpWhenTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateReadsExternalInputThroughAFunctioncallsCallEvaluatorTest::testEvaluateRecordsAQueryCallcallsCallEvaluatorTest::testEvaluateStaticGivesUpWhenTheClassIsNotWrittencallsCallEvaluatorTest::testFollowReadsTheSameCallOnceForTheSameArgumentscallsCallEvaluatorTest::testFollowStopsAtRecursioncallsCallEvaluatorTest::testFollowStopsAtTheDepthLimitcallsCallEvaluatorTest::testRecordStatementsIgnoresACallWithoutItsStatementcallsCallEvaluatorTest::testSiteKeyOfTellsTwoCallsOnOneLineApartcallsCallEvaluatorTest::testSiteOfNamesWhereTheCallIsWrittencallsCallEvaluatorTest::testTheCallMethodsAreReachedDirectlycallsCallersTest::testOfFindsNoCallersOfAMethodWrittenOutsideAnyClasscallsCallersTest::testOfFindsTheInstantiationsOfAClassForItsConstructorcallsCallersTest::testOfKeepsTheCallsThatCanReachTheMethodInTheOrderWrittencallsCallersTest::testOfSkipsClassesAnExtensionModelscallsDeriverTest::testClassOfNamesTheNearestClassANodeIsWrittenIncallsDeriverTest::testNameOfNamesABodyTheWayItIsReportedcallsDeriverTest::testRunKeepsReadingPastTheSearchBudgetOnlyAtDepthZerocallsDeriverTest::testRunReadsTheGoalsAfterRunningEachArrivalForwardcallsDeriverTest::testScopeOfAClosureNamesTheEnclosingBodycallsDeriverTest::testScopeOfNamesTheFileTheBodyAndTheClassOfAPointcallsDeriverTest::testSolveAtExitsDoesNotHandBackWhatItFoundOnceTheBudgetRanOutcallsDeriverTest::testSolveAtExitsEvaluatesTheGoalsInTheScopeOfTheBodycallsDeriverTest::testSolveAtExitsIsRememberedApartFromSolvingAtTheBodycallsDeriverTest::testSolveAtExitsReadsGoalsAtEveryReturnAndAtTheEndcallsDeriverTest::testSolveAtExitsRemembersWhatItFoundForTheSameBodyGoalsAndDepthcallsDeriverTest::testSolveAtExitsTakesACallOfTheBodyItselfAsRecursioncallsDeriverTest::testSolveAtExitsTellsBodiesGoalsAndDepthsApartcallsDeriverTest::testSolveEvaluatesTheGoalsInTheScopeOfTheBodyThePointIsIncallsDeriverTest::testSolveForgetsWhatItFoundOnceTheBudgetRanOutcallsDeriverTest::testSolveGivesOneSolutionPerBranchWithCorrelatedValuescallsDeriverTest::testSolveKeepsTheRunsOfEveryWayInApartWhileTheBudgetAffordsThemcallsDeriverTest::testSolveLeavesAParameterNothingPassesOpenAsAParametercallsDeriverTest::testSolveLeavesAParameterOpenForTheBudgetOnceTheCallsAreTooDeepcallsDeriverTest::testSolveMarksEverySolutionTruncatedWhenCallsWereLeftOutcallsDeriverTest::testSolveMarksTheWaysInJoinedForWantOfBudgetAsCombinedcallsDeriverTest::testSolveReadsAParameterAtEveryCallOfItsBodycallsDeriverTest::testSolveReadsWhatTheGoalsNeedWithTheNamesItWasGivencallsDeriverTest::testSolveRemembersWhatItFoundForTheSamePointGoalsAndDepthcallsDeriverTest::testSolveSharesTheRunsTheBudgetAffordsAmongTheWaysIncallsDeriverTest::testSolveTakesACallOfTheBodyThePointIsInAsRecursioncallsDeriverTest::testSolveTellsPointsGoalsAndDepthsApartcallsDeriverTest::testSolveUnlessSpentGivesNothingOnceTheBudgetIsSpentcallsDeriverTest::testSolveUnlessSpentSolvesWhileTheBudgetLastscallsFreeNamesTest::testSinkArgumentsOfNamesTheArgumentsADatabaseCallsResultDependsOncallsExpressionEvaluatorTestcallsInterpreterTest::testAnalyzeBindsWhatAnExecuteBindsToTheStatementItsHandleCameFromcallsInterpreterTest::testAnalyzeBindsWhatANullsafeExecuteBindscallsInterpreterTest::testAnalyzeGivesEveryCallTheWholeBudgetcallsInterpreterTest::testAnalyzeKeepsWhatEveryCallBindscallsInterpreterTest::testAnalyzeReadsEveryStatementFromTheCallThatIssuesItcallsInterpreterTest::testAnalyzeSpendsNoMoreThanTheBudgetItIsGivencallsInterpreterTest::testReceiverOfJoinsEveryWayTheReceiverCanBecallsInterpreterTest::testRecordStatementsFilesTheStatementsOfEveryReadingUnderThePreparedHandlecallsInterpreterTest::testRecordStatementsMarksAStatementCombinedWhenEitherTheTextOrTheReadingIscallsInterpreterTest::testRecordStatementsRecordsACallNothingCouldBeReadFromAsUnreadcallsInterpreterTest::testRecordStatementsSkipsAReadingWithoutTheStatementcallsInterpreterTest::testSinkOfTellsADatabaseCallFromAnotherCallOfTheSameNamecallsInterpreterTest::testUnidentifiedCoversANullsafeCallButNotAFunctionCallcallsInterpreterTest::testUnidentifiedIsTrueOnlyForATextCarryingCallOnSomethingUnknowncallsInterpreterTest::testVisitHandsBackWhatAnExecuteBindscallsInterpreterTest::testVisitRecordsAStatementAndHandsBackNothingToBindLatercallsInterpreterTest::testVisitRecordsNothingForACallWithoutItsStatementcallsSinkFinderTest::testEnclosingBodyFindsTheFunctionACallIsWrittenIncallsSinkFinderTest::testFindAllTakesInTheCallsThatOnlyBindValuescallsSinkFinderTest::testFindCollectsTheCallsWrittenLikeDatabaseCallscallsSinkFinderTest::testFindIgnoresACallWrittenWithoutANamecallsSinkFinderTest::testNamesOfKeepsOnlyTheCallsThatCarryAStatementcallsSinkMatcherTest::testByNameCollectsEveryCallWrittenWithThatNamecallsSinkMatcherTest::testMatchMethodFindsTheCallOnAKnownReceivercallsSinkMatcherTest::testMatchMethodIgnoresAReceiverNothingIsKnownAboutcallsSinkMatcherTest::testModelsSaysWhetherAnExtensionAlreadyStandsForTheReceivercallsExtensionInterfaceTest::testDescriptionIsAlwaysWrittencallsExtensionInterfaceTest::testGlobalsAreDeclaredOnlyByAnExtensionThatHandsOneOutcallsExtensionInterfaceTest::testNameIsUniqueAcrossTheExtensionsThatShipcallsExtensionInterfaceTest::testSinksAreIdentifiedUniquelyWithinAnExtensioncallsExtensionRegistryTest::testDefaultNamesAreTheDriverExtensionsThatAreRegisteredcallsExtensionRegistryTest::testGetAnswersWithTheRegisteredExtensioncallsExtensionRegistryTest::testGetRefusesAnUnknownNamecallsExtensionRegistryTest::testHasReportsWhetherAnExtensionIsRegisteredcallsExtensionRegistryTest::testNamesAreAlphabeticalcallsExtensionRegistryTest::testRegisterReplacesAnExtensionOfTheSameNamecallsCallModelTestcallsAnalyzerTest::testAnalyzeSourceAllowsExtensionsToModelSqlFragmentsFromAnyCallFormcallsAnalyzerTest::testAnalyzeSourceLetsRegisteredCallModelsOwnTheirArgumentEffectscallsAnalyzerTest::testExtensionsAreTheOnesTheRunCanAskForcallsJsonReporterTestcallsTextReporterTestcalls