Showing preview only (4,725K chars total). Download the full file or copy to clipboard to get everything.
Repository: felipebz/zpa
Branch: main
Commit: 5681ce11ba0e
Files: 5068
Total size: 3.2 MB
Directory structure:
gitextract_qvtk4j1w/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── renovate.json
│ └── workflows/
│ └── build.yml
├── .gitignore
├── .gitmodules
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── LICENSE_HEADER
├── README.md
├── build-logic/
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── src/
│ └── main/
│ └── kotlin/
│ └── com/
│ └── felipebz/
│ └── zpa/
│ ├── build-conventions.gradle.kts
│ ├── jreleaser-conventions.gradle.kts
│ ├── kotlin-conventions.gradle.kts
│ ├── license-conventions.gradle.kts
│ ├── publishing-conventions.gradle.kts
│ ├── sonarqube-conventions.gradle.kts
│ └── testing-conventions.gradle.kts
├── build.gradle.kts
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── plsql-custom-rules/
│ ├── README.md
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── pom.xml
│ ├── settings.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── company/
│ │ │ └── plsql/
│ │ │ ├── ForbiddenDmlCheck.java
│ │ │ ├── PlSqlCustomRulesDefinition.java
│ │ │ └── PlSqlCustomRulesPlugin.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── extensions.idx
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── company/
│ │ └── plsql/
│ │ ├── ForbiddenDmlCheckTest.java
│ │ ├── PlSqlCustomRulesDefinitionTest.java
│ │ └── PlSqlCustomRulesPluginTest.java
│ └── resources/
│ └── forbidden-dml.sql
├── settings.gradle.kts
├── sonar-zpa-plugin/
│ ├── build.gradle.kts
│ └── src/
│ ├── integrationTest/
│ │ ├── kotlin/
│ │ │ └── com/
│ │ │ └── felipebz/
│ │ │ └── zpa/
│ │ │ └── it/
│ │ │ ├── IssueTest.kt
│ │ │ ├── MetricsTest.kt
│ │ │ └── Tests.kt
│ │ └── resources/
│ │ ├── com/
│ │ │ └── felipebz/
│ │ │ └── zpa/
│ │ │ └── it/
│ │ │ ├── empty-profile.xml
│ │ │ └── it-profile.xml
│ │ └── projects/
│ │ └── metrics/
│ │ ├── coverage.xml
│ │ ├── src/
│ │ │ ├── betwnstr.sql
│ │ │ ├── custom_rule.sql
│ │ │ ├── source1.sql
│ │ │ └── source2.sql
│ │ ├── test/
│ │ │ └── test_betwnstr.sql
│ │ └── test_results.xml
│ ├── main/
│ │ └── kotlin/
│ │ └── com/
│ │ └── felipebz/
│ │ └── zpa/
│ │ ├── PlSql.kt
│ │ ├── PlSqlPlugin.kt
│ │ ├── PlSqlProfile.kt
│ │ ├── PlSqlRuleRepository.kt
│ │ ├── PlSqlSquidSensor.kt
│ │ ├── SonarQubeUtils.kt
│ │ ├── api/
│ │ │ └── CustomPlSqlRulesDefinition.kt
│ │ ├── highlight/
│ │ │ └── PlSqlHighlighterVisitor.kt
│ │ ├── log/
│ │ │ ├── SonarQubeLogger.kt
│ │ │ └── SonarQubeLoggers.kt
│ │ ├── metrics/
│ │ │ └── CpdVisitor.kt
│ │ ├── rules/
│ │ │ ├── SonarQubeActiveRuleAdapter.kt
│ │ │ ├── SonarQubeActiveRulesAdapter.kt
│ │ │ ├── SonarQubeRepositoryAdapter.kt
│ │ │ ├── SonarQubeRuleAdapter.kt
│ │ │ ├── SonarQubeRuleKeyAdapter.kt
│ │ │ ├── SonarQubeRuleMetadataLoader.kt
│ │ │ └── SonarQubeRuleParamAdapter.kt
│ │ ├── squid/
│ │ │ ├── PlSqlAstScanner.kt
│ │ │ └── SonarQubePlSqlFile.kt
│ │ ├── symbols/
│ │ │ ├── MappedObject.kt
│ │ │ ├── ObjectLocator.kt
│ │ │ └── SonarQubeSymbolTable.kt
│ │ └── utplsql/
│ │ ├── AbstractReportImporter.kt
│ │ ├── CoverageReport.kt
│ │ ├── CoverageResultImporter.kt
│ │ ├── TestExecutionReport.kt
│ │ ├── TestResultImporter.kt
│ │ └── UtPlSqlSensor.kt
│ └── test/
│ ├── kotlin/
│ │ └── com/
│ │ └── felipebz/
│ │ └── zpa/
│ │ ├── CustomAnnotationBasedRulesDefinitionTest.kt
│ │ ├── PlSqlChecksTest.kt
│ │ ├── PlSqlPluginTest.kt
│ │ ├── PlSqlProfileTest.kt
│ │ ├── PlSqlSquidSensorTest.kt
│ │ ├── PlSqlTest.kt
│ │ ├── api/
│ │ │ └── CustomPlSqlRulesDefinitionTest.kt
│ │ ├── highlight/
│ │ │ └── PlSqlHighlighterVisitorTest.kt
│ │ ├── metrics/
│ │ │ └── CpdVisitorTest.kt
│ │ ├── symbols/
│ │ │ └── SonarQubeSymbolTableTest.kt
│ │ └── utplsql/
│ │ └── UtPlSqlSensorTest.kt
│ └── resources/
│ ├── com/
│ │ └── felipebz/
│ │ └── zpa/
│ │ ├── code.sql
│ │ ├── test.sql
│ │ └── utplsql/
│ │ ├── award_bonus.sql
│ │ ├── betwnstr.sql
│ │ ├── coverage-report-all-uncovered.xml
│ │ ├── coverage-report-with-paths.xml
│ │ ├── coverage-report-without-paths.xml
│ │ ├── test-report-with-paths.xml
│ │ └── test-report-without-paths.xml
│ ├── highlight/
│ │ └── highlight.sql
│ ├── metrics/
│ │ └── cpd.sql
│ └── org/
│ └── sonar/
│ └── l10n/
│ ├── languageKey/
│ │ └── rules/
│ │ ├── plsql/
│ │ │ └── ruleWithExternalInfo.html
│ │ └── repoKey/
│ │ └── ruleWithExternalInfo.html
│ ├── languageKey.properties
│ └── languageWithoutBundle/
│ └── empty.txt
├── template/
│ └── changelog.tpl
├── zpa-checks/
│ ├── build.gradle.kts
│ └── src/
│ ├── integrationTest/
│ │ ├── kotlin/
│ │ │ └── com/
│ │ │ └── felipebz/
│ │ │ └── zpa/
│ │ │ └── it/
│ │ │ ├── InputFile.kt
│ │ │ ├── OracleDocsExtractor.kt
│ │ │ └── PlSqlRulingTest.kt
│ │ └── resources/
│ │ ├── expected/
│ │ │ ├── alexandria-plsql-utils/
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── CollapsibleIfStatementsCheck.json
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── ComparisonWithBooleanCheck.json
│ │ │ │ ├── ComparisonWithNullCheck.json
│ │ │ │ ├── ConcatenationWithNullCheck.json
│ │ │ │ ├── DbmsOutputPutCheck.json
│ │ │ │ ├── DeadCodeCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── FunctionWithOutParameterCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ │ ├── NvlWithNullParameterCheck.json
│ │ │ │ ├── ParsingErrorCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── SelectAllColumnsCheck.json
│ │ │ │ ├── UnnecessaryAliasInQueryCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnnecessaryNullStatementCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── UselessParenthesisCheck.json
│ │ │ │ ├── VariableHidingCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ ├── antlr-grammars-v4/
│ │ │ │ ├── AddParenthesesInNestedExpressionCheck.json
│ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── CursorBodyInPackageSpecCheck.json
│ │ │ │ ├── DbmsOutputPutCheck.json
│ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── IdenticalExpressionCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ │ ├── ParsingErrorCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── SelectAllColumnsCheck.json
│ │ │ │ ├── ToDateWithoutFormatCheck.json
│ │ │ │ ├── UnnecessaryAliasInQueryCheck.json
│ │ │ │ ├── UnnecessaryLikeCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ └── UselessParenthesisCheck.json
│ │ │ ├── demo0001/
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── InvalidReferenceToObjectCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ ├── demo0002/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0002_2/
│ │ │ │ └── EmptyBlockCheck.json
│ │ │ ├── demo0003/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0004/
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── RaiseStandardExceptionCheck.json
│ │ │ │ ├── ReturnOfBooleanExpressionCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0005/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ └── InvalidReferenceToObjectCheck.json
│ │ │ ├── demo0006/
│ │ │ │ └── QueryWithoutExceptionHandlingCheck.json
│ │ │ ├── demo0007/
│ │ │ │ └── InequalityUsageCheck.json
│ │ │ ├── demo0008/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── InvalidReferenceToObjectCheck.json
│ │ │ │ └── UnusedVariableCheck.json
│ │ │ ├── demo0009/
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── CollapsibleIfStatementsCheck.json
│ │ │ │ ├── DeadCodeCheck.json
│ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── VariableHidingCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ ├── demo0010/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0011/
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── InvalidReferenceToObjectCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ ├── demo0012/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0013/
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ ├── VariableInitializationWithNullCheck.json
│ │ │ │ └── VariableNameCheck.json
│ │ │ ├── demo0014/
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0016/
│ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── InvalidReferenceToObjectCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ └── VariableInitializationWithFunctionCallCheck.json
│ │ │ ├── demo0017/
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── CollapsibleIfStatementsCheck.json
│ │ │ │ ├── DuplicatedValueInInCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── InvalidReferenceToObjectCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ └── UnusedVariableCheck.json
│ │ │ ├── demo0018/
│ │ │ │ └── InvalidReferenceToObjectCheck.json
│ │ │ ├── oracle-database_23/
│ │ │ │ ├── AddParenthesesInNestedExpressionCheck.json
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── ComparisonWithBooleanCheck.json
│ │ │ │ ├── ComparisonWithNullCheck.json
│ │ │ │ ├── ConcatenationWithNullCheck.json
│ │ │ │ ├── CursorBodyInPackageSpecCheck.json
│ │ │ │ ├── DbmsOutputPutCheck.json
│ │ │ │ ├── DeadCodeCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── FunctionWithOutParameterCheck.json
│ │ │ │ ├── IdenticalExpressionCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ │ ├── ParsingErrorCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── RaiseStandardExceptionCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── SameConditionCheck.json
│ │ │ │ ├── SelectAllColumnsCheck.json
│ │ │ │ ├── SelectWithRownumAndOrderByCheck.json
│ │ │ │ ├── ToDateWithoutFormatCheck.json
│ │ │ │ ├── UnhandledUserDefinedExceptionCheck.json
│ │ │ │ ├── UnnecessaryAliasInQueryCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnnecessaryLikeCheck.json
│ │ │ │ ├── UnusedCursorCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── VariableHidingCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ ├── VariableInitializationWithNullCheck.json
│ │ │ │ └── VariableNameCheck.json
│ │ │ ├── pljson/
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── CollapsibleIfStatementsCheck.json
│ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── ComparisonWithBooleanCheck.json
│ │ │ │ ├── ComparisonWithNullCheck.json
│ │ │ │ ├── DbmsOutputPutCheck.json
│ │ │ │ ├── DeadCodeCheck.json
│ │ │ │ ├── EmptyStringAssignmentCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── FunctionWithOutParameterCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── ReturnOfBooleanExpressionCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── SelectAllColumnsCheck.json
│ │ │ │ ├── ToDateWithoutFormatCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── VariableHidingCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ ├── utPLSQL2/
│ │ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json
│ │ │ │ ├── CommitRollbackCheck.json
│ │ │ │ ├── CursorBodyInPackageSpecCheck.json
│ │ │ │ ├── DbmsOutputPutCheck.json
│ │ │ │ ├── DeadCodeCheck.json
│ │ │ │ ├── EmptyBlockCheck.json
│ │ │ │ ├── ExplicitInParameterCheck.json
│ │ │ │ ├── FunctionWithOutParameterCheck.json
│ │ │ │ ├── IfWithExitCheck.json
│ │ │ │ ├── InequalityUsageCheck.json
│ │ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ │ ├── ParsingErrorCheck.json
│ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ │ ├── RaiseStandardExceptionCheck.json
│ │ │ │ ├── SameBranchCheck.json
│ │ │ │ ├── SelectAllColumnsCheck.json
│ │ │ │ ├── UnhandledUserDefinedExceptionCheck.json
│ │ │ │ ├── UnnecessaryAliasInQueryCheck.json
│ │ │ │ ├── UnnecessaryElseCheck.json
│ │ │ │ ├── UnnecessaryNullStatementCheck.json
│ │ │ │ ├── UnusedParameterCheck.json
│ │ │ │ ├── UnusedVariableCheck.json
│ │ │ │ ├── VariableHidingCheck.json
│ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ │ └── VariableInitializationWithNullCheck.json
│ │ │ └── utPLSQL3/
│ │ │ ├── AddParenthesesInNestedExpressionCheck.json
│ │ │ ├── CharacterDatatypeUsageCheck.json
│ │ │ ├── CommitRollbackCheck.json
│ │ │ ├── ComparisonWithBooleanCheck.json
│ │ │ ├── ComparisonWithNullCheck.json
│ │ │ ├── ConcatenationWithNullCheck.json
│ │ │ ├── DbmsOutputPutCheck.json
│ │ │ ├── EmptyBlockCheck.json
│ │ │ ├── ExplicitInParameterCheck.json
│ │ │ ├── FunctionWithOutParameterCheck.json
│ │ │ ├── IdenticalExpressionCheck.json
│ │ │ ├── InequalityUsageCheck.json
│ │ │ ├── InsertWithoutColumnsCheck.json
│ │ │ ├── ParsingErrorCheck.json
│ │ │ ├── QueryWithoutExceptionHandlingCheck.json
│ │ │ ├── RaiseStandardExceptionCheck.json
│ │ │ ├── SameBranchCheck.json
│ │ │ ├── SelectAllColumnsCheck.json
│ │ │ ├── ToDateWithoutFormatCheck.json
│ │ │ ├── UnhandledUserDefinedExceptionCheck.json
│ │ │ ├── UnnecessaryAliasInQueryCheck.json
│ │ │ ├── UnnecessaryElseCheck.json
│ │ │ ├── UnnecessaryLikeCheck.json
│ │ │ ├── UnnecessaryNullStatementCheck.json
│ │ │ ├── UnusedParameterCheck.json
│ │ │ ├── UnusedVariableCheck.json
│ │ │ ├── VariableHidingCheck.json
│ │ │ ├── VariableInitializationWithFunctionCallCheck.json
│ │ │ └── VariableInitializationWithNullCheck.json
│ │ └── sources/
│ │ ├── Doag-Forms-extracted/
│ │ │ ├── README.md
│ │ │ ├── demo0001/
│ │ │ │ └── WEBUTIL_DEMO/
│ │ │ │ ├── ABOUT/
│ │ │ │ │ └── ABOUT__ABOUT_BUTTON__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── BROWSER/
│ │ │ │ │ ├── BROWSER__APPLET_PARAMS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BROWSER__BROWSER_MESSAGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── BROWSER__SEPARATE_FRAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── BUILTINS/
│ │ │ │ │ ├── BUILTINS__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BUILTINS__GET_TOOL_ENV__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BUILTINS__READ_IMAGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── BUILTINS__TEXT_IO_BUTTON__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CLIENTINFO/
│ │ │ │ │ └── CLIENTINFO__ACTION__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CLIENT_GETENV.pcd
│ │ │ │ ├── CLIENT_READIMAGE.pcd
│ │ │ │ ├── CLIENT_TEXTIO.pcd
│ │ │ │ ├── CTL/
│ │ │ │ │ ├── CTL__ACKNOWLEDGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT10__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT1__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT2__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT3__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT4__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT5__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT6__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT7__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT8__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── CTL__EXIT9__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── C_API/
│ │ │ │ │ ├── C_API__CALL_C_API__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── C_API__LOCKSTATION__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── DOWNLOAD/
│ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_AS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_DB__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── DOWNLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── DOWNLOAD_AS.pcd
│ │ │ │ ├── DOWNLOAD_DB.pcd
│ │ │ │ ├── FILES/
│ │ │ │ │ ├── FILES__COPY_FILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__DELETE_FILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_INFO__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_OPEN__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_SAVE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__LIST_DIRS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── FILES__LIST_FILES__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── FILES_WBP.pcd
│ │ │ │ ├── F_GET_TIMER_VALUE.fun
│ │ │ │ ├── GET_APPLET_PARAMETERS.pcd
│ │ │ │ ├── GET_CLIENTINFO.pcd
│ │ │ │ ├── GET_CLIENT_FILENAME.pcd
│ │ │ │ ├── HOST/
│ │ │ │ │ ├── HOST__HOST_CALLBACK.tgg
│ │ │ │ │ └── HOST__RUN_HOST__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── SEPARATE_FRAME_OPTIONS.pcd
│ │ │ │ ├── SET_BROWSER_MESSAGE.pcd
│ │ │ │ ├── UPLOAD/
│ │ │ │ │ ├── UPLOAD__CREATE_TABLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── UPLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── UPLOAD__UPLOAD_AS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── UPLOAD__UPLOAD_DB__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── UPLOAD_AS.pcd
│ │ │ │ ├── UPLOAD_DB.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ ├── WEBUTIL_DEMO/
│ │ │ │ │ ├── PRE-FORM.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-TAB-PAGE-CHANGED.tgg
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0002/
│ │ │ │ ├── DEMO0002/
│ │ │ │ │ ├── BL_EMPLOYEES.pkb
│ │ │ │ │ ├── BL_EMPLOYEES.pks
│ │ │ │ │ ├── BL_MAINBLOCK.pkb
│ │ │ │ │ ├── BL_MAINBLOCK.pks
│ │ │ │ │ ├── CONST_LOCAL.pks
│ │ │ │ │ ├── CONTROL/
│ │ │ │ │ │ ├── CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ │ └── CONTROL__BT_WIKI__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── DEMO0002/
│ │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ │ ├── EMPLOYEES/
│ │ │ │ │ │ └── EMPLOYEES__PRE-QUERY.tgg
│ │ │ │ │ ├── FILTER/
│ │ │ │ │ │ ├── FILTER__BT_QUERY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ │ └── FILTER__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── VERSION_FRW_FORMS.fun
│ │ │ │ │ ├── WHEN_TIMER_EXPIRED.pcd
│ │ │ │ │ ├── WNB.pcd
│ │ │ │ │ ├── WNF.pcd
│ │ │ │ │ ├── WNI.pcd
│ │ │ │ │ ├── WNR.pcd
│ │ │ │ │ └── metadata.json
│ │ │ │ └── FRW_REF/
│ │ │ │ ├── FRW_REF/
│ │ │ │ │ ├── ON-ERROR.tgg
│ │ │ │ │ ├── WHEN-NEW-BLOCK-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ └── WHEN-NEW-RECORD-INSTANCE.tgg
│ │ │ │ ├── WNB.pcd
│ │ │ │ ├── WNF.pcd
│ │ │ │ ├── WNI.pcd
│ │ │ │ ├── WNR.pcd
│ │ │ │ └── metadata.json
│ │ │ ├── demo0003/
│ │ │ │ └── DEMO0003/
│ │ │ │ ├── BL_MAINBLOCK.pkb
│ │ │ │ ├── BL_MAINBLOCK.pks
│ │ │ │ ├── CONST_LOCAL.pks
│ │ │ │ ├── CONTROL/
│ │ │ │ │ ├── CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__BT_ONE_TIME_TIMER__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__BT_UNDO__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__BT_WIKI__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── CONTROL__BT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── DEMO0003/
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ ├── EMPLOYEES_CONTROL/
│ │ │ │ │ ├── EMPLOYEES_CONTROL__BT_UNDO__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── EMPLOYEES_CONTROL__ITEM47__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── EMPLOYEES_LI/
│ │ │ │ │ └── EMPLOYEES_LI__PRE-QUERY.tgg
│ │ │ │ ├── EMPLOYEES_LI_CONTROL/
│ │ │ │ │ └── EMPLOYEES_LI_CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── UNDO.pcd
│ │ │ │ ├── VERSION_FRW_FORMS.fun
│ │ │ │ ├── WHEN_TIMER_EXPIRED.pcd
│ │ │ │ ├── WNB.pcd
│ │ │ │ ├── WNF.pcd
│ │ │ │ ├── WNI.pcd
│ │ │ │ ├── WNR.pcd
│ │ │ │ └── metadata.json
│ │ │ ├── demo0004/
│ │ │ │ └── RELEASE_LOCKS/
│ │ │ │ ├── ERRORMESSAGE.pcd
│ │ │ │ ├── IS_DBA.fun
│ │ │ │ ├── KILL_SESSION.pcd
│ │ │ │ ├── LOG_SYSTEM_SCHLIESSEN.pcd
│ │ │ │ ├── REFRESH.pcd
│ │ │ │ ├── RELEASE_LOCKS/
│ │ │ │ │ ├── POST-FORM.tgg
│ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ ├── STEUERBLOCK/
│ │ │ │ │ ├── STEUERBLOCK__PB_CANCEL__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── STEUERBLOCK__PB_CONNECT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── STEUERBLOCK__PB_EXIT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── STEUERBLOCK__PB_REFRESH__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── V$LOCK/
│ │ │ │ │ └── V$LOCK__POST-QUERY.tgg
│ │ │ │ ├── V$SESSION/
│ │ │ │ │ └── V$SESSION__PB_KILL_SESSION__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0005/
│ │ │ │ └── TIMEOUTPJC_TEST/
│ │ │ │ ├── PL_RESET_FORMSTIMER_ITEMS.pcd
│ │ │ │ ├── PL_START.pcd
│ │ │ │ ├── PL_WHEN_CUSTOM_ITEM_EVENT.pcd
│ │ │ │ ├── TEST/
│ │ │ │ │ ├── TEST__DEBUG__WHEN-CHECKBOX-CHANGED.tgg
│ │ │ │ │ ├── TEST__FORMSTIMER500__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__FORMSTIMER60000__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__FORMS_TIMER1000__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__FORMS_TIMER5000__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__ITEM28__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET1__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET2__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET3__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET4__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET5__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET6__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── TEST__PRESET7__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── TEST__STARTTIMER__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── TIMEOUTPJC_TEST/
│ │ │ │ │ ├── ON-LOGON.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_TIMER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0006/
│ │ │ │ └── TIMEOUT_SYS_CLIENT_IDL/
│ │ │ │ ├── DEMOBLOCK/
│ │ │ │ │ ├── DEMOBLOCK__BUT_CLOSE_FORM__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── DEMOBLOCK__DEMO_1__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── DEMOBLOCK__DEMO_2__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── DEMOBLOCK__DEMO_3__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── F_GET_TIMER_VALUE.fun
│ │ │ │ ├── P_CLEAR_DIAGNOSTIC_ITEMS.pcd
│ │ │ │ ├── TIMEOUT_SYS_CLIENT_IDL/
│ │ │ │ │ └── PRE-FORM.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0007/
│ │ │ │ └── CD_DEMO_EXCEL/
│ │ │ │ ├── ALL_OBJECTS/
│ │ │ │ │ ├── ALL_OBJECTS__BT_ALL__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── ALL_OBJECTS__BT_PACKAGES__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── ALL_OBJECTS__BT_TABLES__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── ALL_OBJECTS__CALL_EXCEL__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CD_DEMO_EXCEL/
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg
│ │ │ │ ├── P_GET_BLOB.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0008/
│ │ │ │ └── LATENCY_TEST/
│ │ │ │ ├── F_GET_CURRENT_TIME_MS.fun
│ │ │ │ ├── LATENCY_TEST/
│ │ │ │ │ ├── ON-LOGON.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ ├── P_DOWNLOAD_DOKUMENT_AS.pcd
│ │ │ │ ├── P_WAIT_AND_EXIT.pcd
│ │ │ │ ├── P_WHEN_NEW_FORM_INSTANCE.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ ├── WEBUTIL_GET_AS_TMP_DIR.fun
│ │ │ │ ├── WEBUTIL_GET_LATENCY.fun
│ │ │ │ ├── WEBUTIL_PREPARE_TESTFILE.pcd
│ │ │ │ └── metadata.json
│ │ │ ├── demo0009/
│ │ │ │ └── FORMSAPI_WIZARD_2905/
│ │ │ │ ├── BLK_HANDLG/
│ │ │ │ │ ├── BLK_HANDLG__BT_CHECK_SINGLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_COMPILE_SINGLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_MIGRATE_SINGLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_SELECT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_CHECK__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_COMPILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_MIGRATE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_HANDLG__CBOX_FAM_ACTION__WHEN-LIST-CHANGED.tgg
│ │ │ │ │ ├── BLK_HANDLG__CB__WHEN-CHECKBOX-CHANGED.tgg
│ │ │ │ │ └── BLK_HANDLG__POST-QUERY.tgg
│ │ │ │ ├── CTL_BASIC/
│ │ │ │ │ ├── CTL_BASIC__BT_ALL__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL_BASIC__BT_CHECK__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL_BASIC__BT_COMPILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL_BASIC__BT_CONFIGURE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── CTL_BASIC__BT_MIGRATE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CTL_INIT/
│ │ │ │ │ └── CTL_INIT__BT_CLOSE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── FNC_FILE_EXISTS_HOST.fun
│ │ │ │ ├── FNC_GET_FILE_SEPARATOR.fun
│ │ │ │ ├── FNC_GET_TIMER_VALUE.fun
│ │ │ │ ├── FORMSAPI_WIZARD_2905/
│ │ │ │ │ ├── MODULE_FEATURES.tgg
│ │ │ │ │ ├── ON-LOGON.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg
│ │ │ │ ├── G.pkb
│ │ │ │ ├── G.pks
│ │ │ │ ├── PKG_BLK_DATA.pkb
│ │ │ │ ├── PKG_BLK_DATA.pks
│ │ │ │ ├── PKG_CONFIG.pkb
│ │ │ │ ├── PKG_CONFIG.pks
│ │ │ │ ├── PKG_FAM_RUN_SCRIPT.pkb
│ │ │ │ ├── PKG_FAM_RUN_SCRIPT.pks
│ │ │ │ ├── PRC_ABORT.pcd
│ │ │ │ ├── PRC_CHECK_FAM.pcd
│ │ │ │ ├── PRC_CMD_HOST_CLIENT.pcd
│ │ │ │ ├── PRC_CNG_MONTH_TIME.pcd
│ │ │ │ ├── PRC_COMPILATION.pcd
│ │ │ │ ├── PRC_CONFIGURATION.pcd
│ │ │ │ ├── PRC_COPY_FILE.pcd
│ │ │ │ ├── PRC_COPY_FILE_HOST.pcd
│ │ │ │ ├── PRC_ERROR.pcd
│ │ │ │ ├── PRC_EXCEPTION.pcd
│ │ │ │ ├── PRC_FILE_MERGE.pcd
│ │ │ │ ├── PRC_FILE_MERGE_HOST.pcd
│ │ │ │ ├── PRC_FLOG.pcd
│ │ │ │ ├── PRC_GET_CHK_REF_INFO.pcd
│ │ │ │ ├── PRC_GET_CONNECT_INFO.pcd
│ │ │ │ ├── PRC_INFO.pcd
│ │ │ │ ├── PRC_MIGRATION.pcd
│ │ │ │ ├── PRC_MSG.pcd
│ │ │ │ ├── PRC_SET_COMPILE_RESULT.pcd
│ │ │ │ ├── PRC_SET_INFOS.pcd
│ │ │ │ ├── PRC_SET_MIGRATE_RESULT.pcd
│ │ │ │ ├── PRC_SET_STATISTIK.pcd
│ │ │ │ ├── PRC_SET_STATISTIK_SINGLE.pcd
│ │ │ │ ├── PRC_SET_USERHOME.pcd
│ │ │ │ ├── PRC_SHOW_DURATION.pcd
│ │ │ │ ├── PRC_SHOW_INIT.pcd
│ │ │ │ ├── PRC_VIEW_FILE.pcd
│ │ │ │ ├── PRC_WRITE_SCRIPT.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0010/
│ │ │ │ └── CHK_MYFFI_SAMPLE5/
│ │ │ │ ├── BLK/
│ │ │ │ │ ├── BLK__PB_WEB_FFI__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── BLK__URL__WHEN-MOUSE-CLICK.tgg
│ │ │ │ ├── CHK_MYFFI_SAMPLE5/
│ │ │ │ │ └── ON-LOGON.tgg
│ │ │ │ ├── FNC_BOOL.fun
│ │ │ │ ├── PRC_SHOW.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0011/
│ │ │ │ └── WEBUTIL_DEMO/
│ │ │ │ ├── ABOUT/
│ │ │ │ │ └── ABOUT__ABOUT_BUTTON__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── BROWSER/
│ │ │ │ │ ├── BROWSER__APPLET_PARAMS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BROWSER__BROWSER_MESSAGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── BROWSER__SEPARATE_FRAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── BUILTINS/
│ │ │ │ │ ├── BUILTINS__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BUILTINS__GET_TOOL_ENV__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BUILTINS__READ_IMAGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── BUILTINS__TEXT_IO_BUTTON__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CLIENTINFO/
│ │ │ │ │ └── CLIENTINFO__ACTION__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── CLIENT_GETENV.pcd
│ │ │ │ ├── CLIENT_READIMAGE.pcd
│ │ │ │ ├── CLIENT_TEXTIO.pcd
│ │ │ │ ├── CTL/
│ │ │ │ │ ├── CTL__ACKNOWLEDGE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT10__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT1__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT2__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT3__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT4__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT5__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT6__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT7__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CTL__EXIT8__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── CTL__EXIT9__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── C_API/
│ │ │ │ │ ├── C_API__CALL_C_API__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── C_API__LOCKSTATION__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── DOWNLOAD/
│ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_AS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_DB__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── DOWNLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── DOWNLOAD_AS.pcd
│ │ │ │ ├── DOWNLOAD_DB.pcd
│ │ │ │ ├── FILES/
│ │ │ │ │ ├── FILES__COPY_FILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__DELETE_FILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_INFO__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_OPEN__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__FILE_SAVE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── FILES__LIST_DIRS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── FILES__LIST_FILES__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── FILES_WBP.pcd
│ │ │ │ ├── GET_APPLET_PARAMETERS.pcd
│ │ │ │ ├── GET_CLIENTINFO.pcd
│ │ │ │ ├── GET_CLIENT_FILENAME.pcd
│ │ │ │ ├── HOST/
│ │ │ │ │ ├── HOST__HOST_CALLBACK.tgg
│ │ │ │ │ └── HOST__RUN_HOST__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── OLE/
│ │ │ │ │ ├── OLE__SAVEFILE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── OLE__WRITE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── OLE_WRITE.pcd
│ │ │ │ ├── SEPARATE_FRAME_OPTIONS.pcd
│ │ │ │ ├── SET_BROWSER_MESSAGE.pcd
│ │ │ │ ├── UPLOAD/
│ │ │ │ │ ├── UPLOAD__CREATE_TABLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── UPLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── UPLOAD__UPLOAD_AS__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── UPLOAD__UPLOAD_DB__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ ├── UPLOAD_AS.pcd
│ │ │ │ ├── UPLOAD_DB.pcd
│ │ │ │ ├── WEBUTIL/
│ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── WEBUTIL__WEBUTIL_OLE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ ├── WEBUTIL_DEMO/
│ │ │ │ │ ├── KEY-EXIT.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── WHEN-TAB-PAGE-CHANGED.tgg
│ │ │ │ │ ├── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0012/
│ │ │ │ └── PDFVIEWER/
│ │ │ │ ├── PDFVIEWER/
│ │ │ │ │ ├── ON-LOGON.tgg
│ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ └── metadata.json
│ │ │ ├── demo0013/
│ │ │ │ └── COLOR_SLIDER/
│ │ │ │ ├── BL1/
│ │ │ │ │ ├── BL1__B__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── BL1__G__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── BL1__R__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── BL1__VB__POST-TEXT-ITEM.tgg
│ │ │ │ │ ├── BL1__VG__POST-TEXT-ITEM.tgg
│ │ │ │ │ └── BL1__VR__POST-TEXT-ITEM.tgg
│ │ │ │ ├── COLOR_SLIDER/
│ │ │ │ │ ├── ON-LOGON.tgg
│ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ ├── PKG_SLIDER.pkb
│ │ │ │ ├── PKG_SLIDER.pks
│ │ │ │ └── metadata.json
│ │ │ ├── demo0014/
│ │ │ │ ├── ACCORDION/
│ │ │ │ │ ├── ACCORDION/
│ │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ │ ├── B/
│ │ │ │ │ │ ├── B__B2__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ │ ├── B__B3__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ │ ├── B__B4__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ │ └── B__B__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BL_TREE/
│ │ │ │ │ │ ├── BL_TREE__IT_TREE__WHEN-TREE-NODE-EXPANDED.tgg
│ │ │ │ │ │ └── BL_TREE__IT_TREE__WHEN-TREE-NODE-SELECTED.tgg
│ │ │ │ │ ├── DEPARTMENTS/
│ │ │ │ │ │ └── DEPARTMENTS__WHEN-NEW-RECORD-INSTANCE.tgg
│ │ │ │ │ ├── OTHRS/
│ │ │ │ │ │ └── OTHRS__EMAIL__WHEN-CHECKBOX-CHANGED.tgg
│ │ │ │ │ ├── PK_ACCORDION.pkb
│ │ │ │ │ ├── PK_ACCORDION.pks
│ │ │ │ │ ├── PK_TREE.pkb
│ │ │ │ │ ├── PK_TREE.pks
│ │ │ │ │ ├── PR_INIT_BY_DEPT.pcd
│ │ │ │ │ ├── PR_INIT_BY_OTHERS.pcd
│ │ │ │ │ ├── PR_INIT_BY_SAL.pcd
│ │ │ │ │ ├── PR_INIT_BY_TREE.pcd
│ │ │ │ │ ├── SAL/
│ │ │ │ │ │ └── SAL__SAL__WHEN-RADIO-CHANGED.tgg
│ │ │ │ │ └── metadata.json
│ │ │ │ └── ACCORDION2/
│ │ │ │ ├── ACCORDION2/
│ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ ├── PK_ACCORDION.pkb
│ │ │ │ ├── PK_ACCORDION.pks
│ │ │ │ └── metadata.json
│ │ │ ├── demo0015/
│ │ │ │ └── MODERNIZE/
│ │ │ │ ├── CONTROL/
│ │ │ │ │ ├── CONTROL__CHECK_BOX_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__ERROR_STACK__WHEN-CUSTOM-ITEM-EVENT.tgg
│ │ │ │ │ ├── CONTROL__RADIO_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__SHOW_ERROR__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__SHOW_INFO__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__SHOW_WARNING__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__TEXT_FIELD_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── CONTROL__TEXT_FIELD_ENABLE__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ └── CONTROL__WHEN-NEW-RECORD-INSTANCE.tgg
│ │ │ │ ├── MODERNIZE/
│ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg
│ │ │ │ ├── RecordGroups/
│ │ │ │ │ └── LOV9.sql
│ │ │ │ └── metadata.json
│ │ │ ├── demo0016/
│ │ │ │ └── CHK_CBOX3/
│ │ │ │ ├── C/
│ │ │ │ │ ├── C__CBOX__KEY-NEXT-ITEM.tgg
│ │ │ │ │ ├── C__CBOX__POST-CHANGE.tgg
│ │ │ │ │ ├── C__CBOX__WHEN-LIST-CHANGED.tgg
│ │ │ │ │ ├── C__DUMMY__KEY-NEXT-ITEM.tgg
│ │ │ │ │ └── C__DUMMY__KEY-PREV-ITEM.tgg
│ │ │ │ ├── CBX/
│ │ │ │ │ ├── CBX__LABEL__KEY-NEXT-ITEM.tgg
│ │ │ │ │ ├── CBX__LABEL__KEY-PREV-ITEM.tgg
│ │ │ │ │ ├── CBX__LABEL__WHEN-MOUSE-CLICK.tgg
│ │ │ │ │ └── CBX__ON-ERROR.tgg
│ │ │ │ ├── CHK_CBOX3/
│ │ │ │ │ ├── WHEN-NEW-BLOCK-INSTANCE.tgg
│ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg
│ │ │ │ ├── PKG_CBOX.pkb
│ │ │ │ ├── PKG_CBOX.pks
│ │ │ │ └── metadata.json
│ │ │ ├── demo0017/
│ │ │ │ └── POC_ACCOUNT/
│ │ │ │ ├── BLK_ACCOUNT/
│ │ │ │ │ ├── BLK_ACCOUNT__ANSWER__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__ANSWER__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__BT_COMMIT__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__CLOSE__WHEN-MOUSE-CLICK.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__EMAIL2__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__EMAIL2__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__EMAIL__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__EMAIL__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__FULLNAME__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__FULLNAME__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD_RETRY__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD_RETRY__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__QUERY__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__QUERY__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__START_DEMO__WHEN-MOUSE-CLICK.tgg
│ │ │ │ │ ├── BLK_ACCOUNT__USERNAME__WHEN-NEW-ITEM-INSTANCE.tgg
│ │ │ │ │ └── BLK_ACCOUNT__USERNAME__WHEN-VALIDATE-ITEM.tgg
│ │ │ │ ├── FNC_MSG_QUERY.fun
│ │ │ │ ├── FNC_VALIDATE.fun
│ │ │ │ ├── PKG_ITEM.pkb
│ │ │ │ ├── PKG_ITEM.pks
│ │ │ │ ├── POC_ACCOUNT/
│ │ │ │ │ ├── KEY-EXIT.tgg
│ │ │ │ │ ├── ON-ERROR.tgg
│ │ │ │ │ ├── ON-MESSAGE.tgg
│ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ │ ├── POP_CHECK/
│ │ │ │ │ └── CHECK_ALL/
│ │ │ │ │ └── POP_CHECK__CHECK_ALL.sql
│ │ │ │ ├── PRC_CHK_ITEM_SEQUENCE.pcd
│ │ │ │ ├── PRC_INFO.pcd
│ │ │ │ ├── PRC_SET_ITEMS.pcd
│ │ │ │ ├── V#R#FY_PW$001.fun
│ │ │ │ └── metadata.json
│ │ │ └── demo0018/
│ │ │ └── TEST/
│ │ │ ├── TEST/
│ │ │ │ ├── TEST__BUTTON1__WHEN-BUTTON-PRESSED.tgg
│ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg
│ │ │ └── metadata.json
│ │ ├── antlr-grammars-v4/
│ │ │ ├── README.md
│ │ │ ├── examples/
│ │ │ │ ├── administer_key_management.sql
│ │ │ │ ├── aggregate_functions.sql
│ │ │ │ ├── alter_analytic_view.sql
│ │ │ │ ├── alter_attribute_dimension.sql
│ │ │ │ ├── alter_audit_policy.sql
│ │ │ │ ├── alter_database.sql
│ │ │ │ ├── alter_dimension.sql
│ │ │ │ ├── alter_diskgroup.sql
│ │ │ │ ├── alter_flashback_archive.sql
│ │ │ │ ├── alter_function.sql
│ │ │ │ ├── alter_hierarchy.sql
│ │ │ │ ├── alter_inmemory_join_group.sql
│ │ │ │ ├── alter_java.sql
│ │ │ │ ├── alter_library.sql
│ │ │ │ ├── alter_lockdown_profile.sql
│ │ │ │ ├── alter_materialized_zonemap.sql
│ │ │ │ ├── alter_mv.sql
│ │ │ │ ├── alter_mv_log.sql
│ │ │ │ ├── alter_operator.sql
│ │ │ │ ├── alter_outline.sql
│ │ │ │ ├── alter_pmem_filestore.sql
│ │ │ │ ├── alter_resource_cost.sql
│ │ │ │ ├── alter_role.sql
│ │ │ │ ├── alter_rollback_segment.sql
│ │ │ │ ├── alter_session.sql
│ │ │ │ ├── alter_synonym01.sql
│ │ │ │ ├── alter_table.sql
│ │ │ │ ├── alter_table_inmemory.sql
│ │ │ │ ├── alter_table_modify_partition_by_range.sql
│ │ │ │ ├── alter_table_modify_partition_shrink.sql
│ │ │ │ ├── alter_tablespace_set.sql
│ │ │ │ ├── alter_tablespaces.sql
│ │ │ │ ├── alter_view.sql
│ │ │ │ ├── analytic_query.sql
│ │ │ │ ├── analyze.sql
│ │ │ │ ├── associate_statistics.sql
│ │ │ │ ├── audit.sql
│ │ │ │ ├── bindvar01.sql
│ │ │ │ ├── bindvar02.sql
│ │ │ │ ├── bindvar03.sql
│ │ │ │ ├── bindvar04.sql
│ │ │ │ ├── bindvar05.sql
│ │ │ │ ├── block01.sql
│ │ │ │ ├── block02.sql
│ │ │ │ ├── bulk_collect_fetch_clause01.sql
│ │ │ │ ├── call.sql
│ │ │ │ ├── case_when01.sql
│ │ │ │ ├── case_when02.sql
│ │ │ │ ├── case_when03.sql
│ │ │ │ ├── case_when04.sql
│ │ │ │ ├── case_when05.sql
│ │ │ │ ├── case_when06.sql
│ │ │ │ ├── case_when07.sql
│ │ │ │ ├── case_when08.sql
│ │ │ │ ├── cast.sql
│ │ │ │ ├── cast_multiset01.sql
│ │ │ │ ├── cast_multiset02.sql
│ │ │ │ ├── cast_multiset03.sql
│ │ │ │ ├── cast_multiset04.sql
│ │ │ │ ├── cast_multiset05.sql
│ │ │ │ ├── cast_multiset06.sql
│ │ │ │ ├── cast_multiset08.sql
│ │ │ │ ├── cluster.sql
│ │ │ │ ├── collection_method_invocation.sql
│ │ │ │ ├── columns01.sql
│ │ │ │ ├── comment_on.sql
│ │ │ │ ├── comments.sql
│ │ │ │ ├── commit.sql
│ │ │ │ ├── concatenation-double_asterisk.sql
│ │ │ │ ├── concatenation-mod.sql
│ │ │ │ ├── condition01.sql
│ │ │ │ ├── condition02.sql
│ │ │ │ ├── condition03.sql
│ │ │ │ ├── condition04.sql
│ │ │ │ ├── condition05.sql
│ │ │ │ ├── condition06.sql
│ │ │ │ ├── condition07.sql
│ │ │ │ ├── condition08.sql
│ │ │ │ ├── condition09.sql
│ │ │ │ ├── condition10.sql
│ │ │ │ ├── condition11.sql
│ │ │ │ ├── condition12.sql
│ │ │ │ ├── condition14.sql
│ │ │ │ ├── condition15.sql
│ │ │ │ ├── condition16.sql
│ │ │ │ ├── connect_by01.sql
│ │ │ │ ├── connect_by02.sql
│ │ │ │ ├── connect_by03.sql
│ │ │ │ ├── connect_by04.sql
│ │ │ │ ├── connect_by05.sql
│ │ │ │ ├── context.sql
│ │ │ │ ├── create_analytic_view.sql
│ │ │ │ ├── create_attribute_dimension.sql
│ │ │ │ ├── create_audit_policy.sql
│ │ │ │ ├── create_controlfile.sql
│ │ │ │ ├── create_database.sql
│ │ │ │ ├── create_dimension.sql
│ │ │ │ ├── create_directory.sql
│ │ │ │ ├── create_diskgroup.sql
│ │ │ │ ├── create_edition.sql
│ │ │ │ ├── create_flashback_archive.sql
│ │ │ │ ├── create_function01.sql
│ │ │ │ ├── create_function02.sql
│ │ │ │ ├── create_function03.sql
│ │ │ │ ├── create_function04.sql
│ │ │ │ ├── create_function05.sql
│ │ │ │ ├── create_function06.sql
│ │ │ │ ├── create_hierarchy.sql
│ │ │ │ ├── create_index.sql
│ │ │ │ ├── create_inmemory_join_group.sql
│ │ │ │ ├── create_java.sql
│ │ │ │ ├── create_library.sql
│ │ │ │ ├── create_lockdown_profile.sql
│ │ │ │ ├── create_materialized_zonemap.sql
│ │ │ │ ├── create_operator.sql
│ │ │ │ ├── create_outline.sql
│ │ │ │ ├── create_package.sql.tree
│ │ │ │ ├── create_package01.sql
│ │ │ │ ├── create_package02.sql
│ │ │ │ ├── create_package03.sql
│ │ │ │ ├── create_package04.sql
│ │ │ │ ├── create_package05.sql
│ │ │ │ ├── create_pmem_filestore.sql
│ │ │ │ ├── create_procedure01.sql
│ │ │ │ ├── create_procedure01.sql.tree
│ │ │ │ ├── create_procedure02.sql
│ │ │ │ ├── create_procedure03.sql
│ │ │ │ ├── create_profile.sql
│ │ │ │ ├── create_restore_point.sql
│ │ │ │ ├── create_role.sql
│ │ │ │ ├── create_rollback_segment.sql
│ │ │ │ ├── create_spfile.sql
│ │ │ │ ├── create_synonym01.sql
│ │ │ │ ├── create_synonym02.sql
│ │ │ │ ├── create_synonym03.sql
│ │ │ │ ├── create_table.sql
│ │ │ │ ├── create_tablespace.sql
│ │ │ │ ├── create_tablespace_set.sql
│ │ │ │ ├── create_trigger01.sql
│ │ │ │ ├── create_trigger02.sql
│ │ │ │ ├── create_type.sql
│ │ │ │ ├── create_view.sql
│ │ │ │ ├── ctas.sql
│ │ │ │ ├── datetime01.sql
│ │ │ │ ├── datetime03.sql
│ │ │ │ ├── datetime04.sql
│ │ │ │ ├── datetime05.sql
│ │ │ │ ├── dblink.sql
│ │ │ │ ├── dblink01.sql
│ │ │ │ ├── directory.sql
│ │ │ │ ├── disassociate_statistics.sql
│ │ │ │ ├── drop_analytic_view.sql
│ │ │ │ ├── drop_attribute_dimension.sql
│ │ │ │ ├── drop_audit_policy.sql
│ │ │ │ ├── drop_cluster.sql
│ │ │ │ ├── drop_context.sql
│ │ │ │ ├── drop_database.sql
│ │ │ │ ├── drop_directory.sql
│ │ │ │ ├── drop_diskgroup.sql
│ │ │ │ ├── drop_edition.sql
│ │ │ │ ├── drop_flashback_archive.sql
│ │ │ │ ├── drop_hierarchy.sql
│ │ │ │ ├── drop_indextype.sql
│ │ │ │ ├── drop_inmemory_join_group.sql
│ │ │ │ ├── drop_java.sql
│ │ │ │ ├── drop_library.sql
│ │ │ │ ├── drop_lockdown_profile.sql
│ │ │ │ ├── drop_materialized_view.sql
│ │ │ │ ├── drop_materialized_view.sql.tree
│ │ │ │ ├── drop_materialized_zonemap.sql
│ │ │ │ ├── drop_operator.sql
│ │ │ │ ├── drop_outline.sql
│ │ │ │ ├── drop_pmem_filestore.sql
│ │ │ │ ├── drop_restore_point.sql
│ │ │ │ ├── drop_role.sql
│ │ │ │ ├── drop_rollback_segment.sql
│ │ │ │ ├── drop_synonym01.sql
│ │ │ │ ├── drop_table.sql
│ │ │ │ ├── drop_tablespace.sql
│ │ │ │ ├── drop_tablespace_set.sql
│ │ │ │ ├── drop_user.sql
│ │ │ │ ├── drop_view.sql
│ │ │ │ ├── editionable_function.sql
│ │ │ │ ├── editionable_packagebody_function.sql
│ │ │ │ ├── editionable_packagespec_function.sql
│ │ │ │ ├── explain01.sql
│ │ │ │ ├── fetch_clause01.sql
│ │ │ │ ├── fetch_clause02.sql
│ │ │ │ ├── fetch_clause03.sql
│ │ │ │ ├── fetch_clause04.sql
│ │ │ │ ├── fetch_statement.sql
│ │ │ │ ├── flashback01.sql
│ │ │ │ ├── flashback_table.sql
│ │ │ │ ├── for_update01.sql
│ │ │ │ ├── for_update02.sql
│ │ │ │ ├── for_update03.sql
│ │ │ │ ├── for_update04.sql
│ │ │ │ ├── for_update05.sql
│ │ │ │ ├── for_update06.sql
│ │ │ │ ├── for_update07.sql
│ │ │ │ ├── for_update08.sql
│ │ │ │ ├── forall_bulk_rowcount.sql
│ │ │ │ ├── forall_indices_of.sql
│ │ │ │ ├── forall_statement_and_exception_handling.sql
│ │ │ │ ├── function01.sql
│ │ │ │ ├── function02.sql
│ │ │ │ ├── function03.sql
│ │ │ │ ├── function04.sql
│ │ │ │ ├── function05.sql
│ │ │ │ ├── function06.sql
│ │ │ │ ├── function07.sql
│ │ │ │ ├── general_element_part.sql
│ │ │ │ ├── groupby01.sql
│ │ │ │ ├── groupby02.sql
│ │ │ │ ├── groupby03.sql
│ │ │ │ ├── groupby04.sql
│ │ │ │ ├── groupby05.sql
│ │ │ │ ├── groupby06.sql
│ │ │ │ ├── groupby07.sql
│ │ │ │ ├── index.sql
│ │ │ │ ├── insert_statement.sql
│ │ │ │ ├── interval01.sql
│ │ │ │ ├── interval02.sql
│ │ │ │ ├── interval03.sql
│ │ │ │ ├── interval04.sql
│ │ │ │ ├── join01.sql
│ │ │ │ ├── join02.sql
│ │ │ │ ├── join03.sql
│ │ │ │ ├── join04.sql
│ │ │ │ ├── join05.sql
│ │ │ │ ├── join06.sql
│ │ │ │ ├── join07.sql
│ │ │ │ ├── join08.sql
│ │ │ │ ├── join09.sql
│ │ │ │ ├── join10.sql
│ │ │ │ ├── join11.sql
│ │ │ │ ├── join12.sql
│ │ │ │ ├── join13.sql
│ │ │ │ ├── join14.sql
│ │ │ │ ├── join15.sql
│ │ │ │ ├── join16.sql
│ │ │ │ ├── join17.sql
│ │ │ │ ├── join18.sql
│ │ │ │ ├── join19.sql
│ │ │ │ ├── join20.sql
│ │ │ │ ├── join21.sql
│ │ │ │ ├── join22.sql
│ │ │ │ ├── join23.sql
│ │ │ │ ├── json_query.sql
│ │ │ │ ├── json_query.sql.tree
│ │ │ │ ├── json_sql.sql
│ │ │ │ ├── keywordasidentifier01.sql
│ │ │ │ ├── keywordasidentifier02.sql
│ │ │ │ ├── keywordasidentifier03.sql
│ │ │ │ ├── keywordasidentifier04.sql
│ │ │ │ ├── keywordasidentifier05.sql
│ │ │ │ ├── keywordasidentifier06.sql
│ │ │ │ ├── least_greatest.sql
│ │ │ │ ├── lexer01.sql
│ │ │ │ ├── lexer02.sql
│ │ │ │ ├── lexer02.sql.tree
│ │ │ │ ├── lexer03.sql
│ │ │ │ ├── lexer04.sql
│ │ │ │ ├── lexer05.sql
│ │ │ │ ├── like01.sql
│ │ │ │ ├── lob-item.sql
│ │ │ │ ├── lob-item.sql.tree
│ │ │ │ ├── materialized_views.sql
│ │ │ │ ├── max_001.sql
│ │ │ │ ├── merge01.sql
│ │ │ │ ├── merge02.sql
│ │ │ │ ├── merge03.sql
│ │ │ │ ├── merge04.sql
│ │ │ │ ├── merge05.sql
│ │ │ │ ├── model_clause01.sql
│ │ │ │ ├── model_clause02.sql
│ │ │ │ ├── model_clause03.sql
│ │ │ │ ├── model_clause04.sql
│ │ │ │ ├── model_clause05.sql
│ │ │ │ ├── multiset_operators.sql
│ │ │ │ ├── noaudit_statement.sql
│ │ │ │ ├── numbers01.sql
│ │ │ │ ├── nvl_001.sql
│ │ │ │ ├── object_access01.sql
│ │ │ │ ├── object_access_expressions.sql
│ │ │ │ ├── offset_clause.sql
│ │ │ │ ├── order_by01.sql
│ │ │ │ ├── order_by02.sql
│ │ │ │ ├── order_by03.sql
│ │ │ │ ├── order_by04.sql
│ │ │ │ ├── order_by05.sql
│ │ │ │ ├── order_by06.sql
│ │ │ │ ├── package_body.sql
│ │ │ │ ├── package_body.sql.tree
│ │ │ │ ├── packagebody_function.sql
│ │ │ │ ├── packagespec_function.sql
│ │ │ │ ├── partitioned_tables.sql
│ │ │ │ ├── pivot01.sql
│ │ │ │ ├── pivot02.sql
│ │ │ │ ├── pivot03.sql
│ │ │ │ ├── pivot04.sql
│ │ │ │ ├── pivot05.sql
│ │ │ │ ├── pivot06.sql
│ │ │ │ ├── pivot07.sql
│ │ │ │ ├── pivot08.sql
│ │ │ │ ├── pivot09.sql
│ │ │ │ ├── pivot10.sql
│ │ │ │ ├── pivot11.sql
│ │ │ │ ├── pivot12.sql
│ │ │ │ ├── pivot13.sql
│ │ │ │ ├── purge_statement.sql
│ │ │ │ ├── query_factoring01.sql
│ │ │ │ ├── query_factoring02.sql
│ │ │ │ ├── query_factoring03.sql
│ │ │ │ ├── query_factoring04.sql
│ │ │ │ ├── query_factoring05.sql
│ │ │ │ ├── query_factoring06.sql
│ │ │ │ ├── query_factoring08.sql
│ │ │ │ ├── query_factoring09.sql
│ │ │ │ ├── query_factoring10.sql
│ │ │ │ ├── query_factoring11.sql
│ │ │ │ ├── quntitative_expression.sql
│ │ │ │ ├── rename_objects.sql
│ │ │ │ ├── revoke_statement.sql
│ │ │ │ ├── round_001.sql
│ │ │ │ ├── round_decode_001.sql
│ │ │ │ ├── row_number_001.sql
│ │ │ │ ├── sample01.sql
│ │ │ │ ├── select_all_some_any.sql
│ │ │ │ ├── select_analytic_view.sql
│ │ │ │ ├── select_cte.sql
│ │ │ │ ├── select_dense_rank.sql
│ │ │ │ ├── select_flashback_query.sql
│ │ │ │ ├── select_hierarchical_query.sql
│ │ │ │ ├── select_package_function.sql
│ │ │ │ ├── select_time.sql
│ │ │ │ ├── select_without_from.sql
│ │ │ │ ├── seq_token_error.sql
│ │ │ │ ├── simple02.sql
│ │ │ │ ├── simple03.sql
│ │ │ │ ├── simple04.sql
│ │ │ │ ├── simple05.sql
│ │ │ │ ├── simple06.sql
│ │ │ │ ├── simple07.sql
│ │ │ │ ├── simple08.sql
│ │ │ │ ├── simple09.sql
│ │ │ │ ├── simple10.sql
│ │ │ │ ├── simple11.sql
│ │ │ │ ├── simple12.sql
│ │ │ │ ├── simple13.sql
│ │ │ │ ├── single_statement.sql
│ │ │ │ ├── string01.sql
│ │ │ │ ├── timing.sql
│ │ │ │ ├── timing.sql.tree
│ │ │ │ ├── to_binary_double.sql
│ │ │ │ ├── to_binary_float.sql
│ │ │ │ ├── to_char.sql
│ │ │ │ ├── to_char_001.sql
│ │ │ │ ├── to_char_002.sql
│ │ │ │ ├── to_date.sql
│ │ │ │ ├── to_dsinterval.sql
│ │ │ │ ├── to_number.sql
│ │ │ │ ├── to_timestamp.sql
│ │ │ │ ├── to_timestamp_tz.sql
│ │ │ │ ├── to_yminterval.sql
│ │ │ │ ├── truncate_cluster.sql
│ │ │ │ ├── truncate_table.sql
│ │ │ │ ├── unified.sql
│ │ │ │ ├── union01.sql
│ │ │ │ ├── union02.sql
│ │ │ │ ├── union03.sql
│ │ │ │ ├── union04.sql
│ │ │ │ ├── union05.sql
│ │ │ │ ├── union06.sql
│ │ │ │ ├── union07.sql
│ │ │ │ ├── union08.sql
│ │ │ │ ├── union09.sql
│ │ │ │ ├── union10.sql
│ │ │ │ ├── validate_conversion.sql
│ │ │ │ ├── values_clause.sql
│ │ │ │ ├── varray_type_def.sql
│ │ │ │ ├── views.sql
│ │ │ │ ├── whenever_sqlerror.sql
│ │ │ │ ├── whenever_sqlerror.sql.tree
│ │ │ │ ├── xml_function.sql
│ │ │ │ ├── xmltable01.sql
│ │ │ │ ├── xmltable02.sql
│ │ │ │ └── xmltable03.sql
│ │ │ ├── examples-sql-script/
│ │ │ │ ├── anonymous_block.sql
│ │ │ │ ├── cursor-attributes-with-spaces.sql
│ │ │ │ ├── declare_procedure_no_args.sql
│ │ │ │ ├── delete_as_regular_id.pkb
│ │ │ │ ├── deterministic_function.pks
│ │ │ │ ├── e_in_out_parameters.pks
│ │ │ │ ├── grants.sql
│ │ │ │ ├── green_run.sql
│ │ │ │ ├── green_table.sql
│ │ │ │ ├── green_tools.pkb
│ │ │ │ ├── green_tools.pks
│ │ │ │ ├── green_tools_review.sql
│ │ │ │ ├── in_out_parameters.pks
│ │ │ │ ├── key_word_as_param.pkb
│ │ │ │ ├── logical_expressions.sql
│ │ │ │ ├── package_body_null.pkb
│ │ │ │ ├── package_with_cursor.sql
│ │ │ │ ├── package_with_schema.pkb
│ │ │ │ ├── package_with_schema.pks
│ │ │ │ ├── package_with_simple_init_block.pkb
│ │ │ │ ├── pipe_row.pkb
│ │ │ │ ├── pltables.sql
│ │ │ │ ├── pragma_autonomous_transaction.sql
│ │ │ │ ├── pragma_exception_init.pkb
│ │ │ │ ├── pragma_exception_init.pks
│ │ │ │ ├── proc_over_dblink_as_nvl_param.pkb
│ │ │ │ ├── procedure_with_cursor_and_limit.sql
│ │ │ │ ├── result_cache_function.pks
│ │ │ │ ├── select_into.sql
│ │ │ │ ├── show_errors.pks
│ │ │ │ ├── substr_as_regular_id.pkb
│ │ │ │ ├── synonym_with_database_link.sql
│ │ │ │ ├── trigger_examples.sql
│ │ │ │ ├── type_body_elements.sql
│ │ │ │ ├── user.sql
│ │ │ │ └── with_clause_in_exists_block_in_procedure.sql
│ │ │ ├── hw-examples/
│ │ │ │ ├── alter_operator.sql
│ │ │ │ ├── alter_outline.sql
│ │ │ │ ├── drop_operator.sql
│ │ │ │ ├── keywordasidentifier02.sql
│ │ │ │ ├── lexer01.sql
│ │ │ │ ├── lexer02.sql
│ │ │ │ ├── lexer03.sql
│ │ │ │ ├── lexer04.sql
│ │ │ │ ├── lexer05.sql
│ │ │ │ ├── simple11.sql
│ │ │ │ └── truncate_table.sql
│ │ │ └── long-running/
│ │ │ ├── aggregate01.sql
│ │ │ ├── cast_multiset07.sql
│ │ │ ├── datetime02.sql
│ │ │ ├── order_by07.sql
│ │ │ └── query_factoring07.sql
│ │ └── oracle-database_23/
│ │ ├── adjsn/
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-0.sql
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-1.sql
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-2.sql
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-3.sql
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-4.sql
│ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-5.sql
│ │ │ ├── change-triggers-data-guide-enabled-search-index-0.sql
│ │ │ ├── change-triggers-data-guide-enabled-search-index-1.sql
│ │ │ ├── columns-clause-sql-json-function-json_table-3.sql
│ │ │ ├── creating-b-tree-indexes-json_value-0.sql
│ │ │ ├── creating-b-tree-indexes-json_value-1.sql
│ │ │ ├── creating-b-tree-indexes-json_value-2.sql
│ │ │ ├── creating-b-tree-indexes-json_value-3.sql
│ │ │ ├── creating-bitmap-indexes-json_value-0.sql
│ │ │ ├── creating-multivalue-function-based-indexes-json_exists-0.sql
│ │ │ ├── creating-multivalue-function-based-indexes-json_exists-1.sql
│ │ │ ├── creating-multivalue-function-based-indexes-json_exists-2.sql
│ │ │ ├── creating-view-json-data-based-data-guide-information-2.sql
│ │ │ ├── creating-view-json-data-based-data-guide-information-3.sql
│ │ │ ├── creating-view-json-data-using-json_table-0.sql
│ │ │ ├── creating-view-json-data-using-json_table-1.sql
│ │ │ ├── data-type-considerations-json_value-indexing-and-querying-0.sql
│ │ │ ├── data-type-considerations-json_value-indexing-and-querying-1.sql
│ │ │ ├── data-type-considerations-json_value-indexing-and-querying-2.sql
│ │ │ ├── error-clause-sql-query-functions-and-conditions-0.sql
│ │ │ ├── error-clause-sql-query-functions-and-conditions-1.sql
│ │ │ ├── error-clause-sql-query-functions-and-conditions-3.sql
│ │ │ ├── handling-dependent-objects-0.sql
│ │ │ ├── handling-dependent-objects-1.sql
│ │ │ ├── handling-dependent-objects-2.sql
│ │ │ ├── handling-input-values-sql-json-generation-functions-0.sql
│ │ │ ├── handling-input-values-sql-json-generation-functions-1.sql
│ │ │ ├── handling-input-values-sql-json-generation-functions-2.sql
│ │ │ ├── indexing-multiple-json-fields-using-composite-b-tree-index-1.sql
│ │ │ ├── json-collections-2.sql
│ │ │ ├── json-collections-3.sql
│ │ │ ├── json-collections-4.sql
│ │ │ ├── json-data-type-2.sql
│ │ │ ├── json-data-type-3.sql
│ │ │ ├── json-data-type-4.sql
│ │ │ ├── json-data-type-5.sql
│ │ │ ├── json-data-type-6.sql
│ │ │ ├── json-data-type-7.sql
│ │ │ ├── json-data-type-8.sql
│ │ │ ├── json-data-type-9.sql
│ │ │ ├── json-query-rewrite-use-materialized-view-json_table-0.sql
│ │ │ ├── json-query-rewrite-use-materialized-view-json_table-2.sql
│ │ │ ├── json-schema-1.sql
│ │ │ ├── json-schema-10.sql
│ │ │ ├── json-schema-11.sql
│ │ │ ├── json-schema-13.sql
│ │ │ ├── json-schema-14.sql
│ │ │ ├── json-schema-16.sql
│ │ │ ├── json-schema-18.sql
│ │ │ ├── json-schema-2.sql
│ │ │ ├── json-schema-22.sql
│ │ │ ├── json-schema-24.sql
│ │ │ ├── json-schema-25.sql
│ │ │ ├── json-schema-3.sql
│ │ │ ├── json-schema-4.sql
│ │ │ ├── json-schema-5.sql
│ │ │ ├── json-schema-7.sql
│ │ │ ├── json-schema-9.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-0.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-1.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-10.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-2.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-3.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-5.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-6.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-7.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-8.sql
│ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-9.sql
│ │ │ ├── json_table-generalizes-sql-json-query-functions-and-conditions-0.sql
│ │ │ ├── json_table-generalizes-sql-json-query-functions-and-conditions-1.sql
│ │ │ ├── json_transform-operation-handlers-0.sql
│ │ │ ├── json_transform-operation-handlers-1.sql
│ │ │ ├── json_transform-operation-handlers-2.sql
│ │ │ ├── json_transform-operation-handlers-3.sql
│ │ │ ├── json_transform-operation-handlers-4.sql
│ │ │ ├── json_transform-operation-handlers-5.sql
│ │ │ ├── json_transform-operation-handlers-6.sql
│ │ │ ├── json_transform-operator-0.sql
│ │ │ ├── json_transform-operator-append-0.sql
│ │ │ ├── json_transform-operator-append-2.sql
│ │ │ ├── json_transform-operator-append-3.sql
│ │ │ ├── json_transform-operator-append-5.sql
│ │ │ ├── json_transform-operator-copy-0.sql
│ │ │ ├── json_transform-operator-insert-0.sql
│ │ │ ├── json_transform-operator-insert-1.sql
│ │ │ ├── json_transform-operator-insert-2.sql
│ │ │ ├── json_transform-operator-intersect-0.sql
│ │ │ ├── json_transform-operator-intersect-1.sql
│ │ │ ├── json_transform-operator-keep-0.sql
│ │ │ ├── json_transform-operator-keep-1.sql
│ │ │ ├── json_transform-operator-merge-0.sql
│ │ │ ├── json_transform-operator-nested-path-3.sql
│ │ │ ├── json_transform-operator-prepend-0.sql
│ │ │ ├── json_transform-operator-prepend-1.sql
│ │ │ ├── json_transform-operator-prepend-3.sql
│ │ │ ├── json_transform-operator-remove-0.sql
│ │ │ ├── json_transform-operator-rename-0.sql
│ │ │ ├── json_transform-operator-replace-0.sql
│ │ │ ├── json_transform-operator-set-0.sql
│ │ │ ├── json_transform-operator-set-1.sql
│ │ │ ├── json_transform-operator-set-2.sql
│ │ │ ├── json_transform-operator-set-4.sql
│ │ │ ├── json_transform-operator-set-5.sql
│ │ │ ├── json_transform-operator-set-6.sql
│ │ │ ├── json_transform-operator-set-7.sql
│ │ │ ├── json_transform-operator-sort-0.sql
│ │ │ ├── json_transform-operator-sort-3.sql
│ │ │ ├── json_transform-operator-union-0.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-0.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-1.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-2.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-4.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-5.sql
│ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-9.sql
│ │ │ ├── loading-external-json-data-0.sql
│ │ │ ├── loading-external-json-data-1.sql
│ │ │ ├── loading-external-json-data-2.sql
│ │ │ ├── loading-external-json-data-3.sql
│ │ │ ├── loading-external-json-data-4.sql
│ │ │ ├── mismatch-clause-sql-json-query-functions-0.sql
│ │ │ ├── mismatch-clause-sql-json-query-functions-1.sql
│ │ │ ├── mismatch-clause-sql-json-query-functions-2.sql
│ │ │ ├── mismatch-clause-sql-json-query-functions-3.sql
│ │ │ ├── multiple-data-guides-document-set-0.sql
│ │ │ ├── multiple-data-guides-document-set-1.sql
│ │ │ ├── multiple-data-guides-document-set-2.sql
│ │ │ ├── oracle-sql-condition-json_textcontains-0.sql
│ │ │ ├── oracle-sql-condition-json_textcontains-1.sql
│ │ │ ├── oracle-sql-function-json_mergepatch-2.sql
│ │ │ ├── oracle-sql-function-json_mergepatch-3.sql
│ │ │ ├── oracle-sql-function-json_transform-0.sql
│ │ │ ├── oracle-sql-function-json_transform-1.sql
│ │ │ ├── oracle-sql-function-json_transform-4.sql
│ │ │ ├── overview-json-generation-0.sql
│ │ │ ├── overview-json-generation-2.sql
│ │ │ ├── overview-json-generation-3.sql
│ │ │ ├── overview-json-oracle-database-0.sql
│ │ │ ├── overview-memory-json-data-0.sql
│ │ │ ├── partitioning-json-data-0.sql
│ │ │ ├── partitioning-json-data-1.sql
│ │ │ ├── passing-clause-sql-functions-and-conditions-0.sql
│ │ │ ├── passing-clause-sql-functions-and-conditions-1.sql
│ │ │ ├── performing-migration-check-1.sql
│ │ │ ├── persistent-data-guide-information-part-json-search-index-0.sql
│ │ │ ├── persistent-data-guide-information-part-json-search-index-1.sql
│ │ │ ├── persistent-data-guide-information-part-json-search-index-2.sql
│ │ │ ├── persistent-data-guide-information-part-json-search-index-3.sql
│ │ │ ├── populate-json-type-column-querying-textual-json-0.sql
│ │ │ ├── populate-json-type-column-querying-textual-json-1.sql
│ │ │ ├── populate-json-type-column-querying-textual-json-2.sql
│ │ │ ├── populating-json-data-memory-column-store-0.sql
│ │ │ ├── populating-json-data-memory-column-store-1.sql
│ │ │ ├── querying-data-guide-0.sql
│ │ │ ├── querying-data-guide-1.sql
│ │ │ ├── read-only-views-based-json-generation-0.sql
│ │ │ ├── read-only-views-based-json-generation-1.sql
│ │ │ ├── read-only-views-based-json-generation-2.sql
│ │ │ ├── simple-dot-notation-access-json-data-0.sql
│ │ │ ├── simple-dot-notation-access-json-data-1.sql
│ │ │ ├── simple-dot-notation-access-json-data-2.sql
│ │ │ ├── simple-dot-notation-access-json-data-3.sql
│ │ │ ├── simple-dot-notation-access-json-data-4.sql
│ │ │ ├── simple-dot-notation-access-json-data-5.sql
│ │ │ ├── simple-dot-notation-access-json-data-6.sql
│ │ │ ├── simple-dot-notation-access-json-data-7.sql
│ │ │ ├── simple-dot-notation-access-json-data-8.sql
│ │ │ ├── specifying-preferred-name-field-column-0.sql
│ │ │ ├── sql-json-condition-json_exists-0.sql
│ │ │ ├── sql-json-condition-json_exists-1.sql
│ │ │ ├── sql-json-conditions-is-json-and-is-not-json-6.sql
│ │ │ ├── sql-json-function-json_array-0.sql
│ │ │ ├── sql-json-function-json_array-1.sql
│ │ │ ├── sql-json-function-json_array-3.sql
│ │ │ ├── sql-json-function-json_arrayagg-0.sql
│ │ │ ├── sql-json-function-json_arrayagg-1.sql
│ │ │ ├── sql-json-function-json_object-0.sql
│ │ │ ├── sql-json-function-json_object-10.sql
│ │ │ ├── sql-json-function-json_object-11.sql
│ │ │ ├── sql-json-function-json_object-13.sql
│ │ │ ├── sql-json-function-json_object-14.sql
│ │ │ ├── sql-json-function-json_object-16.sql
│ │ │ ├── sql-json-function-json_object-18.sql
│ │ │ ├── sql-json-function-json_object-19.sql
│ │ │ ├── sql-json-function-json_object-21.sql
│ │ │ ├── sql-json-function-json_object-7.sql
│ │ │ ├── sql-json-function-json_object-8.sql
│ │ │ ├── sql-json-function-json_objectagg-0.sql
│ │ │ ├── sql-json-function-json_query-0.sql
│ │ │ ├── sql-json-function-json_query-1.sql
│ │ │ ├── sql-json-function-json_table-2.sql
│ │ │ ├── sql-json-function-json_table-3.sql
│ │ │ ├── sql-json-path-expression-item-methods-0.sql
│ │ │ ├── sql-json-path-expression-item-methods-1.sql
│ │ │ ├── sql-json-path-expression-item-methods-2.sql
│ │ │ ├── sql-json-path-expression-item-methods-3.sql
│ │ │ ├── sql-json-path-expression-item-methods-4.sql
│ │ │ ├── sql-json-path-expression-item-methods-5.sql
│ │ │ ├── sql-json-path-expression-item-methods-6.sql
│ │ │ ├── sql-json-path-expression-syntax-2.sql
│ │ │ ├── sql-json-path-expression-syntax-4.sql
│ │ │ ├── sql-json-path-expression-syntax-7.sql
│ │ │ ├── sql-nested-clause-instead-json_table-2.sql
│ │ │ ├── sql-nested-clause-instead-json_table-4.sql
│ │ │ ├── tables-json-columns-0.sql
│ │ │ ├── tables-json-columns-1.sql
│ │ │ ├── tables-json-columns-2.sql
│ │ │ ├── tables-json-columns-3.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-0.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-1.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-2.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-3.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-4.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-5.sql
│ │ │ ├── type-clause-sql-functions-and-conditions-6.sql
│ │ │ ├── types-filter-condition-comparisons-0.sql
│ │ │ ├── use-bind-variables-json_transform-0.sql
│ │ │ ├── use-bind-variables-json_transform-1.sql
│ │ │ ├── use-bind-variables-json_transform-2.sql
│ │ │ ├── using-filters-json_exists-0.sql
│ │ │ ├── using-filters-json_exists-1.sql
│ │ │ ├── using-filters-json_exists-2.sql
│ │ │ ├── using-filters-json_exists-3.sql
│ │ │ ├── using-filters-json_exists-4.sql
│ │ │ ├── using-geojson-geographic-data-0.sql
│ │ │ ├── using-geojson-geographic-data-1.sql
│ │ │ ├── using-geojson-geographic-data-3.sql
│ │ │ ├── using-geojson-geographic-data-5.sql
│ │ │ ├── using-geojson-geographic-data-6.sql
│ │ │ ├── using-json_table-json-arrays-0.sql
│ │ │ ├── using-json_table-json-arrays-1.sql
│ │ │ ├── using-json_table-json-arrays-2.sql
│ │ │ ├── using-json_table-json-arrays-4.sql
│ │ │ ├── using-json_value-function-based-index-json_exists-queries-0.sql
│ │ │ ├── using-json_value-function-based-index-json_exists-queries-1.sql
│ │ │ ├── using-json_value-function-based-index-json_exists-queries-2.sql
│ │ │ ├── using-json_value-function-based-index-json_exists-queries-3.sql
│ │ │ ├── using-json_value-function-based-index-json_table-queries-0.sql
│ │ │ ├── using-multivalue-function-based-index-0.sql
│ │ │ ├── using-multivalue-function-based-index-1.sql
│ │ │ ├── using-multivalue-function-based-index-2.sql
│ │ │ ├── using-multivalue-function-based-index-3.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-0.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-1.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-2.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-3.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-4.sql
│ │ │ ├── using-online-redefinition-migrate-json-data-type-7.sql
│ │ │ ├── using-oracle-data-pump-migrate-json-data-type-0.sql
│ │ │ ├── using-pl-sql-object-types-json-0.sql
│ │ │ ├── using-pl-sql-object-types-json-1.sql
│ │ │ ├── using-pl-sql-object-types-json-2.sql
│ │ │ ├── using-sql-json-function-json_value-boolean-json-value-0.sql
│ │ │ ├── using-sql-json-function-json_value-boolean-json-value-1.sql
│ │ │ └── using-sql-json-function-json_value-boolean-json-value-3.sql
│ │ ├── lnpls/
│ │ │ ├── ALTER-FUNCTION-statement-0.sql
│ │ │ ├── ALTER-LIBRARY-statement-0.sql
│ │ │ ├── ALTER-PACKAGE-statement-0.sql
│ │ │ ├── ALTER-PACKAGE-statement-1.sql
│ │ │ ├── ALTER-PROCEDURE-statement-0.sql
│ │ │ ├── ALTER-TRIGGER-statement-0.sql
│ │ │ ├── ALTER-TRIGGER-statement-1.sql
│ │ │ ├── ALTER-TYPE-statement-0.sql
│ │ │ ├── ALTER-TYPE-statement-1.sql
│ │ │ ├── ALTER-TYPE-statement-10.sql
│ │ │ ├── ALTER-TYPE-statement-11.sql
│ │ │ ├── ALTER-TYPE-statement-12.sql
│ │ │ ├── ALTER-TYPE-statement-13.sql
│ │ │ ├── ALTER-TYPE-statement-14.sql
│ │ │ ├── ALTER-TYPE-statement-2.sql
│ │ │ ├── ALTER-TYPE-statement-3.sql
│ │ │ ├── ALTER-TYPE-statement-4.sql
│ │ │ ├── ALTER-TYPE-statement-5.sql
│ │ │ ├── ALTER-TYPE-statement-6.sql
│ │ │ ├── ALTER-TYPE-statement-7.sql
│ │ │ ├── ALTER-TYPE-statement-8.sql
│ │ │ ├── ALTER-TYPE-statement-9.sql
│ │ │ ├── CONTINUE-statement-0.sql
│ │ │ ├── CONTINUE-statement-2.sql
│ │ │ ├── COVERAGE-pragma-3.sql
│ │ │ ├── CREATE-FUNCTION-statement-0.sql
│ │ │ ├── CREATE-FUNCTION-statement-1.sql
│ │ │ ├── CREATE-FUNCTION-statement-2.sql
│ │ │ ├── CREATE-FUNCTION-statement-3.sql
│ │ │ ├── CREATE-FUNCTION-statement-4.sql
│ │ │ ├── CREATE-FUNCTION-statement-5.sql
│ │ │ ├── CREATE-FUNCTION-statement-6.sql
│ │ │ ├── CREATE-FUNCTION-statement-7.sql
│ │ │ ├── CREATE-FUNCTION-statement-8.sql
│ │ │ ├── CREATE-LIBRARY-statement-0.sql
│ │ │ ├── CREATE-LIBRARY-statement-1.sql
│ │ │ ├── CREATE-LIBRARY-statement-2.sql
│ │ │ ├── CREATE-LIBRARY-statement-3.sql
│ │ │ ├── CREATE-LIBRARY-statement-4.sql
│ │ │ ├── CREATE-PACKAGE-BODY-statement-0.sql
│ │ │ ├── CREATE-PACKAGE-statement-0.sql
│ │ │ ├── CREATE-PROCEDURE-statement-0.sql
│ │ │ ├── CREATE-PROCEDURE-statement-1.sql
│ │ │ ├── CREATE-PROCEDURE-statement-2.sql
│ │ │ ├── CREATE-PROCEDURE-statement-3.sql
│ │ │ ├── CREATE-PROCEDURE-statement-5.sql
│ │ │ ├── CREATE-PROCEDURE-statement-6.sql
│ │ │ ├── CREATE-TYPE-statement-0.sql
│ │ │ ├── CREATE-TYPE-statement-1.sql
│ │ │ ├── CREATE-TYPE-statement-10.sql
│ │ │ ├── CREATE-TYPE-statement-11.sql
│ │ │ ├── CREATE-TYPE-statement-12.sql
│ │ │ ├── CREATE-TYPE-statement-13.sql
│ │ │ ├── CREATE-TYPE-statement-15.sql
│ │ │ ├── CREATE-TYPE-statement-16.sql
│ │ │ ├── CREATE-TYPE-statement-17.sql
│ │ │ ├── CREATE-TYPE-statement-2.sql
│ │ │ ├── CREATE-TYPE-statement-3.sql
│ │ │ ├── CREATE-TYPE-statement-4.sql
│ │ │ ├── CREATE-TYPE-statement-6.sql
│ │ │ ├── CREATE-TYPE-statement-7.sql
│ │ │ ├── CREATE-TYPE-statement-8.sql
│ │ │ ├── CREATE-TYPE-statement-9.sql
│ │ │ ├── DEPRECATE-pragma-0.sql
│ │ │ ├── DEPRECATE-pragma-1.sql
│ │ │ ├── DEPRECATE-pragma-10.sql
│ │ │ ├── DEPRECATE-pragma-13.sql
│ │ │ ├── DEPRECATE-pragma-18.sql
│ │ │ ├── DEPRECATE-pragma-3.sql
│ │ │ ├── DEPRECATE-pragma-32.sql
│ │ │ ├── DEPRECATE-pragma-34.sql
│ │ │ ├── DEPRECATE-pragma-6.sql
│ │ │ ├── DEPRECATE-pragma-8.sql
│ │ │ ├── DROP-FUNCTION-statement-0.sql
│ │ │ ├── DROP-LIBRARY-statement-0.sql
│ │ │ ├── DROP-PACKAGE-statement-0.sql
│ │ │ ├── DROP-PROCEDURE-statement-0.sql
│ │ │ ├── DROP-TRIGGER-statement-0.sql
│ │ │ ├── DROP-TYPE-BODY-statement-0.sql
│ │ │ ├── DROP-TYPE-statement-0.sql
│ │ │ ├── EXECUTE-IMMEDIATE-statement-0.sql
│ │ │ ├── EXIT-statement-0.sql
│ │ │ ├── EXIT-statement-2.sql
│ │ │ ├── FOR-LOOP-statement-0.sql
│ │ │ ├── FOR-LOOP-statement-1.sql
│ │ │ ├── FOR-LOOP-statement-2.sql
│ │ │ ├── GOTO-statement-0.sql
│ │ │ ├── GOTO-statement-4.sql
│ │ │ ├── GOTO-statement-5.sql
│ │ │ ├── GOTO-statement-7.sql
│ │ │ ├── PIPELINED-clause-1.sql
│ │ │ ├── SQLERRM-function-1.sql
│ │ │ ├── SQLERRM-function-4.sql
│ │ │ ├── SQL_MACRO-clause-1.sql
│ │ │ ├── SQL_MACRO-clause-11.sql
│ │ │ ├── SQL_MACRO-clause-13.sql
│ │ │ ├── SQL_MACRO-clause-14.sql
│ │ │ ├── SQL_MACRO-clause-16.sql
│ │ │ ├── SQL_MACRO-clause-17.sql
│ │ │ ├── SQL_MACRO-clause-19.sql
│ │ │ ├── SQL_MACRO-clause-2.sql
│ │ │ ├── SQL_MACRO-clause-20.sql
│ │ │ ├── SQL_MACRO-clause-22.sql
│ │ │ ├── SQL_MACRO-clause-24.sql
│ │ │ ├── SQL_MACRO-clause-25.sql
│ │ │ ├── SQL_MACRO-clause-27.sql
│ │ │ ├── SQL_MACRO-clause-29.sql
│ │ │ ├── SQL_MACRO-clause-3.sql
│ │ │ ├── SQL_MACRO-clause-31.sql
│ │ │ ├── SQL_MACRO-clause-4.sql
│ │ │ ├── SQL_MACRO-clause-5.sql
│ │ │ ├── SQL_MACRO-clause-6.sql
│ │ │ ├── SQL_MACRO-clause-7.sql
│ │ │ ├── SQL_MACRO-clause-9.sql
│ │ │ ├── Supresses-warning-pragma-6009-0.sql
│ │ │ ├── Supresses-warning-pragma-6009-1.sql
│ │ │ ├── Supresses-warning-pragma-6009-10.sql
│ │ │ ├── Supresses-warning-pragma-6009-11.sql
│ │ │ ├── Supresses-warning-pragma-6009-2.sql
│ │ │ ├── Supresses-warning-pragma-6009-3.sql
│ │ │ ├── Supresses-warning-pragma-6009-4.sql
│ │ │ ├── Supresses-warning-pragma-6009-5.sql
│ │ │ ├── Supresses-warning-pragma-6009-6.sql
│ │ │ ├── Supresses-warning-pragma-6009-7.sql
│ │ │ ├── Supresses-warning-pragma-6009-8.sql
│ │ │ ├── Supresses-warning-pragma-6009-9.sql
│ │ │ ├── WHILE-LOOP-statement-0.sql
│ │ │ ├── assigning-values-collection-variables-0.sql
│ │ │ ├── assigning-values-collection-variables-2.sql
│ │ │ ├── assigning-values-collection-variables-4.sql
│ │ │ ├── assigning-values-record-variables-1.sql
│ │ │ ├── assigning-values-record-variables-10.sql
│ │ │ ├── assigning-values-record-variables-12.sql
│ │ │ ├── assigning-values-record-variables-13.sql
│ │ │ ├── assigning-values-record-variables-15.sql
│ │ │ ├── assigning-values-record-variables-17.sql
│ │ │ ├── assigning-values-record-variables-3.sql
│ │ │ ├── assigning-values-record-variables-5.sql
│ │ │ ├── assigning-values-record-variables-7.sql
│ │ │ ├── assigning-values-record-variables-9.sql
│ │ │ ├── assigning-values-variables-1.sql
│ │ │ ├── assigning-values-variables-3.sql
│ │ │ ├── assigning-values-variables-5.sql
│ │ │ ├── assigning-values-variables-7.sql
│ │ │ ├── autonomous-transactions-0.sql
│ │ │ ├── autonomous-transactions-1.sql
│ │ │ ├── autonomous-transactions-2.sql
│ │ │ ├── autonomous-transactions-3.sql
│ │ │ ├── autonomous-transactions-4.sql
│ │ │ ├── autonomous-transactions-6.sql
│ │ │ ├── autonomous-transactions-7.sql
│ │ │ ├── autonomous-transactions-9.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-0.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-10.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-2.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-3.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-4.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-5.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-6.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-7.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-8.sql
│ │ │ ├── avoiding-inner-capture-select-and-dml-statements-9.sql
│ │ │ ├── basic-LOOP-statement-0.sql
│ │ │ ├── basic-LOOP-statement-2.sql
│ │ │ ├── bulk-sql-and-bulk-binding-0.sql
│ │ │ ├── bulk-sql-and-bulk-binding-1.sql
│ │ │ ├── bulk-sql-and-bulk-binding-10.sql
│ │ │ ├── bulk-sql-and-bulk-binding-12.sql
│ │ │ ├── bulk-sql-and-bulk-binding-14.sql
│ │ │ ├── bulk-sql-and-bulk-binding-15.sql
│ │ │ ├── bulk-sql-and-bulk-binding-17.sql
│ │ │ ├── bulk-sql-and-bulk-binding-19.sql
│ │ │ ├── bulk-sql-and-bulk-binding-2.sql
│ │ │ ├── bulk-sql-and-bulk-binding-22.sql
│ │ │ ├── bulk-sql-and-bulk-binding-24.sql
│ │ │ ├── bulk-sql-and-bulk-binding-26.sql
│ │ │ ├── bulk-sql-and-bulk-binding-28.sql
│ │ │ ├── bulk-sql-and-bulk-binding-3.sql
│ │ │ ├── bulk-sql-and-bulk-binding-30.sql
│ │ │ ├── bulk-sql-and-bulk-binding-32.sql
│ │ │ ├── bulk-sql-and-bulk-binding-34.sql
│ │ │ ├── bulk-sql-and-bulk-binding-37.sql
│ │ │ ├── bulk-sql-and-bulk-binding-38.sql
│ │ │ ├── bulk-sql-and-bulk-binding-40.sql
│ │ │ ├── bulk-sql-and-bulk-binding-42.sql
│ │ │ ├── bulk-sql-and-bulk-binding-43.sql
│ │ │ ├── bulk-sql-and-bulk-binding-45.sql
│ │ │ ├── bulk-sql-and-bulk-binding-47.sql
│ │ │ ├── bulk-sql-and-bulk-binding-48.sql
│ │ │ ├── bulk-sql-and-bulk-binding-5.sql
│ │ │ ├── bulk-sql-and-bulk-binding-50.sql
│ │ │ ├── bulk-sql-and-bulk-binding-52.sql
│ │ │ ├── bulk-sql-and-bulk-binding-53.sql
│ │ │ ├── bulk-sql-and-bulk-binding-55.sql
│ │ │ ├── bulk-sql-and-bulk-binding-57.sql
│ │ │ ├── bulk-sql-and-bulk-binding-59.sql
│ │ │ ├── bulk-sql-and-bulk-binding-6.sql
│ │ │ ├── bulk-sql-and-bulk-binding-61.sql
│ │ │ ├── bulk-sql-and-bulk-binding-63.sql
│ │ │ ├── bulk-sql-and-bulk-binding-65.sql
│ │ │ ├── bulk-sql-and-bulk-binding-67.sql
│ │ │ ├── bulk-sql-and-bulk-binding-8.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-0.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-1.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-10.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-12.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-13.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-14.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-16.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-17.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-18.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-2.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-21.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-23.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-3.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-4.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-6.sql
│ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-8.sql
│ │ │ ├── collection-comparisons-0.sql
│ │ │ ├── collection-comparisons-2.sql
│ │ │ ├── collection-comparisons-4.sql
│ │ │ ├── collection-methods-1.sql
│ │ │ ├── collection-methods-11.sql
│ │ │ ├── collection-methods-13.sql
│ │ │ ├── collection-methods-15.sql
│ │ │ ├── collection-methods-17.sql
│ │ │ ├── collection-methods-19.sql
│ │ │ ├── collection-methods-21.sql
│ │ │ ├── collection-methods-23.sql
│ │ │ ├── collection-methods-25.sql
│ │ │ ├── collection-methods-27.sql
│ │ │ ├── collection-methods-29.sql
│ │ │ ├── collection-methods-3.sql
│ │ │ ├── collection-methods-5.sql
│ │ │ ├── collection-methods-7.sql
│ │ │ ├── collection-methods-9.sql
│ │ │ ├── collection-types-defined-package-specifications-0.sql
│ │ │ ├── collection-types-defined-package-specifications-2.sql
│ │ │ ├── column-name-precedence-0.sql
│ │ │ ├── column-name-precedence-2.sql
│ │ │ ├── column-name-precedence-4.sql
│ │ │ ├── column-name-precedence-6.sql
│ │ │ ├── compile-time-warnings-1.sql
│ │ │ ├── compile-time-warnings-11.sql
│ │ │ ├── compile-time-warnings-13.sql
│ │ │ ├── compile-time-warnings-2.sql
│ │ │ ├── compile-time-warnings-3.sql
│ │ │ ├── compile-time-warnings-4.sql
│ │ │ ├── compile-time-warnings-5.sql
│ │ │ ├── compile-time-warnings-6.sql
│ │ │ ├── compile-time-warnings-7.sql
│ │ │ ├── compile-time-warnings-8.sql
│ │ │ ├── compile-time-warnings-9.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-0.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-1.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-2.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-3.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-4.sql
│ │ │ ├── compiling-pl-sql-units-native-execution-5.sql
│ │ │ ├── conditional-compilation1-10.sql
│ │ │ ├── conditional-compilation1-12.sql
│ │ │ ├── conditional-compilation1-13.sql
│ │ │ ├── conditional-compilation1-14.sql
│ │ │ ├── conditional-compilation1-18.sql
│ │ │ ├── conditional-compilation1-20.sql
│ │ │ ├── conditional-compilation1-21.sql
│ │ │ ├── conditional-compilation1-23.sql
│ │ │ ├── conditional-compilation1-25.sql
│ │ │ ├── conditional-selection-statements-10.sql
│ │ │ ├── conditional-selection-statements-14.sql
│ │ │ ├── conditional-selection-statements-16.sql
│ │ │ ├── conditional-selection-statements-19.sql
│ │ │ ├── conditional-selection-statements-21.sql
│ │ │ ├── conditional-selection-statements-24.sql
│ │ │ ├── conditional-selection-statements-26.sql
│ │ │ ├── conditional-selection-statements-5.sql
│ │ │ ├── conditional-selection-statements-8.sql
│ │ │ ├── continuing-execution-handling-exceptions-0.sql
│ │ │ ├── continuing-execution-handling-exceptions-2.sql
│ │ │ ├── correlation-names-and-pseudorecords-11.sql
│ │ │ ├── correlation-names-and-pseudorecords-13.sql
│ │ │ ├── correlation-names-and-pseudorecords-15.sql
│ │ │ ├── correlation-names-and-pseudorecords-16.sql
│ │ │ ├── correlation-names-and-pseudorecords-17.sql
│ │ │ ├── correlation-names-and-pseudorecords-19.sql
│ │ │ ├── correlation-names-and-pseudorecords-2.sql
│ │ │ ├── correlation-names-and-pseudorecords-20.sql
│ │ │ ├── correlation-names-and-pseudorecords-22.sql
│ │ │ ├── correlation-names-and-pseudorecords-3.sql
│ │ │ ├── correlation-names-and-pseudorecords-4.sql
│ │ │ ├── correlation-names-and-pseudorecords-6.sql
│ │ │ ├── correlation-names-and-pseudorecords-8.sql
│ │ │ ├── correlation-names-and-pseudorecords-9.sql
│ │ │ ├── cursor-expressions-1.sql
│ │ │ ├── cursor-variables-1.sql
│ │ │ ├── cursor-variables-10.sql
│ │ │ ├── cursor-variables-12.sql
│ │ │ ├── cursor-variables-14.sql
│ │ │ ├── cursor-variables-15.sql
│ │ │ ├── cursor-variables-16.sql
│ │ │ ├── cursor-variables-17.sql
│ │ │ ├── cursor-variables-18.sql
│ │ │ ├── cursor-variables-19.sql
│ │ │ ├── cursor-variables-2.sql
│ │ │ ├── cursor-variables-3.sql
│ │ │ ├── cursor-variables-5.sql
│ │ │ ├── cursor-variables-8.sql
│ │ │ ├── cursors-overview-0.sql
│ │ │ ├── cursors-overview-10.sql
│ │ │ ├── cursors-overview-12.sql
│ │ │ ├── cursors-overview-14.sql
│ │ │ ├── cursors-overview-16.sql
│ │ │ ├── cursors-overview-18.sql
│ │ │ ├── cursors-overview-2.sql
│ │ │ ├── cursors-overview-20.sql
│ │ │ ├── cursors-overview-22.sql
│ │ │ ├── cursors-overview-24.sql
│ │ │ ├── cursors-overview-25.sql
│ │ │ ├── cursors-overview-27.sql
│ │ │ ├── cursors-overview-29.sql
│ │ │ ├── cursors-overview-6.sql
│ │ │ ├── cursors-overview-7.sql
│ │ │ ├── cursors-overview-8.sql
│ │ │ ├── dbms_sql-package-1.sql
│ │ │ ├── dbms_sql-package-4.sql
│ │ │ ├── dbms_sql-package-6.sql
│ │ │ ├── dbms_sql-package-7.sql
│ │ │ ├── declarations-0.sql
│ │ │ ├── declarations-1.sql
│ │ │ ├── declarations-11.sql
│ │ │ ├── declarations-2.sql
│ │ │ ├── declarations-3.sql
│ │ │ ├── declarations-4.sql
│ │ │ ├── declarations-5.sql
│ │ │ ├── declarations-9.sql
│ │ │ ├── description-static-sql-0.sql
│ │ │ ├── description-static-sql-2.sql
│ │ │ ├── dml-triggers-0.sql
│ │ │ ├── dml-triggers-1.sql
│ │ │ ├── dml-triggers-10.sql
│ │ │ ├── dml-triggers-12.sql
│ │ │ ├── dml-triggers-13.sql
│ │ │ ├── dml-triggers-15.sql
│ │ │ ├── dml-triggers-17.sql
│ │ │ ├── dml-triggers-18.sql
│ │ │ ├── dml-triggers-2.sql
│ │ │ ├── dml-triggers-20.sql
│ │ │ ├── dml-triggers-23.sql
│ │ │ ├── dml-triggers-24.sql
│ │ │ ├── dml-triggers-25.sql
│ │ │ ├── dml-triggers-27.sql
│ │ │ ├── dml-triggers-28.sql
│ │ │ ├── dml-triggers-30.sql
│ │ │ ├── dml-triggers-32.sql
│ │ │ ├── dml-triggers-33.sql
│ │ │ ├── dml-triggers-34.sql
│ │ │ ├── dml-triggers-35.sql
│ │ │ ├── dml-triggers-36.sql
│ │ │ ├── dml-triggers-37.sql
│ │ │ ├── dml-triggers-38.sql
│ │ │ ├── dml-triggers-39.sql
│ │ │ ├── dml-triggers-4.sql
│ │ │ ├── dml-triggers-40.sql
│ │ │ ├── dml-triggers-41.sql
│ │ │ ├── dml-triggers-42.sql
│ │ │ ├── dml-triggers-43.sql
│ │ │ ├── dml-triggers-44.sql
│ │ │ ├── dml-triggers-45.sql
│ │ │ ├── dml-triggers-47.sql
│ │ │ ├── dml-triggers-49.sql
│ │ │ ├── dml-triggers-50.sql
│ │ │ ├── dml-triggers-51.sql
│ │ │ ├── dml-triggers-52.sql
│ │ │ ├── dml-triggers-54.sql
│ │ │ ├── dml-triggers-56.sql
│ │ │ ├── dml-triggers-6.sql
│ │ │ ├── dml-triggers-8.sql
│ │ │ ├── exception-handling-triggers-0.sql
│ │ │ ├── exception-handling-triggers-1.sql
│ │ │ ├── exception-propagation-0.sql
│ │ │ ├── exception-propagation-1.sql
│ │ │ ├── exception-propagation-11.sql
│ │ │ ├── exception-propagation-13.sql
│ │ │ ├── exception-propagation-15.sql
│ │ │ ├── exception-propagation-3.sql
│ │ │ ├── exception-propagation-5.sql
│ │ │ ├── exception-propagation-7.sql
│ │ │ ├── exception-propagation-9.sql
│ │ │ ├── expressions-0.sql
│ │ │ ├── expressions-10.sql
│ │ │ ├── expressions-12.sql
│ │ │ ├── expressions-13.sql
│ │ │ ├── expressions-15.sql
│ │ │ ├── expressions-17.sql
│ │ │ ├── expressions-19.sql
│ │ │ ├── expressions-2.sql
│ │ │ ├── expressions-21.sql
│ │ │ ├── expressions-23.sql
│ │ │ ├── expressions-24.sql
│ │ │ ├── expressions-26.sql
│ │ │ ├── expressions-28.sql
│ │ │ ├── expressions-35.sql
│ │ │ ├── expressions-37.sql
│ │ │ ├── expressions-39.sql
│ │ │ ├── expressions-4.sql
│ │ │ ├── expressions-41.sql
│ │ │ ├── expressions-43.sql
│ │ │ ├── expressions-46.sql
│ │ │ ├── expressions-48.sql
│ │ │ ├── expressions-50.sql
│ │ │ ├── expressions-52.sql
│ │ │ ├── expressions-54.sql
│ │ │ ├── expressions-57.sql
│ │ │ ├── expressions-59.sql
│ │ │ ├── expressions-6.sql
│ │ │ ├── expressions-62.sql
│ │ │ ├── expressions-8.sql
│ │ │ ├── external-subprograms-1.sql
│ │ │ ├── external-subprograms-2.sql
│ │ │ ├── external-subprograms-4.sql
│ │ │ ├── external-subprograms-5.sql
│ │ │ ├── forward-declaration-0.sql
│ │ │ ├── inserting-records-tables-0.sql
│ │ │ ├── invokers-rights-and-definers-rights-authid-property-0.sql
│ │ │ ├── invokers-rights-and-definers-rights-authid-property-2.sql
│ │ │ ├── invokers-rights-and-definers-rights-authid-property-3.sql
│ │ │ ├── lexical-units-0.sql
│ │ │ ├── lexical-units-10.sql
│ │ │ ├── lexical-units-12.sql
│ │ │ ├── lexical-units-15.sql
│ │ │ ├── lexical-units-17.sql
│ │ │ ├── lexical-units-20.sql
│ │ │ ├── lexical-units-23.sql
│ │ │ ├── lexical-units-25.sql
│ │ │ ├── lexical-units-4.sql
│ │ │ ├── lexical-units-6.sql
│ │ │ ├── lexical-units-8.sql
│ │ │ ├── loop-statements-0.sql
│ │ │ ├── loop-statements-10.sql
│ │ │ ├── loop-statements-13.sql
│ │ │ ├── loop-statements-15.sql
│ │ │ ├── loop-statements-17.sql
│ │ │ ├── loop-statements-19.sql
│ │ │ ├── loop-statements-2.sql
│ │ │ ├── loop-statements-25.sql
│ │ │ ├── loop-statements-27.sql
│ │ │ ├── loop-statements-31.sql
│ │ │ ├── loop-statements-33.sql
│ │ │ ├── loop-statements-37.sql
│ │ │ ├── loop-statements-39.sql
│ │ │ ├── loop-statements-4.sql
│ │ │ ├── loop-statements-6.sql
│ │ │ ├── loop-statements-8.sql
│ │ │ ├── main-features-pl-sql-1.sql
│ │ │ ├── minimizing-cpu-overhead-0.sql
│ │ │ ├── minimizing-cpu-overhead-2.sql
│ │ │ ├── multidimensional-collections-0.sql
│ │ │ ├── multidimensional-collections-2.sql
│ │ │ ├── multidimensional-collections-3.sql
│ │ │ ├── native-dynamic-sql-0.sql
│ │ │ ├── native-dynamic-sql-1.sql
│ │ │ ├── native-dynamic-sql-11.sql
│ │ │ ├── native-dynamic-sql-12.sql
│ │ │ ├── native-dynamic-sql-13.sql
│ │ │ ├── native-dynamic-sql-15.sql
│ │ │ ├── native-dynamic-sql-16.sql
│ │ │ ├── native-dynamic-sql-17.sql
│ │ │ ├── native-dynamic-sql-18.sql
│ │ │ ├── native-dynamic-sql-19.sql
│ │ │ ├── native-dynamic-sql-3.sql
│ │ │ ├── native-dynamic-sql-5.sql
│ │ │ ├── native-dynamic-sql-7.sql
│ │ │ ├── native-dynamic-sql-9.sql
│ │ │ ├── overloaded-subprograms-0.sql
│ │ │ ├── overloaded-subprograms-10.sql
│ │ │ ├── overloaded-subprograms-11.sql
│ │ │ ├── overloaded-subprograms-12.sql
│ │ │ ├── overloaded-subprograms-13.sql
│ │ │ ├── overloaded-subprograms-15.sql
│ │ │ ├── overloaded-subprograms-5.sql
│ │ │ ├── overloaded-subprograms-6.sql
│ │ │ ├── overloaded-subprograms-7.sql
│ │ │ ├── overloaded-subprograms-8.sql
│ │ │ ├── overloaded-subprograms-9.sql
│ │ │ ├── overview-exception-handling-1.sql
│ │ │ ├── overview-exception-handling-2.sql
│ │ │ ├── overview-exception-handling-4.sql
│ │ │ ├── overview-exception-handling-6.sql
│ │ │ ├── overview-polymorphic-table-functions-0.sql
│ │ │ ├── overview-polymorphic-table-functions-1.sql
│ │ │ ├── overview-polymorphic-table-functions-10.sql
│ │ │ ├── overview-polymorphic-table-functions-12.sql
│ │ │ ├── overview-polymorphic-table-functions-14.sql
│ │ │ ├── overview-polymorphic-table-functions-16.sql
│ │ │ ├── overview-polymorphic-table-functions-17.sql
│ │ │ ├── overview-polymorphic-table-functions-18.sql
│ │ │ ├── overview-polymorphic-table-functions-19.sql
│ │ │ ├── overview-polymorphic-table-functions-2.sql
│ │ │ ├── overview-polymorphic-table-functions-21.sql
│ │ │ ├── overview-polymorphic-table-functions-23.sql
│ │ │ ├── overview-polymorphic-table-functions-25.sql
│ │ │ ├── overview-polymorphic-table-functions-27.sql
│ │ │ ├── overview-polymorphic-table-functions-29.sql
│ │ │ ├── overview-polymorphic-table-functions-30.sql
│ │ │ ├── overview-polymorphic-table-functions-31.sql
│ │ │ ├── overview-polymorphic-table-functions-4.sql
│ │ │ ├── overview-polymorphic-table-functions-5.sql
│ │ │ ├── overview-polymorphic-table-functions-6.sql
│ │ │ ├── overview-polymorphic-table-functions-8.sql
│ │ │ ├── package-body-0.sql
│ │ │ ├── package-body-2.sql
│ │ │ ├── package-body-4.sql
│ │ │ ├── package-example-0.sql
│ │ │ ├── package-specification-1.sql
│ │ │ ├── package-specification-2.sql
│ │ │ ├── package-writing-guidelines-0.sql
│ │ │ ├── package-writing-guidelines-1.sql
│ │ │ ├── package-writing-guidelines-2.sql
│ │ │ ├── package-writing-guidelines-4.sql
│ │ │ ├── pl-sql-function-result-cache-0.sql
│ │ │ ├── pl-sql-function-result-cache-1.sql
│ │ │ ├── pl-sql-function-result-cache-10.sql
│ │ │ ├── pl-sql-function-result-cache-11.sql
│ │ │ ├── pl-sql-function-result-cache-12.sql
│ │ │ ├── pl-sql-function-result-cache-13.sql
│ │ │ ├── pl-sql-function-result-cache-15.sql
│ │ │ ├── pl-sql-function-result-cache-16.sql
│ │ │ ├── pl-sql-function-result-cache-17.sql
│ │ │ ├── pl-sql-function-result-cache-18.sql
│ │ │ ├── pl-sql-function-result-cache-19.sql
│ │ │ ├── pl-sql-function-result-cache-20.sql
│ │ │ ├── pl-sql-function-result-cache-4.sql
│ │ │ ├── pl-sql-function-result-cache-5.sql
│ │ │ ├── pl-sql-function-result-cache-6.sql
│ │ │ ├── pl-sql-function-result-cache-7.sql
│ │ │ ├── pl-sql-function-result-cache-9.sql
│ │ │ ├── pls_integer-and-binary_integer-data-types-0.sql
│ │ │ ├── pls_integer-and-binary_integer-data-types-2.sql
│ │ │ ├── pls_integer-and-binary_integer-data-types-4.sql
│ │ │ ├── pls_integer-and-binary_integer-data-types-6.sql
│ │ │ ├── plsql-program-limits-0.sql
│ │ │ ├── plsql-program-limits-1.sql
│ │ │ ├── plsql-program-limits-2.sql
│ │ │ ├── predefined-exceptions-0.sql
│ │ │ ├── predefined-exceptions-2.sql
│ │ │ ├── predefined-exceptions-3.sql
│ │ │ ├── predefined-exceptions-4.sql
│ │ │ ├── processing-query-result-sets-0.sql
│ │ │ ├── processing-query-result-sets-10.sql
│ │ │ ├── processing-query-result-sets-2.sql
│ │ │ ├── processing-query-result-sets-4.sql
│ │ │ ├── processing-query-result-sets-6.sql
│ │ │ ├── processing-query-result-sets-8.sql
│ │ │ ├── qualified-names-and-dot-notation-6.sql
│ │ │ ├── raising-exceptions-explicitly-0.sql
│ │ │ ├── raising-exceptions-explicitly-2.sql
│ │ │ ├── raising-exceptions-explicitly-3.sql
│ │ │ ├── raising-exceptions-explicitly-5.sql
│ │ │ ├── raising-exceptions-explicitly-9.sql
│ │ │ ├── record-variables-0.sql
│ │ │ ├── record-variables-1.sql
│ │ │ ├── record-variables-11.sql
│ │ │ ├── record-variables-14.sql
│ │ │ ├── record-variables-16.sql
│ │ │ ├── record-variables-19.sql
│ │ │ ├── record-variables-21.sql
│ │ │ ├── record-variables-22.sql
│ │ │ ├── record-variables-24.sql
│ │ │ ├── record-variables-26.sql
│ │ │ ├── record-variables-28.sql
│ │ │ ├── record-variables-3.sql
│ │ │ ├── record-variables-30.sql
│ │ │ ├── record-variables-5.sql
│ │ │ ├── record-variables-7.sql
│ │ │ ├── record-variables-9.sql
│ │ │ ├── recursive-subprograms-1.sql
│ │ │ ├── recursive-subprograms-3.sql
│ │ │ ├── redeclared-predefined-exceptions-0.sql
│ │ │ ├── redeclared-predefined-exceptions-1.sql
│ │ │ ├── redeclared-predefined-exceptions-3.sql
│ │ │ ├── redeclared-predefined-exceptions-5.sql
│ │ │ ├── references-identifiers-0.sql
│ │ │ ├── release-changes-0.sql
│ │ │ ├── release-changes-2.sql
│ │ │ ├── release-changes-3.sql
│ │ │ ├── release-changes-4.sql
│ │ │ ├── retrieving-error-code-and-error-message-0.sql
│ │ │ ├── retrying-transactions-handling-exceptions-0.sql
│ │ │ ├── scope-and-visibility-identifiers-0.sql
│ │ │ ├── scope-and-visibility-identifiers-1.sql
│ │ │ ├── scope-and-visibility-identifiers-11.sql
│ │ │ ├── scope-and-visibility-identifiers-3.sql
│ │ │ ├── scope-and-visibility-identifiers-5.sql
│ │ │ ├── scope-and-visibility-identifiers-7.sql
│ │ │ ├── scope-and-visibility-identifiers-9.sql
│ │ │ ├── sequential-control-statements-0.sql
│ │ │ ├── sequential-control-statements-1.sql
│ │ │ ├── sequential-control-statements-2.sql
│ │ │ ├── serially_reusable-packages-0.sql
│ │ │ ├── serially_reusable-packages-1.sql
│ │ │ ├── serially_reusable-packages-3.sql
│ │ │ ├── serially_reusable-packages-4.sql
│ │ │ ├── serially_reusable-packages-6.sql
│ │ │ ├── sql-data-types-1.sql
│ │ │ ├── sql-data-types-10.sql
│ │ │ ├── sql-data-types-12.sql
│ │ │ ├── sql-data-types-14.sql
│ │ │ ├── sql-data-types-16.sql
│ │ │ ├── sql-data-types-18.sql
│ │ │ ├── sql-data-types-20.sql
│ │ │ ├── sql-data-types-22.sql
│ │ │ ├── sql-data-types-24.sql
│ │ │ ├── sql-data-types-26.sql
│ │ │ ├── sql-data-types-29.sql
│ │ │ ├── sql-data-types-3.sql
│ │ │ ├── sql-data-types-31.sql
│ │ │ ├── sql-data-types-32.sql
│ │ │ ├── sql-data-types-34.sql
│ │ │ ├── sql-data-types-36.sql
│ │ │ ├── sql-data-types-38.sql
│ │ │ ├── sql-data-types-4.sql
│ │ │ ├── sql-data-types-42.sql
│ │ │ ├── sql-data-types-44.sql
│ │ │ ├── sql-data-types-46.sql
│ │ │ ├── sql-data-types-48.sql
│ │ │ ├── sql-data-types-50.sql
│ │ │ ├── sql-data-types-52.sql
│ │ │ ├── sql-data-types-6.sql
│ │ │ ├── sql-data-types-8.sql
│ │ │ ├── sql-injection-0.sql
│ │ │ ├── sql-injection-1.sql
│ │ │ ├── sql-injection-10.sql
│ │ │ ├── sql-injection-12.sql
│ │ │ ├── sql-injection-13.sql
│ │ │ ├── sql-injection-14.sql
│ │ │ ├── sql-injection-16.sql
│ │ │ ├── sql-injection-18.sql
│ │ │ ├── sql-injection-19.sql
│ │ │ ├── sql-injection-2.sql
│ │ │ ├── sql-injection-21.sql
│ │ │ ├── sql-injection-23.sql
│ │ │ ├── sql-injection-24.sql
│ │ │ ├── sql-injection-26.sql
│ │ │ ├── sql-injection-28.sql
│ │ │ ├── sql-injection-30.sql
│ │ │ ├── sql-injection-31.sql
│ │ │ ├── sql-injection-4.sql
│ │ │ ├── sql-injection-6.sql
│ │ │ ├── sql-injection-7.sql
│ │ │ ├── sql-injection-9.sql
│ │ │ ├── subprogram-invocation-resolution-0.sql
│ │ │ ├── subprogram-parameters-10.sql
│ │ │ ├── subprogram-parameters-12.sql
│ │ │ ├── subprogram-parameters-13.sql
│ │ │ ├── subprogram-parameters-15.sql
│ │ │ ├── subprogram-parameters-17.sql
│ │ │ ├── subprogram-parameters-19.sql
│ │ │ ├── subprogram-parameters-2.sql
│ │ │ ├── subprogram-parameters-21.sql
│ │ │ ├── subprogram-parameters-24.sql
│ │ │ ├── subprogram-parameters-26.sql
│ │ │ ├── subprogram-parameters-27.sql
│ │ │ ├── subprogram-parameters-29.sql
│ │ │ ├── subprogram-parameters-30.sql
│ │ │ ├── subprogram-parameters-32.sql
│ │ │ ├── subprogram-parameters-33.sql
│ │ │ ├── subprogram-parameters-36.sql
│ │ │ ├── subprogram-parameters-37.sql
│ │ │ ├── subprogram-parameters-4.sql
│ │ │ ├── subprogram-parameters-6.sql
│ │ │ ├── subprogram-parameters-8.sql
│ │ │ ├── subprogram-parts-0.sql
│ │ │ ├── subprogram-parts-11.sql
│ │ │ ├── subprogram-parts-2.sql
│ │ │ ├── subprogram-parts-4.sql
│ │ │ ├── subprogram-parts-6.sql
│ │ │ ├── subprogram-parts-7.sql
│ │ │ ├── subprogram-parts-9.sql
│ │ │ ├── subprograms-invoked-triggers-0.sql
│ │ │ ├── system-triggers-0.sql
│ │ │ ├── system-triggers-1.sql
│ │ │ ├── system-triggers-2.sql
│ │ │ ├── system-triggers-3.sql
│ │ │ ├── transaction-processing-and-control-0.sql
│ │ │ ├── transaction-processing-and-control-1.sql
│ │ │ ├── transaction-processing-and-control-11.sql
│ │ │ ├── transaction-processing-and-control-2.sql
│ │ │ ├── transaction-processing-and-control-3.sql
│ │ │ ├── transaction-processing-and-control-5.sql
│ │ │ ├── transaction-processing-and-control-6.sql
│ │ │ ├── transaction-processing-and-control-7.sql
│ │ │ ├── transaction-processing-and-control-8.sql
│ │ │ ├── transaction-processing-and-control-9.sql
│ │ │ ├── trigger-design-guidelines-0.sql
│ │ │ ├── trigger-design-guidelines-1.sql
│ │ │ ├── trigger-restrictions-0.sql
│ │ │ ├── trigger-restrictions-11.sql
│ │ │ ├── trigger-restrictions-12.sql
│ │ │ ├── trigger-restrictions-14.sql
│ │ │ ├── trigger-restrictions-2.sql
│ │ │ ├── trigger-restrictions-4.sql
│ │ │ ├── trigger-restrictions-6.sql
│ │ │ ├── trigger-restrictions-7.sql
│ │ │ ├── trigger-restrictions-9.sql
│ │ │ ├── triggers-publishing-events-0.sql
│ │ │ ├── triggers-publishing-events-10.sql
│ │ │ ├── triggers-publishing-events-12.sql
│ │ │ ├── triggers-publishing-events-14.sql
│ │ │ ├── triggers-publishing-events-16.sql
│ │ │ ├── triggers-publishing-events-18.sql
│ │ │ ├── triggers-publishing-events-2.sql
│ │ │ ├── triggers-publishing-events-20.sql
│ │ │ ├── triggers-publishing-events-24.sql
│ │ │ ├── triggers-publishing-events-28.sql
│ │ │ ├── triggers-publishing-events-30.sql
│ │ │ ├── triggers-publishing-events-34.sql
│ │ │ ├── triggers-publishing-events-36.sql
│ │ │ ├── triggers-publishing-events-38.sql
│ │ │ ├── triggers-publishing-events-4.sql
│ │ │ ├── triggers-publishing-events-42.sql
│ │ │ ├── triggers-publishing-events-48.sql
│ │ │ ├── triggers-publishing-events-50.sql
│ │ │ ├── triggers-publishing-events-52.sql
│ │ │ ├── triggers-publishing-events-6.sql
│ │ │ ├── triggers-publishing-events-8.sql
│ │ │ ├── updating-rows-records-0.sql
│ │ │ ├── user-defined-pl-sql-subtypes-2.sql
│ │ │ ├── user-defined-pl-sql-subtypes-5.sql
│ │ │ ├── user-defined-pl-sql-subtypes-7.sql
│ │ │ ├── user-defined-pl-sql-subtypes-9.sql
│ │ │ ├── views-information-triggers-0.sql
│ │ │ ├── views-information-triggers-1.sql
│ │ │ ├── views-information-triggers-2.sql
│ │ │ ├── views-information-triggers-4.sql
│ │ │ ├── views-information-triggers-5.sql
│ │ │ ├── what-is-capture-0.sql
│ │ │ ├── what-is-capture-1.sql
│ │ │ ├── what-is-capture-2.sql
│ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-0.sql
│ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-1.sql
│ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-2.sql
│ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-3.sql
│ │ │ ├── wrapping-pl-sql-source-text-pl-sql-wrapper-utility-4.sql
│ │ │ └── wrapping-pl-sql-source-text-pl-sql-wrapper-utility-7.sql
│ │ └── sqlrf/
│ │ ├── ABS-0.sql
│ │ ├── ACOS-0.sql
│ │ ├── ADD_MONTHS-0.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-10.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-11.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-12.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-13.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-14.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-15.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-16.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-17.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-18.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-19.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-2.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-20.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-21.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-22.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-23.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-24.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-25.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-26.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-27.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-28.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-29.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-3.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-30.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-31.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-32.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-33.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-34.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-35.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-36.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-37.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-6.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-7.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-8.sql
│ │ ├── ADMINISTER-KEY-MANAGEMENT-9.sql
│ │ ├── ALTER-ANALYTIC-VIEW-0.sql
│ │ ├── ALTER-ANALYTIC-VIEW-1.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-0.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-1.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-10.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-11.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-12.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-13.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-14.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-2.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-3.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-4.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-5.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-6.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-7.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-8.sql
│ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-9.sql
│ │ ├── ALTER-CLUSTER-0.sql
│ │ ├── ALTER-CLUSTER-1.sql
│ │ ├── ALTER-CLUSTER-2.sql
│ │ ├── ALTER-CLUSTER-3.sql
│ │ ├── ALTER-CLUSTER-4.sql
│ │ ├── ALTER-CLUSTER-5.sql
│ │ ├── ALTER-CLUSTER-6.sql
│ │ ├── ALTER-CLUSTER-7.sql
│ │ ├── ALTER-DATABASE-0.sql
│ │ ├── ALTER-DATABASE-1.sql
│ │ ├── ALTER-DATABASE-10.sql
│ │ ├── ALTER-DATABASE-11.sql
│ │ ├── ALTER-DATABASE-12.sql
│ │ ├── ALTER-DATABASE-13.sql
│ │ ├── ALTER-DATABASE-14.sql
│ │ ├── ALTER-DATABASE-15.sql
│ │ ├── ALTER-DATABASE-16.sql
│ │ ├── ALTER-DATABASE-17.sql
│ │ ├── ALTER-DATABASE-18.sql
│ │ ├── ALTER-DATABASE-19.sql
│ │ ├── ALTER-DATABASE-2.sql
│ │ ├── ALTER-DATABASE-20.sql
│ │ ├── ALTER-DATABASE-21.sql
│ │ ├── ALTER-DATABASE-22.sql
│ │ ├── ALTER-DATABASE-23.sql
│ │ ├── ALTER-DATABASE-24.sql
│ │ ├── ALTER-DATABASE-25.sql
│ │ ├── ALTER-DATABASE-26.sql
│ │ ├── ALTER-DATABASE-27.sql
│ │ ├── ALTER-DATABASE-28.sql
│ │ ├── ALTER-DATABASE-3.sql
│ │ ├── ALTER-DATABASE-4.sql
│ │ ├── ALTER-DATABASE-5.sql
│ │ ├── ALTER-DATABASE-6.sql
│ │ ├── ALTER-DATABASE-7.sql
│ │ ├── ALTER-DATABASE-8.sql
│ │ ├── ALTER-DATABASE-9.sql
│ │ ├── ALTER-DATABASE-LINK-0.sql
│ │ ├── ALTER-DIMENSION-0.sql
│ │ ├── ALTER-DISKGROUP-1.sql
│ │ ├── ALTER-DISKGROUP-10.sql
│ │ ├── ALTER-DISKGROUP-11.sql
│ │ ├── ALTER-DISKGROUP-12.sql
│ │ ├── ALTER-DISKGROUP-13.sql
│ │ ├── ALTER-DISKGROUP-14.sql
│ │ ├── ALTER-DISKGROUP-15.sql
│ │ ├── ALTER-DISKGROUP-16.sql
│ │ ├── ALTER-DISKGROUP-2.sql
│ │ ├── ALTER-DISKGROUP-3.sql
│ │ ├── ALTER-DISKGROUP-4.sql
│ │ ├── ALTER-DISKGROUP-5.sql
│ │ ├── ALTER-DISKGROUP-6.sql
│ │ ├── ALTER-DISKGROUP-7.sql
│ │ ├── ALTER-DISKGROUP-8.sql
│ │ ├── ALTER-DISKGROUP-9.sql
│ │ ├── ALTER-HIERARCHY-0.sql
│ │ ├── ALTER-INDEX-0.sql
│ │ ├── ALTER-INDEX-1.sql
│ │ ├── ALTER-INDEX-10.sql
│ │ ├── ALTER-INDEX-11.sql
│ │ ├── ALTER-INDEX-12.sql
│ │ ├── ALTER-INDEX-2.sql
│ │ ├── ALTER-INDEX-3.sql
│ │ ├── ALTER-INDEX-4.sql
│ │ ├── ALTER-INDEX-5.sql
│ │ ├── ALTER-INDEX-6.sql
│ │ ├── ALTER-INDEX-7.sql
│ │ ├── ALTER-INDEX-8.sql
│ │ ├── ALTER-INDEX-9.sql
│ │ ├── ALTER-INDEXTYPE-0.sql
│ │ ├── ALTER-INMEMORY-JOIN-GROUP-0.sql
│ │ ├── ALTER-INMEMORY-JOIN-GROUP-1.sql
│ │ ├── ALTER-JAVA-0.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-10.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-11.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-12.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-13.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-14.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-15.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-16.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-17.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-18.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-19.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-2.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-20.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-21.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-22.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-23.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-24.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-25.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-3.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-4.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-5.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-6.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-7.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-8.sql
│ │ ├── ALTER-LOCKDOWN-PROFILE-9.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-0.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-1.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-2.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-3.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-4.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-5.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-6.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-7.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-LOG-0.sql
│ │ ├── ALTER-MATERIALIZED-VIEW-LOG-1.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-0.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-1.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-2.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-3.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-4.sql
│ │ ├── ALTER-MATERIALIZED-ZONEMAP-5.sql
│ │ ├── ALTER-OPERATOR-0.sql
│ │ ├── ALTER-OUTLINE-0.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-0.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-1.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-10.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-11.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-12.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-13.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-14.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-15.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-16.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-17.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-18.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-19.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-2.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-20.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-21.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-3.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-6.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-7.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-8.sql
│ │ ├── ALTER-PLUGGABLE-DATABASE-9.sql
│ │ ├── ALTER-PROFILE-0.sql
│ │ ├── ALTER-PROFILE-1.sql
│ │ ├── ALTER-PROFILE-2.sql
│ │ ├── ALTER-PROFILE-3.sql
│ │ ├── ALTER-PROFILE-4.sql
│ │ ├── ALTER-PROFILE-5.sql
│ │ ├── ALTER-PROFILE-6.sql
│ │ ├── ALTER-PROFILE-7.sql
│ │ ├── ALTER-PROFILE-8.sql
│ │ ├── ALTER-PROFILE-9.sql
│ │ ├── ALTER-RESOURCE-COST-0.sql
│ │ ├── ALTER-RESOURCE-COST-2.sql
│ │ ├── ALTER-ROLE-0.sql
│ │ ├── ALTER-ROLE-1.sql
│ │ ├── ALTER-ROLE-2.sql
│ │ ├── ALTER-ROLLBACK-SEGMENT-0.sql
│ │ ├── ALTER-ROLLBACK-SEGMENT-1.sql
│ │ ├── ALTER-SEQUENCE-0.sql
│ │ ├── ALTER-SEQUENCE-1.sql
│ │ ├── ALTER-SESSION-0.sql
│ │ ├── ALTER-SESSION-1.sql
│ │ ├── ALTER-SESSION-13.sql
│ │ ├── ALTER-SESSION-14.sql
│ │ ├── ALTER-SESSION-15.sql
│ │ ├── ALTER-SESSION-16.sql
│ │ ├── ALTER-SESSION-17.sql
│ │ ├── ALTER-SESSION-18.sql
│ │ ├── ALTER-SESSION-19.sql
│ │ ├── ALTER-SESSION-2.sql
│ │ ├── ALTER-SESSION-20.sql
│ │ ├── ALTER-SESSION-21.sql
│ │ ├── ALTER-SESSION-22.sql
│ │ ├── ALTER-SESSION-23.sql
│ │ ├── ALTER-SESSION-24.sql
│ │ ├── ALTER-SESSION-25.sql
│ │ ├── ALTER-SYNONYM-0.sql
│ │ ├── ALTER-SYNONYM-1.sql
│ │ ├── ALTER-SYNONYM-2.sql
│ │ ├── ALTER-SYSTEM-0.sql
│ │ ├── ALTER-SYSTEM-1.sql
│ │ ├── ALTER-SYSTEM-10.sql
│ │ ├── ALTER-SYSTEM-11.sql
│ │ ├── ALTER-SYSTEM-12.sql
│ │ ├── ALTER-SYSTEM-13.sql
│ │ ├── ALTER-SYSTEM-14.sql
│ │ ├── ALTER-SYSTEM-15.sql
│ │ ├── ALTER-SYSTEM-16.sql
│ │ ├── ALTER-SYSTEM-17.sql
│ │ ├── ALTER-SYSTEM-18.sql
│ │ ├── ALTER-SYSTEM-19.sql
│ │ ├── ALTER-SYSTEM-20.sql
│ │ ├── ALTER-SYSTEM-21.sql
│ │ ├── ALTER-SYSTEM-22.sql
│ │ ├── ALTER-SYSTEM-23.sql
│ │ ├── ALTER-SYSTEM-24.sql
│ │ ├── ALTER-SYSTEM-25.sql
│ │ ├── ALTER-SYSTEM-26.sql
│ │ ├── ALTER-SYSTEM-27.sql
│ │ ├── ALTER-SYSTEM-28.sql
│ │ ├── ALTER-SYSTEM-3.sql
│ │ ├── ALTER-SYSTEM-4.sql
│ │ ├── ALTER-SYSTEM-5.sql
│ │ ├── ALTER-SYSTEM-7.sql
│ │ ├── ALTER-SYSTEM-8.sql
│ │ ├── ALTER-SYSTEM-9.sql
│ │ ├── ALTER-TABLE-0.sql
│ │ ├── ALTER-TABLE-10.sql
│ │ ├── ALTER-TABLE-100.sql
│ │ ├── ALTER-TABLE-101.sql
│ │ ├── ALTER-TABLE-102.sql
│ │ ├── ALTER-TABLE-103.sql
│ │ ├── ALTER-TABLE-104.sql
│ │ ├── ALTER-TABLE-105.sql
│ │ ├── ALTER-TABLE-106.sql
│ │ ├── ALTER-TABLE-107.sql
│ │ ├── ALTER-TABLE-108.sql
│ │ ├── ALTER-TABLE-109.sql
│ │ ├── ALTER-TABLE-11.sql
│ │ ├── ALTER-TABLE-110.sql
│ │ ├── ALTER-TABLE-111.sql
│ │ ├── ALTER-TABLE-112.sql
│ │ ├── ALTER-TABLE-113.sql
│ │ ├── ALTER-TABLE-114.sql
│ │ ├── ALTER-TABLE-115.sql
│ │ ├── ALTER-TABLE-116.sql
│ │ ├── ALTER-TABLE-117.sql
│ │ ├── ALTER-TABLE-118.sql
│ │ ├── ALTER-TABLE-119.sql
│ │ ├── ALTER-TABLE-12.sql
│ │ ├── ALTER-TABLE-120.sql
│ │ ├── ALTER-TABLE-121.sql
│ │ ├── ALTER-TABLE-122.sql
│ │ ├── ALTER-TABLE-123.sql
│ │ ├── ALTER-TABLE-124.sql
│ │ ├── ALTER-TABLE-125.sql
│ │ ├── ALTER-TABLE-126.sql
│ │ ├── ALTER-TABLE-127.sql
│ │ ├── ALTER-TABLE-128.sql
│ │ ├── ALTER-TABLE-129.sql
│ │ ├── ALTER-TABLE-13.sql
│ │ ├── ALTER-TABLE-14.sql
│ │ ├── ALTER-TABLE-15.sql
│ │ ├── ALTER-TABLE-16.sql
│ │ ├── ALTER-TABLE-17.sql
│ │ ├── ALTER-TABLE-18.sql
│ │ ├── ALTER-TABLE-19.sql
│ │ ├── ALTER-TABLE-20.sql
│ │ ├── ALTER-TABLE-21.sql
│ │ ├── ALTER-TABLE-22.sql
│ │ ├── ALTER-TABLE-23.sql
│ │ ├── ALTER-TABLE-24.sql
│ │ ├── ALTER-TABLE-25.sql
│ │ ├── ALTER-TABLE-26.sql
│ │ ├── ALTER-TABLE-27.sql
│ │ ├── ALTER-TABLE-28.sql
│ │ ├── ALTER-TABLE-29.sql
│ │ ├── ALTER-TABLE-30.sql
│ │ ├── ALTER-TABLE-31.sql
│ │ ├── ALTER-TABLE-32.sql
│ │ ├── ALTER-TABLE-33.sql
│ │ ├── ALTER-TABLE-34.sql
│ │ ├── ALTER-TABLE-35.sql
│ │ ├── ALTER-TABLE-36.sql
│ │ ├── ALTER-TABLE-37.sql
│ │ ├── ALTER-TABLE-38.sql
│ │ ├── ALTER-TABLE-39.sql
│ │ ├── ALTER-TABLE-4.sql
│ │ ├── ALTER-TABLE-40.sql
│ │ ├── ALTER-TABLE-41.sql
│ │ ├── ALTER-TABLE-42.sql
│ │ ├── ALTER-TABLE-43.sql
│ │ ├── ALTER-TABLE-44.sql
│ │ ├── ALTER-TABLE-45.sql
│ │ ├── ALTER-TABLE-46.sql
│ │ ├── ALTER-TABLE-47.sql
│ │ ├── ALTER-TABLE-48.sql
│ │ ├── ALTER-TABLE-49.sql
│ │ ├── ALTER-TABLE-5.sql
│ │ ├── ALTER-TABLE-50.sql
│ │ ├── ALTER-TABLE-51.sql
│ │ ├── ALTER-TABLE-52.sql
│ │ ├── ALTER-TABLE-53.sql
│ │ ├── ALTER-TABLE-54.sql
│ │ ├── ALTER-TABLE-55.sql
│ │ ├── ALTER-TABLE-56.sql
│ │ ├── ALTER-TABLE-57.sql
│ │ ├── ALTER-TABLE-58.sql
│ │ ├── ALTER-TABLE-59.sql
│ │ ├── ALTER-TABLE-6.sql
│ │ ├── ALTER-TABLE-60.sql
│ │ ├── ALTER-TABLE-61.sql
│ │ ├── ALTER-TABLE-62.sql
│ │ ├── ALTER-TABLE-63.sql
│ │ ├── ALTER-TABLE-64.sql
│ │ ├── ALTER-TABLE-65.sql
│ │ ├── ALTER-TABLE-66.sql
│ │ ├── ALTER-TABLE-67.sql
│ │ ├── ALTER-TABLE-68.sql
│ │ ├── ALTER-TABLE-69.sql
│ │ ├── ALTER-TABLE-7.sql
│ │ ├── ALTER-TABLE-70.sql
│ │ ├── ALTER-TABLE-71.sql
│ │ ├── ALTER-TABLE-72.sql
│ │ ├── ALTER-TABLE-73.sql
│ │ ├── ALTER-TABLE-74.sql
│ │ ├── ALTER-TABLE-75.sql
│ │ ├── ALTER-TABLE-76.sql
│ │ ├── ALTER-TABLE-77.sql
│ │ ├── ALTER-TABLE-78.sql
│ │ ├── ALTER-TABLE-79.sql
│ │ ├── ALTER-TABLE-8.sql
│ │ ├── ALTER-TABLE-80.sql
│ │ ├── ALTER-TABLE-81.sql
│ │ ├── ALTER-TABLE-82.sql
│ │ ├── ALTER-TABLE-83.sql
│ │ ├── ALTER-TABLE-84.sql
│ │ ├── ALTER-TABLE-85.sql
│ │ ├── ALTER-TABLE-86.sql
│ │ ├── ALTER-TABLE-87.sql
│ │ ├── ALTER-TABLE-88.sql
│ │ ├── ALTER-TABLE-89.sql
│ │ ├── ALTER-TABLE-9.sql
│ │ ├── ALTER-TABLE-90.sql
│ │ ├── ALTER-TABLE-91.sql
│ │ ├── ALTER-TABLE-92.sql
│ │ ├── ALTER-TABLE-93.sql
│ │ ├── ALTER-TABLE-94.sql
│ │ ├── ALTER-TABLE-95.sql
│ │ ├── ALTER-TABLE-96.sql
│ │ ├── ALTER-TABLE-97.sql
│ │ ├── ALTER-TABLE-98.sql
│ │ ├── ALTER-TABLE-99.sql
│ │ ├── ALTER-TABLESPACE-0.sql
│ │ ├── ALTER-TABLESPACE-1.sql
│ │ ├── ALTER-TABLESPACE-10.sql
│ │ ├── ALTER-TABLESPACE-11.sql
│ │ ├── ALTER-TABLESPACE-12.sql
│ │ ├── ALTER-TABLESPACE-13.sql
│ │ ├── ALTER-TABLESPACE-14.sql
│ │ ├── ALTER-TABLESPACE-15.sql
│ │ ├── ALTER-TABLESPACE-16.sql
│ │ ├── ALTER-TABLESPACE-2.sql
│ │ ├── ALTER-TABLESPACE-3.sql
│ │ ├── ALTER-TABLESPACE-4.sql
│ │ ├── ALTER-TABLESPACE-5.sql
│ │ ├── ALTER-TABLESPACE-6.sql
│ │ ├── ALTER-TABLESPACE-7.sql
│ │ ├── ALTER-TABLESPACE-8.sql
│ │ ├── ALTER-TABLESPACE-9.sql
│ │ ├── ALTER-TABLESPACE-SET-0.sql
│ │ ├── ALTER-USER-0.sql
│ │ ├── ALTER-USER-1.sql
│ │ ├── ALTER-USER-10.sql
│ │ ├── ALTER-USER-11.sql
│ │ ├── ALTER-USER-12.sql
│ │ ├── ALTER-USER-13.sql
│ │ ├── ALTER-USER-14.sql
│ │ ├── ALTER-USER-15.sql
│ │ ├── ALTER-USER-2.sql
│ │ ├── ALTER-USER-4.sql
│ │ ├── ALTER-USER-5.sql
│ │ ├── ALTER-USER-6.sql
│ │ ├── ALTER-USER-7.sql
│ │ ├── ALTER-USER-8.sql
│ │ ├── ALTER-USER-9.sql
│ │ ├── ALTER-VIEW-0.sql
│ │ ├── ALTER-VIEW-1.sql
│ │ ├── ANALYZE-0.sql
│ │ ├── ANALYZE-1.sql
│ │ ├── ANALYZE-2.sql
│ │ ├── ANALYZE-3.sql
│ │ ├── ANALYZE-4.sql
│ │ ├── ANALYZE-5.sql
│ │ ├── ANALYZE-6.sql
│ │ ├── ANALYZE-7.sql
│ │ ├── ANY_VALUE-0.sql
│ │ ├── APPROX_COUNT-0.sql
│ │ ├── APPROX_COUNT_DISTINCT-0.sql
│ │ ├── APPROX_COUNT_DISTINCT-1.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-0.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-1.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-2.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-3.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-4.sql
│ │ ├── APPROX_COUNT_DISTINCT_DETAIL-5.sql
│ │ ├── APPROX_MEDIAN-0.sql
│ │ ├── APPROX_MEDIAN-1.sql
│ │ ├── APPROX_MEDIAN-2.sql
│ │ ├── APPROX_MEDIAN-3.sql
│ │ ├── APPROX_PERCENTILE-0.sql
│ │ ├── APPROX_PERCENTILE-1.sql
│ │ ├── APPROX_PERCENTILE-2.sql
│ │ ├── APPROX_PERCENTILE-3.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-0.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-1.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-2.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-3.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-4.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-5.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-6.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-7.sql
│ │ ├── APPROX_PERCENTILE_DETAIL-8.sql
│ │ ├── APPROX_RANK-0.sql
│ │ ├── APPROX_SUM-0.sql
│ │ ├── ASCII-0.sql
│ │ ├── ASCIISTR-0.sql
│ │ ├── ASIN-0.sql
│ │ ├── ASSOCIATE-STATISTICS-0.sql
│ │ ├── ASSOCIATE-STATISTICS-1.sql
│ │ ├── ATAN-0.sql
│ │ ├── ATAN2-0.sql
│ │ ├── AUDIT-Unified-Auditing-0.sql
│ │ ├── AUDIT-Unified-Auditing-1.sql
│ │ ├── AUDIT-Unified-Auditing-2.sql
│ │ ├── AUDIT-Unified-Auditing-3.sql
│ │ ├── AUDIT-Unified-Auditing-4.sql
│ │ ├── AUDIT-Unified-Auditing-5.sql
│ │ ├── AUDIT-Unified-Auditing-6.sql
│ │ ├── AUDIT-Unified-Auditing-7.sql
│ │ ├── AUDIT-Unified-Auditing-8.sql
│ │ ├── AVG-0.sql
│ │ ├── AVG-1.sql
│ │ ├── About-SQL-Expressions-2.sql
│ │ ├── About-SQL-Expressions-3.sql
│ │ ├── About-User-Defined-Functions-1.sql
│ │ ├── About-User-Defined-Functions-2.sql
│ │ ├── About-User-Defined-Functions-4.sql
│ │ ├── Aggregate-Functions-0.sql
│ │ ├── Arithmetic-Operators-0.sql
│ │ ├── Arithmetic-Operators-1.sql
│ │ ├── Arithmetic-Operators-2.sql
│ │ ├── Automatic-Locks-in-DML-Operations-0.sql
│ │ ├── BETWEEN-Condition-5.sql
│ │ ├── BFILENAME-0.sql
│ │ ├── BIN_TO_NUM-0.sql
│ │ ├── BIN_TO_NUM-1.sql
│ │ ├── BITAND-0.sql
│ │ ├── BITAND-1.sql
│ │ ├── BITAND-2.sql
│ │ ├── BIT_AND_AGG-0.sql
│ │ ├── BIT_AND_AGG-1.sql
│ │ ├── CALL-0.sql
│ │ ├── CALL-1.sql
│ │ ├── CALL-2.sql
│ │ ├── CALL-3.sql
│ │ ├── CALL-4.sql
│ │ ├── CARDINALITY-0.sql
│ │ ├── CASE-Expressions-0.sql
│ │ ├── CASE-Expressions-1.sql
│ │ ├── CAST-0.sql
│ │ ├── CAST-1.sql
│ │ ├── CAST-10.sql
│ │ ├── CAST-11.sql
│ │ ├── CAST-12.sql
│ │ ├── CAST-13.sql
│ │ ├── CAST-14.sql
│ │ ├── CAST-15.sql
│ │ ├── CAST-16.sql
│ │ ├── CAST-17.sql
│ │ ├── CAST-18.sql
│ │ ├── CAST-2.sql
│ │ ├── CAST-3.sql
│ │ ├── CAST-4.sql
│ │ ├── CAST-5.sql
│ │ ├── CAST-6.sql
│ │ ├── CAST-7.sql
│ │ ├── CAST-8.sql
│ │ ├── CAST-9.sql
│ │ ├── CEIL-0.sql
│ │ ├── CHARTOROWID-0.sql
│ │ ├── CHR-0.sql
│ │ ├── CHR-1.sql
│ │ ├── CHR-2.sql
│ │ ├── CHR-3.sql
│ │ ├── CHR-4.sql
│ │ ├── CHR-5.sql
│ │ ├── CLUSTER_DETAILS-0.sql
│ │ ├── CLUSTER_DETAILS-1.sql
│ │ ├── CLUSTER_DISTANCE-0.sql
│ │ ├── CLUSTER_ID-0.sql
│ │ ├── CLUSTER_ID-1.sql
│ │ ├── CLUSTER_PROBABILITY-0.sql
│ │ ├── CLUSTER_SET-0.sql
│ │ ├── COALESCE-4.sql
│ │ ├── COLLATE-Operator-0.sql
│ │ ├── COLLATION-0.sql
│ │ ├── COLLECT-0.sql
│ │ ├── COLLECT-1.sql
│ │ ├── COLUMN_VALUE-Pseudocolumn-0.sql
│ │ ├── COLUMN_VALUE-Pseudocolumn-1.sql
│ │ ├── COLUMN_VALUE-Pseudocolumn-2.sql
│ │ ├── COLUMN_VALUE-Pseudocolumn-3.sql
│ │ ├── COLUMN_VALUE-Pseudocolumn-4.sql
│ │ ├── COMMENT-0.sql
│ │ ├── COMMENT-1.sql
│ │ ├── COMMIT-0.sql
│ │ ├── COMMIT-1.sql
│ │ ├── COMMIT-2.sql
│ │ ├── COMMIT-3.sql
│ │ ├── COMPOSE-0.sql
│ │ ├── CONCAT-0.sql
│ │ ├── CONVERT-0.sql
│ │ ├── CONVERT-1.sql
│ │ ├── CON_DBID_TO_ID-0.sql
│ │ ├── CON_DBID_TO_ID-1.sql
│ │ ├── CON_GUID_TO_ID-0.sql
│ │ ├── CON_GUID_TO_ID-1.sql
│ │ ├── CON_NAME_TO_ID-0.sql
│ │ ├── CON_NAME_TO_ID-1.sql
│ │ ├── CON_UID_TO_ID-0.sql
│ │ ├── CON_UID_TO_ID-1.sql
│ │ ├── CORR-1.sql
│ │ ├── CORR-2.sql
│ │ ├── CORR_A-0.sql
│ │ ├── CORR_A-1.sql
│ │ ├── COS-0.sql
│ │ ├── COSH-0.sql
│ │ ├── COUNT-0.sql
│ │ ├── COUNT-1.sql
│ │ ├── COVAR_POP-1.sql
│ │ ├── COVAR_POP-2.sql
│ │ ├── CREATE-ANALYTIC-VIEW-0.sql
│ │ ├── CREATE-ANALYTIC-VIEW-1.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-0.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-1.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-2.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-3.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-4.sql
│ │ ├── CREATE-ATTRIBUTE-DIMENSION-5.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-1.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-10.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-11.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-14.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-15.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-16.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-17.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-18.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-19.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-2.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-20.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-21.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-22.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-23.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-24.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-25.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-26.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-27.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-28.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-3.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-30.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-4.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-5.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-6.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-7.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-8.sql
│ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-9.sql
│ │ ├── CREATE-CLUSTER-0.sql
│ │ ├── CREATE-CLUSTER-1.sql
│ │ ├── CREATE-CLUSTER-10.sql
│ │ ├── CREATE-CLUSTER-11.sql
│ │ ├── CREATE-CLUSTER-12.sql
│ │ ├── CREATE-CLUSTER-13.sql
│ │ ├── CREATE-CLUSTER-2.sql
│ │ ├── CREATE-CLUSTER-3.sql
│ │ ├── CREATE-CLUSTER-4.sql
│ │ ├── CREATE-CLUSTER-5.sql
│ │ ├── CREATE-CLUSTER-6.sql
│ │ ├── CREATE-CLUSTER-7.sql
│ │ ├── CREATE-CLUSTER-8.sql
│ │ ├── CREATE-CLUSTER-9.sql
│ │ ├── CREATE-CONTEXT-0.sql
│ │ ├── CREATE-CONTEXT-1.sql
│ │ ├── CREATE-CONTROLFILE-0.sql
│ │ ├── CREATE-DATABASE-0.sql
│ │ ├── CREATE-DATABASE-1.sql
│ │ ├── CREATE-DATABASE-LINK-0.sql
│ │ ├── CREATE-DATABASE-LINK-1.sql
│ │ ├── CREATE-DATABASE-LINK-2.sql
│ │ ├── CREATE-DATABASE-LINK-3.sql
│ │ ├── CREATE-DATABASE-LINK-4.sql
│ │ ├── CREATE-DATABASE-LINK-5.sql
│ │ ├── CREATE-DATABASE-LINK-6.sql
│ │ ├── CREATE-DATABASE-LINK-7.sql
│ │ ├── CREATE-DIMENSION-0.sql
│ │ ├── CREATE-DIMENSION-1.sql
│ │ ├── CREATE-DIMENSION-2.sql
│ │ ├── CREATE-DIRECTORY-1.sql
│ │ ├── CREATE-DIRECTORY-2.sql
│ │ ├── CREATE-DIRECTORY-3.sql
│ │ ├── CREATE-DIRECTORY-4.sql
│ │ ├── CREATE-DISKGROUP-0.sql
│ │ ├── CREATE-EDITION-0.sql
│ │ ├── CREATE-EDITION-1.sql
│ │ ├── CREATE-EDITION-2.sql
│ │ ├── CREATE-EDITION-3.sql
│ │ ├── CREATE-EDITION-4.sql
│ │ ├── CREATE-EDITION-5.sql
│ │ ├── CREATE-EDITION-6.sql
│ │ ├── CREATE-EDITION-7.sql
│ │ ├── CREATE-FLASHBACK-ARCHIVE-0.sql
│ │ ├── CREATE-FLASHBACK-ARCHIVE-2.sql
│ │ ├── CREATE-FLASHBACK-ARCHIVE-3.sql
│ │ ├── CREATE-FLASHBACK-ARCHIVE-4.sql
│ │ ├── CREATE-HIERARCHY-0.sql
│ │ ├── CREATE-HIERARCHY-1.sql
│ │ ├── CREATE-HIERARCHY-2.sql
│ │ ├── CREATE-INDEX-0.sql
│ │ ├── CREATE-INDEX-10.sql
│ │ ├── CREATE-INDEX-11.sql
│ │ ├── CREATE-INDEX-12.sql
│ │ ├── CREATE-INDEX-13.sql
│ │ ├── CREATE-INDEX-14.sql
│ │ ├── CREATE-INDEX-15.sql
│ │ ├── CREATE-INDEX-16.sql
│ │ ├── CREATE-INDEX-17.sql
│ │ ├── CREATE-INDEX-18.sql
│ │ ├── CREATE-INDEX-19.sql
│ │ ├── CREATE-INDEX-20.sql
│ │ ├── CREATE-INDEX-21.sql
│ │ ├── CREATE-INDEX-22.sql
│ │ ├── CREATE-INDEX-23.sql
│ │ ├── CREATE-INDEX-24.sql
│ │ ├── CREATE-INDEX-25.sql
│ │ ├── CREATE-INDEX-26.sql
│ │ ├── CREATE-INDEX-27.sql
│ │ ├── CREATE-INDEX-28.sql
│ │ ├── CREATE-INDEX-29.sql
│ │ ├── CREATE-INDEX-4.sql
│ │ ├── CREATE-INDEX-5.sql
│ │ ├── CREATE-INDEX-6.sql
│ │ ├── CREATE-INDEX-7.sql
│ │ ├── CREATE-INDEX-8.sql
│ │ ├── CREATE-INDEX-9.sql
│ │ ├── CREATE-INDEXTYPE-0.sql
│ │ ├── CREATE-INMEMORY-JOIN-GROUP-0.sql
│ │ ├── CREATE-INMEMORY-JOIN-GROUP-1.sql
│ │ ├── CREATE-JAVA-0.sql
│ │ ├── CREATE-JAVA-1.sql
│ │ ├── CREATE-JAVA-2.sql
│ │ ├── CREATE-JAVA-3.sql
│ │ ├── CREATE-LOCKDOWN-PROFILE-0.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-0.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-1.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-10.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-11.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-12.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-2.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-3.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-4.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-5.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-6.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-7.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-8.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-9.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-1.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-2.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-3.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-4.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-5.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-6.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-7.sql
│ │ ├── CREATE-MATERIALIZED-VIEW-LOG-8.sql
│ │ ├── CREATE-MATERIALIZED-ZONEMAP-4.sql
│ │ ├── CREATE-MATERIALIZED-ZONEMAP-5.sql
│ │ ├── CREATE-MATERIALIZED-ZONEMAP-6.sql
│ │ ├── CREATE-MATERIALIZED-ZONEMAP-7.sql
│ │ ├── CREATE-MATERIALIZED-ZONEMAP-8.sql
│ │ ├── CREATE-OPERATOR-0.sql
│ │ ├── CREATE-OUTLINE-0.sql
│ │ ├── CREATE-OUTLINE-1.sql
│ │ ├── CREATE-OUTLINE-2.sql
│ │ ├── CREATE-PFILE-0.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-10.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-11.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-3.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-4.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-6.sql
│ │ ├── CREATE-PLUGGABLE-DATABASE-9.sql
│ │ ├── CREATE-PROFILE-1.sql
│ │ ├── CREATE-PROFILE-2.sql
│ │ ├── CREATE-PROFILE-4.sql
│ │ ├── CREATE-PROFILE-5.sql
│ │ ├── CREATE-PROFILE-6.sql
│ │ ├── CREATE-PROFILE-7.sql
│ │ ├── CREATE-RESTORE-POINT-0.sql
│ │ ├── CREATE-ROLE-1.sql
│ │ ├── CREATE-ROLE-2.sql
│ │ ├── CREATE-ROLE-3.sql
│ │ ├── CREATE-ROLE-4.sql
│ │ ├── CREATE-ROLE-5.sql
│ │ ├── CREATE-ROLE-6.sql
│ │ ├── CREATE-ROLE-7.sql
│ │ ├── CREATE-ROLLBACK-SEGMENT-0.sql
│ │ ├── CREATE-ROLLBACK-SEGMENT-1.sql
│ │ ├── CREATE-SCHEMA-0.sql
│ │ ├── CREATE-SEQUENCE-2.sql
│ │ ├── CREATE-SEQUENCE-3.sql
│ │ ├── CREATE-SEQUENCE-4.sql
│ │ ├── CREATE-SPFILE-0.sql
│ │ ├── CREATE-SPFILE-1.sql
│ │ ├── CREATE-SPFILE-2.sql
│ │ ├── CREATE-SPFILE-4.sql
│ │ ├── CREATE-SYNONYM-0.sql
│ │ ├── CREATE-SYNONYM-1.sql
│ │ ├── CREATE-SYNONYM-2.sql
│ │ ├── CREATE-SYNONYM-3.sql
│ │ ├── CREATE-SYNONYM-4.sql
│ │ ├── CREATE-SYNONYM-5.sql
│ │ ├── CREATE-TABLE-0.sql
│ │ ├── CREATE-TABLE-1.sql
│ │ ├── CREATE-TABLE-10.sql
│ │ ├── CREATE-TABLE-11.sql
│ │ ├── CREATE-TABLE-12.sql
│ │ ├── CREATE-TABLE-13.sql
│ │ ├── CREATE-TABLE-14.sql
│ │ ├── CREATE-TABLE-15.sql
│ │ ├── CREATE-TABLE-16.sql
│ │ ├── CREATE-TABLE-17.sql
│ │ ├── CREATE-TABLE-18.sql
│ │ ├── CREATE-TABLE-19.sql
│ │ ├── CREATE-TABLE-20.sql
│ │ ├── CREATE-TABLE-21.sql
│ │ ├── CREATE-TABLE-22.sql
│ │ ├── CREATE-TABLE-23.sql
│ │ ├── CREATE-TABLE-24.sql
│ │ ├── CREATE-TABLE-25.sql
│ │ ├── CREATE-TABLE-26.sql
│ │ ├── CREATE-TABLE-27.sql
│ │ ├── CREATE-TABLE-28.sql
│ │ ├── CREATE-TABLE-29.sql
│ │ ├── CREATE-TABLE-30.sql
│ │ ├── CREATE-TABLE-31.sql
│ │ ├── CREATE-TABLE-32.sql
│ │ ├── CREATE-TABLE-33.sql
│ │ ├── CREATE-TABLE-34.sql
│ │ ├── CREATE-TABLE-35.sql
│ │ ├── CREATE-TABLE-36.sql
│ │ ├── CREATE-TABLE-37.sql
│ │ ├── CREATE-TABLE-38.sql
│ │ ├── CREATE-TABLE-39.sql
│ │ ├── CREATE-TABLE-40.sql
│ │ ├── CREATE-TABLE-41.sql
│ │ ├── CREATE-TABLE-42.sql
│ │ ├── CREATE-TABLE-43.sql
│ │ ├── CREATE-TABLE-44.sql
│ │ ├── CREATE-TABLE-45.sql
│ │ ├── CREATE-TABLE-46.sql
│ │ ├── CREATE-TABLE-47.sql
│ │ ├── CREATE-TABLE-48.sql
│ │ ├── CREATE-TABLE-49.sql
│ │ ├── CREATE-TABLE-5.sql
│ │ ├── CREATE-TABLE-50.sql
│ │ ├── CREATE-TABLE-51.sql
│ │ ├── CREATE-TABLE-52.sql
│ │ ├── CREATE-TABLE-53.sql
│ │ ├── CREATE-TABLE-54.sql
│ │ ├── CREATE-TABLE-55.sql
│ │ ├── CREATE-TABLE-56.sql
│ │ ├── CREATE-TABLE-57.sql
│ │ ├── CREATE-TABLE-58.sql
│ │ ├── CREATE-TABLE-59.sql
│ │ ├── CREATE-TABLE-6.sql
│ │ ├── CREATE-TABLE-60.sql
│ │ ├── CREATE-TABLE-61.sql
│ │ ├── CREATE-TABLE-62.sql
│ │ ├── CREATE-TABLE-63.sql
│ │ ├── CREATE-TABLE-64.sql
│ │ ├── CREATE-TABLE-65.sql
│ │ ├── CREATE-TABLE-66.sql
│ │ ├── CREATE-TABLE-67.sql
│ │ ├── CREATE-TABLE-69.sql
│ │ ├── CREATE-TABLE-7.sql
│ │ ├── CREATE-TABLE-70.sql
│ │ ├── CREATE-TABLE-71.sql
│ │ ├── CREATE-TABLE-72.sql
│ │ ├── CREATE-TABLE-73.sql
│ │ ├── CREATE-TABLE-74.sql
│ │ ├── CREATE-TABLE-75.sql
│ │ ├── CREATE-TABLE-8.sql
│ │ ├── CREATE-TABLE-9.sql
│ │ ├── CREATE-TABLESPACE-0.sql
│ │ ├── CREATE-TABLESPACE-1.sql
│ │ ├── CREATE-TABLESPACE-10.sql
│ │ ├── CREATE-TABLESPACE-11.sql
│ │ ├── CREATE-TABLESPACE-12.sql
│ │ ├── CREATE-TABLESPACE-14.sql
│ │ ├── CREATE-TABLESPACE-15.sql
│ │ ├── CREATE-TABLESPACE-16.sql
│ │ ├── CREATE-TABLESPACE-2.sql
│ │ ├── CREATE-TABLESPACE-3.sql
│ │ ├── CREATE-TABLESPACE-4.sql
│ │ ├── CREATE-TABLESPACE-5.sql
│ │ ├── CREATE-TABLESPACE-6.sql
│ │ ├── CREATE-TABLESPACE-7.sql
│ │ ├── CREATE-TABLESPACE-8.sql
│ │ ├── CREATE-TABLESPACE-9.sql
│ │ ├── CREATE-TABLESPACE-SET-0.sql
│ │ ├── CREATE-USER-0.sql
│ │ ├── CREATE-USER-1.sql
│ │ ├── CREATE-USER-2.sql
│ │ ├── CREATE-USER-3.sql
│ │ ├── CREATE-USER-4.sql
│ │ ├── CREATE-USER-5.sql
│ │ ├── CREATE-USER-6.sql
│ │ ├── CREATE-USER-7.sql
│ │ ├── CREATE-USER-8.sql
│ │ ├── CREATE-USER-9.sql
│ │ ├── CREATE-VIEW-1.sql
│ │ ├── CREATE-VIEW-10.sql
│ │ ├── CREATE-VIEW-11.sql
│ │ ├── CREATE-VIEW-12.sql
│ │ ├── CREATE-VIEW-13.sql
│ │ ├── CREATE-VIEW-14.sql
│ │ ├── CREATE-VIEW-15.sql
│ │ ├── CREATE-VIEW-2.sql
│ │ ├── CREATE-VIEW-3.sql
│ │ ├── CREATE-VIEW-4.sql
│ │ ├── CREATE-VIEW-5.sql
│ │ ├── CREATE-VIEW-6.sql
│ │ ├── CREATE-VIEW-7.sql
│ │ ├── CREATE-VIEW-8.sql
│ │ ├── CREATE-VIEW-9.sql
│ │ ├── CUBE_TABLE-1.sql
│ │ ├── CUBE_TABLE-2.sql
│ │ ├── CUME_DIST-0.sql
│ │ ├── CUME_DIST-1.sql
│ │ ├── CURRENT_DATE-0.sql
│ │ ├── CURRENT_TIMESTAMP-0.sql
│ │ ├── CURRENT_TIMESTAMP-1.sql
│ │ ├── CURRENT_TIMESTAMP-2.sql
│ │ ├── CURRENT_TIMESTAMP-3.sql
│ │ ├── CURSOR-Expressions-0.sql
│ │ ├── CURSOR-Expressions-1.sql
│ │ ├── CURSOR-Expressions-2.sql
│ │ ├── CV-0.sql
│ │ ├── Comments-0.sql
│ │ ├── Comments-1.sql
│ │ ├── Comments-10.sql
│ │ ├── Comments-12.sql
│ │ ├── Comments-13.sql
│ │ ├── Comments-15.sql
│ │ ├── Comments-16.sql
│ │ ├── Comments-17.sql
│ │ ├── Comments-18.sql
│ │ ├── Comments-19.sql
│ │ ├── Comments-2.sql
│ │ ├── Comments-20.sql
│ │ ├── Comments-21.sql
│ │ ├── Comments-22.sql
│ │ ├── Comments-23.sql
│ │ ├── Comments-24.sql
│ │ ├── Comments-25.sql
│ │ ├── Comments-26.sql
│ │ ├── Comments-27.sql
│ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset=utf-8
insert_final_newline=true
indent_style=space
indent_size=4
[*.xml]
indent_size=2
[*.yml]
indent_size=2
[*.html]
indent_size=2
[*.properties]
charset=latin1
[*.sql]
indent_size=2
[*.json]
indent_size=2
[zpa-checks/src/integrationTest/resources/expected/**/*.json]
insert_final_newline = false
ij_any_space_before_colon = true
================================================
FILE: .gitattributes
================================================
*.sql linguist-language=PLSQL
zpa-checks/src/integrationTest/resources/sources/** linguist-vendored
================================================
FILE: .github/renovate.json
================================================
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:best-practices",
":automergePatch",
"schedule:weekly"
],
"mode": "full",
"ignoreDeps": [
"org.sonarsource.sonarqube:sonar-plugin-api-impl",
"org.sonarsource.api.plugin:sonar-plugin-api",
"org.sonarsource.sonarqube:sonar-ws"
]
}
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
push:
branches:
- "*"
pull_request:
branches:
- main
env:
JAVA_VERSION: 21
permissions:
contents: read
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
submodules: true
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: temurin
java-version: ${{ env.JAVA_VERSION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
- name: Build with Gradle
run: ./gradlew build jreleaserAssemble publishToMavenLocal
- name: Run zpa-checks integration tests
run: |
./gradlew :zpa-checks:integrationTest --rerun
cat zpa-checks/build/integrationTest/progress-summary.md >> $GITHUB_STEP_SUMMARY
- name: Build custom rules example
run: ./gradlew build -p plsql-custom-rules
- name: Upload build artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: build-artifacts
path: |
**/build/
zpa-checks/tools/
retention-days: 1
integration-tests:
name: IT
needs: build
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sqVersion:
- 26.2.0.119303
- 26.3.0.120487
- 26.4.0.121862
- 26.5-SNAPSHOT
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: temurin
java-version: ${{ env.JAVA_VERSION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
- name: Download build artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: build-artifacts
- name: Run plugin integration test
run: |
if [[ "$SQ_VERSION" == *"SNAPSHOT"* ]]; then
FOLDER="snapshots"
else
FOLDER="releases"
fi
FILE_NAME="sonar-application-${SQ_VERSION}.zip"
DOWNLOAD_URL="https://$OCI_NAMESPACE.objectstorage.sa-saopaulo-1.oci.customer-oci.com/p/$OCI_PAR/n/$OCI_NAMESPACE/b/build-artifacts/o/${FOLDER}/${FILE_NAME}"
curl -s -L -f -o "sonar-zpa-plugin/${FILE_NAME}" "$DOWNLOAD_URL"
./gradlew :sonar-zpa-plugin:integrationTest -Dsonar.zipFile=$FILE_NAME --rerun --info
env:
SQ_VERSION: ${{ matrix.sqVersion }}
OCI_NAMESPACE: ${{ secrets.OCI_NAMESPACE }}
OCI_PAR: ${{ secrets.OCI_PAR }}
release:
name: Release
permissions:
contents: write
needs: integration-tests
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: temurin
java-version: ${{ env.JAVA_VERSION }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
- name: Download build artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: build-artifacts
- name: Generate plsql-custom-rules archive
run: git archive --format=zip -o build/plsql-custom-rules.zip HEAD:plsql-custom-rules
- name: Create local Maven repository
run: ./gradlew publish
- name: Run SonarQube Scanner
run: ./gradlew sonar --info
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
- name: Release artifacts
run: ./gradlew jreleaserFullRelease
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
JRELEASER_NEXUS2_USERNAME: ${{ secrets.MAVEN_USERNAME }}
JRELEASER_NEXUS2_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_KEY_PASSWORD }}
dependency-submission:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Generate and submit dependency graph
uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
================================================
FILE: .gitignore
================================================
*.pydevproject
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
target/
dependency-reduced-pom.xml
# Eclipse Core
.project
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# JDT-specific (Eclipse Java Development Tools)
.classpath
# Java annotation processor (APT)
.factorypath
# PDT-specific
.buildpath
# sbteclipse plugin
.target
# TeXlipse plugin
.texlipse
.sonar
# IntelliJ IDEA
.idea
*.iml
# SonarQube
.scannerwork
# ---- Gradle
.gradle
**/build/
!src/**/build/
# Ignore Gradle GUI config
gradle-app.setting
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
# Cache of project
.gradletasknamecache
.kotlin/
zpa-checks/tools/
================================================
FILE: .gitmodules
================================================
[submodule "its/sources/pljson"]
path = zpa-checks/src/integrationTest/resources/sources/pljson
url = https://github.com/pljson/pljson.git
ignore = dirty
[submodule "its/sources/alexandria-plsql-utils"]
path = zpa-checks/src/integrationTest/resources/sources/alexandria-plsql-utils
url = https://github.com/mortenbra/alexandria-plsql-utils.git
ignore = dirty
[submodule "its/sources/utPLSQL"]
path = zpa-checks/src/integrationTest/resources/sources/utPLSQL2
url = https://github.com/utPLSQL/utPLSQL.git
ignore = dirty
[submodule "its/sources/utPLSQL3"]
path = zpa-checks/src/integrationTest/resources/sources/utPLSQL3
url = https://github.com/utPLSQL/utPLSQL/
ignore = dirty
[submodule "its/sources/Doag-Forms"]
path = zpa-checks/src/integrationTest/resources/sources/Doag-Forms
url = https://github.com/Doag/Forms.git
ignore = dirty
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
felipe@felipezorzo.com.br.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Thank you for your interest in contributing to our project! We appreciate your time and effort.
## How to report a bug or issue
If you find a bug or issue, please report it by [opening an issue](https://github.com/felipebz/zpa/issues/new) on GitHub. Please include as much detail as possible, including:
- Steps to reproduce the issue
- Expected behavior
- Actual behavior
- Screenshots (if applicable)
## How to suggest a new feature
If you have an idea for a new feature, please [open an issue](https://github.com/felipebz/zpa/issues/new) on GitHub. Please include as much detail as possible, including:
- A description of the feature
- Why you think it would be useful
- Any potential drawbacks or limitations
## Pull Requests
Currently, we are not currently accepting pull requests for new features. We appreciate your interest in contributing, but we have limited resources and cannot maintain additional features at this time.
We will accept pull requests for minor bug fixes. Please include a detailed description of the bug and the steps to reproduce it.
## Code of Conduct
Please note that we have a [code of conduct](CODE_OF_CONDUCT.md) in place to ensure that our community is welcoming and inclusive. Please read the code of conduct before contributing.
## License
By contributing to this project, you agree to license your contributions under the [LGPL-3.0 license](LICENSE).
================================================
FILE: LICENSE
================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
================================================
FILE: LICENSE_HEADER
================================================
Z PL/SQL Analyzer
Copyright (C) 2015-${year} Felipe Zorzo
mailto:felipe AT felipezorzo DOT com DOT br
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
================================================
FILE: README.md
================================================
# ZPA
[ ](https://github.com/felipebz/zpa/releases/latest)
[](https://github.com/felipebz/zpa/actions/workflows/build.yml)
[](https://sonarqube.felipebz.com/dashboard?id=com.felipebz.zpa%3Azpa)
ZPA is parser and static code analysis tool for PL/SQL and Oracle SQL.
You can use it in a [SonarQube](https://www.sonarqube.org) on-premise instance. SonarQube is an open platform to manage code quality.
See some examples in our [SonarQube instance](https://sonarqube.felipebz.com/projects?languages=plsqlopen)!
Do you want to use this analyzer in a project hosted on [SonarCloud](https://sonarcloud.io)? Try the [zpa-cli](https://github.com/felipebz/zpa-cli)!
## Installation
- Download the [latest sonar-zpa-plugin release](https://github.com/felipebz/zpa/releases/latest) and copy to the SONARQUBE_HOME/extensions/plugins directory;
- Restart your SonarQube server;
- Navigate to the Marketplace (SONARQUBE_URL/marketplace?filter=installed). It should list "ZPA" on the tab "Installed Plugins";
- Run an analysis with [SonarScanner](https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/overview/).
## Compatibility matrix
| ZPA version | SonarQube version (min/max) |
|------------------------|-----------------------------|
| 4.1.0 | 25.8 / 26.4 |
| 4.2.0 (in development) | 26.2 / 26.5 |
## ZPA Toolkit
The ZPA Toolkit is visual tool to review the AST (abstract syntax tree) and the symbol table generated by the parser.

The latest ZPA Toolkit can be downloaded from the [releases page](https://github.com/felipebz/zpa/releases/latest) and it requires JDK 11 or newer.
## Contribute
Everyone is welcome to contribute. Please read our [contribution guidelines](CONTRIBUTING.md) for more information.
There are a few things you need to know about the code. It is divided in these modules:
- `plsql-custom-rules` - Demo project showing how to extend ZPA with custom coding rules.
- `sonar-zpa-plugin` - The SonarQube plugin itself, this module contains all the code necessary to integrate with the SonarQube platform.
- `zpa-checks` - The built-in coding rules provided by ZPA.
- `zpa-checks-testkit` - Test helper for coding rules, it can be used to test custom rules.
- `zpa-core` - The heart of this project. It contains the lexer, the parser and the code required to understand and process PL/SQL code.
- `zpa-toolkit` - A visual tool to review the AST (abstract syntax tree) generated by the parser.
The API exposed to custom plugins must be located in the package `org.sonar.plugins.plsqlopen.api` (it's a requirement from the SonarQube server). The classes located outside this package are not prepared for external consumption, so if you use them, your code can break without any further notice.
### Running the integration tests
There are two sets of integration tests:
- [sonar-zpa-plugin/integrationTest](https://github.com/felipebz/zpa/tree/main/sonar-zpa-plugin/src/integrationTest): checks if the metrics are imported correctly in SonarQube
- [zpa-checks/integrationTest](https://github.com/felipebz/zpa/tree/main/zpa-checks/src/integrationTest): checks the quality of parser and rules against real-world code
To run the integrations tests, first update the submodules:
git submodule update --init --recursive
Build the main plugin and the custom rules example:
./gradlew build publishToMavenLocal
./gradlew build -p plsql-custom-rules
Then run the tests:
./gradlew integrationTest
By default, the tests will be executed using SonarQube Community Build 25.8. You can change the SonarQube version using the property `sonar.runtimeVersion`, passing a value in the format `LATEST_RELEASE[number]`, like `LATEST_RELEASE[25.3]`, or `a.b.c.d` for an exact release including build number:
./gradlew integrationTest -Dsonar.runtimeVersion=LATEST_RELEASE[25.8]
================================================
FILE: build-logic/build.gradle.kts
================================================
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
mavenCentral()
}
dependencies {
implementation(libs.kotlin.gradle.plugin)
implementation(libs.license.gradle.plugin)
implementation(libs.dokka.javadoc.plugin)
implementation(libs.jreleaser.gradle.plugin)
implementation(libs.sonarqube.gradle.plugin)
}
================================================
FILE: build-logic/settings.gradle.kts
================================================
dependencyResolutionManagement {
// Reuse version catalog from the main build.
versionCatalogs {
create("libs", { from(files("../gradle/libs.versions.toml")) })
}
}
rootProject.name = "build-logic"
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/build-conventions.gradle.kts
================================================
package com.felipebz.zpa
plugins {
id("com.felipebz.zpa.kotlin-conventions")
id("com.felipebz.zpa.testing-conventions")
id("com.felipebz.zpa.license-conventions")
id("com.felipebz.zpa.publishing-conventions")
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/jreleaser-conventions.gradle.kts
================================================
package com.felipebz.zpa
plugins {
id("org.jreleaser")
}
jreleaser {
project {
description.set("ZPA - Parser and static code analysis tool for PL/SQL and Oracle SQL")
authors.set(listOf("felipebz"))
license.set("LGPL-3.0")
links {
homepage.set("https://zpa.felipebz.com")
}
inceptionYear.set("2015")
snapshot {
fullChangelog.set(true)
}
}
release {
github {
overwrite.set(true)
tagName.set("{{projectVersion}}")
draft.set(true)
changelog {
formatted.set(org.jreleaser.model.Active.ALWAYS)
preset.set("conventional-commits")
contentTemplate.set(file("template/changelog.tpl"))
contributors {
enabled.set(false)
}
hide {
uncategorized.set(true)
}
}
}
}
distributions {
listOf("sonar-zpa-plugin", "zpa-toolkit").forEach {
create(it) {
artifact {
path.set(file("{{distributionName}}/build/libs/{{distributionName}}-{{projectVersion}}.jar"))
}
}
}
create("plsql-custom-rules") {
artifact {
path.set(file("build/{{distributionName}}.zip"))
}
}
}
signing {
active.set(org.jreleaser.model.Active.ALWAYS)
armored.set(true)
}
deploy {
maven {
mavenCentral {
create("sonatype") {
active.set(org.jreleaser.model.Active.RELEASE)
snapshotSupported.set(true)
url.set("https://central.sonatype.com/api/v1/publisher")
stagingRepository("build/staging-deploy")
}
}
nexus2 {
create("snapshot-deploy") {
active.set(org.jreleaser.model.Active.SNAPSHOT)
url.set("https://central.sonatype.com/repository/maven-snapshots")
snapshotUrl.set("https://central.sonatype.com/repository/maven-snapshots")
applyMavenCentralRules.set(true)
snapshotSupported.set(true)
closeRepository.set(true)
releaseRepository.set(true)
stagingRepository("build/staging-deploy")
}
}
}
}
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/kotlin-conventions.gradle.kts
================================================
package com.felipebz.zpa
plugins {
id("java")
id("org.jetbrains.kotlin.jvm")
}
repositories {
mavenCentral()
mavenLocal()
maven {
setUrl("https://central.sonatype.com/repository/maven-snapshots/")
}
}
kotlin {
compilerOptions {
freeCompilerArgs = listOf("-Xconsistent-data-class-copy-visibility")
}
}
java {
withSourcesJar()
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/license-conventions.gradle.kts
================================================
package com.felipebz.zpa
import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat
import java.io.File
import java.util.*
plugins {
id("com.github.hierynomus.license")
}
tasks.withType<LicenseFormat>().configureEach {
extra.set("year", Calendar.getInstance().get(Calendar.YEAR))
header = File(this.project.rootDir, "LICENSE_HEADER")
include("**/*.kt")
}
tasks.withType<LicenseCheck>().configureEach {
extra.set("year", Calendar.getInstance().get(Calendar.YEAR))
header = File(this.project.rootDir, "LICENSE_HEADER")
include("**/*.kt")
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/publishing-conventions.gradle.kts
================================================
package com.felipebz.zpa
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.kotlin.dsl.create
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.provideDelegate
import org.gradle.kotlin.dsl.register
plugins {
id("maven-publish")
id("org.jetbrains.dokka-javadoc")
id("signing")
}
val dokka by tasks.register<Jar>("dokka") {
dependsOn(tasks.dokkaGenerateModuleJavadoc)
from(tasks.dokkaGenerateModuleJavadoc.flatMap { it.outputDirectory })
archiveClassifier.set("javadoc")
}
signing {
setRequired({
gradle.taskGraph.hasTask("publish")
})
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
sign(publishing.publications)
}
publishing {
repositories {
maven {
url = rootProject.layout.buildDirectory.dir("staging-deploy").get().asFile.toURI()
}
}
publications {
create<MavenPublication>("maven") {
from(components["java"])
artifact(dokka)
pom {
name.set(provider { project.description })
description.set(provider { project.description })
url.set("https://zpa.felipebz.com")
organization {
name.set("Felipe Zorzo")
url.set("https://felipezorzo.com.br")
}
licenses {
license {
name.set("GNU LGPL 3")
url.set("https://www.gnu.org/licenses/lgpl.txt")
distribution.set("repo")
}
}
scm {
url.set("https://github.com/felipebz/zpa")
connection.set("scm:git:https://github.com/felipebz/zpa.git")
developerConnection.set("scm:git:https://github.com/felipebz/zpa.git")
}
developers {
developer {
id.set("felipebz")
name.set("Felipe Zorzo")
url.set("https://felipezorzo.com.br")
email.set("felipe@felipezorzo.com.br")
}
}
}
}
}
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/sonarqube-conventions.gradle.kts
================================================
package com.felipebz.zpa
plugins {
id("org.sonarqube")
}
sonarqube {
properties {
property("sonar.projectName", "ZPA")
}
}
================================================
FILE: build-logic/src/main/kotlin/com/felipebz/zpa/testing-conventions.gradle.kts
================================================
package com.felipebz.zpa
plugins {
id("com.felipebz.zpa.kotlin-conventions")
id("jacoco")
}
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
dependencies {
testImplementation(libs.findLibrary("assertj").get())
testImplementation(libs.findLibrary("mockito").get())
testImplementation(libs.findLibrary("mockito-kotlin").get())
}
configurations {
// include compileOnly dependencies during test
testImplementation {
extendsFrom(configurations.compileOnly.get())
}
}
testing {
suites {
val test by getting(JvmTestSuite::class) {
useJUnitJupiter(libs.findVersion("junit").get().requiredVersion)
}
}
}
tasks.test {
finalizedBy(tasks.jacocoTestReport)
}
tasks.jacocoTestReport {
dependsOn(tasks.test) // tests are required to run before generating the report
}
jacoco {
toolVersion = "0.8.14"
}
tasks.jacocoTestReport {
reports {
xml.required.set(true)
}
}
================================================
FILE: build.gradle.kts
================================================
plugins {
base
id("com.felipebz.zpa.jreleaser-conventions")
id("com.felipebz.zpa.sonarqube-conventions")
}
================================================
FILE: gradle/libs.versions.toml
================================================
[versions]
kotlin = "2.3.21"
dokka = "2.2.0"
download = "5.7.0"
jreleaser = "1.23.0"
license = "0.16.1"
shadow = "9.4.1"
sonarscanner = "7.2.3.7755"
# libs
flatlaf = "3.7.1"
flr = "1.5.0"
jackson = "2.21.3"
jsoup = "1.22.2"
min-sonarqube = "25.8.0.111929"
min-sonarqubeapi = "13.0.0.3026"
woodstox = "7.1.1"
# testing
assertj = "3.27.7"
junit = "6.0.3"
mockito = "5.23.0"
mockito-kotlin = "6.3.0"
sonarqube-orchestrator = "6.1.0.3962"
[libraries]
assertj = { module = "org.assertj:assertj-core", version.ref = "assertj" }
flatlaf = { module = "com.formdev:flatlaf", version.ref = "flatlaf" }
flr-core = { module = "com.felipebz.flr:flr-core", version.ref = "flr" }
flr-testing-harness = { module = "com.felipebz.flr:flr-testing-harness", version.ref = "flr" }
flr-toolkit = { module = "com.felipebz.flr:flr-toolkit", version.ref = "flr" }
flr-xpath = { module = "com.felipebz.flr:flr-xpath", version.ref = "flr" }
jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
jackson-xml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml", version.ref = "jackson" }
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" }
mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockito-kotlin" }
woodstox = { module = "com.fasterxml.woodstox:woodstox-core", version.ref = "woodstox" }
sonar-plugin-api = { module = "org.sonarsource.api.plugin:sonar-plugin-api", version.ref = "min-sonarqubeapi" }
sonar-plugin-api-impl = { module = "org.sonarsource.sonarqube:sonar-plugin-api-impl", version.ref = "min-sonarqube" }
sonar-ws = { module = "org.sonarsource.sonarqube:sonar-ws", version.ref = "min-sonarqube" }
sonar-orchestrator = { module = "org.sonarsource.orchestrator:sonar-orchestrator-junit5", version.ref = "sonarqube-orchestrator" }
dokka-javadoc-plugin = { module = "org.jetbrains.dokka-javadoc:org.jetbrains.dokka-javadoc.gradle.plugin", version.ref = "dokka" }
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
license-gradle-plugin = { module = "com.github.hierynomus.license:com.github.hierynomus.license.gradle.plugin", version.ref = "license" }
jreleaser-gradle-plugin = { module = "org.jreleaser:org.jreleaser.gradle.plugin", version.ref = "jreleaser" }
sonarqube-gradle-plugin = { module = "org.sonarqube:org.sonarqube.gradle.plugin", version.ref = "sonarscanner" }
[plugins]
download = { id = "de.undercouch.download", version.ref = "download" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
group=com.felipebz.zpa
version=4.2.0-SNAPSHOT
# Workaround for Dokka issue: https://github.com/Kotlin/dokka/issues/1405
org.gradle.jvmargs=-XX:MaxMetaspaceSize=1G
systemProp.sonar.gradle.skipCompile=true
org.gradle.parallel=false
org.gradle.configuration-cache=false
org.gradle.caching=true
================================================
FILE: gradlew
================================================
#!/bin/sh
#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables, and ensure extensions are enabled
setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
@rem Execute Gradle
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:exitWithErrorLevel
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
"%COMSPEC%" /c exit %ERRORLEVEL%
================================================
FILE: plsql-custom-rules/README.md
================================================
# plsql-custom-rules
This repository contains examples of custom rules for PL/SQL code analysis using SonarQube. The examples are available as both Gradle and Maven projects. The purpose of this README is to provide information on how to customize and use the examples.
## Getting Started
## Customizing the pom.xml (if you're using Maven)
Properties such as `groupId`, `artifactId`, `version`, `name` and `description` can be freely modified.
It is important to note that the `sonar-packaging-maven-plugin` is required and it contains the entry point of the plugin, as provided in the property `pluginClass`. If you refactor the code or rename the class extending `org.sonar.api.SonarPlugin`, you will have to change this configuration.
## Customizing the build.gradle.kts (if you're using Gradle)
Properties such as `group`, `version` and `description` can be freely modified.
It is important to note that you'll may need to update the values in [attributes map](build.gradle.kts#L52) of the `jar` task.
## Dependencies
The plugin requires two dependencies: `sonar-plugin-api` and `sonar-zpa-plugin`. The `sonar-plugin-api` dependency represents the minimum version of SonarQube your plugin will support. Additionally, a dependency on `zpa-checks-testkit` can be added to make testing easier. These dependencies are already included in the `pom.xml` and `build.gradle.kts` files.
## Compatibility with zpa-cli
To make the plugin compatible with [zpa-cli](https://github.com/felipebz/zpa-cli), you need to adjust the content of [extensions.idx](src/main/resources/META-INF/extensions.idx) to match your `CustomPlSqlRulesDefinition` subclass.
================================================
FILE: plsql-custom-rules/build.gradle.kts
================================================
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.*
plugins {
java
}
repositories {
mavenCentral()
mavenLocal()
maven {
url = uri("https://central.sonatype.com/repository/maven-snapshots/")
}
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
val minSonarQubeVersion = "25.8.0.111929"
val minSonarQubeApiVersion = "13.0.0.3026"
val junitVersion = "6.0.3"
val zpaVersion = "4.2.0-SNAPSHOT"
dependencies {
compileOnly("org.sonarsource.api.plugin:sonar-plugin-api:$minSonarQubeApiVersion")
compileOnly("com.felipebz.zpa:sonar-zpa-plugin:$zpaVersion")
testImplementation("org.sonarsource.sonarqube:sonar-plugin-api-impl:$minSonarQubeVersion")
testImplementation("com.felipebz.zpa:zpa-checks-testkit:$zpaVersion")
testImplementation("org.junit.jupiter:junit-jupiter:$junitVersion")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
configurations {
// include compileOnly dependencies during test
testImplementation {
extendsFrom(configurations.compileOnly.get())
}
}
tasks.named<Test>("test") {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}
tasks.jar {
manifest {
val buildDate = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ").withZone(ZoneId.systemDefault()).format(
Date().toInstant())
attributes(mapOf(
"Plugin-BuildDate" to buildDate,
"Plugin-ChildFirstClassLoader" to "false",
"Plugin-Class" to "com.company.plsql.PlSqlCustomRulesPlugin",
"Plugin-Description" to "PL/SQL Custom Rules",
"Plugin-Developers" to "",
"Plugin-Display-Version" to project.version,
"Plugin-Key" to "myrules",
"Plugin-License" to "",
"Plugin-Name" to "Company PL/SQL Rules",
"Plugin-Version" to project.version,
"Sonar-Version" to minSonarQubeApiVersion,
"SonarLint-Supported" to "false",
"Plugin-RequiredForLanguages" to "plsqlopen"
))
}
}
group = "com.company"
version = "1.0-SNAPSHOT"
description = "Company PL/SQL Rules"
tasks.withType<JavaCompile>() {
options.encoding = "UTF-8"
}
================================================
FILE: plsql-custom-rules/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: plsql-custom-rules/gradlew
================================================
#!/bin/sh
#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
================================================
FILE: plsql-custom-rules/gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables, and ensure extensions are enabled
setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
@rem Execute Gradle
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:exitWithErrorLevel
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
"%COMSPEC%" /c exit %ERRORLEVEL%
================================================
FILE: plsql-custom-rules/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>plsql-custom-rules</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>sonar-plugin</packaging>
<name>Company PL/SQL Rules</name>
<description>PL/SQL Custom Rules</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<zpa.version>4.2.0-SNAPSHOT</zpa.version>
<sonarqube.api.min.version>13.0.0.3026</sonarqube.api.min.version>
<sonarqube.min.version>25.8.0.111929</sonarqube.min.version>
</properties>
<dependencies>
<dependency>
<groupId>org.sonarsource.api.plugin</groupId>
<artifactId>sonar-plugin-api</artifactId>
<version>${sonarqube.api.min.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonarsource.sonarqube</groupId>
<artifactId>sonar-plugin-api-impl</artifactId>
<version>${sonarqube.min.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.felipebz.zpa</groupId>
<artifactId>sonar-zpa-plugin</artifactId>
<version>${zpa.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.felipebz.zpa</groupId>
<artifactId>zpa-checks-testkit</artifactId>
<version>${zpa.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>6.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
<artifactId>sonar-packaging-maven-plugin</artifactId>
<version>1.25.1.3002</version>
<extensions>true</extensions>
<configuration>
<pluginClass>com.company.plsql.PlSqlCustomRulesPlugin</pluginClass>
<pluginKey>my-rules</pluginKey>
<requiredForLanguages>plsqlopen</requiredForLanguages>
<sonarLintSupported>false</sonarLintSupported>
<pluginApiMinVersion>${sonarqube.api.min.version}</pluginApiMinVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.15.0</version>
<configuration>
<release>21</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.5</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>public_feed</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
================================================
FILE: plsql-custom-rules/settings.gradle.kts
================================================
rootProject.name = "plsql-custom-rules"
================================================
FILE: plsql-custom-rules/src/main/java/com/company/plsql/ForbiddenDmlCheck.java
================================================
package com.company.plsql;
import org.sonar.plugins.plsqlopen.api.annotations.Priority;
import org.sonar.plugins.plsqlopen.api.annotations.Rule;
import org.sonar.plugins.plsqlopen.api.DmlGrammar;
import org.sonar.plugins.plsqlopen.api.annotations.ActivatedByDefault;
import org.sonar.plugins.plsqlopen.api.annotations.ConstantRemediation;
import org.sonar.plugins.plsqlopen.api.checks.PlSqlCheck;
import org.sonar.plugins.plsqlopen.api.sslr.AstNode;
@Rule(
name = "Avoid DML on table USER",
description = "You should use the functions from the USER_WRAPPER package.",
key = "ForbiddenDmlCheck",
priority = Priority.MAJOR
)
@ConstantRemediation("10min")
@ActivatedByDefault
public class ForbiddenDmlCheck extends PlSqlCheck {
@Override
public void init() {
subscribeTo(DmlGrammar.DML_TABLE_EXPRESSION_CLAUSE);
}
@Override
public void visitNode(AstNode node) {
AstNode table = node.getFirstChildOrNull(DmlGrammar.TABLE_REFERENCE);
if (table != null && table.getTokenOriginalValue().equalsIgnoreCase("user")) {
addIssue(table, "Replace this query by a function of the USER_WRAPPER package.");
}
}
}
================================================
FILE: plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesDefinition.java
================================================
package com.company.plsql;
import org.sonar.plugins.plsqlopen.api.CustomPlSqlRulesDefinition;
public class PlSqlCustomRulesDefinition extends CustomPlSqlRulesDefinition {
@Override
public String repositoryName() {
return "Company";
}
@Override
public String repositoryKey() {
return "my-rules";
}
@Override
public Class[] checkClasses() {
return new Class[] {
ForbiddenDmlCheck.class
};
}
}
================================================
FILE: plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesPlugin.java
================================================
package com.company.plsql;
import org.sonar.api.Plugin;
public class PlSqlCustomRulesPlugin implements Plugin {
@Override
public void define(Plugin.Context context) {
context.addExtension(PlSqlCustomRulesDefinition.class);
}
}
================================================
FILE: plsql-custom-rules/src/main/resources/META-INF/extensions.idx
================================================
com.company.plsql.PlSqlCustomRulesDefinition
================================================
FILE: plsql-custom-rules/src/test/java/com/company/plsql/ForbiddenDmlCheckTest.java
================================================
package com.company.plsql;
import org.junit.jupiter.api.Test;
import com.felipebz.zpa.checks.verifier.PlSqlCheckVerifier;
public class ForbiddenDmlCheckTest {
@Test
public void test() {
PlSqlCheckVerifier.verify("src/test/resources/forbidden-dml.sql", new ForbiddenDmlCheck());
}
}
================================================
FILE: plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesDefinitionTest.java
================================================
package com.company.plsql;
import org.junit.jupiter.api.Test;
import org.sonar.api.Plugin;
import org.sonar.api.SonarEdition;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.internal.SonarRuntimeImpl;
import org.sonar.api.utils.Version;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class PlSqlCustomRulesDefinitionTest {
@Test
public void test() {
Plugin.Context context = new Plugin.Context(SonarRuntimeImpl.forSonarQube(Version.create(6, 0), SonarQubeSide.SERVER, SonarEdition.COMMUNITY));
PlSqlCustomRulesPlugin plugin = new PlSqlCustomRulesPlugin();
plugin.define(context);
assertEquals(1, context.getExtensions().size());
}
}
================================================
FILE: plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesPluginTest.java
================================================
package com.company.plsql;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class PlSqlCustomRulesPluginTest {
@Test
public void testRepository() {
PlSqlCustomRulesDefinition plugin = new PlSqlCustomRulesDefinition();
assertEquals("Company", plugin.repositoryName());
assertEquals("my-rules", plugin.repositoryKey());
assertEquals(1, plugin.checkClasses().length);
}
}
================================================
FILE: plsql-custom-rules/src/test/resources/forbidden-dml.sql
================================================
select *
from user u inner join profile p on (u.id = p.user_id); -- Noncompliant {{Replace this query by a function of the USER_WRAPPER package.}}
-- ^^^^
select *
from (select *
from user) -- Noncompliant
-- ^^^^
================================================
FILE: settings.gradle.kts
================================================
pluginManagement {
includeBuild("build-logic")
}
rootProject.name = "zpa"
include(":sonar-zpa-plugin")
include(":zpa-checks")
include(":zpa-checks-testkit")
include(":zpa-core")
include(":zpa-toolkit")
================================================
FILE: sonar-zpa-plugin/build.gradle.kts
================================================
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import groovy.util.Node
import groovy.util.NodeList
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.*
plugins {
id("com.felipebz.zpa.build-conventions")
alias(libs.plugins.shadow)
}
dependencies {
implementation(libs.flr.core)
implementation(libs.jackson.xml)
implementation(libs.woodstox)
implementation(project(":zpa-core"))
implementation(project(":zpa-checks"))
implementation(project(":zpa-checks-testkit"))
compileOnly(libs.sonar.plugin.api)
compileOnly(libs.sonar.plugin.api.impl)
}
testing {
suites {
register<JvmTestSuite>("integrationTest") {
dependencies {
implementation(libs.assertj)
implementation(libs.sonar.ws)
implementation(libs.sonar.orchestrator)
}
targets {
all {
testTask.configure {
val zipFile = System.getProperty("sonar.zipFile")
val launcher = javaToolchains.launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
javaLauncher.set(launcher)
environment("JAVA_HOME", launcher.get().metadata.installationPath.asFile.toString())
systemProperty("java.awt.headless", "true")
if (zipFile != null) {
systemProperty("sonar.zipFile", zipFile)
}
outputs.upToDateWhen { false }
}
}
}
}
}
}
val shadowJar = tasks.named<ShadowJar>("shadowJar") {
relocate("com.felipebz.flr.api", "org.sonar.plugins.plsqlopen.api.sslr")
relocate("com.felipebz.zpa.api", "org.sonar.plugins.plsqlopen.api")
archiveClassifier.set("")
manifest {
val buildDate = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ").withZone(ZoneId.systemDefault()).format(Date().toInstant())
attributes(mapOf(
"Plugin-BuildDate" to buildDate,
"Plugin-ChildFirstClassLoader" to "false",
"Plugin-Class" to "com.felipebz.zpa.PlSqlPlugin",
"Plugin-Description" to "Enables analysis and reporting on PL/SQL projects.",
"Plugin-Developers" to "Felipe Zorzo",
"Plugin-Display-Version" to project.version,
"Plugin-Homepage" to "https://zpa.felipebz.com",
"Plugin-IssueTrackerUrl" to "https://github.com/felipebz/zpa/issues",
"Plugin-Key" to "plsqlopen",
"Plugin-License" to "GNU LGPL 3",
"Plugin-Name" to "ZPA Plugin for SonarQube",
"Plugin-Organization" to "Felipe Zorzo",
"Plugin-OrganizationUrl" to "https://felipezorzo.com.br",
"Plugin-SourcesUrl" to "https://github.com/felipebz/zpa",
"Plugin-Version" to project.version,
"Sonar-Version" to libs.versions.min.sonarqubeapi,
"SonarLint-Supported" to "false",
"Plugin-RequiredForLanguages" to "plsqlopen"
))
}
}
tasks.build {
dependsOn(shadowJar)
}
tasks.jar {
enabled = false
}
// Disable Gradle module metadata as it lists wrong dependencies
tasks.withType<GenerateModuleMetadata> {
enabled = false
}
publishing {
publications.withType<MavenPublication> {
this.pom.withXml {
val pomNode = asNode()
val dependencyNodes = pomNode.get("dependencies") as NodeList
dependencyNodes.forEach {
(it as Node).parent().remove(it)
}
}
artifact(shadowJar)
}
}
description = "ZPA Plugin for SonarQube"
================================================
FILE: sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/IssueTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.it
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.tuple
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
import org.sonarqube.ws.client.issues.SearchRequest
import java.io.File
class IssueTest {
@Test
fun issues() {
val issues = Tests.newWsClient(orchestrator)
.issues()
.search(SearchRequest().setComponentKeys(listOf(PROJECT_KEY)))
.issuesList
assertThat(issues).extracting("rule", "component")
.containsExactlyInAnyOrder(
tuple("plsql:EmptyBlock", "$PROJECT_KEY:src/source1.sql"),
tuple("my-rules:ForbiddenDmlCheck", "$PROJECT_KEY:src/custom_rule.sql"))
}
companion object {
private const val PROJECT_KEY = "issue"
@JvmField
@RegisterExtension
val orchestrator = Tests.ORCHESTRATOR
@JvmStatic
@BeforeAll
fun init() {
orchestrator.server.provisionProject(PROJECT_KEY, PROJECT_KEY)
orchestrator.server.associateProjectToQualityProfile(PROJECT_KEY, "plsqlopen", "it-profile")
val build = Tests.createSonarScanner()
.setProjectDir(File("src/integrationTest/resources/projects/metrics/"))
.setProjectKey(PROJECT_KEY)
.setProjectName(PROJECT_KEY)
.setProjectVersion("1.0")
.setSourceDirs("src")
.setProperty("sonar.sourceEncoding", "UTF-8")
orchestrator.executeBuild(build)
}
}
}
================================================
FILE: sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/MetricsTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.it
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
import org.junit.jupiter.api.extension.RegisterExtension
import org.sonarqube.ws.Measures
import org.sonarqube.ws.client.measures.ComponentRequest
import java.io.File
class MetricsTest {
@Test
fun project_level() {
// Size
assertAll(
// Size
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "ncloc")).isEqualTo(32) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "lines")).isEqualTo(33) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "files")).isEqualTo(4) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "statements")).isEqualTo(7) },
// Documentation
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "comment_lines")).isEqualTo(1) },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "comment_lines_density")).isEqualTo(3.0) },
{ assertThat(getMeasureAsString(PROJECT_KEY, "public_documented_api_density")).isNull() },
// Duplication
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "duplicated_lines")).isZero },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "duplicated_blocks")).isZero },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "duplicated_files")).isZero },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "duplicated_lines_density")).isZero },
// Rules
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "violations")).isZero },
// Tests
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "tests")).isEqualTo(6) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "skipped_tests")).isEqualTo(1) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "test_failures")).isEqualTo(1) },
{ assertThat(getMeasureAsInteger(PROJECT_KEY, "test_errors")).isEqualTo(1) },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "test_success_density")).isEqualTo(66.7) },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "test_execution_time")).isEqualTo(15.0) },
// Coverage
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "coverage")).isEqualTo(50.0) },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "line_coverage")).isEqualTo(50.0) },
{ assertThat(getMeasureAsDouble(PROJECT_KEY, "branch_coverage")).isNull() },
)
}
@Test
fun file_level() {
assertAll(
// Size
{ assertThat(getMeasureAsInteger(FILE_NAME, "ncloc")).isEqualTo(7) },
{ assertThat(getMeasureAsInteger(FILE_NAME, "lines")).isEqualTo(7) },
{ assertThat(getMeasureAsInteger(FILE_NAME, "statements")).isEqualTo(2) },
// Documentation
{ assertThat(getMeasureAsInteger(FILE_NAME, "comment_lines")).isZero },
{ assertThat(getMeasureAsDouble(FILE_NAME, "comment_lines_density")).isZero },
// Duplication
{ assertThat(getMeasureAsInteger(FILE_NAME, "duplicated_lines")).isZero },
{ assertThat(getMeasureAsInteger(FILE_NAME, "duplicated_blocks")).isZero },
{ assertThat(getMeasureAsInteger(FILE_NAME, "duplicated_files")).isZero },
{ assertThat(getMeasureAsDouble(FILE_NAME, "duplicated_lines_density")).isZero },
// Rules
{ assertThat(getMeasureAsInteger(FILE_NAME, "violations")).isZero },
)
}
@Test
fun covered_file() {
assertAll(
// Size
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "ncloc")).isEqualTo(10) },
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "lines")).isEqualTo(10) },
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "statements")).isEqualTo(3) },
// Documentation
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "comment_lines")).isZero },
{ assertThat(getMeasureAsDouble(COVERED_FILE_NAME, "comment_lines_density")).isZero },
// Duplication
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "duplicated_lines")).isZero },
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "duplicated_blocks")).isZero },
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "duplicated_files")).isZero },
{ assertThat(getMeasureAsDouble(COVERED_FILE_NAME, "duplicated_lines_density")).isZero },
// Rules
{ assertThat(getMeasureAsInteger(COVERED_FILE_NAME, "violations")).isZero },
// Coverage
{ assertThat(getMeasureAsDouble(COVERED_FILE_NAME, "coverage")).isEqualTo(100.0) },
{ assertThat(getMeasureAsDouble(COVERED_FILE_NAME, "line_coverage")).isEqualTo(100.0) },
{ assertThat(getMeasureAsDouble(COVERED_FILE_NAME, "branch_coverage")).isNull() },
)
}
@Test
fun test_file() {
assertAll(
// Size
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "ncloc")).isNull() },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "lines")).isNull() },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "statements")).isNull() },
// Documentation
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "comment_lines")).isNull() },
{ assertThat(getMeasureAsDouble(TEST_FILE_NAME, "comment_lines_density")).isNull() },
// Duplication
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "duplicated_lines")).isZero },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "duplicated_blocks")).isZero },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "duplicated_files")).isZero },
{ assertThat(getMeasureAsDouble(TEST_FILE_NAME, "duplicated_lines_density")).isZero },
// Rules
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "violations")).isZero },
// Tests
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "tests")).isEqualTo(6) },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "skipped_tests")).isEqualTo(1) },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "test_failures")).isEqualTo(1) },
{ assertThat(getMeasureAsInteger(TEST_FILE_NAME, "test_errors")).isEqualTo(1) },
{ assertThat(getMeasureAsDouble(TEST_FILE_NAME, "test_success_density")).isEqualTo(66.7) },
{ assertThat(getMeasureAsDouble(TEST_FILE_NAME, "test_execution_time")).isEqualTo(15.0) },
)
}
/* Helper methods */
private fun getMeasure(componentKey: String, metricKey: String): Measures.Measure? {
val response = Tests.newWsClient(orchestrator).measures()
.component(
ComponentRequest()
.setComponent(componentKey)
.setMetricKeys(listOf(metricKey))
)
val measures = response.component.measuresList
return if (measures.size == 1) measures[0] else null
}
private fun getMeasureAsString(componentKey: String, metricKey: String): String? {
val measure = getMeasure(componentKey, metricKey)
return measure?.value
}
private fun getMeasureAsInteger(componentKey: String, metricKey: String): Int? {
val measure = getMeasure(componentKey, metricKey)
return if (measure == null) null else Integer.parseInt(measure.value)
}
private fun getMeasureAsDouble(componentKey: String, metricKey: String): Double? {
val measure = getMeasure(componentKey, metricKey)
return if (measure == null) null else java.lang.Double.parseDouble(measure.value)
}
companion object {
@JvmField
@RegisterExtension
var orchestrator = Tests.ORCHESTRATOR
private const val PROJECT_KEY = "metrics"
private const val FILE_NAME = "$PROJECT_KEY:src/source1.sql"
private const val COVERED_FILE_NAME = "$PROJECT_KEY:src/betwnstr.sql"
private const val TEST_FILE_NAME = "$PROJECT_KEY:test/test_betwnstr.sql"
@JvmStatic
@BeforeAll
fun init() {
orchestrator.server.provisionProject(PROJECT_KEY, PROJECT_KEY)
orchestrator.server.associateProjectToQualityProfile(PROJECT_KEY, "plsqlopen", "empty-profile")
val build = Tests.createSonarScanner()
.setProjectDir(File("src/integrationTest/resources/projects/metrics/"))
.setProjectKey(PROJECT_KEY)
.setProjectName(PROJECT_KEY)
.setProjectVersion("1.0")
.setSourceDirs("src")
.setTestDirs("test")
.setProperty("sonar.sourceEncoding", "UTF-8")
.setProperty("sonar.zpa.tests.reportPaths", "test_results.xml")
.setProperty("sonar.zpa.coverage.reportPaths", "coverage.xml")
.setDebugLogs(true)
orchestrator.executeBuild(build)
}
}
}
================================================
FILE: sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/Tests.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.it
import com.sonar.orchestrator.Orchestrator
import com.sonar.orchestrator.build.SonarScanner
import com.sonar.orchestrator.junit5.OrchestratorExtension
import com.sonar.orchestrator.locator.FileLocation
import org.junit.jupiter.api.extension.RegisterExtension
import org.sonarqube.ws.client.HttpConnector
import org.sonarqube.ws.client.WsClient
import org.sonarqube.ws.client.WsClientFactories
import java.io.File
object Tests {
@JvmField
@RegisterExtension
val ORCHESTRATOR: OrchestratorExtension =
OrchestratorExtension.builderEnv()
.useDefaultAdminCredentialsForBuilds(true)
.apply {
val zipFile = System.getProperty("sonar.zipFile")
if (zipFile != null) {
setZipFile(File(zipFile))
} else {
setSonarVersion(System.getProperty("sonar.runtimeVersion", "LATEST_RELEASE[25.8]"))
}
}
.setOrchestratorProperty("orchestrator.artifactory.url", "https://repo1.maven.org/maven2")
.addPlugin(FileLocation.byWildcardMavenFilename(
File("build/libs"),
"sonar-zpa-plugin-*.jar"))
.addPlugin(FileLocation.byWildcardMavenFilename(
File("../plsql-custom-rules/build/libs"),
"plsql-custom-rules-*.jar"))
.restoreProfileAtStartup(FileLocation.ofClasspath("/com/felipebz/zpa/it/it-profile.xml"))
.restoreProfileAtStartup(FileLocation.ofClasspath("/com/felipebz/zpa/it/empty-profile.xml"))
.build()
fun createSonarScanner(): SonarScanner =
SonarScanner.create()
.setScannerVersion("7.0.2.4839")
fun newWsClient(orchestrator: Orchestrator): WsClient =
WsClientFactories.getDefault()
.newClient(HttpConnector.newBuilder()
.url(orchestrator.server.url).build())
}
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/com/felipebz/zpa/it/empty-profile.xml
================================================
<profile>
<name>empty-profile</name>
<language>plsqlopen</language>
<rules />
</profile>
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/com/felipebz/zpa/it/it-profile.xml
================================================
<profile>
<name>it-profile</name>
<language>plsqlopen</language>
<rules>
<rule>
<repositoryKey>plsql</repositoryKey>
<key>EmptyBlock</key>
<priority>MAJOR</priority>
</rule>
<rule>
<repositoryKey>my-rules</repositoryKey>
<key>ForbiddenDmlCheck</key>
<priority>MAJOR</priority>
</rule>
</rules>
</profile>
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/coverage.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<coverage version="1">
<file path="function ut3_demo.betwnstr">
<lineToCover lineNumber="2" covered="true"/>
<lineToCover lineNumber="4" covered="true"/>
<lineToCover lineNumber="5" covered="true"/>
<lineToCover lineNumber="7" covered="true"/>
</file>
</coverage>
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/betwnstr.sql
================================================
CREATE OR REPLACE FUNCTION BETWNSTR(A_STRING VARCHAR2, A_START_POS INTEGER, A_END_POS INTEGER) RETURN VARCHAR2 IS
L_START_POS PLS_INTEGER := A_START_POS;
BEGIN
IF L_START_POS = 0 THEN
L_START_POS := 1;
END IF;
RETURN SUBSTR(A_STRING, L_START_POS, A_END_POS - L_START_POS + 1);
END;
/
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/custom_rule.sql
================================================
declare
x number;
begin
select x
into x
from user;
end;
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/source1.sql
================================================
begin
null;
end;
begin
null; -- NOSONAR
end;
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/source2.sql
================================================
declare
i number;
begin
-- a comment
select count(*)
into i
from dual;
end;
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/test/test_betwnstr.sql
================================================
create or replace package test_betwnstr as
-- %suite(Between string function)
-- %test(Returns substring from start position to end position)
procedure normal_case;
-- %test(Returns substring when start position is zero)
procedure zero_start_position;
-- %test(Returns string until end if end position is greater than string length)
procedure big_end_position;
-- %test(Returns null for null input string value)
procedure null_string;
-- %test(A demo of test raising runtime exception)
procedure bad_params;
-- %test(A demo of failing test)
procedure bad_test;
-- %test(Demo of a disabled test)
-- %disabled
procedure disabled_test;
end;
/
create or replace package body test_betwnstr as
procedure normal_case is
begin
ut.expect(betwnstr('1234567', 2, 5)).to_equal('2345');
end;
procedure zero_start_position is
begin
ut.expect(betwnstr('1234567', 0, 5)).to_(equal('12345'));
end;
procedure big_end_position is
begin
ut.expect(betwnstr('1234567', 0, 500)).to_(equal('1234567'));
end;
procedure null_string is
begin
ut.expect(betwnstr(null, 2, 5)).to_(be_null());
end;
procedure bad_params is
begin
ut.expect(betwnstr('1234567', 'a', 'b')).to_(be_null());
end;
procedure bad_test
is
begin
ut.expect(betwnstr('1234567', 0, 500)).to_(equal('1'));
end;
procedure disabled_test is
begin
ut.expect(betwnstr(null, null, null)).not_to(be_null);
end;
end;
/
================================================
FILE: sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/test_results.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<testExecutions version="1">
<file path="test_betwnstr">
<testCase name="normal_case" duration="2">
</testCase>
<testCase name="zero_start_position" duration="2">
</testCase>
<testCase name="big_end_position" duration="2">
</testCase>
<testCase name="null_string" duration="2">
</testCase>
<testCase name="bad_params" duration="2">
<error message="encountered errors">
<![CDATA[
ORA-06502: PL/SQL: erro: erro de conversão de caractere em número numérico ou de valor
ORA-06512: em "UT3_DEMO.TEST_BETWNSTR", line 25
ORA-06512: em "UT3_DEMO.TEST_BETWNSTR", line 25
ORA-06512: em line 6
]]>
</error>
</testCase>
<testCase name="bad_test" duration="5">
<failure message="some expectations have failed">
<![CDATA[
Actual: '1234567' (varchar2) was expected to equal: '1' (varchar2)
at "UT3_DEMO.TEST_BETWNSTR.BAD_TEST", line 31 ut.expect( betwnstr( '1234567', 0, 500 ) ).to_( equal('1') );
]]>
</failure>
</testCase>
<testCase name="disabled_test" duration="0">
<skipped message="skipped"/>
</testCase>
</file>
</testExecutions>
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSql.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.sonar.api.config.Configuration
import org.sonar.api.resources.AbstractLanguage
class PlSql internal constructor(private val settings: Configuration) : AbstractLanguage(KEY, "PL/SQL (ZPA)") {
private val defaultFileSuffixes = arrayOf("sql", "pkg", "pks", "pkb")
override fun getFileSuffixes(): Array<String> {
val suffixes = filterEmptyStrings(settings.getStringArray(PlSqlPlugin.Companion.FILE_SUFFIXES_KEY))
return if (suffixes.isEmpty()) defaultFileSuffixes else suffixes
}
private fun filterEmptyStrings(stringArray: Array<String>): Array<String> {
val nonEmptyStrings = stringArray
.filterNot { it.isBlank() }
.map { it.trim() }
return nonEmptyStrings.toTypedArray()
}
companion object {
const val KEY = "plsqlopen"
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlPlugin.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.sonar.api.Plugin
import org.sonar.api.PropertyType
import org.sonar.api.config.PropertyDefinition
import com.felipebz.zpa.symbols.ObjectLocator
import com.felipebz.zpa.log.SonarQubeLoggers
import com.felipebz.zpa.utils.log.Loggers
import com.felipebz.zpa.utplsql.UtPlSqlSensor
class PlSqlPlugin : Plugin {
override fun define(context: Plugin.Context) {
Loggers.factory = SonarQubeLoggers()
context.addExtensions(
PropertyDefinition.builder(FILE_SUFFIXES_KEY)
.deprecatedKey(OLD_FILE_SUFFIXES_KEY)
.name("File Suffixes")
.description("Comma-separated list of suffixes of PL/SQL files to analyze.")
.category(DEFAULT_CATEGORY)
.subCategory(GENERAL)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.defaultValue("sql,pkg,pks,pkb")
.multiValues(true)
.build(),
PropertyDefinition.builder(FORMS_METADATA_KEY)
.name("Oracle Forms metadata file")
.description("Path to the JSON file with the Oracle Forms metadata.")
.category(DEFAULT_CATEGORY)
.subCategory(GENERAL)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.build(),
PropertyDefinition.builder(ERROR_RECOVERY_KEY)
.name("Parse error recovery")
.description("Defines mode for error handling of parsing errors. 'False' (strict) breaks after an error or 'True' (tolerant, default) continues.")
.category(DEFAULT_CATEGORY)
.subCategory(GENERAL)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.type(PropertyType.BOOLEAN)
.defaultValue("true")
.build(),
PropertyDefinition.builder(CONCURRENT_EXECUTION_KEY)
.name("Enable concurrent execution")
.description("Enable concurrent analysis of files.")
.category(DEFAULT_CATEGORY)
.subCategory(GENERAL)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.type(PropertyType.BOOLEAN)
.defaultValue("true")
.build(),
PlSql::class.java,
PlSqlProfile::class.java,
PlSqlSquidSensor::class.java,
PlSqlRuleRepository::class.java,
ObjectLocator::class.java,
)
addUtPlSqlExtensions(context)
}
private fun addUtPlSqlExtensions(context: Plugin.Context) {
context.addExtensions(
PropertyDefinition.builder(UtPlSqlSensor.TEST_REPORT_PATH_KEY)
.name("Path to the utPLSQL test report(s)")
.description("Paths (absolute or relative) to report files with utPLSQL test execution data.")
.category(DEFAULT_CATEGORY)
.subCategory(TEST_AND_COVERAGE)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.defaultValue(UtPlSqlSensor.DEFAULT_TEST_REPORT_PATH)
.multiValues(true)
.build(),
PropertyDefinition.builder(UtPlSqlSensor.COVERAGE_REPORT_PATH_KEY)
.name("Path to the utPLSQL coverage report(s)")
.description("Paths (absolute or relative) to report files with utPLSQL coverage data.")
.category(DEFAULT_CATEGORY)
.subCategory(TEST_AND_COVERAGE)
.onConfigScopes(PropertyDefinition.ConfigScope.PROJECT)
.defaultValue(UtPlSqlSensor.DEFAULT_COVERAGE_REPORT_PATH)
.multiValues(true)
.build(),
UtPlSqlSensor::class.java,
)
}
companion object {
private const val DEFAULT_CATEGORY = "ZPA"
private const val GENERAL = "General"
private const val TEST_AND_COVERAGE = "Tests and Coverage"
internal const val FILE_SUFFIXES_KEY = "sonar.plsqlopen.file.suffixes"
internal const val OLD_FILE_SUFFIXES_KEY = "sonar.zpa.file.suffixes"
internal const val FORMS_METADATA_KEY = "sonar.zpa.forms.metadata"
internal const val ERROR_RECOVERY_KEY = "sonar.zpa.errorRecoveryEnabled"
internal const val CONCURRENT_EXECUTION_KEY = "sonar.zpa.concurrentExecution"
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlProfile.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.sonar.api.server.profile.BuiltInQualityProfilesDefinition
import org.sonar.api.utils.AnnotationUtils
import com.felipebz.zpa.checks.CheckList
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import com.felipebz.zpa.api.annotations.ActivatedByDefault
class PlSqlProfile : BuiltInQualityProfilesDefinition {
private val ruleMetadataLoader = SonarQubeRuleMetadataLoader()
override fun define(context: BuiltInQualityProfilesDefinition.Context) {
val profile = context.createBuiltInQualityProfile(CheckList.SONAR_WAY_PROFILE, PlSql.KEY)
profile.isDefault = true
for (ruleClass in CheckList.checks) {
addRule(ruleClass, profile)
}
profile.done()
}
private fun addRule(ruleClass: Class<*>, profile: BuiltInQualityProfilesDefinition.NewBuiltInQualityProfile) {
if (AnnotationUtils.getAnnotation(ruleClass, ActivatedByDefault::class.java) != null) {
val ruleKey = CustomAnnotationBasedRulesDefinition.getRuleKey(ruleMetadataLoader, ruleClass)
profile.activateRule(PlSqlRuleRepository.KEY, ruleKey)
}
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlRuleRepository.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import com.felipebz.zpa.checks.CheckList
import com.felipebz.zpa.rules.SonarQubeRepositoryAdapter
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import org.sonar.api.server.rule.RulesDefinition
class PlSqlRuleRepository : RulesDefinition {
override fun define(context: RulesDefinition.Context) {
val repository = context
.createRepository(KEY, PlSql.Companion.KEY)
.setName("ZPA")
CustomAnnotationBasedRulesDefinition.load(SonarQubeRepositoryAdapter(repository), PlSql.Companion.KEY, CheckList.checks, SonarQubeRuleMetadataLoader())
repository.done()
}
companion object {
internal val KEY: String
init {
// TODO: remove this code and always use the key "zpa"
var repositoryKey = "plsql"
if (SonarQubeUtils.isCommercialEdition) {
repositoryKey = "zpa"
}
KEY = repositoryKey
}
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlSquidSensor.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.sonar.api.batch.rule.ActiveRules
import org.sonar.api.batch.sensor.Sensor
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.SensorDescriptor
import org.sonar.api.config.Configuration
import org.sonar.api.issue.NoSonarFilter
import org.sonar.api.measures.FileLinesContextFactory
import com.felipebz.zpa.checks.CheckList
import com.felipebz.zpa.metadata.FormsMetadata
import com.felipebz.zpa.rules.SonarQubeActiveRulesAdapter
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import com.felipebz.zpa.squid.PlSqlAstScanner
import com.felipebz.zpa.squid.ProgressReport
import com.felipebz.zpa.symbols.ObjectLocator
import com.felipebz.zpa.utils.log.Logger
import com.felipebz.zpa.utils.log.Loggers
import com.felipebz.zpa.api.ZpaRulesDefinition
import java.util.concurrent.TimeUnit
class PlSqlSquidSensor @JvmOverloads constructor(activeRules: ActiveRules, settings: Configuration, private val noSonarFilter: NoSonarFilter,
private val fileLinesContextFactory: FileLinesContextFactory,
customRulesDefinition: Array<ZpaRulesDefinition>? = null,
private val objectLocator: ObjectLocator) : Sensor {
private val logger: Logger = Loggers.getLogger(PlSqlSquidSensor::class.java)
private val checks = PlSqlChecks.createPlSqlCheck(SonarQubeActiveRulesAdapter(activeRules), SonarQubeRuleMetadataLoader())
.addChecks(PlSqlRuleRepository.Companion.KEY, CheckList.checks)
.addCustomChecks(customRulesDefinition)
private val isErrorRecoveryEnabled = settings.getBoolean(PlSqlPlugin.Companion.ERROR_RECOVERY_KEY).orElse(false)
private val isConcurrentModeEnabled = settings.getBoolean(PlSqlPlugin.Companion.CONCURRENT_EXECUTION_KEY).orElse(true)
private val formsMetadata = FormsMetadata.loadFromFile(settings.get(PlSqlPlugin.Companion.FORMS_METADATA_KEY)
.orElse(null))
override fun describe(descriptor: SensorDescriptor) {
descriptor.name("ZPA").onlyOnLanguage(PlSql.Companion.KEY)
}
override fun execute(context: SensorContext) {
val fs = context.fileSystem()
val inputFiles = fs.inputFiles(fs.predicates().hasLanguage(PlSql.Companion.KEY)).toList()
val progressReport = ProgressReport("Report about progress of code analyzer", TimeUnit.SECONDS.toMillis(10))
val scanner = PlSqlAstScanner(context, checks, noSonarFilter, formsMetadata, isErrorRecoveryEnabled, fileLinesContextFactory, objectLocator)
progressReport.start(inputFiles.map { it.toString() })
val files = if (isConcurrentModeEnabled) {
logger.info("Concurrent mode enabled")
inputFiles.parallelStream()
} else {
inputFiles.stream()
}
files.forEach {
try {
scanner.scanFile(it)
progressReport.nextFile()
} catch (e: Exception) {
logger.error("Error during analysis of file $it", e)
}
}
progressReport.stop()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/SonarQubeUtils.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
object SonarQubeUtils {
val isCommercialEdition by lazy {
var value = false
try {
// is it running a commercial edition of SQ?
Class.forName("com.sonarsource.plugins.license.api.LicensedPluginRegistration")
value = true
} catch (e: ClassNotFoundException) {
// ignore
}
value
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/api/CustomPlSqlRulesDefinition.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.api
import com.felipebz.zpa.CustomAnnotationBasedRulesDefinition
import com.felipebz.zpa.PlSql
import com.felipebz.zpa.rules.SonarQubeRepositoryAdapter
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import org.sonar.api.ExtensionPoint
import org.sonar.api.scanner.ScannerSide
import org.sonar.api.server.rule.RulesDefinition
@ExtensionPoint
@ScannerSide
abstract class CustomPlSqlRulesDefinition : RulesDefinition, ZpaRulesDefinition {
override fun define(context: RulesDefinition.Context) {
val repo = context.createRepository(repositoryKey(), PlSql.KEY)
.setName(repositoryName())
// Load metadata from check classes' annotations
CustomAnnotationBasedRulesDefinition(SonarQubeRepositoryAdapter(repo), PlSql.KEY, SonarQubeRuleMetadataLoader())
.addRuleClasses(checkClasses().toList())
repo.done()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/highlight/PlSqlHighlighterVisitor.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.highlight
import com.felipebz.flr.api.AstNode
import com.felipebz.flr.api.Token
import com.felipebz.flr.api.Trivia
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.highlighting.NewHighlighting
import org.sonar.api.batch.sensor.highlighting.TypeOfText
import com.felipebz.zpa.api.PlSqlKeyword
import com.felipebz.zpa.api.PlSqlTokenType
import com.felipebz.zpa.api.checks.PlSqlCheck
class PlSqlHighlighterVisitor(context: SensorContext, inputFile: InputFile) : PlSqlCheck() {
private val highlighting: NewHighlighting = context.newHighlighting().onFile(inputFile)
override fun visitToken(token: Token) {
if (token.type is PlSqlTokenType) {
highlight(token, TypeOfText.STRING)
}
if (token.type is PlSqlKeyword) {
highlight(token, TypeOfText.KEYWORD)
}
}
override fun visitComment(trivia: Trivia, content: String) {
val token = trivia.token
if (token.value.startsWith("/**")) {
highlight(token, TypeOfText.STRUCTURED_COMMENT)
} else {
highlight(token, TypeOfText.COMMENT)
}
}
override fun leaveFile(node: AstNode) {
highlighting.save()
}
private fun highlight(token: Token, code: TypeOfText) {
highlighting.highlight(token.line, token.column, token.endLine, token.endColumn, code)
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/log/SonarQubeLogger.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.log
import org.slf4j.Logger
class SonarQubeLogger internal constructor(private val logger: Logger) : com.felipebz.zpa.utils.log.Logger {
override fun trace(msg: String) {
logger.trace(msg)
}
override fun trace(msg: String, vararg args: Any?) {
logger.trace(msg, *args)
}
override fun debug(msg: String) {
logger.debug(msg)
}
override fun debug(msg: String, vararg args: Any?) {
logger.debug(msg, *args)
}
override fun info(msg: String) {
logger.info(msg)
}
override fun info(msg: String, vararg args: Any?) {
logger.info(msg, *args)
}
override fun warn(msg: String) {
logger.warn(msg)
}
override fun warn(msg: String, vararg args: Any?) {
logger.warn(msg, *args)
}
override fun error(msg: String) {
logger.error(msg)
}
override fun error(msg: String, vararg args: Any?) {
logger.error(msg, *args)
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/log/SonarQubeLoggers.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.log
import org.slf4j.LoggerFactory
import com.felipebz.zpa.utils.log.Logger
import com.felipebz.zpa.utils.log.Loggers
class SonarQubeLoggers : Loggers() {
override fun getLogger(name: String): Logger {
return SonarQubeLogger(LoggerFactory.getLogger(name))
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/metrics/CpdVisitor.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.metrics
import com.felipebz.flr.api.AstNode
import com.felipebz.flr.api.Token
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.cpd.NewCpdTokens
import com.felipebz.zpa.api.PlSqlGrammar
import com.felipebz.zpa.api.checks.PlSqlCheck
class CpdVisitor(context: SensorContext, inputFile: InputFile) : PlSqlCheck() {
private val newCpdTokens: NewCpdTokens = context.newCpdTokens().onFile(inputFile)
override fun init() {
subscribeTo(PlSqlGrammar.ANONYMOUS_BLOCK,
PlSqlGrammar.CREATE_PROCEDURE,
PlSqlGrammar.CREATE_FUNCTION,
PlSqlGrammar.CREATE_PACKAGE_BODY,
PlSqlGrammar.CREATE_TYPE_BODY)
}
override fun visitNode(node: AstNode) {
for (token in node.tokens) {
saveCpdTokens(token)
}
}
private fun saveCpdTokens(token: Token) {
newCpdTokens.addToken(token.line, token.column, token.endLine, token.endColumn, token.value)
}
override fun leaveFile(node: AstNode) {
newCpdTokens.save()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeActiveRuleAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.batch.rule.ActiveRule
class SonarQubeActiveRuleAdapter(private val activeRule: ActiveRule) : ZpaActiveRule {
override val ruleKey: ZpaRuleKey
get() = SonarQubeRuleKeyAdapter(activeRule.ruleKey())
override val severity: String
get() = activeRule.severity()
override val language: String
get() = activeRule.language()
override fun param(key: String): String? = activeRule.param(key)
override val params: Map<String, String>
get() = activeRule.params()
override val internalKey: String?
get() = activeRule.internalKey()
override val templateRuleKey: String?
get() = activeRule.templateRuleKey()
override val tags: Array<String>
get() = throw NotImplementedError()
override val remediationConstant: String
get() = throw NotImplementedError()
override val name: String
get() = throw NotImplementedError()
override fun toString(): String = activeRule.toString()
override fun equals(other: Any?): Boolean = activeRule == other
override fun hashCode(): Int = activeRule.hashCode()
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeActiveRulesAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.batch.rule.ActiveRules
class SonarQubeActiveRulesAdapter(private val activeRules: ActiveRules) : ZpaActiveRules {
override fun findByRepository(repository: String): Collection<ZpaActiveRule> =
activeRules.findByRepository(repository).map { SonarQubeActiveRuleAdapter(it) }
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRepositoryAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.server.rule.RulesDefinition
class SonarQubeRepositoryAdapter(private val repository: RulesDefinition.NewRepository) : ZpaRepository {
override val key: String = repository.key()
override fun createRule(ruleKey: String): ZpaRule =
SonarQubeRuleAdapter(repository.createRule(ruleKey))
override fun rule(ruleKey: String): ZpaRule? {
val rule = repository.rule(ruleKey)
return if (rule != null) SonarQubeRuleAdapter(rule) else null
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.rule.RuleScope
import org.sonar.api.server.rule.RulesDefinition
import com.felipebz.zpa.api.annotations.RuleInfo
import org.sonar.api.rule.RuleStatus as SonarQubeRuleStatus
class SonarQubeRuleAdapter(private val newRule: RulesDefinition.NewRule) : ZpaRule {
override val key: String
get() = newRule.key()
override val params: List<ZpaRuleParam>
get() = newRule.params().map { SonarQubeRuleParamAdapter(it) }
override var name: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setName(value)
}
override var remediationConstant: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(value))
}
override var scope: RuleInfo.Scope
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setScope(RuleScope.valueOf(value.name))
}
override var template: Boolean
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setTemplate(value)
}
override var tags: Array<String>
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setTags(*value)
}
override var status: RuleStatus
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setStatus(SonarQubeRuleStatus.valueOf(value.name))
}
override var severity: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setSeverity(value)
}
override var htmlDescription: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setHtmlDescription(value)
}
override var isActivatedByDefault: Boolean
get() = throw IllegalAccessException("Getter is not available")
set(value) {
newRule.setActivatedByDefault(value)
}
override fun createParam(fieldKey: String): ZpaRuleParam =
SonarQubeRuleParamAdapter(newRule.createParam(fieldKey))
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleKeyAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.rule.RuleKey
class SonarQubeRuleKeyAdapter(val ruleKey: RuleKey) : ZpaRuleKey {
override val rule: String
get() = ruleKey.rule()
override val repository: String
get() = ruleKey.repository()
override fun toString(): String = ruleKey.toString()
override fun equals(other: Any?): Boolean = ruleKey == (other as SonarQubeRuleKeyAdapter).ruleKey
override fun hashCode(): Int = ruleKey.hashCode()
companion object {
fun of(repository: String, rule: String): ZpaRuleKey =
SonarQubeRuleKeyAdapter(RuleKey.of(repository, rule))
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleMetadataLoader.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import com.felipebz.zpa.utils.getAnnotation
import com.felipebz.zpa.api.annotations.Priority
import java.lang.reflect.Field
import org.sonar.check.Priority as SonarPriority
import org.sonar.check.Rule as SonarRule
import org.sonar.check.RuleProperty as SonarRuleProperty
class SonarQubeRuleMetadataLoader : RuleMetadataLoader() {
override fun getRuleAnnotation(annotatedClassOrObject: Any): RuleData? {
val ruleAnnotation = super.getRuleAnnotation(annotatedClassOrObject)
if (ruleAnnotation != null) {
return ruleAnnotation
}
val sonarRule = getAnnotation(annotatedClassOrObject, SonarRule::class.java)
if (sonarRule != null) {
val priority = when(sonarRule.priority) {
SonarPriority.BLOCKER -> Priority.BLOCKER
SonarPriority.CRITICAL -> Priority.CRITICAL
SonarPriority.MAJOR -> Priority.MAJOR
SonarPriority.MINOR -> Priority.MINOR
SonarPriority.INFO -> Priority.INFO
}
return RuleData(
sonarRule.key,
sonarRule.name,
sonarRule.description,
priority,
sonarRule.tags,
sonarRule.status)
}
return null
}
override fun getRulePropertyAnnotation(field: Field): RulePropertyData? {
val rulePropertyAnnotation = super.getRulePropertyAnnotation(field)
if (rulePropertyAnnotation != null) {
return rulePropertyAnnotation
}
val sonarRuleProperty = field.getAnnotation(SonarRuleProperty::class.java)
if (sonarRuleProperty != null) {
return RulePropertyData(
sonarRuleProperty.key,
sonarRuleProperty.description,
sonarRuleProperty.defaultValue,
sonarRuleProperty.type)
}
return null
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleParamAdapter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.rules
import org.sonar.api.server.rule.RulesDefinition
class SonarQubeRuleParamAdapter(private val param: RulesDefinition.NewParam) : ZpaRuleParam {
override val key: String
get() = param.key()
override var description: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
param.setDescription(value)
}
override var defaultValue: String
get() = throw IllegalAccessException("Getter is not available")
set(value) {
param.setDefaultValue(value)
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/squid/PlSqlAstScanner.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.squid
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.fs.TextRange
import org.sonar.api.batch.measure.Metric
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.issue.NewIssue
import org.sonar.api.batch.sensor.issue.NewIssueLocation
import org.sonar.api.issue.NoSonarFilter
import org.sonar.api.measures.CoreMetrics
import org.sonar.api.measures.FileLinesContextFactory
import com.felipebz.zpa.PlSqlChecks
import com.felipebz.zpa.checks.IssueLocation
import com.felipebz.zpa.highlight.PlSqlHighlighterVisitor
import com.felipebz.zpa.metadata.FormsMetadata
import com.felipebz.zpa.metrics.CpdVisitor
import com.felipebz.zpa.rules.SonarQubeRuleKeyAdapter
import com.felipebz.zpa.symbols.ObjectLocator
import com.felipebz.zpa.symbols.SonarQubeSymbolTable
import com.felipebz.zpa.api.PlSqlFile
import com.felipebz.zpa.api.checks.PlSqlVisitor
import java.io.Serializable
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
class PlSqlAstScanner(private val context: SensorContext,
checks: Collection<PlSqlVisitor>,
private val noSonarFilter: NoSonarFilter,
formsMetadata: FormsMetadata?,
isErrorRecoveryEnabled: Boolean,
private val fileLinesContextFactory: FileLinesContextFactory?) {
private val astScanner: AstScanner =
AstScanner(checks, formsMetadata, isErrorRecoveryEnabled, context.fileSystem().encoding())
private lateinit var plsqlChecks: PlSqlChecks
constructor(context: SensorContext,
checks: PlSqlChecks,
noSonarFilter: NoSonarFilter,
formsMetadata: FormsMetadata?,
isErrorRecoveryEnabled: Boolean,
fileLinesContextFactory: FileLinesContextFactory,
objectLocator: ObjectLocator) : this(context, checks.all(), noSonarFilter, formsMetadata, isErrorRecoveryEnabled, fileLinesContextFactory) {
this.plsqlChecks = checks
objectLocator.setScope(astScanner.globalScope)
}
fun scanFile(inputFile: InputFile) {
val plSqlFile = SonarQubePlSqlFile(inputFile)
if (plSqlFile.type() == PlSqlFile.Type.MAIN) {
scanMainFile(plSqlFile)
} else {
scanTestFile(plSqlFile)
}
}
private fun scanMainFile(plSqlFile: SonarQubePlSqlFile) {
val inputFile = plSqlFile.inputFile
val result = try {
astScanner.scanFile(
plSqlFile,
listOf(PlSqlHighlighterVisitor(context, inputFile), CpdVisitor(context, inputFile))
)
} catch (e: Exception) {
e.printStackTrace()
throw e
}
noSonarFilter.noSonarInFile(inputFile, result.linesWithNoSonar)
lock.withLock { // needed because SonarQube 7.6 save this data in a non thread-safe way
saveIssues(inputFile, result.issues)
val symbolSaver = SonarQubeSymbolTable(context, inputFile)
symbolSaver.save(result.symbols)
saveMetricOnFile(inputFile, CoreMetrics.STATEMENTS, result.numberOfStatements)
saveMetricOnFile(inputFile, CoreMetrics.NCLOC, result.linesOfCode)
saveMetricOnFile(inputFile, CoreMetrics.COMMENT_LINES, result.linesOfComments)
saveMetricOnFile(inputFile, CoreMetrics.COMPLEXITY, result.complexity)
saveMetricOnFile(inputFile, CoreMetrics.FUNCTIONS, result.numberOfFunctions)
if (fileLinesContextFactory != null) {
val fileLinesContext = fileLinesContextFactory.createFor(inputFile)
for (line in result.executableLines) {
fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, 1)
}
fileLinesContext.save()
}
}
}
private fun scanTestFile(plSqlFile: SonarQubePlSqlFile) {
val inputFile = plSqlFile.inputFile
val result = astScanner.scanFile(plSqlFile, listOf(PlSqlHighlighterVisitor(context, inputFile)))
noSonarFilter.noSonarInFile(inputFile, result.linesWithNoSonar)
lock.withLock { // needed because SonarQube 7.6 save this data in a non thread-safe way
saveIssues(inputFile, result.issues)
val symbolTable = SonarQubeSymbolTable(context, inputFile)
symbolTable.save(result.symbols)
}
}
private fun saveIssues(inputFile: InputFile, issues: List<ZpaIssue>) {
for (issue in issues) {
val rule = plsqlChecks.ruleKey(issue.check) as SonarQubeRuleKeyAdapter
val newIssue = context.newIssue().forRule(rule.ruleKey)
val cost = issue.cost
if (cost != null) {
newIssue.gap(cost.toDouble())
}
newIssue.at(newLocation(inputFile, newIssue, issue.primaryLocation))
for (secondaryLocation in issue.secondaryLocations) {
newIssue.addLocation(newLocation(inputFile, newIssue, secondaryLocation))
}
newIssue.save()
}
}
private fun <T : Serializable> saveMetricOnFile(inputFile: InputFile, metric: Metric<T>, value: T) {
context.newMeasure<T>()
.on(inputFile)
.forMetric(metric)
.withValue(value)
.save()
}
private fun newLocation(inputFile: InputFile, issue: NewIssue, location: IssueLocation): NewIssueLocation {
val newLocation = issue.newLocation().on(inputFile)
if (location.startLine() != IssueLocation.UNDEFINED_LINE) {
val range: TextRange = if (location.startLineOffset() == IssueLocation.UNDEFINED_OFFSET) {
inputFile.selectLine(location.startLine())
} else {
inputFile.newRange(location.startLine(), location.startLineOffset(), location.endLine(),
location.endLineOffset())
}
newLocation.at(range)
}
newLocation.message(location.message())
return newLocation
}
companion object {
private val lock = ReentrantLock()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/squid/SonarQubePlSqlFile.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.squid
import org.sonar.api.batch.fs.InputFile
import com.felipebz.zpa.api.PlSqlFile
import java.io.IOException
import java.nio.file.Path
import kotlin.io.path.toPath
class SonarQubePlSqlFile(val inputFile: InputFile) : PlSqlFile {
override fun contents(): String =
try {
inputFile.contents()
} catch (e: IOException) {
throw IllegalStateException("Could not read contents of input file $inputFile", e)
}
override fun fileName(): String = inputFile.filename()
override fun path(): Path = inputFile.uri().toPath()
override fun type(): PlSqlFile.Type =
when (inputFile.type()) {
InputFile.Type.MAIN -> PlSqlFile.Type.MAIN
InputFile.Type.TEST -> PlSqlFile.Type.TEST
else -> PlSqlFile.Type.MAIN
}
override fun toString(): String = inputFile.toString()
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/MappedObject.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.symbols
import com.felipebz.flr.api.AstNodeType
import org.sonar.api.batch.fs.InputFile
import com.felipebz.zpa.api.PlSqlFile
import java.nio.file.Path
data class MappedObject(
val identifier: String,
val objectType: AstNodeType,
val fileType: PlSqlFile.Type,
val path: Path,
val inputFile: InputFile,
val firstLine: Int = -1,
val lastLine: Int = -1
) {
val isMain: Boolean
get() = fileType === PlSqlFile.Type.MAIN
val isTest: Boolean
get() = fileType === PlSqlFile.Type.TEST
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/ObjectLocator.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.symbols
import com.felipebz.flr.api.AstNodeType
import org.sonar.api.scanner.ScannerSide
import com.felipebz.zpa.squid.SonarQubePlSqlFile
import com.felipebz.zpa.api.PlSqlGrammar
import com.felipebz.zpa.api.symbols.Scope
@ScannerSide
class ObjectLocator {
private var scope: Scope = ScopeImpl()
private val mappedObjects
get() = scope.innerScopes
.union(scope.innerScopes
.flatMap { it.innerScopes }
.filter { it.type == PlSqlGrammar.CREATE_PACKAGE_BODY || it.type == PlSqlGrammar.CREATE_TYPE_BODY })
.map {
val plSqlFile = it.plSqlFile as SonarQubePlSqlFile? ?: return@map null
val identifier = it.identifier ?: return@map null
val type = it.type ?: return@map null
val firstLine = it.firstToken?.line ?: return@map null
val lastLine = it.lastToken?.line ?: return@map null
MappedObject(
identifier,
type,
plSqlFile.type(),
plSqlFile.path(),
plSqlFile.inputFile,
firstLine,
lastLine
)
}.filterNotNull()
fun setScope(scope: Scope) {
this.scope = scope
}
fun findMainObject(identifier: String, vararg types: AstNodeType): MappedObject? {
return mappedObjects.find { it.isMain && it.identifier.equals(identifier, ignoreCase = true) && it.objectType in types }
}
fun findTestObject(identifier: String, vararg types: AstNodeType): MappedObject? {
return mappedObjects.find { it.isTest && it.identifier.equals(identifier, ignoreCase = true) && it.objectType in types }
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/SonarQubeSymbolTable.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.symbols
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.symbol.NewSymbolTable
import com.felipebz.zpa.api.symbols.Symbol
class SonarQubeSymbolTable(context: SensorContext, inputFile: InputFile) {
private val symbolizable: NewSymbolTable = context.newSymbolTable().onFile(inputFile)
fun save(symbols: List<Symbol>) {
for (symbol in symbols) {
val symbolNode = symbol.declaration
val symbolToken = symbolNode.token
val newSymbol = symbolizable.newSymbol(symbolToken.line, symbolToken.column,
symbolToken.endLine, symbolToken.endColumn)
for (usage in symbol.usages) {
val usageToken = usage.token
newSymbol.newReference(usageToken.line, usageToken.column, usageToken.endLine, usageToken.endColumn)
}
}
symbolizable.save()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/AbstractReportImporter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.notifications.AnalysisWarnings
import org.sonar.api.utils.WildcardPattern
import com.felipebz.zpa.utils.log.Logger
import com.felipebz.zpa.utils.log.Loggers
import java.io.File
abstract class AbstractReportImporter(private val analysisWarnings: AnalysisWarnings) {
private val logger: Logger = Loggers.getLogger(AbstractReportImporter::class.java)
abstract val reportType: String
abstract val reportKey: String
abstract fun processReport(context: SensorContext, report: File)
fun execute(context: SensorContext) {
val reports = files(context)
for (report in reports) {
logger.info("Processing $reportType report {}", report)
processReport(context, report)
}
}
protected fun files(context: SensorContext) =
context.config().getStringArray(reportKey).flatMap {
getReports(context, it)
}
private fun getReports(context: SensorContext, reportPath: String): List<File> {
val pattern = WildcardPattern.create(reportPath)
val baseDir = context.fileSystem().baseDir()
val matchingFiles = baseDir
.walkTopDown()
.filter { it.isFile && pattern.match(it.relativeTo(baseDir).invariantSeparatorsPath) }
.toMutableList()
if (matchingFiles.isEmpty()) {
if (context.config().hasKey(reportKey)) {
val file = File(reportPath)
if (!file.exists()) {
val formattedMessage =
"No utPLSQL $reportType report was found for ${reportKey} using pattern $reportPath"
logger.warn(formattedMessage)
analysisWarnings.addUnique(formattedMessage)
} else {
matchingFiles.add(file)
}
} else {
logger.info("No utPLSQL $reportType report was found for {} using default pattern {}",
reportKey, reportPath)
}
}
return matchingFiles
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/CoverageReport.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement
@JacksonXmlRootElement(localName = "coverage")
data class Coverage @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "version")
var version: Int = 0,
@field:JacksonXmlElementWrapper(useWrapping = false)
@field:JacksonXmlProperty(localName = "file")
var files: List<CoveredFile>? = null
)
@JacksonXmlRootElement(localName = "file")
data class CoveredFile @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "path")
var path: String = "",
@field:JacksonXmlElementWrapper(useWrapping = false)
@field:JacksonXmlProperty(localName = "lineToCover")
var linesToCover: List<LineToCover>? = null
)
@JacksonXmlRootElement(localName = "lineToCover")
data class LineToCover @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "lineNumber")
var lineNumber: Int = 0,
@field:JacksonXmlProperty(isAttribute = true, localName = "covered")
var covered: Boolean = false,
@field:JacksonXmlProperty(isAttribute = true, localName = "branchesToCover")
var branchesToCover: Int? = null,
@field:JacksonXmlProperty(isAttribute = true, localName = "coveredBranches")
var coveredBranches: Int? = null
)
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/CoverageResultImporter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.notifications.AnalysisWarnings
import com.felipebz.zpa.symbols.ObjectLocator
import com.felipebz.zpa.utils.log.Loggers
import com.felipebz.zpa.api.PlSqlGrammar
import java.io.File
class CoverageResultImporter(private val objectLocator: ObjectLocator,
analysisWarnings: AnalysisWarnings) : AbstractReportImporter(analysisWarnings) {
private val logger = Loggers.getLogger(CoverageResultImporter::class.java)
override val reportType = "coverage"
override val reportKey = UtPlSqlSensor.COVERAGE_REPORT_PATH_KEY
override fun processReport(context: SensorContext, report: File) {
val serializer = XmlMapper()
val coverage = serializer.readValue(report, Coverage::class.java)
coverage.files?.forEach { file ->
val filePath = file.path
var inputFile = context.fileSystem()
.inputFile(context.fileSystem().predicates().hasPath(filePath))
var lineOffset = 0
if (inputFile == null) {
val objectType = when (filePath.substringBeforeLast(' ')) {
"package body" -> PlSqlGrammar.CREATE_PACKAGE_BODY
"procedure" -> PlSqlGrammar.CREATE_PROCEDURE
"function" -> PlSqlGrammar.CREATE_FUNCTION
"trigger" -> PlSqlGrammar.CREATE_TRIGGER
"type body" -> PlSqlGrammar.CREATE_TYPE_BODY
else -> error("Unknown object type for file \"$filePath\"")
}
val objectName = filePath.substringAfterLast('.')
val mappedObject = objectLocator.findMainObject(objectName, objectType)
if (mappedObject != null) {
inputFile = mappedObject.inputFile
lineOffset = mappedObject.firstLine - 1
}
}
if (inputFile != null) {
logger.debug("The path ${file.path} was mapped to ${inputFile}")
saveCoverage(context, inputFile, file, lineOffset, filePath)
} else {
logger.warn("The path ${file.path} was not found in the project")
}
}
}
private fun saveCoverage(
context: SensorContext,
inputFile: InputFile,
file: CoveredFile,
lineOffset: Int,
filePath: String
) {
val linesToCover = file.linesToCover
if (linesToCover != null) {
if (linesToCover.all { !it.covered }) {
// No need to save coverage for files with no covered lines
return
}
val newCoverage = context.newCoverage().onFile(inputFile)
file.linesToCover?.forEach { line ->
val lineNumber = line.lineNumber + lineOffset
newCoverage.lineHits(lineNumber, if (line.covered) 1 else 0)
val branchesToCover = line.branchesToCover
val coveredBranches = line.coveredBranches ?: 0
if (branchesToCover != null) {
check(coveredBranches <= branchesToCover) {
"\"coveredBranches\" should not be greater than \"branchesToCover\" on line " +
"${line.lineNumber} for file \"$filePath\""
}
newCoverage.conditions(lineNumber, branchesToCover, coveredBranches)
}
}
newCoverage.save()
}
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/TestExecutionReport.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement
@JacksonXmlRootElement(localName = "testExecutions")
data class TestExecutions @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "version")
var version: Int = 0,
@field:JacksonXmlElementWrapper(useWrapping = false)
@field:JacksonXmlProperty(localName = "file")
var files: List<TestFile>? = null
)
@JacksonXmlRootElement(localName = "file")
data class TestFile @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "path")
var path: String = "",
@field:JacksonXmlElementWrapper(useWrapping = false)
@field:JacksonXmlProperty(localName = "testCase")
var testCases: List<TestCase>? = null
)
@JacksonXmlRootElement(localName = "testCase")
data class TestCase @JvmOverloads constructor(
@field:JacksonXmlProperty(isAttribute = true, localName = "name")
var name: String = "",
@field:JacksonXmlProperty(isAttribute = true, localName = "duration")
var duration: Long = 0,
@field:JacksonXmlProperty(localName = "skipped")
var skipped: Skipped? = null,
@field:JacksonXmlProperty(localName = "failure")
var failure: Failure? = null,
@field:JacksonXmlProperty(localName = "error")
var error: Error? = null
) {
val status: TestCaseStatus
get() {
return when {
skipped != null -> TestCaseStatus.SKIPPED
failure != null -> TestCaseStatus.FAILED
error != null -> TestCaseStatus.ERROR
else -> TestCaseStatus.PASSED
}
}
}
@JacksonXmlRootElement(localName = "skipped")
@JsonIgnoreProperties(ignoreUnknown = true)
class Skipped
@JacksonXmlRootElement(localName = "failure")
@JsonIgnoreProperties(ignoreUnknown = true)
class Failure
@JacksonXmlRootElement(localName = "error")
@JsonIgnoreProperties(ignoreUnknown = true)
class Error
enum class TestCaseStatus {
PASSED,
FAILED,
SKIPPED,
ERROR
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/TestResultImporter.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import org.sonar.api.batch.fs.InputFile
import org.sonar.api.batch.measure.Metric
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.measures.CoreMetrics
import org.sonar.api.notifications.AnalysisWarnings
import com.felipebz.zpa.symbols.ObjectLocator
import com.felipebz.zpa.utils.log.Loggers
import com.felipebz.zpa.api.PlSqlGrammar
import java.io.File
import java.io.Serializable
class TestResultImporter(private val objectLocator: ObjectLocator,
analysisWarnings: AnalysisWarnings) : AbstractReportImporter(analysisWarnings) {
private val logger = Loggers.getLogger(TestResultImporter::class.java)
override val reportType = "test"
override val reportKey = UtPlSqlSensor.TEST_REPORT_PATH_KEY
override fun processReport(context: SensorContext, report: File) {
val serializer = XmlMapper()
val testExecutions = serializer.readValue(report, TestExecutions::class.java)
testExecutions.files?.forEach { file ->
val packageName = file.path.substringAfterLast('.')
val mappedTest = objectLocator.findTestObject(packageName, PlSqlGrammar.CREATE_PACKAGE)
val inputFile = mappedTest?.inputFile ?: context.fileSystem()
.inputFile(context.fileSystem().predicates().hasPath(file.path))
if (inputFile != null) {
logger.debug("The path ${file.path} was mapped to ${inputFile}")
file.testCases?.let { testCase ->
val testCount = testCase.count { it.status != TestCaseStatus.SKIPPED }
val failureCount = testCase.count { it.status == TestCaseStatus.FAILED }
val errorCount = testCase.count { it.status == TestCaseStatus.ERROR }
val skippedCount = testCase.count { it.status == TestCaseStatus.SKIPPED }
val duration = testCase.sumOf { it.duration }
saveMetricOnFile(context, inputFile, CoreMetrics.TESTS, testCount)
saveMetricOnFile(context, inputFile, CoreMetrics.TEST_FAILURES, failureCount)
saveMetricOnFile(context, inputFile, CoreMetrics.TEST_ERRORS, errorCount)
saveMetricOnFile(context, inputFile, CoreMetrics.SKIPPED_TESTS, skippedCount)
saveMetricOnFile(context, inputFile, CoreMetrics.TEST_EXECUTION_TIME, duration)
}
} else {
logger.warn("The path ${file.path} was not found in the project")
}
}
}
private fun <T : Serializable> saveMetricOnFile(
context: SensorContext,
inputFile: InputFile,
metric: Metric<T>,
value: T
) {
context.newMeasure<T>()
.on(inputFile)
.forMetric(metric)
.withValue(value)
.save()
}
}
================================================
FILE: sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/UtPlSqlSensor.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa.utplsql
import org.sonar.api.batch.sensor.Sensor
import org.sonar.api.batch.sensor.SensorContext
import org.sonar.api.batch.sensor.SensorDescriptor
import org.sonar.api.notifications.AnalysisWarnings
import com.felipebz.zpa.PlSql
import com.felipebz.zpa.symbols.ObjectLocator
class UtPlSqlSensor(objectLocator: ObjectLocator, analysisWarnings: AnalysisWarnings) : Sensor {
private val testResultImporter = TestResultImporter(objectLocator, analysisWarnings)
private val coverageResultImporter = CoverageResultImporter(objectLocator, analysisWarnings)
override fun describe(descriptor: SensorDescriptor) {
descriptor.name("ZPA - utPLSQL Report Importer").onlyOnLanguage(PlSql.KEY)
}
override fun execute(context: SensorContext) {
testResultImporter.execute(context)
coverageResultImporter.execute(context)
}
companion object {
const val TEST_REPORT_PATH_KEY = "sonar.zpa.tests.reportPaths"
const val DEFAULT_TEST_REPORT_PATH = "utplsql-test.xml"
const val COVERAGE_REPORT_PATH_KEY = "sonar.zpa.coverage.reportPaths"
const val DEFAULT_COVERAGE_REPORT_PATH = "utplsql-coverage.xml"
}
}
================================================
FILE: sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/CustomAnnotationBasedRulesDefinitionTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.assertj.core.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.sonar.api.server.debt.DebtRemediationFunction.Type
import org.sonar.api.server.rule.RulesDefinition
import org.sonar.api.server.rule.RulesDefinition.*
import org.sonar.check.Rule
import org.sonar.check.RuleProperty
import com.felipebz.zpa.rules.SonarQubeRepositoryAdapter
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import com.felipebz.zpa.api.annotations.ConstantRemediation
import java.util.*
class CustomAnnotationBasedRulesDefinitionTest {
private val context = Context()
@BeforeEach
fun setup() {
Locale.setDefault(Locale.ROOT)
}
@Test
fun noClassToAdd() {
assertThat(buildRepository().rules()).isEmpty()
}
@Test
fun classWithoutRuleAnnotation() {
class NotRuleClass
assertThatIllegalArgumentException().isThrownBy {
buildSingleRuleRepository(NotRuleClass::class.java)
}
}
@Test
fun ruleAnnotationData() {
@Rule(key = "key1", name = "name1", description = "description1", tags = ["mytag"])
class RuleClass {
@RuleProperty(key = "param1Key", description = "param1 description")
var param1 = "x"
}
val rule = buildSingleRuleRepository(RuleClass::class.java)
assertThat(rule.key()).isEqualTo("key1")
assertThat(rule.name()).isEqualTo("name1")
assertThat(rule.htmlDescription()).isEqualTo("description1")
assertThat(rule.tags()).containsOnly("mytag")
assertThat(rule.template()).isFalse
assertThat(rule.params()).hasSize(1)
assertParam(rule.params()[0], "param1Key", "param1 description")
}
@Rule(name = "name1", description = "description1")
internal class RuleClassWithoutAnnotationDefinedKey
@Test
fun ruleWithoutExplicitKeyCanBeAcceptable() {
val repository = buildRepository(LANGUAGE_KEY_WITH_RESOURCE_BUNDLE, RuleClassWithoutAnnotationDefinedKey::class.java)
val rule = repository.rules()[0]
assertThat(rule.key()).isEqualTo(RuleClassWithoutAnnotationDefinedKey::class.java.simpleName)
assertThat(rule.name()).isEqualTo("name1")
}
@Test
fun externalNamesAndDescriptions() {
@Rule(key = "ruleWithExternalInfo")
class RuleClass {
@RuleProperty(key = "param1Key")
var param1 = "x"
@RuleProperty
var param2 = "x"
}
val rule = buildSingleRuleRepository(RuleClass::class.java)
assertThat(rule.key()).isEqualTo("ruleWithExternalInfo")
assertThat(rule.name()).isEqualTo("external name for ruleWithExternalInfo")
assertThat(rule.htmlDescription()).isEqualTo("description for ruleWithExternalInfo")
assertThat(rule.params()).hasSize(2)
assertParam(rule.params()[0], "param1Key", "description for param1")
assertParam(rule.params()[1], "param2", null)
}
@Test
fun classWithSqaleConstantRemediation() {
@Rule(key = "key1", name = "name1", description = "description1")
@ConstantRemediation("10min")
class RuleClass
val rule = buildSingleRuleRepository(RuleClass::class.java)
assertRemediation(rule, Type.CONSTANT_ISSUE, null, "10min", null)
}
@Test
fun invalidSqaleAnnotation() {
@Rule(key = "key1", name = "name1", description = "description1")
@ConstantRemediation("xxx")
class MyInvalidRuleClass
assertThatIllegalArgumentException().isThrownBy {
buildSingleRuleRepository(MyInvalidRuleClass::class.java)
}
}
@Test
fun loadMethodWithClassWithSqaleAnnotations() {
@Rule(key = "key1", name = "name1", description = "description1")
@ConstantRemediation("10min")
class RuleClass
val repository = load(RuleClass::class.java)
assertThat(repository.rules()).hasSize(1)
}
private fun assertRemediation(rule: RulesDefinition.Rule, type: Type, gapMultiplier: String?, baseEffort: String, gapDescription: String?) {
val remediationFunction = rule.debtRemediationFunction()
assertThat(remediationFunction?.type()).isEqualTo(type)
assertThat(remediationFunction?.gapMultiplier()).isEqualTo(gapMultiplier)
assertThat(remediationFunction?.baseEffort()).isEqualTo(baseEffort)
assertThat(rule.gapDescription()).isEqualTo(gapDescription)
}
private fun assertParam(param: Param, expectedKey: String, expectedDescription: String?) {
assertThat(param.key()).isEqualTo(expectedKey)
assertThat(param.name()).isEqualTo(expectedKey)
assertThat(param.description()).isEqualTo(expectedDescription)
}
private fun buildSingleRuleRepository(ruleClass: Class<*>): RulesDefinition.Rule {
val repository = buildRepository(ruleClass)
assertThat(repository.rules()).hasSize(1)
return repository.rules()[0]
}
private fun buildRepository(vararg classes: Class<*>): Repository {
return buildRepository(LANGUAGE_KEY_WITH_RESOURCE_BUNDLE, *classes)
}
private fun buildRepository(languageKey: String, vararg classes: Class<*>): Repository {
val newRepository = createRepository(languageKey)
CustomAnnotationBasedRulesDefinition(
SonarQubeRepositoryAdapter(newRepository),
languageKey,
SonarQubeRuleMetadataLoader()
)
.addRuleClasses(classes.toList())
newRepository.done()
return context.repository(REPO_KEY) ?: fail("Should build a repository")
}
private fun load(vararg classes: Class<*>): Repository {
val languageKey = LANGUAGE_KEY_WITH_RESOURCE_BUNDLE
val newRepository = createRepository(languageKey)
CustomAnnotationBasedRulesDefinition.load(SonarQubeRepositoryAdapter(newRepository), languageKey, classes.toList(), SonarQubeRuleMetadataLoader())
newRepository.done()
return context.repository(REPO_KEY) ?: fail("Should build a repository")
}
private fun createRepository(languageKey: String): NewRepository {
return context.createRepository(REPO_KEY, languageKey)
}
companion object {
private const val REPO_KEY = "plsql"
private const val LANGUAGE_KEY_WITH_RESOURCE_BUNDLE = "languageKey"
}
}
================================================
FILE: sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlChecksTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.fail
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder
import org.sonar.api.batch.rule.internal.NewActiveRule
import org.sonar.api.rule.RuleKey
import org.sonar.api.server.rule.RulesDefinition
import org.sonar.check.Rule
import com.felipebz.zpa.rules.SonarQubeActiveRulesAdapter
import com.felipebz.zpa.rules.SonarQubeRuleKeyAdapter
import com.felipebz.zpa.rules.SonarQubeRuleMetadataLoader
import com.felipebz.zpa.api.CustomPlSqlRulesDefinition
import com.felipebz.zpa.api.checks.PlSqlCheck
import com.felipebz.zpa.api.checks.PlSqlVisitor
class PlSqlChecksTest {
private lateinit var activeRules: SonarQubeActiveRulesAdapter
private lateinit var customRulesDefinition: MyCustomPlSqlRulesDefinition
private val ruleMetadataLoader = SonarQubeRuleMetadataLoader()
@BeforeEach
fun setUp() {
activeRules = SonarQubeActiveRulesAdapter(ActiveRulesBuilder()
.addRule(NewActiveRule.Builder().setRuleKey(RuleKey.of(DEFAULT_REPOSITORY_KEY, DEFAULT_RULE_KEY)).build())
.addRule(NewActiveRule.Builder().setRuleKey(RuleKey.of(CUSTOM_REPOSITORY_KEY, CUSTOM_RULE_KEY)).build())
.build())
customRulesDefinition = MyCustomPlSqlRulesDefinition()
val context = RulesDefinition.Context()
customRulesDefinition.define(context)
}
@Test
fun shouldReturnDefaultChecks() {
val checks = PlSqlChecks.createPlSqlCheck(activeRules, ruleMetadataLoader)
checks.addChecks(DEFAULT_REPOSITORY_KEY, listOf(MyRule::class.java))
val defaultVisitor = visitor(checks, DEFAULT_REPOSITORY_KEY, DEFAULT_RULE_KEY)
assertThat(checks.all()).hasSize(1)
assertThat(checks.ruleKey(defaultVisitor)).isNotNull
assertThat(checks.ruleKey(defaultVisitor)?.rule).isEqualTo(DEFAULT_RULE_KEY)
assertThat(checks.ruleKey(defaultVisitor)?.repository).isEqualTo(DEFAULT_REPOSITORY_KEY)
}
@Test
fun shouldReturnCustomChecks() {
val checks = PlSqlChecks.createPlSqlCheck(activeRules, ruleMetadataLoader)
checks.addCustomChecks(arrayOf(customRulesDefinition))
val customVisitor = visitor(checks, CUSTOM_REPOSITORY_KEY, CUSTOM_RULE_KEY)
assertThat(checks.all()).hasSize(1)
assertThat(checks.ruleKey(customVisitor)).isNotNull
assertThat(checks.ruleKey(customVisitor)?.rule).isEqualTo(CUSTOM_RULE_KEY)
assertThat(checks.ruleKey(customVisitor)?.repository).isEqualTo(CUSTOM_REPOSITORY_KEY)
}
@Test
fun shouldWorkWithoutCustomChecks() {
val checks = PlSqlChecks.createPlSqlCheck(activeRules, ruleMetadataLoader)
checks.addCustomChecks(null)
assertThat(checks.all()).hasSize(0)
}
@Test
fun shouldNotReturnRuleKeyIfCheckDoesNotExists() {
val checks = PlSqlChecks.createPlSqlCheck(activeRules, ruleMetadataLoader)
checks.addChecks(DEFAULT_REPOSITORY_KEY, listOf(MyRule::class.java))
assertThat(checks.ruleKey(MyCustomRule())).isNull()
}
private fun visitor(plSqlChecks: PlSqlChecks, repository: String, rule: String): PlSqlVisitor {
val key = SonarQubeRuleKeyAdapter.of(repository, rule)
var visitor: PlSqlVisitor? = null
for (checks in plSqlChecks.checks) {
visitor = checks.of(key)
if (visitor != null) {
return visitor
}
}
return visitor ?: fail("Should return a visitor.")
}
@Rule(key = DEFAULT_RULE_KEY, name = "This is the default rules", description = "desc")
class MyRule : PlSqlCheck()
@Rule(key = CUSTOM_RULE_KEY, name = "This is a custom rules", description = "desc")
class MyCustomRule : PlSqlCheck()
class MyCustomPlSqlRulesDefinition : CustomPlSqlRulesDefinition() {
override fun repositoryName(): String {
return "Custom Rule Repository"
}
override fun repositoryKey(): String {
return CUSTOM_REPOSITORY_KEY
}
override fun checkClasses(): Array<Class<*>> {
return arrayOf(MyCustomRule::class.java)
}
}
companion object {
private const val DEFAULT_REPOSITORY_KEY = "DefaultRuleRepository"
private const val DEFAULT_RULE_KEY = "MyRule"
private const val CUSTOM_REPOSITORY_KEY = "CustomRuleRepository"
private const val CUSTOM_RULE_KEY = "MyCustomRule"
}
}
================================================
FILE: sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlPluginTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.sonar.api.Plugin
import org.sonar.api.SonarEdition
import org.sonar.api.SonarQubeSide
import org.sonar.api.internal.SonarRuntimeImpl
import org.sonar.api.utils.Version
class PlSqlPluginTest {
@Test
fun testGetExtensions() {
val context = Plugin.Context(SonarRuntimeImpl.forSonarQube(Version.create(6, 0), SonarQubeSide.SERVER, SonarEdition.COMMUNITY))
val plugin = PlSqlPlugin()
plugin.define(context)
assertThat(context.extensions).hasSize(12)
}
}
================================================
FILE: sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlProfileTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.sonar.api.server.profile.BuiltInQualityProfilesDefinition.Context
import com.felipebz.zpa.checks.CheckList
class PlSqlProfileTest {
@Test
fun should_create_sonar_way_profile() {
val context = Context()
val definition = PlSqlProfile()
definition.define(context)
val profile = context.profile(PlSql.KEY, CheckList.SONAR_WAY_PROFILE)
assertThat(profile).isNotNull
val activeRules = profile.rules()
assertThat(activeRules.size).isGreaterThan(40)
}
}
================================================
FILE: sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlSquidSensorTest.kt
================================================
/**
* Z PL/SQL Analyzer
* Copyright (C) 2015-2026 Felipe Zorzo
* mailto:felipe AT felipezorzo DOT com DOT br
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.felipebz.zpa
import org.assertj.core.api
Showing preview only (372K chars total). Download the full file or copy to clipboard to get everything.
gitextract_qvtk4j1w/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── renovate.json │ └── workflows/ │ └── build.yml ├── .gitignore ├── .gitmodules ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── LICENSE_HEADER ├── README.md ├── build-logic/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ └── com/ │ └── felipebz/ │ └── zpa/ │ ├── build-conventions.gradle.kts │ ├── jreleaser-conventions.gradle.kts │ ├── kotlin-conventions.gradle.kts │ ├── license-conventions.gradle.kts │ ├── publishing-conventions.gradle.kts │ ├── sonarqube-conventions.gradle.kts │ └── testing-conventions.gradle.kts ├── build.gradle.kts ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── plsql-custom-rules/ │ ├── README.md │ ├── build.gradle.kts │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── pom.xml │ ├── settings.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── company/ │ │ │ └── plsql/ │ │ │ ├── ForbiddenDmlCheck.java │ │ │ ├── PlSqlCustomRulesDefinition.java │ │ │ └── PlSqlCustomRulesPlugin.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── extensions.idx │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── company/ │ │ └── plsql/ │ │ ├── ForbiddenDmlCheckTest.java │ │ ├── PlSqlCustomRulesDefinitionTest.java │ │ └── PlSqlCustomRulesPluginTest.java │ └── resources/ │ └── forbidden-dml.sql ├── settings.gradle.kts ├── sonar-zpa-plugin/ │ ├── build.gradle.kts │ └── src/ │ ├── integrationTest/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── felipebz/ │ │ │ └── zpa/ │ │ │ └── it/ │ │ │ ├── IssueTest.kt │ │ │ ├── MetricsTest.kt │ │ │ └── Tests.kt │ │ └── resources/ │ │ ├── com/ │ │ │ └── felipebz/ │ │ │ └── zpa/ │ │ │ └── it/ │ │ │ ├── empty-profile.xml │ │ │ └── it-profile.xml │ │ └── projects/ │ │ └── metrics/ │ │ ├── coverage.xml │ │ ├── src/ │ │ │ ├── betwnstr.sql │ │ │ ├── custom_rule.sql │ │ │ ├── source1.sql │ │ │ └── source2.sql │ │ ├── test/ │ │ │ └── test_betwnstr.sql │ │ └── test_results.xml │ ├── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── felipebz/ │ │ └── zpa/ │ │ ├── PlSql.kt │ │ ├── PlSqlPlugin.kt │ │ ├── PlSqlProfile.kt │ │ ├── PlSqlRuleRepository.kt │ │ ├── PlSqlSquidSensor.kt │ │ ├── SonarQubeUtils.kt │ │ ├── api/ │ │ │ └── CustomPlSqlRulesDefinition.kt │ │ ├── highlight/ │ │ │ └── PlSqlHighlighterVisitor.kt │ │ ├── log/ │ │ │ ├── SonarQubeLogger.kt │ │ │ └── SonarQubeLoggers.kt │ │ ├── metrics/ │ │ │ └── CpdVisitor.kt │ │ ├── rules/ │ │ │ ├── SonarQubeActiveRuleAdapter.kt │ │ │ ├── SonarQubeActiveRulesAdapter.kt │ │ │ ├── SonarQubeRepositoryAdapter.kt │ │ │ ├── SonarQubeRuleAdapter.kt │ │ │ ├── SonarQubeRuleKeyAdapter.kt │ │ │ ├── SonarQubeRuleMetadataLoader.kt │ │ │ └── SonarQubeRuleParamAdapter.kt │ │ ├── squid/ │ │ │ ├── PlSqlAstScanner.kt │ │ │ └── SonarQubePlSqlFile.kt │ │ ├── symbols/ │ │ │ ├── MappedObject.kt │ │ │ ├── ObjectLocator.kt │ │ │ └── SonarQubeSymbolTable.kt │ │ └── utplsql/ │ │ ├── AbstractReportImporter.kt │ │ ├── CoverageReport.kt │ │ ├── CoverageResultImporter.kt │ │ ├── TestExecutionReport.kt │ │ ├── TestResultImporter.kt │ │ └── UtPlSqlSensor.kt │ └── test/ │ ├── kotlin/ │ │ └── com/ │ │ └── felipebz/ │ │ └── zpa/ │ │ ├── CustomAnnotationBasedRulesDefinitionTest.kt │ │ ├── PlSqlChecksTest.kt │ │ ├── PlSqlPluginTest.kt │ │ ├── PlSqlProfileTest.kt │ │ ├── PlSqlSquidSensorTest.kt │ │ ├── PlSqlTest.kt │ │ ├── api/ │ │ │ └── CustomPlSqlRulesDefinitionTest.kt │ │ ├── highlight/ │ │ │ └── PlSqlHighlighterVisitorTest.kt │ │ ├── metrics/ │ │ │ └── CpdVisitorTest.kt │ │ ├── symbols/ │ │ │ └── SonarQubeSymbolTableTest.kt │ │ └── utplsql/ │ │ └── UtPlSqlSensorTest.kt │ └── resources/ │ ├── com/ │ │ └── felipebz/ │ │ └── zpa/ │ │ ├── code.sql │ │ ├── test.sql │ │ └── utplsql/ │ │ ├── award_bonus.sql │ │ ├── betwnstr.sql │ │ ├── coverage-report-all-uncovered.xml │ │ ├── coverage-report-with-paths.xml │ │ ├── coverage-report-without-paths.xml │ │ ├── test-report-with-paths.xml │ │ └── test-report-without-paths.xml │ ├── highlight/ │ │ └── highlight.sql │ ├── metrics/ │ │ └── cpd.sql │ └── org/ │ └── sonar/ │ └── l10n/ │ ├── languageKey/ │ │ └── rules/ │ │ ├── plsql/ │ │ │ └── ruleWithExternalInfo.html │ │ └── repoKey/ │ │ └── ruleWithExternalInfo.html │ ├── languageKey.properties │ └── languageWithoutBundle/ │ └── empty.txt ├── template/ │ └── changelog.tpl ├── zpa-checks/ │ ├── build.gradle.kts │ └── src/ │ ├── integrationTest/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── felipebz/ │ │ │ └── zpa/ │ │ │ └── it/ │ │ │ ├── InputFile.kt │ │ │ ├── OracleDocsExtractor.kt │ │ │ └── PlSqlRulingTest.kt │ │ └── resources/ │ │ ├── expected/ │ │ │ ├── alexandria-plsql-utils/ │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── CollapsibleIfStatementsCheck.json │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── ComparisonWithBooleanCheck.json │ │ │ │ ├── ComparisonWithNullCheck.json │ │ │ │ ├── ConcatenationWithNullCheck.json │ │ │ │ ├── DbmsOutputPutCheck.json │ │ │ │ ├── DeadCodeCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── FunctionWithOutParameterCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ │ ├── NvlWithNullParameterCheck.json │ │ │ │ ├── ParsingErrorCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── SelectAllColumnsCheck.json │ │ │ │ ├── UnnecessaryAliasInQueryCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnnecessaryNullStatementCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── UselessParenthesisCheck.json │ │ │ │ ├── VariableHidingCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ ├── antlr-grammars-v4/ │ │ │ │ ├── AddParenthesesInNestedExpressionCheck.json │ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── CursorBodyInPackageSpecCheck.json │ │ │ │ ├── DbmsOutputPutCheck.json │ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── IdenticalExpressionCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ │ ├── ParsingErrorCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── SelectAllColumnsCheck.json │ │ │ │ ├── ToDateWithoutFormatCheck.json │ │ │ │ ├── UnnecessaryAliasInQueryCheck.json │ │ │ │ ├── UnnecessaryLikeCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ └── UselessParenthesisCheck.json │ │ │ ├── demo0001/ │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── InvalidReferenceToObjectCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ ├── demo0002/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0002_2/ │ │ │ │ └── EmptyBlockCheck.json │ │ │ ├── demo0003/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0004/ │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── RaiseStandardExceptionCheck.json │ │ │ │ ├── ReturnOfBooleanExpressionCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0005/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ └── InvalidReferenceToObjectCheck.json │ │ │ ├── demo0006/ │ │ │ │ └── QueryWithoutExceptionHandlingCheck.json │ │ │ ├── demo0007/ │ │ │ │ └── InequalityUsageCheck.json │ │ │ ├── demo0008/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── InvalidReferenceToObjectCheck.json │ │ │ │ └── UnusedVariableCheck.json │ │ │ ├── demo0009/ │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── CollapsibleIfStatementsCheck.json │ │ │ │ ├── DeadCodeCheck.json │ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── VariableHidingCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ ├── demo0010/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0011/ │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── InvalidReferenceToObjectCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ ├── demo0012/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0013/ │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ ├── VariableInitializationWithNullCheck.json │ │ │ │ └── VariableNameCheck.json │ │ │ ├── demo0014/ │ │ │ │ ├── SameBranchCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0016/ │ │ │ │ ├── DeclareSectionWithoutDeclarationsCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── InvalidReferenceToObjectCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ └── VariableInitializationWithFunctionCallCheck.json │ │ │ ├── demo0017/ │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── CollapsibleIfStatementsCheck.json │ │ │ │ ├── DuplicatedValueInInCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── InvalidReferenceToObjectCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ └── UnusedVariableCheck.json │ │ │ ├── demo0018/ │ │ │ │ └── InvalidReferenceToObjectCheck.json │ │ │ ├── oracle-database_23/ │ │ │ │ ├── AddParenthesesInNestedExpressionCheck.json │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── ComparisonWithBooleanCheck.json │ │ │ │ ├── ComparisonWithNullCheck.json │ │ │ │ ├── ConcatenationWithNullCheck.json │ │ │ │ ├── CursorBodyInPackageSpecCheck.json │ │ │ │ ├── DbmsOutputPutCheck.json │ │ │ │ ├── DeadCodeCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── FunctionWithOutParameterCheck.json │ │ │ │ ├── IdenticalExpressionCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ │ ├── ParsingErrorCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── RaiseStandardExceptionCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── SameConditionCheck.json │ │ │ │ ├── SelectAllColumnsCheck.json │ │ │ │ ├── SelectWithRownumAndOrderByCheck.json │ │ │ │ ├── ToDateWithoutFormatCheck.json │ │ │ │ ├── UnhandledUserDefinedExceptionCheck.json │ │ │ │ ├── UnnecessaryAliasInQueryCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnnecessaryLikeCheck.json │ │ │ │ ├── UnusedCursorCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── VariableHidingCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ ├── VariableInitializationWithNullCheck.json │ │ │ │ └── VariableNameCheck.json │ │ │ ├── pljson/ │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── CollapsibleIfStatementsCheck.json │ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── ComparisonWithBooleanCheck.json │ │ │ │ ├── ComparisonWithNullCheck.json │ │ │ │ ├── DbmsOutputPutCheck.json │ │ │ │ ├── DeadCodeCheck.json │ │ │ │ ├── EmptyStringAssignmentCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── FunctionWithOutParameterCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── ReturnOfBooleanExpressionCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── SelectAllColumnsCheck.json │ │ │ │ ├── ToDateWithoutFormatCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── VariableHidingCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ ├── utPLSQL2/ │ │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ │ ├── ColumnsShouldHaveTableNameCheck.json │ │ │ │ ├── CommitRollbackCheck.json │ │ │ │ ├── CursorBodyInPackageSpecCheck.json │ │ │ │ ├── DbmsOutputPutCheck.json │ │ │ │ ├── DeadCodeCheck.json │ │ │ │ ├── EmptyBlockCheck.json │ │ │ │ ├── ExplicitInParameterCheck.json │ │ │ │ ├── FunctionWithOutParameterCheck.json │ │ │ │ ├── IfWithExitCheck.json │ │ │ │ ├── InequalityUsageCheck.json │ │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ │ ├── ParsingErrorCheck.json │ │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ │ ├── RaiseStandardExceptionCheck.json │ │ │ │ ├── SameBranchCheck.json │ │ │ │ ├── SelectAllColumnsCheck.json │ │ │ │ ├── UnhandledUserDefinedExceptionCheck.json │ │ │ │ ├── UnnecessaryAliasInQueryCheck.json │ │ │ │ ├── UnnecessaryElseCheck.json │ │ │ │ ├── UnnecessaryNullStatementCheck.json │ │ │ │ ├── UnusedParameterCheck.json │ │ │ │ ├── UnusedVariableCheck.json │ │ │ │ ├── VariableHidingCheck.json │ │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ │ └── VariableInitializationWithNullCheck.json │ │ │ └── utPLSQL3/ │ │ │ ├── AddParenthesesInNestedExpressionCheck.json │ │ │ ├── CharacterDatatypeUsageCheck.json │ │ │ ├── CommitRollbackCheck.json │ │ │ ├── ComparisonWithBooleanCheck.json │ │ │ ├── ComparisonWithNullCheck.json │ │ │ ├── ConcatenationWithNullCheck.json │ │ │ ├── DbmsOutputPutCheck.json │ │ │ ├── EmptyBlockCheck.json │ │ │ ├── ExplicitInParameterCheck.json │ │ │ ├── FunctionWithOutParameterCheck.json │ │ │ ├── IdenticalExpressionCheck.json │ │ │ ├── InequalityUsageCheck.json │ │ │ ├── InsertWithoutColumnsCheck.json │ │ │ ├── ParsingErrorCheck.json │ │ │ ├── QueryWithoutExceptionHandlingCheck.json │ │ │ ├── RaiseStandardExceptionCheck.json │ │ │ ├── SameBranchCheck.json │ │ │ ├── SelectAllColumnsCheck.json │ │ │ ├── ToDateWithoutFormatCheck.json │ │ │ ├── UnhandledUserDefinedExceptionCheck.json │ │ │ ├── UnnecessaryAliasInQueryCheck.json │ │ │ ├── UnnecessaryElseCheck.json │ │ │ ├── UnnecessaryLikeCheck.json │ │ │ ├── UnnecessaryNullStatementCheck.json │ │ │ ├── UnusedParameterCheck.json │ │ │ ├── UnusedVariableCheck.json │ │ │ ├── VariableHidingCheck.json │ │ │ ├── VariableInitializationWithFunctionCallCheck.json │ │ │ └── VariableInitializationWithNullCheck.json │ │ └── sources/ │ │ ├── Doag-Forms-extracted/ │ │ │ ├── README.md │ │ │ ├── demo0001/ │ │ │ │ └── WEBUTIL_DEMO/ │ │ │ │ ├── ABOUT/ │ │ │ │ │ └── ABOUT__ABOUT_BUTTON__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── BROWSER/ │ │ │ │ │ ├── BROWSER__APPLET_PARAMS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BROWSER__BROWSER_MESSAGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── BROWSER__SEPARATE_FRAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── BUILTINS/ │ │ │ │ │ ├── BUILTINS__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BUILTINS__GET_TOOL_ENV__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BUILTINS__READ_IMAGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── BUILTINS__TEXT_IO_BUTTON__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CLIENTINFO/ │ │ │ │ │ └── CLIENTINFO__ACTION__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CLIENT_GETENV.pcd │ │ │ │ ├── CLIENT_READIMAGE.pcd │ │ │ │ ├── CLIENT_TEXTIO.pcd │ │ │ │ ├── CTL/ │ │ │ │ │ ├── CTL__ACKNOWLEDGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT10__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT1__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT2__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT3__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT4__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT5__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT6__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT7__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT8__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── CTL__EXIT9__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── C_API/ │ │ │ │ │ ├── C_API__CALL_C_API__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── C_API__LOCKSTATION__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── DOWNLOAD/ │ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_AS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_DB__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── DOWNLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── DOWNLOAD_AS.pcd │ │ │ │ ├── DOWNLOAD_DB.pcd │ │ │ │ ├── FILES/ │ │ │ │ │ ├── FILES__COPY_FILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__DELETE_FILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_INFO__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_OPEN__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_SAVE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__LIST_DIRS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── FILES__LIST_FILES__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── FILES_WBP.pcd │ │ │ │ ├── F_GET_TIMER_VALUE.fun │ │ │ │ ├── GET_APPLET_PARAMETERS.pcd │ │ │ │ ├── GET_CLIENTINFO.pcd │ │ │ │ ├── GET_CLIENT_FILENAME.pcd │ │ │ │ ├── HOST/ │ │ │ │ │ ├── HOST__HOST_CALLBACK.tgg │ │ │ │ │ └── HOST__RUN_HOST__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── SEPARATE_FRAME_OPTIONS.pcd │ │ │ │ ├── SET_BROWSER_MESSAGE.pcd │ │ │ │ ├── UPLOAD/ │ │ │ │ │ ├── UPLOAD__CREATE_TABLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── UPLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── UPLOAD__UPLOAD_AS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── UPLOAD__UPLOAD_DB__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── UPLOAD_AS.pcd │ │ │ │ ├── UPLOAD_DB.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ ├── WEBUTIL_DEMO/ │ │ │ │ │ ├── PRE-FORM.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── WHEN-TAB-PAGE-CHANGED.tgg │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0002/ │ │ │ │ ├── DEMO0002/ │ │ │ │ │ ├── BL_EMPLOYEES.pkb │ │ │ │ │ ├── BL_EMPLOYEES.pks │ │ │ │ │ ├── BL_MAINBLOCK.pkb │ │ │ │ │ ├── BL_MAINBLOCK.pks │ │ │ │ │ ├── CONST_LOCAL.pks │ │ │ │ │ ├── CONTROL/ │ │ │ │ │ │ ├── CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ │ └── CONTROL__BT_WIKI__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── DEMO0002/ │ │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ │ ├── EMPLOYEES/ │ │ │ │ │ │ └── EMPLOYEES__PRE-QUERY.tgg │ │ │ │ │ ├── FILTER/ │ │ │ │ │ │ ├── FILTER__BT_QUERY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ │ └── FILTER__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── VERSION_FRW_FORMS.fun │ │ │ │ │ ├── WHEN_TIMER_EXPIRED.pcd │ │ │ │ │ ├── WNB.pcd │ │ │ │ │ ├── WNF.pcd │ │ │ │ │ ├── WNI.pcd │ │ │ │ │ ├── WNR.pcd │ │ │ │ │ └── metadata.json │ │ │ │ └── FRW_REF/ │ │ │ │ ├── FRW_REF/ │ │ │ │ │ ├── ON-ERROR.tgg │ │ │ │ │ ├── WHEN-NEW-BLOCK-INSTANCE.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ └── WHEN-NEW-RECORD-INSTANCE.tgg │ │ │ │ ├── WNB.pcd │ │ │ │ ├── WNF.pcd │ │ │ │ ├── WNI.pcd │ │ │ │ ├── WNR.pcd │ │ │ │ └── metadata.json │ │ │ ├── demo0003/ │ │ │ │ └── DEMO0003/ │ │ │ │ ├── BL_MAINBLOCK.pkb │ │ │ │ ├── BL_MAINBLOCK.pks │ │ │ │ ├── CONST_LOCAL.pks │ │ │ │ ├── CONTROL/ │ │ │ │ │ ├── CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__BT_ONE_TIME_TIMER__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__BT_UNDO__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__BT_WIKI__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── CONTROL__BT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── DEMO0003/ │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ ├── EMPLOYEES_CONTROL/ │ │ │ │ │ ├── EMPLOYEES_CONTROL__BT_UNDO__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── EMPLOYEES_CONTROL__ITEM47__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── EMPLOYEES_LI/ │ │ │ │ │ └── EMPLOYEES_LI__PRE-QUERY.tgg │ │ │ │ ├── EMPLOYEES_LI_CONTROL/ │ │ │ │ │ └── EMPLOYEES_LI_CONTROL__BT_EXIT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── UNDO.pcd │ │ │ │ ├── VERSION_FRW_FORMS.fun │ │ │ │ ├── WHEN_TIMER_EXPIRED.pcd │ │ │ │ ├── WNB.pcd │ │ │ │ ├── WNF.pcd │ │ │ │ ├── WNI.pcd │ │ │ │ ├── WNR.pcd │ │ │ │ └── metadata.json │ │ │ ├── demo0004/ │ │ │ │ └── RELEASE_LOCKS/ │ │ │ │ ├── ERRORMESSAGE.pcd │ │ │ │ ├── IS_DBA.fun │ │ │ │ ├── KILL_SESSION.pcd │ │ │ │ ├── LOG_SYSTEM_SCHLIESSEN.pcd │ │ │ │ ├── REFRESH.pcd │ │ │ │ ├── RELEASE_LOCKS/ │ │ │ │ │ ├── POST-FORM.tgg │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ ├── STEUERBLOCK/ │ │ │ │ │ ├── STEUERBLOCK__PB_CANCEL__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── STEUERBLOCK__PB_CONNECT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── STEUERBLOCK__PB_EXIT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── STEUERBLOCK__PB_REFRESH__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── V$LOCK/ │ │ │ │ │ └── V$LOCK__POST-QUERY.tgg │ │ │ │ ├── V$SESSION/ │ │ │ │ │ └── V$SESSION__PB_KILL_SESSION__WHEN-BUTTON-PRESSED.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0005/ │ │ │ │ └── TIMEOUTPJC_TEST/ │ │ │ │ ├── PL_RESET_FORMSTIMER_ITEMS.pcd │ │ │ │ ├── PL_START.pcd │ │ │ │ ├── PL_WHEN_CUSTOM_ITEM_EVENT.pcd │ │ │ │ ├── TEST/ │ │ │ │ │ ├── TEST__DEBUG__WHEN-CHECKBOX-CHANGED.tgg │ │ │ │ │ ├── TEST__FORMSTIMER500__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__FORMSTIMER60000__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__FORMS_TIMER1000__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__FORMS_TIMER5000__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__ITEM28__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET1__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET2__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET3__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET4__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET5__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET6__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── TEST__PRESET7__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── TEST__STARTTIMER__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── TIMEOUTPJC_TEST/ │ │ │ │ │ ├── ON-LOGON.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_TIMER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0006/ │ │ │ │ └── TIMEOUT_SYS_CLIENT_IDL/ │ │ │ │ ├── DEMOBLOCK/ │ │ │ │ │ ├── DEMOBLOCK__BUT_CLOSE_FORM__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── DEMOBLOCK__DEMO_1__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── DEMOBLOCK__DEMO_2__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── DEMOBLOCK__DEMO_3__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── F_GET_TIMER_VALUE.fun │ │ │ │ ├── P_CLEAR_DIAGNOSTIC_ITEMS.pcd │ │ │ │ ├── TIMEOUT_SYS_CLIENT_IDL/ │ │ │ │ │ └── PRE-FORM.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0007/ │ │ │ │ └── CD_DEMO_EXCEL/ │ │ │ │ ├── ALL_OBJECTS/ │ │ │ │ │ ├── ALL_OBJECTS__BT_ALL__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── ALL_OBJECTS__BT_PACKAGES__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── ALL_OBJECTS__BT_TABLES__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── ALL_OBJECTS__CALL_EXCEL__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CD_DEMO_EXCEL/ │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg │ │ │ │ ├── P_GET_BLOB.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0008/ │ │ │ │ └── LATENCY_TEST/ │ │ │ │ ├── F_GET_CURRENT_TIME_MS.fun │ │ │ │ ├── LATENCY_TEST/ │ │ │ │ │ ├── ON-LOGON.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ ├── P_DOWNLOAD_DOKUMENT_AS.pcd │ │ │ │ ├── P_WAIT_AND_EXIT.pcd │ │ │ │ ├── P_WHEN_NEW_FORM_INSTANCE.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ ├── WEBUTIL_GET_AS_TMP_DIR.fun │ │ │ │ ├── WEBUTIL_GET_LATENCY.fun │ │ │ │ ├── WEBUTIL_PREPARE_TESTFILE.pcd │ │ │ │ └── metadata.json │ │ │ ├── demo0009/ │ │ │ │ └── FORMSAPI_WIZARD_2905/ │ │ │ │ ├── BLK_HANDLG/ │ │ │ │ │ ├── BLK_HANDLG__BT_CHECK_SINGLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_COMPILE_SINGLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_MIGRATE_SINGLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_SELECT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_CHECK__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_COMPILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__BT_VIEW_MIGRATE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_HANDLG__CBOX_FAM_ACTION__WHEN-LIST-CHANGED.tgg │ │ │ │ │ ├── BLK_HANDLG__CB__WHEN-CHECKBOX-CHANGED.tgg │ │ │ │ │ └── BLK_HANDLG__POST-QUERY.tgg │ │ │ │ ├── CTL_BASIC/ │ │ │ │ │ ├── CTL_BASIC__BT_ALL__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL_BASIC__BT_CHECK__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL_BASIC__BT_COMPILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL_BASIC__BT_CONFIGURE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── CTL_BASIC__BT_MIGRATE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CTL_INIT/ │ │ │ │ │ └── CTL_INIT__BT_CLOSE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── FNC_FILE_EXISTS_HOST.fun │ │ │ │ ├── FNC_GET_FILE_SEPARATOR.fun │ │ │ │ ├── FNC_GET_TIMER_VALUE.fun │ │ │ │ ├── FORMSAPI_WIZARD_2905/ │ │ │ │ │ ├── MODULE_FEATURES.tgg │ │ │ │ │ ├── ON-LOGON.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── WHEN-TIMER-EXPIRED.tgg │ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg │ │ │ │ ├── G.pkb │ │ │ │ ├── G.pks │ │ │ │ ├── PKG_BLK_DATA.pkb │ │ │ │ ├── PKG_BLK_DATA.pks │ │ │ │ ├── PKG_CONFIG.pkb │ │ │ │ ├── PKG_CONFIG.pks │ │ │ │ ├── PKG_FAM_RUN_SCRIPT.pkb │ │ │ │ ├── PKG_FAM_RUN_SCRIPT.pks │ │ │ │ ├── PRC_ABORT.pcd │ │ │ │ ├── PRC_CHECK_FAM.pcd │ │ │ │ ├── PRC_CMD_HOST_CLIENT.pcd │ │ │ │ ├── PRC_CNG_MONTH_TIME.pcd │ │ │ │ ├── PRC_COMPILATION.pcd │ │ │ │ ├── PRC_CONFIGURATION.pcd │ │ │ │ ├── PRC_COPY_FILE.pcd │ │ │ │ ├── PRC_COPY_FILE_HOST.pcd │ │ │ │ ├── PRC_ERROR.pcd │ │ │ │ ├── PRC_EXCEPTION.pcd │ │ │ │ ├── PRC_FILE_MERGE.pcd │ │ │ │ ├── PRC_FILE_MERGE_HOST.pcd │ │ │ │ ├── PRC_FLOG.pcd │ │ │ │ ├── PRC_GET_CHK_REF_INFO.pcd │ │ │ │ ├── PRC_GET_CONNECT_INFO.pcd │ │ │ │ ├── PRC_INFO.pcd │ │ │ │ ├── PRC_MIGRATION.pcd │ │ │ │ ├── PRC_MSG.pcd │ │ │ │ ├── PRC_SET_COMPILE_RESULT.pcd │ │ │ │ ├── PRC_SET_INFOS.pcd │ │ │ │ ├── PRC_SET_MIGRATE_RESULT.pcd │ │ │ │ ├── PRC_SET_STATISTIK.pcd │ │ │ │ ├── PRC_SET_STATISTIK_SINGLE.pcd │ │ │ │ ├── PRC_SET_USERHOME.pcd │ │ │ │ ├── PRC_SHOW_DURATION.pcd │ │ │ │ ├── PRC_SHOW_INIT.pcd │ │ │ │ ├── PRC_VIEW_FILE.pcd │ │ │ │ ├── PRC_WRITE_SCRIPT.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0010/ │ │ │ │ └── CHK_MYFFI_SAMPLE5/ │ │ │ │ ├── BLK/ │ │ │ │ │ ├── BLK__PB_WEB_FFI__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── BLK__URL__WHEN-MOUSE-CLICK.tgg │ │ │ │ ├── CHK_MYFFI_SAMPLE5/ │ │ │ │ │ └── ON-LOGON.tgg │ │ │ │ ├── FNC_BOOL.fun │ │ │ │ ├── PRC_SHOW.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0011/ │ │ │ │ └── WEBUTIL_DEMO/ │ │ │ │ ├── ABOUT/ │ │ │ │ │ └── ABOUT__ABOUT_BUTTON__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── BROWSER/ │ │ │ │ │ ├── BROWSER__APPLET_PARAMS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BROWSER__BROWSER_MESSAGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── BROWSER__SEPARATE_FRAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── BUILTINS/ │ │ │ │ │ ├── BUILTINS__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BUILTINS__GET_TOOL_ENV__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BUILTINS__READ_IMAGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── BUILTINS__TEXT_IO_BUTTON__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CLIENTINFO/ │ │ │ │ │ └── CLIENTINFO__ACTION__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── CLIENT_GETENV.pcd │ │ │ │ ├── CLIENT_READIMAGE.pcd │ │ │ │ ├── CLIENT_TEXTIO.pcd │ │ │ │ ├── CTL/ │ │ │ │ │ ├── CTL__ACKNOWLEDGE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT10__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT1__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT2__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT3__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT4__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT5__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT6__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT7__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CTL__EXIT8__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── CTL__EXIT9__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── C_API/ │ │ │ │ │ ├── C_API__CALL_C_API__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── C_API__LOCKSTATION__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── DOWNLOAD/ │ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_AS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── DOWNLOAD__DOWNLOAD_DB__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── DOWNLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── DOWNLOAD_AS.pcd │ │ │ │ ├── DOWNLOAD_DB.pcd │ │ │ │ ├── FILES/ │ │ │ │ │ ├── FILES__COPY_FILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__DELETE_FILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_INFO__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_OPEN__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__FILE_SAVE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── FILES__LIST_DIRS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── FILES__LIST_FILES__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── FILES_WBP.pcd │ │ │ │ ├── GET_APPLET_PARAMETERS.pcd │ │ │ │ ├── GET_CLIENTINFO.pcd │ │ │ │ ├── GET_CLIENT_FILENAME.pcd │ │ │ │ ├── HOST/ │ │ │ │ │ ├── HOST__HOST_CALLBACK.tgg │ │ │ │ │ └── HOST__RUN_HOST__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── OLE/ │ │ │ │ │ ├── OLE__SAVEFILE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── OLE__WRITE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── OLE_WRITE.pcd │ │ │ │ ├── SEPARATE_FRAME_OPTIONS.pcd │ │ │ │ ├── SET_BROWSER_MESSAGE.pcd │ │ │ │ ├── UPLOAD/ │ │ │ │ │ ├── UPLOAD__CREATE_TABLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── UPLOAD__GET_FILE_NAME__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── UPLOAD__UPLOAD_AS__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── UPLOAD__UPLOAD_DB__WHEN-BUTTON-PRESSED.tgg │ │ │ │ ├── UPLOAD_AS.pcd │ │ │ │ ├── UPLOAD_DB.pcd │ │ │ │ ├── WEBUTIL/ │ │ │ │ │ ├── WEBUTIL__DUMMY__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_BROWSER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_CLIENTINFO_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_C_API_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILETRANSFER_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_FILE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_HOST_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── WEBUTIL__WEBUTIL_OLE_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ └── WEBUTIL__WEBUTIL_SESSION_FUNCTIONS__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ ├── WEBUTIL_DEMO/ │ │ │ │ │ ├── KEY-EXIT.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── WHEN-TAB-PAGE-CHANGED.tgg │ │ │ │ │ ├── WHEN-TIMER-EXPIRED.tgg │ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0012/ │ │ │ │ └── PDFVIEWER/ │ │ │ │ ├── PDFVIEWER/ │ │ │ │ │ ├── ON-LOGON.tgg │ │ │ │ │ ├── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ └── metadata.json │ │ │ ├── demo0013/ │ │ │ │ └── COLOR_SLIDER/ │ │ │ │ ├── BL1/ │ │ │ │ │ ├── BL1__B__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── BL1__G__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── BL1__R__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── BL1__VB__POST-TEXT-ITEM.tgg │ │ │ │ │ ├── BL1__VG__POST-TEXT-ITEM.tgg │ │ │ │ │ └── BL1__VR__POST-TEXT-ITEM.tgg │ │ │ │ ├── COLOR_SLIDER/ │ │ │ │ │ ├── ON-LOGON.tgg │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ ├── PKG_SLIDER.pkb │ │ │ │ ├── PKG_SLIDER.pks │ │ │ │ └── metadata.json │ │ │ ├── demo0014/ │ │ │ │ ├── ACCORDION/ │ │ │ │ │ ├── ACCORDION/ │ │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ │ ├── B/ │ │ │ │ │ │ ├── B__B2__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ │ ├── B__B3__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ │ ├── B__B4__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ │ └── B__B__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BL_TREE/ │ │ │ │ │ │ ├── BL_TREE__IT_TREE__WHEN-TREE-NODE-EXPANDED.tgg │ │ │ │ │ │ └── BL_TREE__IT_TREE__WHEN-TREE-NODE-SELECTED.tgg │ │ │ │ │ ├── DEPARTMENTS/ │ │ │ │ │ │ └── DEPARTMENTS__WHEN-NEW-RECORD-INSTANCE.tgg │ │ │ │ │ ├── OTHRS/ │ │ │ │ │ │ └── OTHRS__EMAIL__WHEN-CHECKBOX-CHANGED.tgg │ │ │ │ │ ├── PK_ACCORDION.pkb │ │ │ │ │ ├── PK_ACCORDION.pks │ │ │ │ │ ├── PK_TREE.pkb │ │ │ │ │ ├── PK_TREE.pks │ │ │ │ │ ├── PR_INIT_BY_DEPT.pcd │ │ │ │ │ ├── PR_INIT_BY_OTHERS.pcd │ │ │ │ │ ├── PR_INIT_BY_SAL.pcd │ │ │ │ │ ├── PR_INIT_BY_TREE.pcd │ │ │ │ │ ├── SAL/ │ │ │ │ │ │ └── SAL__SAL__WHEN-RADIO-CHANGED.tgg │ │ │ │ │ └── metadata.json │ │ │ │ └── ACCORDION2/ │ │ │ │ ├── ACCORDION2/ │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ ├── PK_ACCORDION.pkb │ │ │ │ ├── PK_ACCORDION.pks │ │ │ │ └── metadata.json │ │ │ ├── demo0015/ │ │ │ │ └── MODERNIZE/ │ │ │ │ ├── CONTROL/ │ │ │ │ │ ├── CONTROL__CHECK_BOX_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__ERROR_STACK__WHEN-CUSTOM-ITEM-EVENT.tgg │ │ │ │ │ ├── CONTROL__RADIO_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__SHOW_ERROR__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__SHOW_INFO__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__SHOW_WARNING__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__TEXT_FIELD_BACK_COLOR__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── CONTROL__TEXT_FIELD_ENABLE__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ └── CONTROL__WHEN-NEW-RECORD-INSTANCE.tgg │ │ │ │ ├── MODERNIZE/ │ │ │ │ │ └── WHEN-WINDOW-CLOSED.tgg │ │ │ │ ├── RecordGroups/ │ │ │ │ │ └── LOV9.sql │ │ │ │ └── metadata.json │ │ │ ├── demo0016/ │ │ │ │ └── CHK_CBOX3/ │ │ │ │ ├── C/ │ │ │ │ │ ├── C__CBOX__KEY-NEXT-ITEM.tgg │ │ │ │ │ ├── C__CBOX__POST-CHANGE.tgg │ │ │ │ │ ├── C__CBOX__WHEN-LIST-CHANGED.tgg │ │ │ │ │ ├── C__DUMMY__KEY-NEXT-ITEM.tgg │ │ │ │ │ └── C__DUMMY__KEY-PREV-ITEM.tgg │ │ │ │ ├── CBX/ │ │ │ │ │ ├── CBX__LABEL__KEY-NEXT-ITEM.tgg │ │ │ │ │ ├── CBX__LABEL__KEY-PREV-ITEM.tgg │ │ │ │ │ ├── CBX__LABEL__WHEN-MOUSE-CLICK.tgg │ │ │ │ │ └── CBX__ON-ERROR.tgg │ │ │ │ ├── CHK_CBOX3/ │ │ │ │ │ ├── WHEN-NEW-BLOCK-INSTANCE.tgg │ │ │ │ │ └── WHEN-TIMER-EXPIRED.tgg │ │ │ │ ├── PKG_CBOX.pkb │ │ │ │ ├── PKG_CBOX.pks │ │ │ │ └── metadata.json │ │ │ ├── demo0017/ │ │ │ │ └── POC_ACCOUNT/ │ │ │ │ ├── BLK_ACCOUNT/ │ │ │ │ │ ├── BLK_ACCOUNT__ANSWER__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__ANSWER__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__BT_COMMIT__WHEN-BUTTON-PRESSED.tgg │ │ │ │ │ ├── BLK_ACCOUNT__CLOSE__WHEN-MOUSE-CLICK.tgg │ │ │ │ │ ├── BLK_ACCOUNT__EMAIL2__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__EMAIL2__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__EMAIL__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__EMAIL__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__FULLNAME__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__FULLNAME__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD_RETRY__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD_RETRY__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__PASSWORD__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__QUERY__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ ├── BLK_ACCOUNT__QUERY__WHEN-VALIDATE-ITEM.tgg │ │ │ │ │ ├── BLK_ACCOUNT__START_DEMO__WHEN-MOUSE-CLICK.tgg │ │ │ │ │ ├── BLK_ACCOUNT__USERNAME__WHEN-NEW-ITEM-INSTANCE.tgg │ │ │ │ │ └── BLK_ACCOUNT__USERNAME__WHEN-VALIDATE-ITEM.tgg │ │ │ │ ├── FNC_MSG_QUERY.fun │ │ │ │ ├── FNC_VALIDATE.fun │ │ │ │ ├── PKG_ITEM.pkb │ │ │ │ ├── PKG_ITEM.pks │ │ │ │ ├── POC_ACCOUNT/ │ │ │ │ │ ├── KEY-EXIT.tgg │ │ │ │ │ ├── ON-ERROR.tgg │ │ │ │ │ ├── ON-MESSAGE.tgg │ │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ │ ├── POP_CHECK/ │ │ │ │ │ └── CHECK_ALL/ │ │ │ │ │ └── POP_CHECK__CHECK_ALL.sql │ │ │ │ ├── PRC_CHK_ITEM_SEQUENCE.pcd │ │ │ │ ├── PRC_INFO.pcd │ │ │ │ ├── PRC_SET_ITEMS.pcd │ │ │ │ ├── V#R#FY_PW$001.fun │ │ │ │ └── metadata.json │ │ │ └── demo0018/ │ │ │ └── TEST/ │ │ │ ├── TEST/ │ │ │ │ ├── TEST__BUTTON1__WHEN-BUTTON-PRESSED.tgg │ │ │ │ └── WHEN-NEW-FORM-INSTANCE.tgg │ │ │ └── metadata.json │ │ ├── antlr-grammars-v4/ │ │ │ ├── README.md │ │ │ ├── examples/ │ │ │ │ ├── administer_key_management.sql │ │ │ │ ├── aggregate_functions.sql │ │ │ │ ├── alter_analytic_view.sql │ │ │ │ ├── alter_attribute_dimension.sql │ │ │ │ ├── alter_audit_policy.sql │ │ │ │ ├── alter_database.sql │ │ │ │ ├── alter_dimension.sql │ │ │ │ ├── alter_diskgroup.sql │ │ │ │ ├── alter_flashback_archive.sql │ │ │ │ ├── alter_function.sql │ │ │ │ ├── alter_hierarchy.sql │ │ │ │ ├── alter_inmemory_join_group.sql │ │ │ │ ├── alter_java.sql │ │ │ │ ├── alter_library.sql │ │ │ │ ├── alter_lockdown_profile.sql │ │ │ │ ├── alter_materialized_zonemap.sql │ │ │ │ ├── alter_mv.sql │ │ │ │ ├── alter_mv_log.sql │ │ │ │ ├── alter_operator.sql │ │ │ │ ├── alter_outline.sql │ │ │ │ ├── alter_pmem_filestore.sql │ │ │ │ ├── alter_resource_cost.sql │ │ │ │ ├── alter_role.sql │ │ │ │ ├── alter_rollback_segment.sql │ │ │ │ ├── alter_session.sql │ │ │ │ ├── alter_synonym01.sql │ │ │ │ ├── alter_table.sql │ │ │ │ ├── alter_table_inmemory.sql │ │ │ │ ├── alter_table_modify_partition_by_range.sql │ │ │ │ ├── alter_table_modify_partition_shrink.sql │ │ │ │ ├── alter_tablespace_set.sql │ │ │ │ ├── alter_tablespaces.sql │ │ │ │ ├── alter_view.sql │ │ │ │ ├── analytic_query.sql │ │ │ │ ├── analyze.sql │ │ │ │ ├── associate_statistics.sql │ │ │ │ ├── audit.sql │ │ │ │ ├── bindvar01.sql │ │ │ │ ├── bindvar02.sql │ │ │ │ ├── bindvar03.sql │ │ │ │ ├── bindvar04.sql │ │ │ │ ├── bindvar05.sql │ │ │ │ ├── block01.sql │ │ │ │ ├── block02.sql │ │ │ │ ├── bulk_collect_fetch_clause01.sql │ │ │ │ ├── call.sql │ │ │ │ ├── case_when01.sql │ │ │ │ ├── case_when02.sql │ │ │ │ ├── case_when03.sql │ │ │ │ ├── case_when04.sql │ │ │ │ ├── case_when05.sql │ │ │ │ ├── case_when06.sql │ │ │ │ ├── case_when07.sql │ │ │ │ ├── case_when08.sql │ │ │ │ ├── cast.sql │ │ │ │ ├── cast_multiset01.sql │ │ │ │ ├── cast_multiset02.sql │ │ │ │ ├── cast_multiset03.sql │ │ │ │ ├── cast_multiset04.sql │ │ │ │ ├── cast_multiset05.sql │ │ │ │ ├── cast_multiset06.sql │ │ │ │ ├── cast_multiset08.sql │ │ │ │ ├── cluster.sql │ │ │ │ ├── collection_method_invocation.sql │ │ │ │ ├── columns01.sql │ │ │ │ ├── comment_on.sql │ │ │ │ ├── comments.sql │ │ │ │ ├── commit.sql │ │ │ │ ├── concatenation-double_asterisk.sql │ │ │ │ ├── concatenation-mod.sql │ │ │ │ ├── condition01.sql │ │ │ │ ├── condition02.sql │ │ │ │ ├── condition03.sql │ │ │ │ ├── condition04.sql │ │ │ │ ├── condition05.sql │ │ │ │ ├── condition06.sql │ │ │ │ ├── condition07.sql │ │ │ │ ├── condition08.sql │ │ │ │ ├── condition09.sql │ │ │ │ ├── condition10.sql │ │ │ │ ├── condition11.sql │ │ │ │ ├── condition12.sql │ │ │ │ ├── condition14.sql │ │ │ │ ├── condition15.sql │ │ │ │ ├── condition16.sql │ │ │ │ ├── connect_by01.sql │ │ │ │ ├── connect_by02.sql │ │ │ │ ├── connect_by03.sql │ │ │ │ ├── connect_by04.sql │ │ │ │ ├── connect_by05.sql │ │ │ │ ├── context.sql │ │ │ │ ├── create_analytic_view.sql │ │ │ │ ├── create_attribute_dimension.sql │ │ │ │ ├── create_audit_policy.sql │ │ │ │ ├── create_controlfile.sql │ │ │ │ ├── create_database.sql │ │ │ │ ├── create_dimension.sql │ │ │ │ ├── create_directory.sql │ │ │ │ ├── create_diskgroup.sql │ │ │ │ ├── create_edition.sql │ │ │ │ ├── create_flashback_archive.sql │ │ │ │ ├── create_function01.sql │ │ │ │ ├── create_function02.sql │ │ │ │ ├── create_function03.sql │ │ │ │ ├── create_function04.sql │ │ │ │ ├── create_function05.sql │ │ │ │ ├── create_function06.sql │ │ │ │ ├── create_hierarchy.sql │ │ │ │ ├── create_index.sql │ │ │ │ ├── create_inmemory_join_group.sql │ │ │ │ ├── create_java.sql │ │ │ │ ├── create_library.sql │ │ │ │ ├── create_lockdown_profile.sql │ │ │ │ ├── create_materialized_zonemap.sql │ │ │ │ ├── create_operator.sql │ │ │ │ ├── create_outline.sql │ │ │ │ ├── create_package.sql.tree │ │ │ │ ├── create_package01.sql │ │ │ │ ├── create_package02.sql │ │ │ │ ├── create_package03.sql │ │ │ │ ├── create_package04.sql │ │ │ │ ├── create_package05.sql │ │ │ │ ├── create_pmem_filestore.sql │ │ │ │ ├── create_procedure01.sql │ │ │ │ ├── create_procedure01.sql.tree │ │ │ │ ├── create_procedure02.sql │ │ │ │ ├── create_procedure03.sql │ │ │ │ ├── create_profile.sql │ │ │ │ ├── create_restore_point.sql │ │ │ │ ├── create_role.sql │ │ │ │ ├── create_rollback_segment.sql │ │ │ │ ├── create_spfile.sql │ │ │ │ ├── create_synonym01.sql │ │ │ │ ├── create_synonym02.sql │ │ │ │ ├── create_synonym03.sql │ │ │ │ ├── create_table.sql │ │ │ │ ├── create_tablespace.sql │ │ │ │ ├── create_tablespace_set.sql │ │ │ │ ├── create_trigger01.sql │ │ │ │ ├── create_trigger02.sql │ │ │ │ ├── create_type.sql │ │ │ │ ├── create_view.sql │ │ │ │ ├── ctas.sql │ │ │ │ ├── datetime01.sql │ │ │ │ ├── datetime03.sql │ │ │ │ ├── datetime04.sql │ │ │ │ ├── datetime05.sql │ │ │ │ ├── dblink.sql │ │ │ │ ├── dblink01.sql │ │ │ │ ├── directory.sql │ │ │ │ ├── disassociate_statistics.sql │ │ │ │ ├── drop_analytic_view.sql │ │ │ │ ├── drop_attribute_dimension.sql │ │ │ │ ├── drop_audit_policy.sql │ │ │ │ ├── drop_cluster.sql │ │ │ │ ├── drop_context.sql │ │ │ │ ├── drop_database.sql │ │ │ │ ├── drop_directory.sql │ │ │ │ ├── drop_diskgroup.sql │ │ │ │ ├── drop_edition.sql │ │ │ │ ├── drop_flashback_archive.sql │ │ │ │ ├── drop_hierarchy.sql │ │ │ │ ├── drop_indextype.sql │ │ │ │ ├── drop_inmemory_join_group.sql │ │ │ │ ├── drop_java.sql │ │ │ │ ├── drop_library.sql │ │ │ │ ├── drop_lockdown_profile.sql │ │ │ │ ├── drop_materialized_view.sql │ │ │ │ ├── drop_materialized_view.sql.tree │ │ │ │ ├── drop_materialized_zonemap.sql │ │ │ │ ├── drop_operator.sql │ │ │ │ ├── drop_outline.sql │ │ │ │ ├── drop_pmem_filestore.sql │ │ │ │ ├── drop_restore_point.sql │ │ │ │ ├── drop_role.sql │ │ │ │ ├── drop_rollback_segment.sql │ │ │ │ ├── drop_synonym01.sql │ │ │ │ ├── drop_table.sql │ │ │ │ ├── drop_tablespace.sql │ │ │ │ ├── drop_tablespace_set.sql │ │ │ │ ├── drop_user.sql │ │ │ │ ├── drop_view.sql │ │ │ │ ├── editionable_function.sql │ │ │ │ ├── editionable_packagebody_function.sql │ │ │ │ ├── editionable_packagespec_function.sql │ │ │ │ ├── explain01.sql │ │ │ │ ├── fetch_clause01.sql │ │ │ │ ├── fetch_clause02.sql │ │ │ │ ├── fetch_clause03.sql │ │ │ │ ├── fetch_clause04.sql │ │ │ │ ├── fetch_statement.sql │ │ │ │ ├── flashback01.sql │ │ │ │ ├── flashback_table.sql │ │ │ │ ├── for_update01.sql │ │ │ │ ├── for_update02.sql │ │ │ │ ├── for_update03.sql │ │ │ │ ├── for_update04.sql │ │ │ │ ├── for_update05.sql │ │ │ │ ├── for_update06.sql │ │ │ │ ├── for_update07.sql │ │ │ │ ├── for_update08.sql │ │ │ │ ├── forall_bulk_rowcount.sql │ │ │ │ ├── forall_indices_of.sql │ │ │ │ ├── forall_statement_and_exception_handling.sql │ │ │ │ ├── function01.sql │ │ │ │ ├── function02.sql │ │ │ │ ├── function03.sql │ │ │ │ ├── function04.sql │ │ │ │ ├── function05.sql │ │ │ │ ├── function06.sql │ │ │ │ ├── function07.sql │ │ │ │ ├── general_element_part.sql │ │ │ │ ├── groupby01.sql │ │ │ │ ├── groupby02.sql │ │ │ │ ├── groupby03.sql │ │ │ │ ├── groupby04.sql │ │ │ │ ├── groupby05.sql │ │ │ │ ├── groupby06.sql │ │ │ │ ├── groupby07.sql │ │ │ │ ├── index.sql │ │ │ │ ├── insert_statement.sql │ │ │ │ ├── interval01.sql │ │ │ │ ├── interval02.sql │ │ │ │ ├── interval03.sql │ │ │ │ ├── interval04.sql │ │ │ │ ├── join01.sql │ │ │ │ ├── join02.sql │ │ │ │ ├── join03.sql │ │ │ │ ├── join04.sql │ │ │ │ ├── join05.sql │ │ │ │ ├── join06.sql │ │ │ │ ├── join07.sql │ │ │ │ ├── join08.sql │ │ │ │ ├── join09.sql │ │ │ │ ├── join10.sql │ │ │ │ ├── join11.sql │ │ │ │ ├── join12.sql │ │ │ │ ├── join13.sql │ │ │ │ ├── join14.sql │ │ │ │ ├── join15.sql │ │ │ │ ├── join16.sql │ │ │ │ ├── join17.sql │ │ │ │ ├── join18.sql │ │ │ │ ├── join19.sql │ │ │ │ ├── join20.sql │ │ │ │ ├── join21.sql │ │ │ │ ├── join22.sql │ │ │ │ ├── join23.sql │ │ │ │ ├── json_query.sql │ │ │ │ ├── json_query.sql.tree │ │ │ │ ├── json_sql.sql │ │ │ │ ├── keywordasidentifier01.sql │ │ │ │ ├── keywordasidentifier02.sql │ │ │ │ ├── keywordasidentifier03.sql │ │ │ │ ├── keywordasidentifier04.sql │ │ │ │ ├── keywordasidentifier05.sql │ │ │ │ ├── keywordasidentifier06.sql │ │ │ │ ├── least_greatest.sql │ │ │ │ ├── lexer01.sql │ │ │ │ ├── lexer02.sql │ │ │ │ ├── lexer02.sql.tree │ │ │ │ ├── lexer03.sql │ │ │ │ ├── lexer04.sql │ │ │ │ ├── lexer05.sql │ │ │ │ ├── like01.sql │ │ │ │ ├── lob-item.sql │ │ │ │ ├── lob-item.sql.tree │ │ │ │ ├── materialized_views.sql │ │ │ │ ├── max_001.sql │ │ │ │ ├── merge01.sql │ │ │ │ ├── merge02.sql │ │ │ │ ├── merge03.sql │ │ │ │ ├── merge04.sql │ │ │ │ ├── merge05.sql │ │ │ │ ├── model_clause01.sql │ │ │ │ ├── model_clause02.sql │ │ │ │ ├── model_clause03.sql │ │ │ │ ├── model_clause04.sql │ │ │ │ ├── model_clause05.sql │ │ │ │ ├── multiset_operators.sql │ │ │ │ ├── noaudit_statement.sql │ │ │ │ ├── numbers01.sql │ │ │ │ ├── nvl_001.sql │ │ │ │ ├── object_access01.sql │ │ │ │ ├── object_access_expressions.sql │ │ │ │ ├── offset_clause.sql │ │ │ │ ├── order_by01.sql │ │ │ │ ├── order_by02.sql │ │ │ │ ├── order_by03.sql │ │ │ │ ├── order_by04.sql │ │ │ │ ├── order_by05.sql │ │ │ │ ├── order_by06.sql │ │ │ │ ├── package_body.sql │ │ │ │ ├── package_body.sql.tree │ │ │ │ ├── packagebody_function.sql │ │ │ │ ├── packagespec_function.sql │ │ │ │ ├── partitioned_tables.sql │ │ │ │ ├── pivot01.sql │ │ │ │ ├── pivot02.sql │ │ │ │ ├── pivot03.sql │ │ │ │ ├── pivot04.sql │ │ │ │ ├── pivot05.sql │ │ │ │ ├── pivot06.sql │ │ │ │ ├── pivot07.sql │ │ │ │ ├── pivot08.sql │ │ │ │ ├── pivot09.sql │ │ │ │ ├── pivot10.sql │ │ │ │ ├── pivot11.sql │ │ │ │ ├── pivot12.sql │ │ │ │ ├── pivot13.sql │ │ │ │ ├── purge_statement.sql │ │ │ │ ├── query_factoring01.sql │ │ │ │ ├── query_factoring02.sql │ │ │ │ ├── query_factoring03.sql │ │ │ │ ├── query_factoring04.sql │ │ │ │ ├── query_factoring05.sql │ │ │ │ ├── query_factoring06.sql │ │ │ │ ├── query_factoring08.sql │ │ │ │ ├── query_factoring09.sql │ │ │ │ ├── query_factoring10.sql │ │ │ │ ├── query_factoring11.sql │ │ │ │ ├── quntitative_expression.sql │ │ │ │ ├── rename_objects.sql │ │ │ │ ├── revoke_statement.sql │ │ │ │ ├── round_001.sql │ │ │ │ ├── round_decode_001.sql │ │ │ │ ├── row_number_001.sql │ │ │ │ ├── sample01.sql │ │ │ │ ├── select_all_some_any.sql │ │ │ │ ├── select_analytic_view.sql │ │ │ │ ├── select_cte.sql │ │ │ │ ├── select_dense_rank.sql │ │ │ │ ├── select_flashback_query.sql │ │ │ │ ├── select_hierarchical_query.sql │ │ │ │ ├── select_package_function.sql │ │ │ │ ├── select_time.sql │ │ │ │ ├── select_without_from.sql │ │ │ │ ├── seq_token_error.sql │ │ │ │ ├── simple02.sql │ │ │ │ ├── simple03.sql │ │ │ │ ├── simple04.sql │ │ │ │ ├── simple05.sql │ │ │ │ ├── simple06.sql │ │ │ │ ├── simple07.sql │ │ │ │ ├── simple08.sql │ │ │ │ ├── simple09.sql │ │ │ │ ├── simple10.sql │ │ │ │ ├── simple11.sql │ │ │ │ ├── simple12.sql │ │ │ │ ├── simple13.sql │ │ │ │ ├── single_statement.sql │ │ │ │ ├── string01.sql │ │ │ │ ├── timing.sql │ │ │ │ ├── timing.sql.tree │ │ │ │ ├── to_binary_double.sql │ │ │ │ ├── to_binary_float.sql │ │ │ │ ├── to_char.sql │ │ │ │ ├── to_char_001.sql │ │ │ │ ├── to_char_002.sql │ │ │ │ ├── to_date.sql │ │ │ │ ├── to_dsinterval.sql │ │ │ │ ├── to_number.sql │ │ │ │ ├── to_timestamp.sql │ │ │ │ ├── to_timestamp_tz.sql │ │ │ │ ├── to_yminterval.sql │ │ │ │ ├── truncate_cluster.sql │ │ │ │ ├── truncate_table.sql │ │ │ │ ├── unified.sql │ │ │ │ ├── union01.sql │ │ │ │ ├── union02.sql │ │ │ │ ├── union03.sql │ │ │ │ ├── union04.sql │ │ │ │ ├── union05.sql │ │ │ │ ├── union06.sql │ │ │ │ ├── union07.sql │ │ │ │ ├── union08.sql │ │ │ │ ├── union09.sql │ │ │ │ ├── union10.sql │ │ │ │ ├── validate_conversion.sql │ │ │ │ ├── values_clause.sql │ │ │ │ ├── varray_type_def.sql │ │ │ │ ├── views.sql │ │ │ │ ├── whenever_sqlerror.sql │ │ │ │ ├── whenever_sqlerror.sql.tree │ │ │ │ ├── xml_function.sql │ │ │ │ ├── xmltable01.sql │ │ │ │ ├── xmltable02.sql │ │ │ │ └── xmltable03.sql │ │ │ ├── examples-sql-script/ │ │ │ │ ├── anonymous_block.sql │ │ │ │ ├── cursor-attributes-with-spaces.sql │ │ │ │ ├── declare_procedure_no_args.sql │ │ │ │ ├── delete_as_regular_id.pkb │ │ │ │ ├── deterministic_function.pks │ │ │ │ ├── e_in_out_parameters.pks │ │ │ │ ├── grants.sql │ │ │ │ ├── green_run.sql │ │ │ │ ├── green_table.sql │ │ │ │ ├── green_tools.pkb │ │ │ │ ├── green_tools.pks │ │ │ │ ├── green_tools_review.sql │ │ │ │ ├── in_out_parameters.pks │ │ │ │ ├── key_word_as_param.pkb │ │ │ │ ├── logical_expressions.sql │ │ │ │ ├── package_body_null.pkb │ │ │ │ ├── package_with_cursor.sql │ │ │ │ ├── package_with_schema.pkb │ │ │ │ ├── package_with_schema.pks │ │ │ │ ├── package_with_simple_init_block.pkb │ │ │ │ ├── pipe_row.pkb │ │ │ │ ├── pltables.sql │ │ │ │ ├── pragma_autonomous_transaction.sql │ │ │ │ ├── pragma_exception_init.pkb │ │ │ │ ├── pragma_exception_init.pks │ │ │ │ ├── proc_over_dblink_as_nvl_param.pkb │ │ │ │ ├── procedure_with_cursor_and_limit.sql │ │ │ │ ├── result_cache_function.pks │ │ │ │ ├── select_into.sql │ │ │ │ ├── show_errors.pks │ │ │ │ ├── substr_as_regular_id.pkb │ │ │ │ ├── synonym_with_database_link.sql │ │ │ │ ├── trigger_examples.sql │ │ │ │ ├── type_body_elements.sql │ │ │ │ ├── user.sql │ │ │ │ └── with_clause_in_exists_block_in_procedure.sql │ │ │ ├── hw-examples/ │ │ │ │ ├── alter_operator.sql │ │ │ │ ├── alter_outline.sql │ │ │ │ ├── drop_operator.sql │ │ │ │ ├── keywordasidentifier02.sql │ │ │ │ ├── lexer01.sql │ │ │ │ ├── lexer02.sql │ │ │ │ ├── lexer03.sql │ │ │ │ ├── lexer04.sql │ │ │ │ ├── lexer05.sql │ │ │ │ ├── simple11.sql │ │ │ │ └── truncate_table.sql │ │ │ └── long-running/ │ │ │ ├── aggregate01.sql │ │ │ ├── cast_multiset07.sql │ │ │ ├── datetime02.sql │ │ │ ├── order_by07.sql │ │ │ └── query_factoring07.sql │ │ └── oracle-database_23/ │ │ ├── adjsn/ │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-0.sql │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-1.sql │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-2.sql │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-3.sql │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-4.sql │ │ │ ├── adding-and-dropping-virtual-columns-json-fields-based-data-guide-information-5.sql │ │ │ ├── change-triggers-data-guide-enabled-search-index-0.sql │ │ │ ├── change-triggers-data-guide-enabled-search-index-1.sql │ │ │ ├── columns-clause-sql-json-function-json_table-3.sql │ │ │ ├── creating-b-tree-indexes-json_value-0.sql │ │ │ ├── creating-b-tree-indexes-json_value-1.sql │ │ │ ├── creating-b-tree-indexes-json_value-2.sql │ │ │ ├── creating-b-tree-indexes-json_value-3.sql │ │ │ ├── creating-bitmap-indexes-json_value-0.sql │ │ │ ├── creating-multivalue-function-based-indexes-json_exists-0.sql │ │ │ ├── creating-multivalue-function-based-indexes-json_exists-1.sql │ │ │ ├── creating-multivalue-function-based-indexes-json_exists-2.sql │ │ │ ├── creating-view-json-data-based-data-guide-information-2.sql │ │ │ ├── creating-view-json-data-based-data-guide-information-3.sql │ │ │ ├── creating-view-json-data-using-json_table-0.sql │ │ │ ├── creating-view-json-data-using-json_table-1.sql │ │ │ ├── data-type-considerations-json_value-indexing-and-querying-0.sql │ │ │ ├── data-type-considerations-json_value-indexing-and-querying-1.sql │ │ │ ├── data-type-considerations-json_value-indexing-and-querying-2.sql │ │ │ ├── error-clause-sql-query-functions-and-conditions-0.sql │ │ │ ├── error-clause-sql-query-functions-and-conditions-1.sql │ │ │ ├── error-clause-sql-query-functions-and-conditions-3.sql │ │ │ ├── handling-dependent-objects-0.sql │ │ │ ├── handling-dependent-objects-1.sql │ │ │ ├── handling-dependent-objects-2.sql │ │ │ ├── handling-input-values-sql-json-generation-functions-0.sql │ │ │ ├── handling-input-values-sql-json-generation-functions-1.sql │ │ │ ├── handling-input-values-sql-json-generation-functions-2.sql │ │ │ ├── indexing-multiple-json-fields-using-composite-b-tree-index-1.sql │ │ │ ├── json-collections-2.sql │ │ │ ├── json-collections-3.sql │ │ │ ├── json-collections-4.sql │ │ │ ├── json-data-type-2.sql │ │ │ ├── json-data-type-3.sql │ │ │ ├── json-data-type-4.sql │ │ │ ├── json-data-type-5.sql │ │ │ ├── json-data-type-6.sql │ │ │ ├── json-data-type-7.sql │ │ │ ├── json-data-type-8.sql │ │ │ ├── json-data-type-9.sql │ │ │ ├── json-query-rewrite-use-materialized-view-json_table-0.sql │ │ │ ├── json-query-rewrite-use-materialized-view-json_table-2.sql │ │ │ ├── json-schema-1.sql │ │ │ ├── json-schema-10.sql │ │ │ ├── json-schema-11.sql │ │ │ ├── json-schema-13.sql │ │ │ ├── json-schema-14.sql │ │ │ ├── json-schema-16.sql │ │ │ ├── json-schema-18.sql │ │ │ ├── json-schema-2.sql │ │ │ ├── json-schema-22.sql │ │ │ ├── json-schema-24.sql │ │ │ ├── json-schema-25.sql │ │ │ ├── json-schema-3.sql │ │ │ ├── json-schema-4.sql │ │ │ ├── json-schema-5.sql │ │ │ ├── json-schema-7.sql │ │ │ ├── json-schema-9.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-0.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-1.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-10.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-2.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-3.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-5.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-6.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-7.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-8.sql │ │ │ ├── json-search-index-ad-hoc-queries-and-full-text-search-9.sql │ │ │ ├── json_table-generalizes-sql-json-query-functions-and-conditions-0.sql │ │ │ ├── json_table-generalizes-sql-json-query-functions-and-conditions-1.sql │ │ │ ├── json_transform-operation-handlers-0.sql │ │ │ ├── json_transform-operation-handlers-1.sql │ │ │ ├── json_transform-operation-handlers-2.sql │ │ │ ├── json_transform-operation-handlers-3.sql │ │ │ ├── json_transform-operation-handlers-4.sql │ │ │ ├── json_transform-operation-handlers-5.sql │ │ │ ├── json_transform-operation-handlers-6.sql │ │ │ ├── json_transform-operator-0.sql │ │ │ ├── json_transform-operator-append-0.sql │ │ │ ├── json_transform-operator-append-2.sql │ │ │ ├── json_transform-operator-append-3.sql │ │ │ ├── json_transform-operator-append-5.sql │ │ │ ├── json_transform-operator-copy-0.sql │ │ │ ├── json_transform-operator-insert-0.sql │ │ │ ├── json_transform-operator-insert-1.sql │ │ │ ├── json_transform-operator-insert-2.sql │ │ │ ├── json_transform-operator-intersect-0.sql │ │ │ ├── json_transform-operator-intersect-1.sql │ │ │ ├── json_transform-operator-keep-0.sql │ │ │ ├── json_transform-operator-keep-1.sql │ │ │ ├── json_transform-operator-merge-0.sql │ │ │ ├── json_transform-operator-nested-path-3.sql │ │ │ ├── json_transform-operator-prepend-0.sql │ │ │ ├── json_transform-operator-prepend-1.sql │ │ │ ├── json_transform-operator-prepend-3.sql │ │ │ ├── json_transform-operator-remove-0.sql │ │ │ ├── json_transform-operator-rename-0.sql │ │ │ ├── json_transform-operator-replace-0.sql │ │ │ ├── json_transform-operator-set-0.sql │ │ │ ├── json_transform-operator-set-1.sql │ │ │ ├── json_transform-operator-set-2.sql │ │ │ ├── json_transform-operator-set-4.sql │ │ │ ├── json_transform-operator-set-5.sql │ │ │ ├── json_transform-operator-set-6.sql │ │ │ ├── json_transform-operator-set-7.sql │ │ │ ├── json_transform-operator-sort-0.sql │ │ │ ├── json_transform-operator-sort-3.sql │ │ │ ├── json_transform-operator-union-0.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-0.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-1.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-2.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-4.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-5.sql │ │ │ ├── json_transform-right-hand-side-rhs-path-expressions-9.sql │ │ │ ├── loading-external-json-data-0.sql │ │ │ ├── loading-external-json-data-1.sql │ │ │ ├── loading-external-json-data-2.sql │ │ │ ├── loading-external-json-data-3.sql │ │ │ ├── loading-external-json-data-4.sql │ │ │ ├── mismatch-clause-sql-json-query-functions-0.sql │ │ │ ├── mismatch-clause-sql-json-query-functions-1.sql │ │ │ ├── mismatch-clause-sql-json-query-functions-2.sql │ │ │ ├── mismatch-clause-sql-json-query-functions-3.sql │ │ │ ├── multiple-data-guides-document-set-0.sql │ │ │ ├── multiple-data-guides-document-set-1.sql │ │ │ ├── multiple-data-guides-document-set-2.sql │ │ │ ├── oracle-sql-condition-json_textcontains-0.sql │ │ │ ├── oracle-sql-condition-json_textcontains-1.sql │ │ │ ├── oracle-sql-function-json_mergepatch-2.sql │ │ │ ├── oracle-sql-function-json_mergepatch-3.sql │ │ │ ├── oracle-sql-function-json_transform-0.sql │ │ │ ├── oracle-sql-function-json_transform-1.sql │ │ │ ├── oracle-sql-function-json_transform-4.sql │ │ │ ├── overview-json-generation-0.sql │ │ │ ├── overview-json-generation-2.sql │ │ │ ├── overview-json-generation-3.sql │ │ │ ├── overview-json-oracle-database-0.sql │ │ │ ├── overview-memory-json-data-0.sql │ │ │ ├── partitioning-json-data-0.sql │ │ │ ├── partitioning-json-data-1.sql │ │ │ ├── passing-clause-sql-functions-and-conditions-0.sql │ │ │ ├── passing-clause-sql-functions-and-conditions-1.sql │ │ │ ├── performing-migration-check-1.sql │ │ │ ├── persistent-data-guide-information-part-json-search-index-0.sql │ │ │ ├── persistent-data-guide-information-part-json-search-index-1.sql │ │ │ ├── persistent-data-guide-information-part-json-search-index-2.sql │ │ │ ├── persistent-data-guide-information-part-json-search-index-3.sql │ │ │ ├── populate-json-type-column-querying-textual-json-0.sql │ │ │ ├── populate-json-type-column-querying-textual-json-1.sql │ │ │ ├── populate-json-type-column-querying-textual-json-2.sql │ │ │ ├── populating-json-data-memory-column-store-0.sql │ │ │ ├── populating-json-data-memory-column-store-1.sql │ │ │ ├── querying-data-guide-0.sql │ │ │ ├── querying-data-guide-1.sql │ │ │ ├── read-only-views-based-json-generation-0.sql │ │ │ ├── read-only-views-based-json-generation-1.sql │ │ │ ├── read-only-views-based-json-generation-2.sql │ │ │ ├── simple-dot-notation-access-json-data-0.sql │ │ │ ├── simple-dot-notation-access-json-data-1.sql │ │ │ ├── simple-dot-notation-access-json-data-2.sql │ │ │ ├── simple-dot-notation-access-json-data-3.sql │ │ │ ├── simple-dot-notation-access-json-data-4.sql │ │ │ ├── simple-dot-notation-access-json-data-5.sql │ │ │ ├── simple-dot-notation-access-json-data-6.sql │ │ │ ├── simple-dot-notation-access-json-data-7.sql │ │ │ ├── simple-dot-notation-access-json-data-8.sql │ │ │ ├── specifying-preferred-name-field-column-0.sql │ │ │ ├── sql-json-condition-json_exists-0.sql │ │ │ ├── sql-json-condition-json_exists-1.sql │ │ │ ├── sql-json-conditions-is-json-and-is-not-json-6.sql │ │ │ ├── sql-json-function-json_array-0.sql │ │ │ ├── sql-json-function-json_array-1.sql │ │ │ ├── sql-json-function-json_array-3.sql │ │ │ ├── sql-json-function-json_arrayagg-0.sql │ │ │ ├── sql-json-function-json_arrayagg-1.sql │ │ │ ├── sql-json-function-json_object-0.sql │ │ │ ├── sql-json-function-json_object-10.sql │ │ │ ├── sql-json-function-json_object-11.sql │ │ │ ├── sql-json-function-json_object-13.sql │ │ │ ├── sql-json-function-json_object-14.sql │ │ │ ├── sql-json-function-json_object-16.sql │ │ │ ├── sql-json-function-json_object-18.sql │ │ │ ├── sql-json-function-json_object-19.sql │ │ │ ├── sql-json-function-json_object-21.sql │ │ │ ├── sql-json-function-json_object-7.sql │ │ │ ├── sql-json-function-json_object-8.sql │ │ │ ├── sql-json-function-json_objectagg-0.sql │ │ │ ├── sql-json-function-json_query-0.sql │ │ │ ├── sql-json-function-json_query-1.sql │ │ │ ├── sql-json-function-json_table-2.sql │ │ │ ├── sql-json-function-json_table-3.sql │ │ │ ├── sql-json-path-expression-item-methods-0.sql │ │ │ ├── sql-json-path-expression-item-methods-1.sql │ │ │ ├── sql-json-path-expression-item-methods-2.sql │ │ │ ├── sql-json-path-expression-item-methods-3.sql │ │ │ ├── sql-json-path-expression-item-methods-4.sql │ │ │ ├── sql-json-path-expression-item-methods-5.sql │ │ │ ├── sql-json-path-expression-item-methods-6.sql │ │ │ ├── sql-json-path-expression-syntax-2.sql │ │ │ ├── sql-json-path-expression-syntax-4.sql │ │ │ ├── sql-json-path-expression-syntax-7.sql │ │ │ ├── sql-nested-clause-instead-json_table-2.sql │ │ │ ├── sql-nested-clause-instead-json_table-4.sql │ │ │ ├── tables-json-columns-0.sql │ │ │ ├── tables-json-columns-1.sql │ │ │ ├── tables-json-columns-2.sql │ │ │ ├── tables-json-columns-3.sql │ │ │ ├── type-clause-sql-functions-and-conditions-0.sql │ │ │ ├── type-clause-sql-functions-and-conditions-1.sql │ │ │ ├── type-clause-sql-functions-and-conditions-2.sql │ │ │ ├── type-clause-sql-functions-and-conditions-3.sql │ │ │ ├── type-clause-sql-functions-and-conditions-4.sql │ │ │ ├── type-clause-sql-functions-and-conditions-5.sql │ │ │ ├── type-clause-sql-functions-and-conditions-6.sql │ │ │ ├── types-filter-condition-comparisons-0.sql │ │ │ ├── use-bind-variables-json_transform-0.sql │ │ │ ├── use-bind-variables-json_transform-1.sql │ │ │ ├── use-bind-variables-json_transform-2.sql │ │ │ ├── using-filters-json_exists-0.sql │ │ │ ├── using-filters-json_exists-1.sql │ │ │ ├── using-filters-json_exists-2.sql │ │ │ ├── using-filters-json_exists-3.sql │ │ │ ├── using-filters-json_exists-4.sql │ │ │ ├── using-geojson-geographic-data-0.sql │ │ │ ├── using-geojson-geographic-data-1.sql │ │ │ ├── using-geojson-geographic-data-3.sql │ │ │ ├── using-geojson-geographic-data-5.sql │ │ │ ├── using-geojson-geographic-data-6.sql │ │ │ ├── using-json_table-json-arrays-0.sql │ │ │ ├── using-json_table-json-arrays-1.sql │ │ │ ├── using-json_table-json-arrays-2.sql │ │ │ ├── using-json_table-json-arrays-4.sql │ │ │ ├── using-json_value-function-based-index-json_exists-queries-0.sql │ │ │ ├── using-json_value-function-based-index-json_exists-queries-1.sql │ │ │ ├── using-json_value-function-based-index-json_exists-queries-2.sql │ │ │ ├── using-json_value-function-based-index-json_exists-queries-3.sql │ │ │ ├── using-json_value-function-based-index-json_table-queries-0.sql │ │ │ ├── using-multivalue-function-based-index-0.sql │ │ │ ├── using-multivalue-function-based-index-1.sql │ │ │ ├── using-multivalue-function-based-index-2.sql │ │ │ ├── using-multivalue-function-based-index-3.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-0.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-1.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-2.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-3.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-4.sql │ │ │ ├── using-online-redefinition-migrate-json-data-type-7.sql │ │ │ ├── using-oracle-data-pump-migrate-json-data-type-0.sql │ │ │ ├── using-pl-sql-object-types-json-0.sql │ │ │ ├── using-pl-sql-object-types-json-1.sql │ │ │ ├── using-pl-sql-object-types-json-2.sql │ │ │ ├── using-sql-json-function-json_value-boolean-json-value-0.sql │ │ │ ├── using-sql-json-function-json_value-boolean-json-value-1.sql │ │ │ └── using-sql-json-function-json_value-boolean-json-value-3.sql │ │ ├── lnpls/ │ │ │ ├── ALTER-FUNCTION-statement-0.sql │ │ │ ├── ALTER-LIBRARY-statement-0.sql │ │ │ ├── ALTER-PACKAGE-statement-0.sql │ │ │ ├── ALTER-PACKAGE-statement-1.sql │ │ │ ├── ALTER-PROCEDURE-statement-0.sql │ │ │ ├── ALTER-TRIGGER-statement-0.sql │ │ │ ├── ALTER-TRIGGER-statement-1.sql │ │ │ ├── ALTER-TYPE-statement-0.sql │ │ │ ├── ALTER-TYPE-statement-1.sql │ │ │ ├── ALTER-TYPE-statement-10.sql │ │ │ ├── ALTER-TYPE-statement-11.sql │ │ │ ├── ALTER-TYPE-statement-12.sql │ │ │ ├── ALTER-TYPE-statement-13.sql │ │ │ ├── ALTER-TYPE-statement-14.sql │ │ │ ├── ALTER-TYPE-statement-2.sql │ │ │ ├── ALTER-TYPE-statement-3.sql │ │ │ ├── ALTER-TYPE-statement-4.sql │ │ │ ├── ALTER-TYPE-statement-5.sql │ │ │ ├── ALTER-TYPE-statement-6.sql │ │ │ ├── ALTER-TYPE-statement-7.sql │ │ │ ├── ALTER-TYPE-statement-8.sql │ │ │ ├── ALTER-TYPE-statement-9.sql │ │ │ ├── CONTINUE-statement-0.sql │ │ │ ├── CONTINUE-statement-2.sql │ │ │ ├── COVERAGE-pragma-3.sql │ │ │ ├── CREATE-FUNCTION-statement-0.sql │ │ │ ├── CREATE-FUNCTION-statement-1.sql │ │ │ ├── CREATE-FUNCTION-statement-2.sql │ │ │ ├── CREATE-FUNCTION-statement-3.sql │ │ │ ├── CREATE-FUNCTION-statement-4.sql │ │ │ ├── CREATE-FUNCTION-statement-5.sql │ │ │ ├── CREATE-FUNCTION-statement-6.sql │ │ │ ├── CREATE-FUNCTION-statement-7.sql │ │ │ ├── CREATE-FUNCTION-statement-8.sql │ │ │ ├── CREATE-LIBRARY-statement-0.sql │ │ │ ├── CREATE-LIBRARY-statement-1.sql │ │ │ ├── CREATE-LIBRARY-statement-2.sql │ │ │ ├── CREATE-LIBRARY-statement-3.sql │ │ │ ├── CREATE-LIBRARY-statement-4.sql │ │ │ ├── CREATE-PACKAGE-BODY-statement-0.sql │ │ │ ├── CREATE-PACKAGE-statement-0.sql │ │ │ ├── CREATE-PROCEDURE-statement-0.sql │ │ │ ├── CREATE-PROCEDURE-statement-1.sql │ │ │ ├── CREATE-PROCEDURE-statement-2.sql │ │ │ ├── CREATE-PROCEDURE-statement-3.sql │ │ │ ├── CREATE-PROCEDURE-statement-5.sql │ │ │ ├── CREATE-PROCEDURE-statement-6.sql │ │ │ ├── CREATE-TYPE-statement-0.sql │ │ │ ├── CREATE-TYPE-statement-1.sql │ │ │ ├── CREATE-TYPE-statement-10.sql │ │ │ ├── CREATE-TYPE-statement-11.sql │ │ │ ├── CREATE-TYPE-statement-12.sql │ │ │ ├── CREATE-TYPE-statement-13.sql │ │ │ ├── CREATE-TYPE-statement-15.sql │ │ │ ├── CREATE-TYPE-statement-16.sql │ │ │ ├── CREATE-TYPE-statement-17.sql │ │ │ ├── CREATE-TYPE-statement-2.sql │ │ │ ├── CREATE-TYPE-statement-3.sql │ │ │ ├── CREATE-TYPE-statement-4.sql │ │ │ ├── CREATE-TYPE-statement-6.sql │ │ │ ├── CREATE-TYPE-statement-7.sql │ │ │ ├── CREATE-TYPE-statement-8.sql │ │ │ ├── CREATE-TYPE-statement-9.sql │ │ │ ├── DEPRECATE-pragma-0.sql │ │ │ ├── DEPRECATE-pragma-1.sql │ │ │ ├── DEPRECATE-pragma-10.sql │ │ │ ├── DEPRECATE-pragma-13.sql │ │ │ ├── DEPRECATE-pragma-18.sql │ │ │ ├── DEPRECATE-pragma-3.sql │ │ │ ├── DEPRECATE-pragma-32.sql │ │ │ ├── DEPRECATE-pragma-34.sql │ │ │ ├── DEPRECATE-pragma-6.sql │ │ │ ├── DEPRECATE-pragma-8.sql │ │ │ ├── DROP-FUNCTION-statement-0.sql │ │ │ ├── DROP-LIBRARY-statement-0.sql │ │ │ ├── DROP-PACKAGE-statement-0.sql │ │ │ ├── DROP-PROCEDURE-statement-0.sql │ │ │ ├── DROP-TRIGGER-statement-0.sql │ │ │ ├── DROP-TYPE-BODY-statement-0.sql │ │ │ ├── DROP-TYPE-statement-0.sql │ │ │ ├── EXECUTE-IMMEDIATE-statement-0.sql │ │ │ ├── EXIT-statement-0.sql │ │ │ ├── EXIT-statement-2.sql │ │ │ ├── FOR-LOOP-statement-0.sql │ │ │ ├── FOR-LOOP-statement-1.sql │ │ │ ├── FOR-LOOP-statement-2.sql │ │ │ ├── GOTO-statement-0.sql │ │ │ ├── GOTO-statement-4.sql │ │ │ ├── GOTO-statement-5.sql │ │ │ ├── GOTO-statement-7.sql │ │ │ ├── PIPELINED-clause-1.sql │ │ │ ├── SQLERRM-function-1.sql │ │ │ ├── SQLERRM-function-4.sql │ │ │ ├── SQL_MACRO-clause-1.sql │ │ │ ├── SQL_MACRO-clause-11.sql │ │ │ ├── SQL_MACRO-clause-13.sql │ │ │ ├── SQL_MACRO-clause-14.sql │ │ │ ├── SQL_MACRO-clause-16.sql │ │ │ ├── SQL_MACRO-clause-17.sql │ │ │ ├── SQL_MACRO-clause-19.sql │ │ │ ├── SQL_MACRO-clause-2.sql │ │ │ ├── SQL_MACRO-clause-20.sql │ │ │ ├── SQL_MACRO-clause-22.sql │ │ │ ├── SQL_MACRO-clause-24.sql │ │ │ ├── SQL_MACRO-clause-25.sql │ │ │ ├── SQL_MACRO-clause-27.sql │ │ │ ├── SQL_MACRO-clause-29.sql │ │ │ ├── SQL_MACRO-clause-3.sql │ │ │ ├── SQL_MACRO-clause-31.sql │ │ │ ├── SQL_MACRO-clause-4.sql │ │ │ ├── SQL_MACRO-clause-5.sql │ │ │ ├── SQL_MACRO-clause-6.sql │ │ │ ├── SQL_MACRO-clause-7.sql │ │ │ ├── SQL_MACRO-clause-9.sql │ │ │ ├── Supresses-warning-pragma-6009-0.sql │ │ │ ├── Supresses-warning-pragma-6009-1.sql │ │ │ ├── Supresses-warning-pragma-6009-10.sql │ │ │ ├── Supresses-warning-pragma-6009-11.sql │ │ │ ├── Supresses-warning-pragma-6009-2.sql │ │ │ ├── Supresses-warning-pragma-6009-3.sql │ │ │ ├── Supresses-warning-pragma-6009-4.sql │ │ │ ├── Supresses-warning-pragma-6009-5.sql │ │ │ ├── Supresses-warning-pragma-6009-6.sql │ │ │ ├── Supresses-warning-pragma-6009-7.sql │ │ │ ├── Supresses-warning-pragma-6009-8.sql │ │ │ ├── Supresses-warning-pragma-6009-9.sql │ │ │ ├── WHILE-LOOP-statement-0.sql │ │ │ ├── assigning-values-collection-variables-0.sql │ │ │ ├── assigning-values-collection-variables-2.sql │ │ │ ├── assigning-values-collection-variables-4.sql │ │ │ ├── assigning-values-record-variables-1.sql │ │ │ ├── assigning-values-record-variables-10.sql │ │ │ ├── assigning-values-record-variables-12.sql │ │ │ ├── assigning-values-record-variables-13.sql │ │ │ ├── assigning-values-record-variables-15.sql │ │ │ ├── assigning-values-record-variables-17.sql │ │ │ ├── assigning-values-record-variables-3.sql │ │ │ ├── assigning-values-record-variables-5.sql │ │ │ ├── assigning-values-record-variables-7.sql │ │ │ ├── assigning-values-record-variables-9.sql │ │ │ ├── assigning-values-variables-1.sql │ │ │ ├── assigning-values-variables-3.sql │ │ │ ├── assigning-values-variables-5.sql │ │ │ ├── assigning-values-variables-7.sql │ │ │ ├── autonomous-transactions-0.sql │ │ │ ├── autonomous-transactions-1.sql │ │ │ ├── autonomous-transactions-2.sql │ │ │ ├── autonomous-transactions-3.sql │ │ │ ├── autonomous-transactions-4.sql │ │ │ ├── autonomous-transactions-6.sql │ │ │ ├── autonomous-transactions-7.sql │ │ │ ├── autonomous-transactions-9.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-0.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-10.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-2.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-3.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-4.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-5.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-6.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-7.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-8.sql │ │ │ ├── avoiding-inner-capture-select-and-dml-statements-9.sql │ │ │ ├── basic-LOOP-statement-0.sql │ │ │ ├── basic-LOOP-statement-2.sql │ │ │ ├── bulk-sql-and-bulk-binding-0.sql │ │ │ ├── bulk-sql-and-bulk-binding-1.sql │ │ │ ├── bulk-sql-and-bulk-binding-10.sql │ │ │ ├── bulk-sql-and-bulk-binding-12.sql │ │ │ ├── bulk-sql-and-bulk-binding-14.sql │ │ │ ├── bulk-sql-and-bulk-binding-15.sql │ │ │ ├── bulk-sql-and-bulk-binding-17.sql │ │ │ ├── bulk-sql-and-bulk-binding-19.sql │ │ │ ├── bulk-sql-and-bulk-binding-2.sql │ │ │ ├── bulk-sql-and-bulk-binding-22.sql │ │ │ ├── bulk-sql-and-bulk-binding-24.sql │ │ │ ├── bulk-sql-and-bulk-binding-26.sql │ │ │ ├── bulk-sql-and-bulk-binding-28.sql │ │ │ ├── bulk-sql-and-bulk-binding-3.sql │ │ │ ├── bulk-sql-and-bulk-binding-30.sql │ │ │ ├── bulk-sql-and-bulk-binding-32.sql │ │ │ ├── bulk-sql-and-bulk-binding-34.sql │ │ │ ├── bulk-sql-and-bulk-binding-37.sql │ │ │ ├── bulk-sql-and-bulk-binding-38.sql │ │ │ ├── bulk-sql-and-bulk-binding-40.sql │ │ │ ├── bulk-sql-and-bulk-binding-42.sql │ │ │ ├── bulk-sql-and-bulk-binding-43.sql │ │ │ ├── bulk-sql-and-bulk-binding-45.sql │ │ │ ├── bulk-sql-and-bulk-binding-47.sql │ │ │ ├── bulk-sql-and-bulk-binding-48.sql │ │ │ ├── bulk-sql-and-bulk-binding-5.sql │ │ │ ├── bulk-sql-and-bulk-binding-50.sql │ │ │ ├── bulk-sql-and-bulk-binding-52.sql │ │ │ ├── bulk-sql-and-bulk-binding-53.sql │ │ │ ├── bulk-sql-and-bulk-binding-55.sql │ │ │ ├── bulk-sql-and-bulk-binding-57.sql │ │ │ ├── bulk-sql-and-bulk-binding-59.sql │ │ │ ├── bulk-sql-and-bulk-binding-6.sql │ │ │ ├── bulk-sql-and-bulk-binding-61.sql │ │ │ ├── bulk-sql-and-bulk-binding-63.sql │ │ │ ├── bulk-sql-and-bulk-binding-65.sql │ │ │ ├── bulk-sql-and-bulk-binding-67.sql │ │ │ ├── bulk-sql-and-bulk-binding-8.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-0.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-1.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-10.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-12.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-13.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-14.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-16.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-17.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-18.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-2.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-21.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-23.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-3.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-4.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-6.sql │ │ │ ├── chaining-pipelined-table-functions-multiple-transformations-8.sql │ │ │ ├── collection-comparisons-0.sql │ │ │ ├── collection-comparisons-2.sql │ │ │ ├── collection-comparisons-4.sql │ │ │ ├── collection-methods-1.sql │ │ │ ├── collection-methods-11.sql │ │ │ ├── collection-methods-13.sql │ │ │ ├── collection-methods-15.sql │ │ │ ├── collection-methods-17.sql │ │ │ ├── collection-methods-19.sql │ │ │ ├── collection-methods-21.sql │ │ │ ├── collection-methods-23.sql │ │ │ ├── collection-methods-25.sql │ │ │ ├── collection-methods-27.sql │ │ │ ├── collection-methods-29.sql │ │ │ ├── collection-methods-3.sql │ │ │ ├── collection-methods-5.sql │ │ │ ├── collection-methods-7.sql │ │ │ ├── collection-methods-9.sql │ │ │ ├── collection-types-defined-package-specifications-0.sql │ │ │ ├── collection-types-defined-package-specifications-2.sql │ │ │ ├── column-name-precedence-0.sql │ │ │ ├── column-name-precedence-2.sql │ │ │ ├── column-name-precedence-4.sql │ │ │ ├── column-name-precedence-6.sql │ │ │ ├── compile-time-warnings-1.sql │ │ │ ├── compile-time-warnings-11.sql │ │ │ ├── compile-time-warnings-13.sql │ │ │ ├── compile-time-warnings-2.sql │ │ │ ├── compile-time-warnings-3.sql │ │ │ ├── compile-time-warnings-4.sql │ │ │ ├── compile-time-warnings-5.sql │ │ │ ├── compile-time-warnings-6.sql │ │ │ ├── compile-time-warnings-7.sql │ │ │ ├── compile-time-warnings-8.sql │ │ │ ├── compile-time-warnings-9.sql │ │ │ ├── compiling-pl-sql-units-native-execution-0.sql │ │ │ ├── compiling-pl-sql-units-native-execution-1.sql │ │ │ ├── compiling-pl-sql-units-native-execution-2.sql │ │ │ ├── compiling-pl-sql-units-native-execution-3.sql │ │ │ ├── compiling-pl-sql-units-native-execution-4.sql │ │ │ ├── compiling-pl-sql-units-native-execution-5.sql │ │ │ ├── conditional-compilation1-10.sql │ │ │ ├── conditional-compilation1-12.sql │ │ │ ├── conditional-compilation1-13.sql │ │ │ ├── conditional-compilation1-14.sql │ │ │ ├── conditional-compilation1-18.sql │ │ │ ├── conditional-compilation1-20.sql │ │ │ ├── conditional-compilation1-21.sql │ │ │ ├── conditional-compilation1-23.sql │ │ │ ├── conditional-compilation1-25.sql │ │ │ ├── conditional-selection-statements-10.sql │ │ │ ├── conditional-selection-statements-14.sql │ │ │ ├── conditional-selection-statements-16.sql │ │ │ ├── conditional-selection-statements-19.sql │ │ │ ├── conditional-selection-statements-21.sql │ │ │ ├── conditional-selection-statements-24.sql │ │ │ ├── conditional-selection-statements-26.sql │ │ │ ├── conditional-selection-statements-5.sql │ │ │ ├── conditional-selection-statements-8.sql │ │ │ ├── continuing-execution-handling-exceptions-0.sql │ │ │ ├── continuing-execution-handling-exceptions-2.sql │ │ │ ├── correlation-names-and-pseudorecords-11.sql │ │ │ ├── correlation-names-and-pseudorecords-13.sql │ │ │ ├── correlation-names-and-pseudorecords-15.sql │ │ │ ├── correlation-names-and-pseudorecords-16.sql │ │ │ ├── correlation-names-and-pseudorecords-17.sql │ │ │ ├── correlation-names-and-pseudorecords-19.sql │ │ │ ├── correlation-names-and-pseudorecords-2.sql │ │ │ ├── correlation-names-and-pseudorecords-20.sql │ │ │ ├── correlation-names-and-pseudorecords-22.sql │ │ │ ├── correlation-names-and-pseudorecords-3.sql │ │ │ ├── correlation-names-and-pseudorecords-4.sql │ │ │ ├── correlation-names-and-pseudorecords-6.sql │ │ │ ├── correlation-names-and-pseudorecords-8.sql │ │ │ ├── correlation-names-and-pseudorecords-9.sql │ │ │ ├── cursor-expressions-1.sql │ │ │ ├── cursor-variables-1.sql │ │ │ ├── cursor-variables-10.sql │ │ │ ├── cursor-variables-12.sql │ │ │ ├── cursor-variables-14.sql │ │ │ ├── cursor-variables-15.sql │ │ │ ├── cursor-variables-16.sql │ │ │ ├── cursor-variables-17.sql │ │ │ ├── cursor-variables-18.sql │ │ │ ├── cursor-variables-19.sql │ │ │ ├── cursor-variables-2.sql │ │ │ ├── cursor-variables-3.sql │ │ │ ├── cursor-variables-5.sql │ │ │ ├── cursor-variables-8.sql │ │ │ ├── cursors-overview-0.sql │ │ │ ├── cursors-overview-10.sql │ │ │ ├── cursors-overview-12.sql │ │ │ ├── cursors-overview-14.sql │ │ │ ├── cursors-overview-16.sql │ │ │ ├── cursors-overview-18.sql │ │ │ ├── cursors-overview-2.sql │ │ │ ├── cursors-overview-20.sql │ │ │ ├── cursors-overview-22.sql │ │ │ ├── cursors-overview-24.sql │ │ │ ├── cursors-overview-25.sql │ │ │ ├── cursors-overview-27.sql │ │ │ ├── cursors-overview-29.sql │ │ │ ├── cursors-overview-6.sql │ │ │ ├── cursors-overview-7.sql │ │ │ ├── cursors-overview-8.sql │ │ │ ├── dbms_sql-package-1.sql │ │ │ ├── dbms_sql-package-4.sql │ │ │ ├── dbms_sql-package-6.sql │ │ │ ├── dbms_sql-package-7.sql │ │ │ ├── declarations-0.sql │ │ │ ├── declarations-1.sql │ │ │ ├── declarations-11.sql │ │ │ ├── declarations-2.sql │ │ │ ├── declarations-3.sql │ │ │ ├── declarations-4.sql │ │ │ ├── declarations-5.sql │ │ │ ├── declarations-9.sql │ │ │ ├── description-static-sql-0.sql │ │ │ ├── description-static-sql-2.sql │ │ │ ├── dml-triggers-0.sql │ │ │ ├── dml-triggers-1.sql │ │ │ ├── dml-triggers-10.sql │ │ │ ├── dml-triggers-12.sql │ │ │ ├── dml-triggers-13.sql │ │ │ ├── dml-triggers-15.sql │ │ │ ├── dml-triggers-17.sql │ │ │ ├── dml-triggers-18.sql │ │ │ ├── dml-triggers-2.sql │ │ │ ├── dml-triggers-20.sql │ │ │ ├── dml-triggers-23.sql │ │ │ ├── dml-triggers-24.sql │ │ │ ├── dml-triggers-25.sql │ │ │ ├── dml-triggers-27.sql │ │ │ ├── dml-triggers-28.sql │ │ │ ├── dml-triggers-30.sql │ │ │ ├── dml-triggers-32.sql │ │ │ ├── dml-triggers-33.sql │ │ │ ├── dml-triggers-34.sql │ │ │ ├── dml-triggers-35.sql │ │ │ ├── dml-triggers-36.sql │ │ │ ├── dml-triggers-37.sql │ │ │ ├── dml-triggers-38.sql │ │ │ ├── dml-triggers-39.sql │ │ │ ├── dml-triggers-4.sql │ │ │ ├── dml-triggers-40.sql │ │ │ ├── dml-triggers-41.sql │ │ │ ├── dml-triggers-42.sql │ │ │ ├── dml-triggers-43.sql │ │ │ ├── dml-triggers-44.sql │ │ │ ├── dml-triggers-45.sql │ │ │ ├── dml-triggers-47.sql │ │ │ ├── dml-triggers-49.sql │ │ │ ├── dml-triggers-50.sql │ │ │ ├── dml-triggers-51.sql │ │ │ ├── dml-triggers-52.sql │ │ │ ├── dml-triggers-54.sql │ │ │ ├── dml-triggers-56.sql │ │ │ ├── dml-triggers-6.sql │ │ │ ├── dml-triggers-8.sql │ │ │ ├── exception-handling-triggers-0.sql │ │ │ ├── exception-handling-triggers-1.sql │ │ │ ├── exception-propagation-0.sql │ │ │ ├── exception-propagation-1.sql │ │ │ ├── exception-propagation-11.sql │ │ │ ├── exception-propagation-13.sql │ │ │ ├── exception-propagation-15.sql │ │ │ ├── exception-propagation-3.sql │ │ │ ├── exception-propagation-5.sql │ │ │ ├── exception-propagation-7.sql │ │ │ ├── exception-propagation-9.sql │ │ │ ├── expressions-0.sql │ │ │ ├── expressions-10.sql │ │ │ ├── expressions-12.sql │ │ │ ├── expressions-13.sql │ │ │ ├── expressions-15.sql │ │ │ ├── expressions-17.sql │ │ │ ├── expressions-19.sql │ │ │ ├── expressions-2.sql │ │ │ ├── expressions-21.sql │ │ │ ├── expressions-23.sql │ │ │ ├── expressions-24.sql │ │ │ ├── expressions-26.sql │ │ │ ├── expressions-28.sql │ │ │ ├── expressions-35.sql │ │ │ ├── expressions-37.sql │ │ │ ├── expressions-39.sql │ │ │ ├── expressions-4.sql │ │ │ ├── expressions-41.sql │ │ │ ├── expressions-43.sql │ │ │ ├── expressions-46.sql │ │ │ ├── expressions-48.sql │ │ │ ├── expressions-50.sql │ │ │ ├── expressions-52.sql │ │ │ ├── expressions-54.sql │ │ │ ├── expressions-57.sql │ │ │ ├── expressions-59.sql │ │ │ ├── expressions-6.sql │ │ │ ├── expressions-62.sql │ │ │ ├── expressions-8.sql │ │ │ ├── external-subprograms-1.sql │ │ │ ├── external-subprograms-2.sql │ │ │ ├── external-subprograms-4.sql │ │ │ ├── external-subprograms-5.sql │ │ │ ├── forward-declaration-0.sql │ │ │ ├── inserting-records-tables-0.sql │ │ │ ├── invokers-rights-and-definers-rights-authid-property-0.sql │ │ │ ├── invokers-rights-and-definers-rights-authid-property-2.sql │ │ │ ├── invokers-rights-and-definers-rights-authid-property-3.sql │ │ │ ├── lexical-units-0.sql │ │ │ ├── lexical-units-10.sql │ │ │ ├── lexical-units-12.sql │ │ │ ├── lexical-units-15.sql │ │ │ ├── lexical-units-17.sql │ │ │ ├── lexical-units-20.sql │ │ │ ├── lexical-units-23.sql │ │ │ ├── lexical-units-25.sql │ │ │ ├── lexical-units-4.sql │ │ │ ├── lexical-units-6.sql │ │ │ ├── lexical-units-8.sql │ │ │ ├── loop-statements-0.sql │ │ │ ├── loop-statements-10.sql │ │ │ ├── loop-statements-13.sql │ │ │ ├── loop-statements-15.sql │ │ │ ├── loop-statements-17.sql │ │ │ ├── loop-statements-19.sql │ │ │ ├── loop-statements-2.sql │ │ │ ├── loop-statements-25.sql │ │ │ ├── loop-statements-27.sql │ │ │ ├── loop-statements-31.sql │ │ │ ├── loop-statements-33.sql │ │ │ ├── loop-statements-37.sql │ │ │ ├── loop-statements-39.sql │ │ │ ├── loop-statements-4.sql │ │ │ ├── loop-statements-6.sql │ │ │ ├── loop-statements-8.sql │ │ │ ├── main-features-pl-sql-1.sql │ │ │ ├── minimizing-cpu-overhead-0.sql │ │ │ ├── minimizing-cpu-overhead-2.sql │ │ │ ├── multidimensional-collections-0.sql │ │ │ ├── multidimensional-collections-2.sql │ │ │ ├── multidimensional-collections-3.sql │ │ │ ├── native-dynamic-sql-0.sql │ │ │ ├── native-dynamic-sql-1.sql │ │ │ ├── native-dynamic-sql-11.sql │ │ │ ├── native-dynamic-sql-12.sql │ │ │ ├── native-dynamic-sql-13.sql │ │ │ ├── native-dynamic-sql-15.sql │ │ │ ├── native-dynamic-sql-16.sql │ │ │ ├── native-dynamic-sql-17.sql │ │ │ ├── native-dynamic-sql-18.sql │ │ │ ├── native-dynamic-sql-19.sql │ │ │ ├── native-dynamic-sql-3.sql │ │ │ ├── native-dynamic-sql-5.sql │ │ │ ├── native-dynamic-sql-7.sql │ │ │ ├── native-dynamic-sql-9.sql │ │ │ ├── overloaded-subprograms-0.sql │ │ │ ├── overloaded-subprograms-10.sql │ │ │ ├── overloaded-subprograms-11.sql │ │ │ ├── overloaded-subprograms-12.sql │ │ │ ├── overloaded-subprograms-13.sql │ │ │ ├── overloaded-subprograms-15.sql │ │ │ ├── overloaded-subprograms-5.sql │ │ │ ├── overloaded-subprograms-6.sql │ │ │ ├── overloaded-subprograms-7.sql │ │ │ ├── overloaded-subprograms-8.sql │ │ │ ├── overloaded-subprograms-9.sql │ │ │ ├── overview-exception-handling-1.sql │ │ │ ├── overview-exception-handling-2.sql │ │ │ ├── overview-exception-handling-4.sql │ │ │ ├── overview-exception-handling-6.sql │ │ │ ├── overview-polymorphic-table-functions-0.sql │ │ │ ├── overview-polymorphic-table-functions-1.sql │ │ │ ├── overview-polymorphic-table-functions-10.sql │ │ │ ├── overview-polymorphic-table-functions-12.sql │ │ │ ├── overview-polymorphic-table-functions-14.sql │ │ │ ├── overview-polymorphic-table-functions-16.sql │ │ │ ├── overview-polymorphic-table-functions-17.sql │ │ │ ├── overview-polymorphic-table-functions-18.sql │ │ │ ├── overview-polymorphic-table-functions-19.sql │ │ │ ├── overview-polymorphic-table-functions-2.sql │ │ │ ├── overview-polymorphic-table-functions-21.sql │ │ │ ├── overview-polymorphic-table-functions-23.sql │ │ │ ├── overview-polymorphic-table-functions-25.sql │ │ │ ├── overview-polymorphic-table-functions-27.sql │ │ │ ├── overview-polymorphic-table-functions-29.sql │ │ │ ├── overview-polymorphic-table-functions-30.sql │ │ │ ├── overview-polymorphic-table-functions-31.sql │ │ │ ├── overview-polymorphic-table-functions-4.sql │ │ │ ├── overview-polymorphic-table-functions-5.sql │ │ │ ├── overview-polymorphic-table-functions-6.sql │ │ │ ├── overview-polymorphic-table-functions-8.sql │ │ │ ├── package-body-0.sql │ │ │ ├── package-body-2.sql │ │ │ ├── package-body-4.sql │ │ │ ├── package-example-0.sql │ │ │ ├── package-specification-1.sql │ │ │ ├── package-specification-2.sql │ │ │ ├── package-writing-guidelines-0.sql │ │ │ ├── package-writing-guidelines-1.sql │ │ │ ├── package-writing-guidelines-2.sql │ │ │ ├── package-writing-guidelines-4.sql │ │ │ ├── pl-sql-function-result-cache-0.sql │ │ │ ├── pl-sql-function-result-cache-1.sql │ │ │ ├── pl-sql-function-result-cache-10.sql │ │ │ ├── pl-sql-function-result-cache-11.sql │ │ │ ├── pl-sql-function-result-cache-12.sql │ │ │ ├── pl-sql-function-result-cache-13.sql │ │ │ ├── pl-sql-function-result-cache-15.sql │ │ │ ├── pl-sql-function-result-cache-16.sql │ │ │ ├── pl-sql-function-result-cache-17.sql │ │ │ ├── pl-sql-function-result-cache-18.sql │ │ │ ├── pl-sql-function-result-cache-19.sql │ │ │ ├── pl-sql-function-result-cache-20.sql │ │ │ ├── pl-sql-function-result-cache-4.sql │ │ │ ├── pl-sql-function-result-cache-5.sql │ │ │ ├── pl-sql-function-result-cache-6.sql │ │ │ ├── pl-sql-function-result-cache-7.sql │ │ │ ├── pl-sql-function-result-cache-9.sql │ │ │ ├── pls_integer-and-binary_integer-data-types-0.sql │ │ │ ├── pls_integer-and-binary_integer-data-types-2.sql │ │ │ ├── pls_integer-and-binary_integer-data-types-4.sql │ │ │ ├── pls_integer-and-binary_integer-data-types-6.sql │ │ │ ├── plsql-program-limits-0.sql │ │ │ ├── plsql-program-limits-1.sql │ │ │ ├── plsql-program-limits-2.sql │ │ │ ├── predefined-exceptions-0.sql │ │ │ ├── predefined-exceptions-2.sql │ │ │ ├── predefined-exceptions-3.sql │ │ │ ├── predefined-exceptions-4.sql │ │ │ ├── processing-query-result-sets-0.sql │ │ │ ├── processing-query-result-sets-10.sql │ │ │ ├── processing-query-result-sets-2.sql │ │ │ ├── processing-query-result-sets-4.sql │ │ │ ├── processing-query-result-sets-6.sql │ │ │ ├── processing-query-result-sets-8.sql │ │ │ ├── qualified-names-and-dot-notation-6.sql │ │ │ ├── raising-exceptions-explicitly-0.sql │ │ │ ├── raising-exceptions-explicitly-2.sql │ │ │ ├── raising-exceptions-explicitly-3.sql │ │ │ ├── raising-exceptions-explicitly-5.sql │ │ │ ├── raising-exceptions-explicitly-9.sql │ │ │ ├── record-variables-0.sql │ │ │ ├── record-variables-1.sql │ │ │ ├── record-variables-11.sql │ │ │ ├── record-variables-14.sql │ │ │ ├── record-variables-16.sql │ │ │ ├── record-variables-19.sql │ │ │ ├── record-variables-21.sql │ │ │ ├── record-variables-22.sql │ │ │ ├── record-variables-24.sql │ │ │ ├── record-variables-26.sql │ │ │ ├── record-variables-28.sql │ │ │ ├── record-variables-3.sql │ │ │ ├── record-variables-30.sql │ │ │ ├── record-variables-5.sql │ │ │ ├── record-variables-7.sql │ │ │ ├── record-variables-9.sql │ │ │ ├── recursive-subprograms-1.sql │ │ │ ├── recursive-subprograms-3.sql │ │ │ ├── redeclared-predefined-exceptions-0.sql │ │ │ ├── redeclared-predefined-exceptions-1.sql │ │ │ ├── redeclared-predefined-exceptions-3.sql │ │ │ ├── redeclared-predefined-exceptions-5.sql │ │ │ ├── references-identifiers-0.sql │ │ │ ├── release-changes-0.sql │ │ │ ├── release-changes-2.sql │ │ │ ├── release-changes-3.sql │ │ │ ├── release-changes-4.sql │ │ │ ├── retrieving-error-code-and-error-message-0.sql │ │ │ ├── retrying-transactions-handling-exceptions-0.sql │ │ │ ├── scope-and-visibility-identifiers-0.sql │ │ │ ├── scope-and-visibility-identifiers-1.sql │ │ │ ├── scope-and-visibility-identifiers-11.sql │ │ │ ├── scope-and-visibility-identifiers-3.sql │ │ │ ├── scope-and-visibility-identifiers-5.sql │ │ │ ├── scope-and-visibility-identifiers-7.sql │ │ │ ├── scope-and-visibility-identifiers-9.sql │ │ │ ├── sequential-control-statements-0.sql │ │ │ ├── sequential-control-statements-1.sql │ │ │ ├── sequential-control-statements-2.sql │ │ │ ├── serially_reusable-packages-0.sql │ │ │ ├── serially_reusable-packages-1.sql │ │ │ ├── serially_reusable-packages-3.sql │ │ │ ├── serially_reusable-packages-4.sql │ │ │ ├── serially_reusable-packages-6.sql │ │ │ ├── sql-data-types-1.sql │ │ │ ├── sql-data-types-10.sql │ │ │ ├── sql-data-types-12.sql │ │ │ ├── sql-data-types-14.sql │ │ │ ├── sql-data-types-16.sql │ │ │ ├── sql-data-types-18.sql │ │ │ ├── sql-data-types-20.sql │ │ │ ├── sql-data-types-22.sql │ │ │ ├── sql-data-types-24.sql │ │ │ ├── sql-data-types-26.sql │ │ │ ├── sql-data-types-29.sql │ │ │ ├── sql-data-types-3.sql │ │ │ ├── sql-data-types-31.sql │ │ │ ├── sql-data-types-32.sql │ │ │ ├── sql-data-types-34.sql │ │ │ ├── sql-data-types-36.sql │ │ │ ├── sql-data-types-38.sql │ │ │ ├── sql-data-types-4.sql │ │ │ ├── sql-data-types-42.sql │ │ │ ├── sql-data-types-44.sql │ │ │ ├── sql-data-types-46.sql │ │ │ ├── sql-data-types-48.sql │ │ │ ├── sql-data-types-50.sql │ │ │ ├── sql-data-types-52.sql │ │ │ ├── sql-data-types-6.sql │ │ │ ├── sql-data-types-8.sql │ │ │ ├── sql-injection-0.sql │ │ │ ├── sql-injection-1.sql │ │ │ ├── sql-injection-10.sql │ │ │ ├── sql-injection-12.sql │ │ │ ├── sql-injection-13.sql │ │ │ ├── sql-injection-14.sql │ │ │ ├── sql-injection-16.sql │ │ │ ├── sql-injection-18.sql │ │ │ ├── sql-injection-19.sql │ │ │ ├── sql-injection-2.sql │ │ │ ├── sql-injection-21.sql │ │ │ ├── sql-injection-23.sql │ │ │ ├── sql-injection-24.sql │ │ │ ├── sql-injection-26.sql │ │ │ ├── sql-injection-28.sql │ │ │ ├── sql-injection-30.sql │ │ │ ├── sql-injection-31.sql │ │ │ ├── sql-injection-4.sql │ │ │ ├── sql-injection-6.sql │ │ │ ├── sql-injection-7.sql │ │ │ ├── sql-injection-9.sql │ │ │ ├── subprogram-invocation-resolution-0.sql │ │ │ ├── subprogram-parameters-10.sql │ │ │ ├── subprogram-parameters-12.sql │ │ │ ├── subprogram-parameters-13.sql │ │ │ ├── subprogram-parameters-15.sql │ │ │ ├── subprogram-parameters-17.sql │ │ │ ├── subprogram-parameters-19.sql │ │ │ ├── subprogram-parameters-2.sql │ │ │ ├── subprogram-parameters-21.sql │ │ │ ├── subprogram-parameters-24.sql │ │ │ ├── subprogram-parameters-26.sql │ │ │ ├── subprogram-parameters-27.sql │ │ │ ├── subprogram-parameters-29.sql │ │ │ ├── subprogram-parameters-30.sql │ │ │ ├── subprogram-parameters-32.sql │ │ │ ├── subprogram-parameters-33.sql │ │ │ ├── subprogram-parameters-36.sql │ │ │ ├── subprogram-parameters-37.sql │ │ │ ├── subprogram-parameters-4.sql │ │ │ ├── subprogram-parameters-6.sql │ │ │ ├── subprogram-parameters-8.sql │ │ │ ├── subprogram-parts-0.sql │ │ │ ├── subprogram-parts-11.sql │ │ │ ├── subprogram-parts-2.sql │ │ │ ├── subprogram-parts-4.sql │ │ │ ├── subprogram-parts-6.sql │ │ │ ├── subprogram-parts-7.sql │ │ │ ├── subprogram-parts-9.sql │ │ │ ├── subprograms-invoked-triggers-0.sql │ │ │ ├── system-triggers-0.sql │ │ │ ├── system-triggers-1.sql │ │ │ ├── system-triggers-2.sql │ │ │ ├── system-triggers-3.sql │ │ │ ├── transaction-processing-and-control-0.sql │ │ │ ├── transaction-processing-and-control-1.sql │ │ │ ├── transaction-processing-and-control-11.sql │ │ │ ├── transaction-processing-and-control-2.sql │ │ │ ├── transaction-processing-and-control-3.sql │ │ │ ├── transaction-processing-and-control-5.sql │ │ │ ├── transaction-processing-and-control-6.sql │ │ │ ├── transaction-processing-and-control-7.sql │ │ │ ├── transaction-processing-and-control-8.sql │ │ │ ├── transaction-processing-and-control-9.sql │ │ │ ├── trigger-design-guidelines-0.sql │ │ │ ├── trigger-design-guidelines-1.sql │ │ │ ├── trigger-restrictions-0.sql │ │ │ ├── trigger-restrictions-11.sql │ │ │ ├── trigger-restrictions-12.sql │ │ │ ├── trigger-restrictions-14.sql │ │ │ ├── trigger-restrictions-2.sql │ │ │ ├── trigger-restrictions-4.sql │ │ │ ├── trigger-restrictions-6.sql │ │ │ ├── trigger-restrictions-7.sql │ │ │ ├── trigger-restrictions-9.sql │ │ │ ├── triggers-publishing-events-0.sql │ │ │ ├── triggers-publishing-events-10.sql │ │ │ ├── triggers-publishing-events-12.sql │ │ │ ├── triggers-publishing-events-14.sql │ │ │ ├── triggers-publishing-events-16.sql │ │ │ ├── triggers-publishing-events-18.sql │ │ │ ├── triggers-publishing-events-2.sql │ │ │ ├── triggers-publishing-events-20.sql │ │ │ ├── triggers-publishing-events-24.sql │ │ │ ├── triggers-publishing-events-28.sql │ │ │ ├── triggers-publishing-events-30.sql │ │ │ ├── triggers-publishing-events-34.sql │ │ │ ├── triggers-publishing-events-36.sql │ │ │ ├── triggers-publishing-events-38.sql │ │ │ ├── triggers-publishing-events-4.sql │ │ │ ├── triggers-publishing-events-42.sql │ │ │ ├── triggers-publishing-events-48.sql │ │ │ ├── triggers-publishing-events-50.sql │ │ │ ├── triggers-publishing-events-52.sql │ │ │ ├── triggers-publishing-events-6.sql │ │ │ ├── triggers-publishing-events-8.sql │ │ │ ├── updating-rows-records-0.sql │ │ │ ├── user-defined-pl-sql-subtypes-2.sql │ │ │ ├── user-defined-pl-sql-subtypes-5.sql │ │ │ ├── user-defined-pl-sql-subtypes-7.sql │ │ │ ├── user-defined-pl-sql-subtypes-9.sql │ │ │ ├── views-information-triggers-0.sql │ │ │ ├── views-information-triggers-1.sql │ │ │ ├── views-information-triggers-2.sql │ │ │ ├── views-information-triggers-4.sql │ │ │ ├── views-information-triggers-5.sql │ │ │ ├── what-is-capture-0.sql │ │ │ ├── what-is-capture-1.sql │ │ │ ├── what-is-capture-2.sql │ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-0.sql │ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-1.sql │ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-2.sql │ │ │ ├── wrapping-pl-sql-source-text-dbms_ddl-subprograms-3.sql │ │ │ ├── wrapping-pl-sql-source-text-pl-sql-wrapper-utility-4.sql │ │ │ └── wrapping-pl-sql-source-text-pl-sql-wrapper-utility-7.sql │ │ └── sqlrf/ │ │ ├── ABS-0.sql │ │ ├── ACOS-0.sql │ │ ├── ADD_MONTHS-0.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-10.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-11.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-12.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-13.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-14.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-15.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-16.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-17.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-18.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-19.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-2.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-20.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-21.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-22.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-23.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-24.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-25.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-26.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-27.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-28.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-29.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-3.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-30.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-31.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-32.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-33.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-34.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-35.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-36.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-37.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-6.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-7.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-8.sql │ │ ├── ADMINISTER-KEY-MANAGEMENT-9.sql │ │ ├── ALTER-ANALYTIC-VIEW-0.sql │ │ ├── ALTER-ANALYTIC-VIEW-1.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-0.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-1.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-10.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-11.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-12.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-13.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-14.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-2.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-3.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-4.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-5.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-6.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-7.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-8.sql │ │ ├── ALTER-AUDIT-POLICY-Unified-Auditing-9.sql │ │ ├── ALTER-CLUSTER-0.sql │ │ ├── ALTER-CLUSTER-1.sql │ │ ├── ALTER-CLUSTER-2.sql │ │ ├── ALTER-CLUSTER-3.sql │ │ ├── ALTER-CLUSTER-4.sql │ │ ├── ALTER-CLUSTER-5.sql │ │ ├── ALTER-CLUSTER-6.sql │ │ ├── ALTER-CLUSTER-7.sql │ │ ├── ALTER-DATABASE-0.sql │ │ ├── ALTER-DATABASE-1.sql │ │ ├── ALTER-DATABASE-10.sql │ │ ├── ALTER-DATABASE-11.sql │ │ ├── ALTER-DATABASE-12.sql │ │ ├── ALTER-DATABASE-13.sql │ │ ├── ALTER-DATABASE-14.sql │ │ ├── ALTER-DATABASE-15.sql │ │ ├── ALTER-DATABASE-16.sql │ │ ├── ALTER-DATABASE-17.sql │ │ ├── ALTER-DATABASE-18.sql │ │ ├── ALTER-DATABASE-19.sql │ │ ├── ALTER-DATABASE-2.sql │ │ ├── ALTER-DATABASE-20.sql │ │ ├── ALTER-DATABASE-21.sql │ │ ├── ALTER-DATABASE-22.sql │ │ ├── ALTER-DATABASE-23.sql │ │ ├── ALTER-DATABASE-24.sql │ │ ├── ALTER-DATABASE-25.sql │ │ ├── ALTER-DATABASE-26.sql │ │ ├── ALTER-DATABASE-27.sql │ │ ├── ALTER-DATABASE-28.sql │ │ ├── ALTER-DATABASE-3.sql │ │ ├── ALTER-DATABASE-4.sql │ │ ├── ALTER-DATABASE-5.sql │ │ ├── ALTER-DATABASE-6.sql │ │ ├── ALTER-DATABASE-7.sql │ │ ├── ALTER-DATABASE-8.sql │ │ ├── ALTER-DATABASE-9.sql │ │ ├── ALTER-DATABASE-LINK-0.sql │ │ ├── ALTER-DIMENSION-0.sql │ │ ├── ALTER-DISKGROUP-1.sql │ │ ├── ALTER-DISKGROUP-10.sql │ │ ├── ALTER-DISKGROUP-11.sql │ │ ├── ALTER-DISKGROUP-12.sql │ │ ├── ALTER-DISKGROUP-13.sql │ │ ├── ALTER-DISKGROUP-14.sql │ │ ├── ALTER-DISKGROUP-15.sql │ │ ├── ALTER-DISKGROUP-16.sql │ │ ├── ALTER-DISKGROUP-2.sql │ │ ├── ALTER-DISKGROUP-3.sql │ │ ├── ALTER-DISKGROUP-4.sql │ │ ├── ALTER-DISKGROUP-5.sql │ │ ├── ALTER-DISKGROUP-6.sql │ │ ├── ALTER-DISKGROUP-7.sql │ │ ├── ALTER-DISKGROUP-8.sql │ │ ├── ALTER-DISKGROUP-9.sql │ │ ├── ALTER-HIERARCHY-0.sql │ │ ├── ALTER-INDEX-0.sql │ │ ├── ALTER-INDEX-1.sql │ │ ├── ALTER-INDEX-10.sql │ │ ├── ALTER-INDEX-11.sql │ │ ├── ALTER-INDEX-12.sql │ │ ├── ALTER-INDEX-2.sql │ │ ├── ALTER-INDEX-3.sql │ │ ├── ALTER-INDEX-4.sql │ │ ├── ALTER-INDEX-5.sql │ │ ├── ALTER-INDEX-6.sql │ │ ├── ALTER-INDEX-7.sql │ │ ├── ALTER-INDEX-8.sql │ │ ├── ALTER-INDEX-9.sql │ │ ├── ALTER-INDEXTYPE-0.sql │ │ ├── ALTER-INMEMORY-JOIN-GROUP-0.sql │ │ ├── ALTER-INMEMORY-JOIN-GROUP-1.sql │ │ ├── ALTER-JAVA-0.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-10.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-11.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-12.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-13.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-14.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-15.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-16.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-17.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-18.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-19.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-2.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-20.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-21.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-22.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-23.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-24.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-25.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-3.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-4.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-5.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-6.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-7.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-8.sql │ │ ├── ALTER-LOCKDOWN-PROFILE-9.sql │ │ ├── ALTER-MATERIALIZED-VIEW-0.sql │ │ ├── ALTER-MATERIALIZED-VIEW-1.sql │ │ ├── ALTER-MATERIALIZED-VIEW-2.sql │ │ ├── ALTER-MATERIALIZED-VIEW-3.sql │ │ ├── ALTER-MATERIALIZED-VIEW-4.sql │ │ ├── ALTER-MATERIALIZED-VIEW-5.sql │ │ ├── ALTER-MATERIALIZED-VIEW-6.sql │ │ ├── ALTER-MATERIALIZED-VIEW-7.sql │ │ ├── ALTER-MATERIALIZED-VIEW-LOG-0.sql │ │ ├── ALTER-MATERIALIZED-VIEW-LOG-1.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-0.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-1.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-2.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-3.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-4.sql │ │ ├── ALTER-MATERIALIZED-ZONEMAP-5.sql │ │ ├── ALTER-OPERATOR-0.sql │ │ ├── ALTER-OUTLINE-0.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-0.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-1.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-10.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-11.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-12.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-13.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-14.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-15.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-16.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-17.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-18.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-19.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-2.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-20.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-21.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-3.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-6.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-7.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-8.sql │ │ ├── ALTER-PLUGGABLE-DATABASE-9.sql │ │ ├── ALTER-PROFILE-0.sql │ │ ├── ALTER-PROFILE-1.sql │ │ ├── ALTER-PROFILE-2.sql │ │ ├── ALTER-PROFILE-3.sql │ │ ├── ALTER-PROFILE-4.sql │ │ ├── ALTER-PROFILE-5.sql │ │ ├── ALTER-PROFILE-6.sql │ │ ├── ALTER-PROFILE-7.sql │ │ ├── ALTER-PROFILE-8.sql │ │ ├── ALTER-PROFILE-9.sql │ │ ├── ALTER-RESOURCE-COST-0.sql │ │ ├── ALTER-RESOURCE-COST-2.sql │ │ ├── ALTER-ROLE-0.sql │ │ ├── ALTER-ROLE-1.sql │ │ ├── ALTER-ROLE-2.sql │ │ ├── ALTER-ROLLBACK-SEGMENT-0.sql │ │ ├── ALTER-ROLLBACK-SEGMENT-1.sql │ │ ├── ALTER-SEQUENCE-0.sql │ │ ├── ALTER-SEQUENCE-1.sql │ │ ├── ALTER-SESSION-0.sql │ │ ├── ALTER-SESSION-1.sql │ │ ├── ALTER-SESSION-13.sql │ │ ├── ALTER-SESSION-14.sql │ │ ├── ALTER-SESSION-15.sql │ │ ├── ALTER-SESSION-16.sql │ │ ├── ALTER-SESSION-17.sql │ │ ├── ALTER-SESSION-18.sql │ │ ├── ALTER-SESSION-19.sql │ │ ├── ALTER-SESSION-2.sql │ │ ├── ALTER-SESSION-20.sql │ │ ├── ALTER-SESSION-21.sql │ │ ├── ALTER-SESSION-22.sql │ │ ├── ALTER-SESSION-23.sql │ │ ├── ALTER-SESSION-24.sql │ │ ├── ALTER-SESSION-25.sql │ │ ├── ALTER-SYNONYM-0.sql │ │ ├── ALTER-SYNONYM-1.sql │ │ ├── ALTER-SYNONYM-2.sql │ │ ├── ALTER-SYSTEM-0.sql │ │ ├── ALTER-SYSTEM-1.sql │ │ ├── ALTER-SYSTEM-10.sql │ │ ├── ALTER-SYSTEM-11.sql │ │ ├── ALTER-SYSTEM-12.sql │ │ ├── ALTER-SYSTEM-13.sql │ │ ├── ALTER-SYSTEM-14.sql │ │ ├── ALTER-SYSTEM-15.sql │ │ ├── ALTER-SYSTEM-16.sql │ │ ├── ALTER-SYSTEM-17.sql │ │ ├── ALTER-SYSTEM-18.sql │ │ ├── ALTER-SYSTEM-19.sql │ │ ├── ALTER-SYSTEM-20.sql │ │ ├── ALTER-SYSTEM-21.sql │ │ ├── ALTER-SYSTEM-22.sql │ │ ├── ALTER-SYSTEM-23.sql │ │ ├── ALTER-SYSTEM-24.sql │ │ ├── ALTER-SYSTEM-25.sql │ │ ├── ALTER-SYSTEM-26.sql │ │ ├── ALTER-SYSTEM-27.sql │ │ ├── ALTER-SYSTEM-28.sql │ │ ├── ALTER-SYSTEM-3.sql │ │ ├── ALTER-SYSTEM-4.sql │ │ ├── ALTER-SYSTEM-5.sql │ │ ├── ALTER-SYSTEM-7.sql │ │ ├── ALTER-SYSTEM-8.sql │ │ ├── ALTER-SYSTEM-9.sql │ │ ├── ALTER-TABLE-0.sql │ │ ├── ALTER-TABLE-10.sql │ │ ├── ALTER-TABLE-100.sql │ │ ├── ALTER-TABLE-101.sql │ │ ├── ALTER-TABLE-102.sql │ │ ├── ALTER-TABLE-103.sql │ │ ├── ALTER-TABLE-104.sql │ │ ├── ALTER-TABLE-105.sql │ │ ├── ALTER-TABLE-106.sql │ │ ├── ALTER-TABLE-107.sql │ │ ├── ALTER-TABLE-108.sql │ │ ├── ALTER-TABLE-109.sql │ │ ├── ALTER-TABLE-11.sql │ │ ├── ALTER-TABLE-110.sql │ │ ├── ALTER-TABLE-111.sql │ │ ├── ALTER-TABLE-112.sql │ │ ├── ALTER-TABLE-113.sql │ │ ├── ALTER-TABLE-114.sql │ │ ├── ALTER-TABLE-115.sql │ │ ├── ALTER-TABLE-116.sql │ │ ├── ALTER-TABLE-117.sql │ │ ├── ALTER-TABLE-118.sql │ │ ├── ALTER-TABLE-119.sql │ │ ├── ALTER-TABLE-12.sql │ │ ├── ALTER-TABLE-120.sql │ │ ├── ALTER-TABLE-121.sql │ │ ├── ALTER-TABLE-122.sql │ │ ├── ALTER-TABLE-123.sql │ │ ├── ALTER-TABLE-124.sql │ │ ├── ALTER-TABLE-125.sql │ │ ├── ALTER-TABLE-126.sql │ │ ├── ALTER-TABLE-127.sql │ │ ├── ALTER-TABLE-128.sql │ │ ├── ALTER-TABLE-129.sql │ │ ├── ALTER-TABLE-13.sql │ │ ├── ALTER-TABLE-14.sql │ │ ├── ALTER-TABLE-15.sql │ │ ├── ALTER-TABLE-16.sql │ │ ├── ALTER-TABLE-17.sql │ │ ├── ALTER-TABLE-18.sql │ │ ├── ALTER-TABLE-19.sql │ │ ├── ALTER-TABLE-20.sql │ │ ├── ALTER-TABLE-21.sql │ │ ├── ALTER-TABLE-22.sql │ │ ├── ALTER-TABLE-23.sql │ │ ├── ALTER-TABLE-24.sql │ │ ├── ALTER-TABLE-25.sql │ │ ├── ALTER-TABLE-26.sql │ │ ├── ALTER-TABLE-27.sql │ │ ├── ALTER-TABLE-28.sql │ │ ├── ALTER-TABLE-29.sql │ │ ├── ALTER-TABLE-30.sql │ │ ├── ALTER-TABLE-31.sql │ │ ├── ALTER-TABLE-32.sql │ │ ├── ALTER-TABLE-33.sql │ │ ├── ALTER-TABLE-34.sql │ │ ├── ALTER-TABLE-35.sql │ │ ├── ALTER-TABLE-36.sql │ │ ├── ALTER-TABLE-37.sql │ │ ├── ALTER-TABLE-38.sql │ │ ├── ALTER-TABLE-39.sql │ │ ├── ALTER-TABLE-4.sql │ │ ├── ALTER-TABLE-40.sql │ │ ├── ALTER-TABLE-41.sql │ │ ├── ALTER-TABLE-42.sql │ │ ├── ALTER-TABLE-43.sql │ │ ├── ALTER-TABLE-44.sql │ │ ├── ALTER-TABLE-45.sql │ │ ├── ALTER-TABLE-46.sql │ │ ├── ALTER-TABLE-47.sql │ │ ├── ALTER-TABLE-48.sql │ │ ├── ALTER-TABLE-49.sql │ │ ├── ALTER-TABLE-5.sql │ │ ├── ALTER-TABLE-50.sql │ │ ├── ALTER-TABLE-51.sql │ │ ├── ALTER-TABLE-52.sql │ │ ├── ALTER-TABLE-53.sql │ │ ├── ALTER-TABLE-54.sql │ │ ├── ALTER-TABLE-55.sql │ │ ├── ALTER-TABLE-56.sql │ │ ├── ALTER-TABLE-57.sql │ │ ├── ALTER-TABLE-58.sql │ │ ├── ALTER-TABLE-59.sql │ │ ├── ALTER-TABLE-6.sql │ │ ├── ALTER-TABLE-60.sql │ │ ├── ALTER-TABLE-61.sql │ │ ├── ALTER-TABLE-62.sql │ │ ├── ALTER-TABLE-63.sql │ │ ├── ALTER-TABLE-64.sql │ │ ├── ALTER-TABLE-65.sql │ │ ├── ALTER-TABLE-66.sql │ │ ├── ALTER-TABLE-67.sql │ │ ├── ALTER-TABLE-68.sql │ │ ├── ALTER-TABLE-69.sql │ │ ├── ALTER-TABLE-7.sql │ │ ├── ALTER-TABLE-70.sql │ │ ├── ALTER-TABLE-71.sql │ │ ├── ALTER-TABLE-72.sql │ │ ├── ALTER-TABLE-73.sql │ │ ├── ALTER-TABLE-74.sql │ │ ├── ALTER-TABLE-75.sql │ │ ├── ALTER-TABLE-76.sql │ │ ├── ALTER-TABLE-77.sql │ │ ├── ALTER-TABLE-78.sql │ │ ├── ALTER-TABLE-79.sql │ │ ├── ALTER-TABLE-8.sql │ │ ├── ALTER-TABLE-80.sql │ │ ├── ALTER-TABLE-81.sql │ │ ├── ALTER-TABLE-82.sql │ │ ├── ALTER-TABLE-83.sql │ │ ├── ALTER-TABLE-84.sql │ │ ├── ALTER-TABLE-85.sql │ │ ├── ALTER-TABLE-86.sql │ │ ├── ALTER-TABLE-87.sql │ │ ├── ALTER-TABLE-88.sql │ │ ├── ALTER-TABLE-89.sql │ │ ├── ALTER-TABLE-9.sql │ │ ├── ALTER-TABLE-90.sql │ │ ├── ALTER-TABLE-91.sql │ │ ├── ALTER-TABLE-92.sql │ │ ├── ALTER-TABLE-93.sql │ │ ├── ALTER-TABLE-94.sql │ │ ├── ALTER-TABLE-95.sql │ │ ├── ALTER-TABLE-96.sql │ │ ├── ALTER-TABLE-97.sql │ │ ├── ALTER-TABLE-98.sql │ │ ├── ALTER-TABLE-99.sql │ │ ├── ALTER-TABLESPACE-0.sql │ │ ├── ALTER-TABLESPACE-1.sql │ │ ├── ALTER-TABLESPACE-10.sql │ │ ├── ALTER-TABLESPACE-11.sql │ │ ├── ALTER-TABLESPACE-12.sql │ │ ├── ALTER-TABLESPACE-13.sql │ │ ├── ALTER-TABLESPACE-14.sql │ │ ├── ALTER-TABLESPACE-15.sql │ │ ├── ALTER-TABLESPACE-16.sql │ │ ├── ALTER-TABLESPACE-2.sql │ │ ├── ALTER-TABLESPACE-3.sql │ │ ├── ALTER-TABLESPACE-4.sql │ │ ├── ALTER-TABLESPACE-5.sql │ │ ├── ALTER-TABLESPACE-6.sql │ │ ├── ALTER-TABLESPACE-7.sql │ │ ├── ALTER-TABLESPACE-8.sql │ │ ├── ALTER-TABLESPACE-9.sql │ │ ├── ALTER-TABLESPACE-SET-0.sql │ │ ├── ALTER-USER-0.sql │ │ ├── ALTER-USER-1.sql │ │ ├── ALTER-USER-10.sql │ │ ├── ALTER-USER-11.sql │ │ ├── ALTER-USER-12.sql │ │ ├── ALTER-USER-13.sql │ │ ├── ALTER-USER-14.sql │ │ ├── ALTER-USER-15.sql │ │ ├── ALTER-USER-2.sql │ │ ├── ALTER-USER-4.sql │ │ ├── ALTER-USER-5.sql │ │ ├── ALTER-USER-6.sql │ │ ├── ALTER-USER-7.sql │ │ ├── ALTER-USER-8.sql │ │ ├── ALTER-USER-9.sql │ │ ├── ALTER-VIEW-0.sql │ │ ├── ALTER-VIEW-1.sql │ │ ├── ANALYZE-0.sql │ │ ├── ANALYZE-1.sql │ │ ├── ANALYZE-2.sql │ │ ├── ANALYZE-3.sql │ │ ├── ANALYZE-4.sql │ │ ├── ANALYZE-5.sql │ │ ├── ANALYZE-6.sql │ │ ├── ANALYZE-7.sql │ │ ├── ANY_VALUE-0.sql │ │ ├── APPROX_COUNT-0.sql │ │ ├── APPROX_COUNT_DISTINCT-0.sql │ │ ├── APPROX_COUNT_DISTINCT-1.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-0.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-1.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-2.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-3.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-4.sql │ │ ├── APPROX_COUNT_DISTINCT_DETAIL-5.sql │ │ ├── APPROX_MEDIAN-0.sql │ │ ├── APPROX_MEDIAN-1.sql │ │ ├── APPROX_MEDIAN-2.sql │ │ ├── APPROX_MEDIAN-3.sql │ │ ├── APPROX_PERCENTILE-0.sql │ │ ├── APPROX_PERCENTILE-1.sql │ │ ├── APPROX_PERCENTILE-2.sql │ │ ├── APPROX_PERCENTILE-3.sql │ │ ├── APPROX_PERCENTILE_DETAIL-0.sql │ │ ├── APPROX_PERCENTILE_DETAIL-1.sql │ │ ├── APPROX_PERCENTILE_DETAIL-2.sql │ │ ├── APPROX_PERCENTILE_DETAIL-3.sql │ │ ├── APPROX_PERCENTILE_DETAIL-4.sql │ │ ├── APPROX_PERCENTILE_DETAIL-5.sql │ │ ├── APPROX_PERCENTILE_DETAIL-6.sql │ │ ├── APPROX_PERCENTILE_DETAIL-7.sql │ │ ├── APPROX_PERCENTILE_DETAIL-8.sql │ │ ├── APPROX_RANK-0.sql │ │ ├── APPROX_SUM-0.sql │ │ ├── ASCII-0.sql │ │ ├── ASCIISTR-0.sql │ │ ├── ASIN-0.sql │ │ ├── ASSOCIATE-STATISTICS-0.sql │ │ ├── ASSOCIATE-STATISTICS-1.sql │ │ ├── ATAN-0.sql │ │ ├── ATAN2-0.sql │ │ ├── AUDIT-Unified-Auditing-0.sql │ │ ├── AUDIT-Unified-Auditing-1.sql │ │ ├── AUDIT-Unified-Auditing-2.sql │ │ ├── AUDIT-Unified-Auditing-3.sql │ │ ├── AUDIT-Unified-Auditing-4.sql │ │ ├── AUDIT-Unified-Auditing-5.sql │ │ ├── AUDIT-Unified-Auditing-6.sql │ │ ├── AUDIT-Unified-Auditing-7.sql │ │ ├── AUDIT-Unified-Auditing-8.sql │ │ ├── AVG-0.sql │ │ ├── AVG-1.sql │ │ ├── About-SQL-Expressions-2.sql │ │ ├── About-SQL-Expressions-3.sql │ │ ├── About-User-Defined-Functions-1.sql │ │ ├── About-User-Defined-Functions-2.sql │ │ ├── About-User-Defined-Functions-4.sql │ │ ├── Aggregate-Functions-0.sql │ │ ├── Arithmetic-Operators-0.sql │ │ ├── Arithmetic-Operators-1.sql │ │ ├── Arithmetic-Operators-2.sql │ │ ├── Automatic-Locks-in-DML-Operations-0.sql │ │ ├── BETWEEN-Condition-5.sql │ │ ├── BFILENAME-0.sql │ │ ├── BIN_TO_NUM-0.sql │ │ ├── BIN_TO_NUM-1.sql │ │ ├── BITAND-0.sql │ │ ├── BITAND-1.sql │ │ ├── BITAND-2.sql │ │ ├── BIT_AND_AGG-0.sql │ │ ├── BIT_AND_AGG-1.sql │ │ ├── CALL-0.sql │ │ ├── CALL-1.sql │ │ ├── CALL-2.sql │ │ ├── CALL-3.sql │ │ ├── CALL-4.sql │ │ ├── CARDINALITY-0.sql │ │ ├── CASE-Expressions-0.sql │ │ ├── CASE-Expressions-1.sql │ │ ├── CAST-0.sql │ │ ├── CAST-1.sql │ │ ├── CAST-10.sql │ │ ├── CAST-11.sql │ │ ├── CAST-12.sql │ │ ├── CAST-13.sql │ │ ├── CAST-14.sql │ │ ├── CAST-15.sql │ │ ├── CAST-16.sql │ │ ├── CAST-17.sql │ │ ├── CAST-18.sql │ │ ├── CAST-2.sql │ │ ├── CAST-3.sql │ │ ├── CAST-4.sql │ │ ├── CAST-5.sql │ │ ├── CAST-6.sql │ │ ├── CAST-7.sql │ │ ├── CAST-8.sql │ │ ├── CAST-9.sql │ │ ├── CEIL-0.sql │ │ ├── CHARTOROWID-0.sql │ │ ├── CHR-0.sql │ │ ├── CHR-1.sql │ │ ├── CHR-2.sql │ │ ├── CHR-3.sql │ │ ├── CHR-4.sql │ │ ├── CHR-5.sql │ │ ├── CLUSTER_DETAILS-0.sql │ │ ├── CLUSTER_DETAILS-1.sql │ │ ├── CLUSTER_DISTANCE-0.sql │ │ ├── CLUSTER_ID-0.sql │ │ ├── CLUSTER_ID-1.sql │ │ ├── CLUSTER_PROBABILITY-0.sql │ │ ├── CLUSTER_SET-0.sql │ │ ├── COALESCE-4.sql │ │ ├── COLLATE-Operator-0.sql │ │ ├── COLLATION-0.sql │ │ ├── COLLECT-0.sql │ │ ├── COLLECT-1.sql │ │ ├── COLUMN_VALUE-Pseudocolumn-0.sql │ │ ├── COLUMN_VALUE-Pseudocolumn-1.sql │ │ ├── COLUMN_VALUE-Pseudocolumn-2.sql │ │ ├── COLUMN_VALUE-Pseudocolumn-3.sql │ │ ├── COLUMN_VALUE-Pseudocolumn-4.sql │ │ ├── COMMENT-0.sql │ │ ├── COMMENT-1.sql │ │ ├── COMMIT-0.sql │ │ ├── COMMIT-1.sql │ │ ├── COMMIT-2.sql │ │ ├── COMMIT-3.sql │ │ ├── COMPOSE-0.sql │ │ ├── CONCAT-0.sql │ │ ├── CONVERT-0.sql │ │ ├── CONVERT-1.sql │ │ ├── CON_DBID_TO_ID-0.sql │ │ ├── CON_DBID_TO_ID-1.sql │ │ ├── CON_GUID_TO_ID-0.sql │ │ ├── CON_GUID_TO_ID-1.sql │ │ ├── CON_NAME_TO_ID-0.sql │ │ ├── CON_NAME_TO_ID-1.sql │ │ ├── CON_UID_TO_ID-0.sql │ │ ├── CON_UID_TO_ID-1.sql │ │ ├── CORR-1.sql │ │ ├── CORR-2.sql │ │ ├── CORR_A-0.sql │ │ ├── CORR_A-1.sql │ │ ├── COS-0.sql │ │ ├── COSH-0.sql │ │ ├── COUNT-0.sql │ │ ├── COUNT-1.sql │ │ ├── COVAR_POP-1.sql │ │ ├── COVAR_POP-2.sql │ │ ├── CREATE-ANALYTIC-VIEW-0.sql │ │ ├── CREATE-ANALYTIC-VIEW-1.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-0.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-1.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-2.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-3.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-4.sql │ │ ├── CREATE-ATTRIBUTE-DIMENSION-5.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-1.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-10.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-11.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-14.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-15.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-16.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-17.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-18.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-19.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-2.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-20.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-21.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-22.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-23.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-24.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-25.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-26.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-27.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-28.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-3.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-30.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-4.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-5.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-6.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-7.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-8.sql │ │ ├── CREATE-AUDIT-POLICY-Unified-Auditing-9.sql │ │ ├── CREATE-CLUSTER-0.sql │ │ ├── CREATE-CLUSTER-1.sql │ │ ├── CREATE-CLUSTER-10.sql │ │ ├── CREATE-CLUSTER-11.sql │ │ ├── CREATE-CLUSTER-12.sql │ │ ├── CREATE-CLUSTER-13.sql │ │ ├── CREATE-CLUSTER-2.sql │ │ ├── CREATE-CLUSTER-3.sql │ │ ├── CREATE-CLUSTER-4.sql │ │ ├── CREATE-CLUSTER-5.sql │ │ ├── CREATE-CLUSTER-6.sql │ │ ├── CREATE-CLUSTER-7.sql │ │ ├── CREATE-CLUSTER-8.sql │ │ ├── CREATE-CLUSTER-9.sql │ │ ├── CREATE-CONTEXT-0.sql │ │ ├── CREATE-CONTEXT-1.sql │ │ ├── CREATE-CONTROLFILE-0.sql │ │ ├── CREATE-DATABASE-0.sql │ │ ├── CREATE-DATABASE-1.sql │ │ ├── CREATE-DATABASE-LINK-0.sql │ │ ├── CREATE-DATABASE-LINK-1.sql │ │ ├── CREATE-DATABASE-LINK-2.sql │ │ ├── CREATE-DATABASE-LINK-3.sql │ │ ├── CREATE-DATABASE-LINK-4.sql │ │ ├── CREATE-DATABASE-LINK-5.sql │ │ ├── CREATE-DATABASE-LINK-6.sql │ │ ├── CREATE-DATABASE-LINK-7.sql │ │ ├── CREATE-DIMENSION-0.sql │ │ ├── CREATE-DIMENSION-1.sql │ │ ├── CREATE-DIMENSION-2.sql │ │ ├── CREATE-DIRECTORY-1.sql │ │ ├── CREATE-DIRECTORY-2.sql │ │ ├── CREATE-DIRECTORY-3.sql │ │ ├── CREATE-DIRECTORY-4.sql │ │ ├── CREATE-DISKGROUP-0.sql │ │ ├── CREATE-EDITION-0.sql │ │ ├── CREATE-EDITION-1.sql │ │ ├── CREATE-EDITION-2.sql │ │ ├── CREATE-EDITION-3.sql │ │ ├── CREATE-EDITION-4.sql │ │ ├── CREATE-EDITION-5.sql │ │ ├── CREATE-EDITION-6.sql │ │ ├── CREATE-EDITION-7.sql │ │ ├── CREATE-FLASHBACK-ARCHIVE-0.sql │ │ ├── CREATE-FLASHBACK-ARCHIVE-2.sql │ │ ├── CREATE-FLASHBACK-ARCHIVE-3.sql │ │ ├── CREATE-FLASHBACK-ARCHIVE-4.sql │ │ ├── CREATE-HIERARCHY-0.sql │ │ ├── CREATE-HIERARCHY-1.sql │ │ ├── CREATE-HIERARCHY-2.sql │ │ ├── CREATE-INDEX-0.sql │ │ ├── CREATE-INDEX-10.sql │ │ ├── CREATE-INDEX-11.sql │ │ ├── CREATE-INDEX-12.sql │ │ ├── CREATE-INDEX-13.sql │ │ ├── CREATE-INDEX-14.sql │ │ ├── CREATE-INDEX-15.sql │ │ ├── CREATE-INDEX-16.sql │ │ ├── CREATE-INDEX-17.sql │ │ ├── CREATE-INDEX-18.sql │ │ ├── CREATE-INDEX-19.sql │ │ ├── CREATE-INDEX-20.sql │ │ ├── CREATE-INDEX-21.sql │ │ ├── CREATE-INDEX-22.sql │ │ ├── CREATE-INDEX-23.sql │ │ ├── CREATE-INDEX-24.sql │ │ ├── CREATE-INDEX-25.sql │ │ ├── CREATE-INDEX-26.sql │ │ ├── CREATE-INDEX-27.sql │ │ ├── CREATE-INDEX-28.sql │ │ ├── CREATE-INDEX-29.sql │ │ ├── CREATE-INDEX-4.sql │ │ ├── CREATE-INDEX-5.sql │ │ ├── CREATE-INDEX-6.sql │ │ ├── CREATE-INDEX-7.sql │ │ ├── CREATE-INDEX-8.sql │ │ ├── CREATE-INDEX-9.sql │ │ ├── CREATE-INDEXTYPE-0.sql │ │ ├── CREATE-INMEMORY-JOIN-GROUP-0.sql │ │ ├── CREATE-INMEMORY-JOIN-GROUP-1.sql │ │ ├── CREATE-JAVA-0.sql │ │ ├── CREATE-JAVA-1.sql │ │ ├── CREATE-JAVA-2.sql │ │ ├── CREATE-JAVA-3.sql │ │ ├── CREATE-LOCKDOWN-PROFILE-0.sql │ │ ├── CREATE-MATERIALIZED-VIEW-0.sql │ │ ├── CREATE-MATERIALIZED-VIEW-1.sql │ │ ├── CREATE-MATERIALIZED-VIEW-10.sql │ │ ├── CREATE-MATERIALIZED-VIEW-11.sql │ │ ├── CREATE-MATERIALIZED-VIEW-12.sql │ │ ├── CREATE-MATERIALIZED-VIEW-2.sql │ │ ├── CREATE-MATERIALIZED-VIEW-3.sql │ │ ├── CREATE-MATERIALIZED-VIEW-4.sql │ │ ├── CREATE-MATERIALIZED-VIEW-5.sql │ │ ├── CREATE-MATERIALIZED-VIEW-6.sql │ │ ├── CREATE-MATERIALIZED-VIEW-7.sql │ │ ├── CREATE-MATERIALIZED-VIEW-8.sql │ │ ├── CREATE-MATERIALIZED-VIEW-9.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-1.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-2.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-3.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-4.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-5.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-6.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-7.sql │ │ ├── CREATE-MATERIALIZED-VIEW-LOG-8.sql │ │ ├── CREATE-MATERIALIZED-ZONEMAP-4.sql │ │ ├── CREATE-MATERIALIZED-ZONEMAP-5.sql │ │ ├── CREATE-MATERIALIZED-ZONEMAP-6.sql │ │ ├── CREATE-MATERIALIZED-ZONEMAP-7.sql │ │ ├── CREATE-MATERIALIZED-ZONEMAP-8.sql │ │ ├── CREATE-OPERATOR-0.sql │ │ ├── CREATE-OUTLINE-0.sql │ │ ├── CREATE-OUTLINE-1.sql │ │ ├── CREATE-OUTLINE-2.sql │ │ ├── CREATE-PFILE-0.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-10.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-11.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-3.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-4.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-6.sql │ │ ├── CREATE-PLUGGABLE-DATABASE-9.sql │ │ ├── CREATE-PROFILE-1.sql │ │ ├── CREATE-PROFILE-2.sql │ │ ├── CREATE-PROFILE-4.sql │ │ ├── CREATE-PROFILE-5.sql │ │ ├── CREATE-PROFILE-6.sql │ │ ├── CREATE-PROFILE-7.sql │ │ ├── CREATE-RESTORE-POINT-0.sql │ │ ├── CREATE-ROLE-1.sql │ │ ├── CREATE-ROLE-2.sql │ │ ├── CREATE-ROLE-3.sql │ │ ├── CREATE-ROLE-4.sql │ │ ├── CREATE-ROLE-5.sql │ │ ├── CREATE-ROLE-6.sql │ │ ├── CREATE-ROLE-7.sql │ │ ├── CREATE-ROLLBACK-SEGMENT-0.sql │ │ ├── CREATE-ROLLBACK-SEGMENT-1.sql │ │ ├── CREATE-SCHEMA-0.sql │ │ ├── CREATE-SEQUENCE-2.sql │ │ ├── CREATE-SEQUENCE-3.sql │ │ ├── CREATE-SEQUENCE-4.sql │ │ ├── CREATE-SPFILE-0.sql │ │ ├── CREATE-SPFILE-1.sql │ │ ├── CREATE-SPFILE-2.sql │ │ ├── CREATE-SPFILE-4.sql │ │ ├── CREATE-SYNONYM-0.sql │ │ ├── CREATE-SYNONYM-1.sql │ │ ├── CREATE-SYNONYM-2.sql │ │ ├── CREATE-SYNONYM-3.sql │ │ ├── CREATE-SYNONYM-4.sql │ │ ├── CREATE-SYNONYM-5.sql │ │ ├── CREATE-TABLE-0.sql │ │ ├── CREATE-TABLE-1.sql │ │ ├── CREATE-TABLE-10.sql │ │ ├── CREATE-TABLE-11.sql │ │ ├── CREATE-TABLE-12.sql │ │ ├── CREATE-TABLE-13.sql │ │ ├── CREATE-TABLE-14.sql │ │ ├── CREATE-TABLE-15.sql │ │ ├── CREATE-TABLE-16.sql │ │ ├── CREATE-TABLE-17.sql │ │ ├── CREATE-TABLE-18.sql │ │ ├── CREATE-TABLE-19.sql │ │ ├── CREATE-TABLE-20.sql │ │ ├── CREATE-TABLE-21.sql │ │ ├── CREATE-TABLE-22.sql │ │ ├── CREATE-TABLE-23.sql │ │ ├── CREATE-TABLE-24.sql │ │ ├── CREATE-TABLE-25.sql │ │ ├── CREATE-TABLE-26.sql │ │ ├── CREATE-TABLE-27.sql │ │ ├── CREATE-TABLE-28.sql │ │ ├── CREATE-TABLE-29.sql │ │ ├── CREATE-TABLE-30.sql │ │ ├── CREATE-TABLE-31.sql │ │ ├── CREATE-TABLE-32.sql │ │ ├── CREATE-TABLE-33.sql │ │ ├── CREATE-TABLE-34.sql │ │ ├── CREATE-TABLE-35.sql │ │ ├── CREATE-TABLE-36.sql │ │ ├── CREATE-TABLE-37.sql │ │ ├── CREATE-TABLE-38.sql │ │ ├── CREATE-TABLE-39.sql │ │ ├── CREATE-TABLE-40.sql │ │ ├── CREATE-TABLE-41.sql │ │ ├── CREATE-TABLE-42.sql │ │ ├── CREATE-TABLE-43.sql │ │ ├── CREATE-TABLE-44.sql │ │ ├── CREATE-TABLE-45.sql │ │ ├── CREATE-TABLE-46.sql │ │ ├── CREATE-TABLE-47.sql │ │ ├── CREATE-TABLE-48.sql │ │ ├── CREATE-TABLE-49.sql │ │ ├── CREATE-TABLE-5.sql │ │ ├── CREATE-TABLE-50.sql │ │ ├── CREATE-TABLE-51.sql │ │ ├── CREATE-TABLE-52.sql │ │ ├── CREATE-TABLE-53.sql │ │ ├── CREATE-TABLE-54.sql │ │ ├── CREATE-TABLE-55.sql │ │ ├── CREATE-TABLE-56.sql │ │ ├── CREATE-TABLE-57.sql │ │ ├── CREATE-TABLE-58.sql │ │ ├── CREATE-TABLE-59.sql │ │ ├── CREATE-TABLE-6.sql │ │ ├── CREATE-TABLE-60.sql │ │ ├── CREATE-TABLE-61.sql │ │ ├── CREATE-TABLE-62.sql │ │ ├── CREATE-TABLE-63.sql │ │ ├── CREATE-TABLE-64.sql │ │ ├── CREATE-TABLE-65.sql │ │ ├── CREATE-TABLE-66.sql │ │ ├── CREATE-TABLE-67.sql │ │ ├── CREATE-TABLE-69.sql │ │ ├── CREATE-TABLE-7.sql │ │ ├── CREATE-TABLE-70.sql │ │ ├── CREATE-TABLE-71.sql │ │ ├── CREATE-TABLE-72.sql │ │ ├── CREATE-TABLE-73.sql │ │ ├── CREATE-TABLE-74.sql │ │ ├── CREATE-TABLE-75.sql │ │ ├── CREATE-TABLE-8.sql │ │ ├── CREATE-TABLE-9.sql │ │ ├── CREATE-TABLESPACE-0.sql │ │ ├── CREATE-TABLESPACE-1.sql │ │ ├── CREATE-TABLESPACE-10.sql │ │ ├── CREATE-TABLESPACE-11.sql │ │ ├── CREATE-TABLESPACE-12.sql │ │ ├── CREATE-TABLESPACE-14.sql │ │ ├── CREATE-TABLESPACE-15.sql │ │ ├── CREATE-TABLESPACE-16.sql │ │ ├── CREATE-TABLESPACE-2.sql │ │ ├── CREATE-TABLESPACE-3.sql │ │ ├── CREATE-TABLESPACE-4.sql │ │ ├── CREATE-TABLESPACE-5.sql │ │ ├── CREATE-TABLESPACE-6.sql │ │ ├── CREATE-TABLESPACE-7.sql │ │ ├── CREATE-TABLESPACE-8.sql │ │ ├── CREATE-TABLESPACE-9.sql │ │ ├── CREATE-TABLESPACE-SET-0.sql │ │ ├── CREATE-USER-0.sql │ │ ├── CREATE-USER-1.sql │ │ ├── CREATE-USER-2.sql │ │ ├── CREATE-USER-3.sql │ │ ├── CREATE-USER-4.sql │ │ ├── CREATE-USER-5.sql │ │ ├── CREATE-USER-6.sql │ │ ├── CREATE-USER-7.sql │ │ ├── CREATE-USER-8.sql │ │ ├── CREATE-USER-9.sql │ │ ├── CREATE-VIEW-1.sql │ │ ├── CREATE-VIEW-10.sql │ │ ├── CREATE-VIEW-11.sql │ │ ├── CREATE-VIEW-12.sql │ │ ├── CREATE-VIEW-13.sql │ │ ├── CREATE-VIEW-14.sql │ │ ├── CREATE-VIEW-15.sql │ │ ├── CREATE-VIEW-2.sql │ │ ├── CREATE-VIEW-3.sql │ │ ├── CREATE-VIEW-4.sql │ │ ├── CREATE-VIEW-5.sql │ │ ├── CREATE-VIEW-6.sql │ │ ├── CREATE-VIEW-7.sql │ │ ├── CREATE-VIEW-8.sql │ │ ├── CREATE-VIEW-9.sql │ │ ├── CUBE_TABLE-1.sql │ │ ├── CUBE_TABLE-2.sql │ │ ├── CUME_DIST-0.sql │ │ ├── CUME_DIST-1.sql │ │ ├── CURRENT_DATE-0.sql │ │ ├── CURRENT_TIMESTAMP-0.sql │ │ ├── CURRENT_TIMESTAMP-1.sql │ │ ├── CURRENT_TIMESTAMP-2.sql │ │ ├── CURRENT_TIMESTAMP-3.sql │ │ ├── CURSOR-Expressions-0.sql │ │ ├── CURSOR-Expressions-1.sql │ │ ├── CURSOR-Expressions-2.sql │ │ ├── CV-0.sql │ │ ├── Comments-0.sql │ │ ├── Comments-1.sql │ │ ├── Comments-10.sql │ │ ├── Comments-12.sql │ │ ├── Comments-13.sql │ │ ├── Comments-15.sql │ │ ├── Comments-16.sql │ │ ├── Comments-17.sql │ │ ├── Comments-18.sql │ │ ├── Comments-19.sql │ │ ├── Comments-2.sql │ │ ├── Comments-20.sql │ │ ├── Comments-21.sql │ │ ├── Comments-22.sql │ │ ├── Comments-23.sql │ │ ├── Comments-24.sql │ │ ├── Comments-25.sql │ │ ├── Comments-26.sql │ │ ├── Comments-27.sql │ │ ├── Comments-28.sql │ │ ├── Comments-29.sql │ │ ├──
SYMBOL INDEX (474 symbols across 352 files)
FILE: plsql-custom-rules/src/main/java/com/company/plsql/ForbiddenDmlCheck.java
class ForbiddenDmlCheck (line 11) | @Rule(
method init (line 21) | @Override
method visitNode (line 26) | @Override
FILE: plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesDefinition.java
class PlSqlCustomRulesDefinition (line 5) | public class PlSqlCustomRulesDefinition extends CustomPlSqlRulesDefiniti...
method repositoryName (line 7) | @Override
method repositoryKey (line 12) | @Override
method checkClasses (line 17) | @Override
FILE: plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesPlugin.java
class PlSqlCustomRulesPlugin (line 5) | public class PlSqlCustomRulesPlugin implements Plugin {
method define (line 7) | @Override
FILE: plsql-custom-rules/src/test/java/com/company/plsql/ForbiddenDmlCheckTest.java
class ForbiddenDmlCheckTest (line 6) | public class ForbiddenDmlCheckTest {
method test (line 8) | @Test
FILE: plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesDefinitionTest.java
class PlSqlCustomRulesDefinitionTest (line 12) | public class PlSqlCustomRulesDefinitionTest {
method test (line 14) | @Test
FILE: plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesPluginTest.java
class PlSqlCustomRulesPluginTest (line 7) | public class PlSqlCustomRulesPluginTest {
method testRepository (line 9) | @Test
FILE: sonar-zpa-plugin/src/test/resources/metrics/cpd.sql
type foo (line 23) | create view foo as
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples-sql-script/green_table.sql
type green_table (line 3) | create table green_table
type green_table (line 11) | Create Table green_table
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/cluster.sql
type idx_personnel (line 6) | CREATE INDEX idx_personnel ON CLUSTER personnel;
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/create_index.sql
type "NORTHWIND" (line 1) | CREATE INDEX "NORTHWIND"."IDX_CUSTOMERS_REGION" ON "NORTHWIND"."CUSTOMER...
type INDEX_SYS_LOG_YEAR (line 8) | CREATE INDEX INDEX_SYS_LOG_YEAR ON SYS_LOG (YEAR)
type order_index (line 15) | CREATE UNIQUE INDEX order_index ON t_order (order_id)
type order_index (line 16) | CREATE UNIQUE INDEX order_index ON t_order (order_id)
type ON (line 18) | CREATE INDEX the_index IF NOT EXISTS ON t_order (order_id);
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/create_table.sql
type employee (line 1) | CREATE TABLE employee (
type employee (line 7) | CREATE TABLE employee (
type persons (line 14) | CREATE TABLE persons OF person
type purchaseorder_as_table (line 20) | CREATE TABLE purchaseorder_as_table OF XMLType
type TEST (line 43) | CREATE TABLE TEST
type DEMO (line 52) | CREATE TABLE DEMO (
type DEMO (line 57) | CREATE TABLE DEMO (
type DEMO (line 62) | CREATE TABLE DEMO (
type products (line 67) | CREATE TABLE products (
type products (line 75) | CREATE TABLE products (
type "DVSADM" (line 83) | create table "DVSADM".CMP3$58238005 nocompress tablespace "DVS_PROOF" no...
type CATEGORIES (line 123) | CREATE TABLE CATEGORIES (
type "t_ddl_0027" (line 130) | CREATE TABLE "t_ddl_0027"(
type "C##RCUSER" (line 139) | CREATE TABLE "C##RCUSER"."JSON_TRANS"(
type "ASEDBUSR" (line 146) | CREATE TABLE "ASEDBUSR"."ECLAIMPROCESS"
type "ASEDBUSR" (line 286) | CREATE UNIQUE INDEX "ASEDBUSR"."PK1019008" ON "ASEDBUSR"."ECLAIMPROCESS"...
type "ASEDBUSR" (line 295) | CREATE TABLE "ASEDBUSR"."DOCBESTPARAMATTR"
type t_order (line 342) | CREATE TABLE t_order
type "A" (line 346) | CREATE TABLE "A"."B" ( "FIELD1" NUMBER(19,0)
type bank_ledger (line 349) | CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128)
type bctab_part (line 354) | CREATE BLOCKCHAIN TABLE bctab_part (trans_id number primary key, sender ...
type T_ORDER (line 365) | CREATE TABLE T_ORDER
type print_media_demo (line 373) | CREATE TABLE print_media_demo
type T (line 399) | CREATE TABLE T (
type "D1
" (line 404) | CREATE TABLE "D1
type T (line 408) | CREATE TABLE T (
type tab (line 413) | CREATE TABLE tab (ID number(9)
type tab (line 414) | CREATE TABLE tab (ID number(9)
type tab (line 415) | CREATE TABLE tab (ID number(9)
type tab (line 416) | CREATE TABLE tab (ID number(9)
type tab (line 418) | CREATE TABLE tab IF NOT EXISTS (ID number(9)
type T1 (line 420) | CREATE TABLE T1 (
type PROCESSED (line 428) | create TABLE PROCESSED AS (
type part_idx (line 434) | CREATE INDEX part_idx ON partitioned_by_index (part, val)
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/create_view.sql
type VIEW_TEST_ROLE (line 1) | CREATE OR REPLACE VIEW VIEW_TEST_ROLE AS
type VIEW_TEST_ROLE (line 6) | CREATE OR REPLACE FORCE VIEW VIEW_TEST_ROLE AS
type VIEW_TEST_ROLE (line 11) | CREATE OR REPLACE NO FORCE VIEW VIEW_TEST_ROLE AS
type warehouse_view (line 16) | CREATE VIEW warehouse_view OF XMLTYPE
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/ctas.sql
type junk (line 1) | create table junk as select sysdate from dual
type junk1 (line 3) | create table junk1 INITRANS 10 as select sysdate from dual
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/forall_indices_of.sql
type tbl (line 1) | CREATE TABLE tbl (id NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/index.sql
type IDX (line 1) | create index IDX on OBJ (CODE, DOCUMENT)
type ord_customer_ix (line 9) | CREATE INDEX ord_customer_ix
type ord_customer_ix_demo (line 12) | CREATE INDEX ord_customer_ix_demo
type ord_customer_ix_demo (line 16) | CREATE INDEX ord_customer_ix_demo
type idx_personnel (line 21) | CREATE INDEX idx_personnel ON CLUSTER personnel;
type income_ix (line 25) | CREATE INDEX income_ix
type src_idx (line 28) | CREATE INDEX src_idx ON print_media(text_length(ad_sourcetext))
type area_idx (line 30) | CREATE INDEX area_idx ON rect_tab x (x.area())
type cust_last_name_ix (line 32) | CREATE INDEX cust_last_name_ix ON customers (cust_last_name)
type prod_idx (line 36) | CREATE INDEX prod_idx ON hash_products(category_id) LOCAL
type product_bm_ix (line 39) | CREATE BITMAP INDEX product_bm_ix
type nested_tab_ix (line 43) | CREATE UNIQUE INDEX nested_tab_ix
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/partitioned_tables.sql
type sales (line 2) | CREATE TABLE sales
type sales (line 23) | CREATE TABLE sales
type interval_sales (line 46) | CREATE TABLE interval_sales
type customers_demo (line 62) | CREATE TABLE customers_demo (
type list_customers (line 71) | CREATE TABLE list_customers
type hash_products (line 84) | CREATE TABLE hash_products
type composite_sales (line 107) | CREATE TABLE composite_sales
type customers_part (line 138) | CREATE TABLE customers_part (
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/single_statement.sql
type PROCESSED (line 1) | create TABLE PROCESSED AS (
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/examples/views.sql
type emp_view (line 1) | CREATE VIEW emp_view AS
type ed_orders_view (line 6) | CREATE EDITIONING VIEW ed_orders_view (o_id, o_date, o_status)
type emp_sal (line 10) | CREATE VIEW emp_sal (emp_id, last_name,
type clerk (line 15) | CREATE VIEW clerk AS
type clerk (line 22) | CREATE VIEW clerk AS
type locations_view (line 30) | CREATE VIEW locations_view AS
type customer_ro (line 35) | CREATE VIEW customer_ro (name, language, credit)
type oc_inventories (line 40) | CREATE OR REPLACE VIEW oc_inventories OF inventory_typ
type TEST (line 48) | CREATE EDITIONABLE VIEW TEST (A, B, C)
type TEST (line 52) | CREATE VIEW TEST (A, B, C)
FILE: zpa-checks/src/integrationTest/resources/sources/antlr-grammars-v4/long-running/order_by07.sql
type testview (line 1) | create or replace view testview
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-b-tree-indexes-json_value-0.sql
type po_num_idx1 (line 2) | CREATE UNIQUE INDEX po_num_idx1 ON j_purchaseorder po
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-b-tree-indexes-json_value-1.sql
type po_num_idx1 (line 2) | CREATE INDEX po_num_idx1 ON j_purchaseorder po
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-b-tree-indexes-json_value-2.sql
type po_num_idx2 (line 2) | CREATE UNIQUE INDEX po_num_idx2 ON j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-b-tree-indexes-json_value-3.sql
type po_ref_idx1 (line 2) | CREATE UNIQUE INDEX po_ref_idx1 ON j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-bitmap-indexes-json_value-0.sql
type cost_ctr_idx (line 2) | CREATE BITMAP INDEX cost_ctr_idx ON j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-multivalue-function-based-indexes-json_exists-0.sql
type parts_tab (line 2) | CREATE TABLE parts_tab (id NUMBER, jparts JSON)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-multivalue-function-based-indexes-json_exists-1.sql
type mvi (line 2) | CREATE MULTIVALUE INDEX mvi ON parts_tab t
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-multivalue-function-based-indexes-json_exists-2.sql
type cmvi_1 (line 2) | CREATE MULTIVALUE INDEX cmvi_1 ON parts_tab
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/creating-view-json-data-using-json_table-0.sql
type j_purchaseorder_detail_view (line 2) | CREATE VIEW j_purchaseorder_detail_view
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-collections-4.sql
type empview (line 2) | CREATE JSON COLLECTION VIEW empview AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-query-rewrite-use-materialized-view-json_table-2.sql
type mv_idx (line 2) | CREATE INDEX mv_idx ON mv_for_query_rewrite(userid,
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-1.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON VALIDATE '{"type" : "object"}')
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-10.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON VALIDATE '{"type" : "object"}')
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-11.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON CONSTRAINT jchk
type jtab (line 4) | CREATE TABLE jtab(jcol JSON DOMAIN jd)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-14.sql
type mytable (line 2) | CREATE TABLE mytable (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-16.sql
type mytable (line 2) | CREATE TABLE mytable (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-2.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON CONSTRAINT jchk
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-4.sql
type jtab (line 2) | CREATE TABLE jtab(jcol JSON DOMAIN jd)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-schema-9.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON (OBJECT)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-1.sql
type po_search_idx (line 2) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-2.sql
type po_search_idx (line 2) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-3.sql
type po_search_idx (line 2) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-5.sql
type po_search_idx (line 2) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-6.sql
type po_search_idx (line 2) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/json-search-index-ad-hoc-queries-and-full-text-search-7.sql
type po_search_idx (line 14) | CREATE SEARCH INDEX po_search_idx ON j_purchaseorder (data)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/loading-external-json-data-1.sql
type json_file_contents (line 2) | CREATE TABLE json_file_contents (data JSON)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/loading-external-json-data-2.sql
type j_purchaseorder (line 3) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/partitioning-json-data-0.sql
type orders (line 2) | CREATE JSON COLLECTION TABLE orders
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/persistent-data-guide-information-part-json-search-index-1.sql
type po_dg_only_idx (line 2) | CREATE SEARCH INDEX po_dg_only_idx
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/populate-json-type-column-querying-textual-json-0.sql
type j_purchaseorder_new (line 2) | CREATE TABLE j_purchaseorder_new PARALLEL NOLOGGING AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/read-only-views-based-json-generation-1.sql
type department_view (line 2) | CREATE VIEW department_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/sql-json-conditions-is-json-and-is-not-json-6.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/sql-json-function-json_object-14.sql
type po_ship (line 2) | CREATE TABLE po_ship
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/sql-json-function-json_object-19.sql
type t1 (line 8) | CREATE TABLE t1 (col1 my_mailing_address_type)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/sql-json-path-expression-item-methods-4.sql
type tab (line 2) | CREATE TABLE tab (data JSON)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/tables-json-columns-0.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/tables-json-columns-1.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/tables-json-columns-3.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/using-geojson-geographic-data-0.sql
type j_geo (line 2) | CREATE TABLE j_geo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/using-geojson-geographic-data-5.sql
type geo_first_feature_idx (line 2) | CREATE INDEX geo_first_feature_idx
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/using-online-redefinition-migrate-json-data-type-1.sql
type j_purchaseorder_new (line 2) | CREATE TABLE j_purchaseorder_new (id VARCHAR2(32)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/adjsn/using-oracle-data-pump-migrate-json-data-type-0.sql
type j_purchaseorder_new (line 2) | CREATE TABLE j_purchaseorder_new (id VARCHAR2(32)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/ALTER-TYPE-statement-2.sql
type text (line 2) | CREATE TABLE text (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/CREATE-TYPE-statement-10.sql
type demo_tab1 (line 4) | CREATE TABLE demo_tab1 (b1 NUMBER, b2 demo_typ1)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/CREATE-TYPE-statement-12.sql
type demo_tab2 (line 2) | CREATE TABLE demo_tab2(col demo_typ2)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/autonomous-transactions-3.sql
type emp (line 3) | CREATE TABLE emp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/autonomous-transactions-4.sql
type emp (line 3) | CREATE TABLE emp AS SELECT * FROM employees
type log (line 5) | CREATE TABLE log (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/autonomous-transactions-6.sql
type temp (line 3) | CREATE TABLE temp (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/autonomous-transactions-9.sql
type debug_output (line 3) | CREATE TABLE debug_output (message VARCHAR2(200)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/avoiding-inner-capture-select-and-dml-statements-0.sql
type tab1 (line 5) | CREATE TABLE tab1 (tab2 type1)
type tab2 (line 8) | CREATE TABLE tab2 (x NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/avoiding-inner-capture-select-and-dml-statements-4.sql
type tb1 (line 5) | CREATE TABLE tb1 (col1 t1)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-1.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-15.sql
type emp_temp (line 3) | CREATE TABLE emp_temp (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-2.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-28.sql
type emp_temp (line 3) | CREATE TABLE emp_temp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-3.sql
type parts1 (line 3) | CREATE TABLE parts1 (
type parts2 (line 8) | CREATE TABLE parts2 (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-30.sql
type emp_by_dept (line 3) | CREATE TABLE emp_by_dept AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-42.sql
type numbers1 (line 2) | CREATE OR REPLACE TYPE numbers_type IS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-5.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-59.sql
type emp_temp (line 3) | CREATE TABLE emp_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-6.sql
type valid_orders (line 3) | CREATE TABLE valid_orders (
type big_orders (line 8) | CREATE TABLE big_orders AS
type rejected_orders (line 12) | CREATE TABLE rejected_orders AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-61.sql
type emp_temp (line 3) | CREATE TABLE emp_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-63.sql
type emp_temp (line 3) | CREATE TABLE emp_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/bulk-sql-and-bulk-binding-65.sql
type emp_temp (line 3) | CREATE TABLE emp_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/chaining-pipelined-table-functions-multiple-transformations-16.sql
type gradereport (line 3) | CREATE TABLE gradereport (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/collection-types-defined-package-specifications-2.sql
type OF (line 2) | CREATE OR REPLACE TYPE NumList IS TABLE OF NUMBER;
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/column-name-precedence-0.sql
type employees2 (line 3) | CREATE TABLE employees2 AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/column-name-precedence-2.sql
type employees2 (line 3) | CREATE TABLE employees2 AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/column-name-precedence-4.sql
type employees2 (line 3) | CREATE TABLE employees2 AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/continuing-execution-handling-exceptions-0.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/correlation-names-and-pseudorecords-15.sql
type tab1 (line 3) | CREATE TABLE tab1 (c1 CLOB)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/correlation-names-and-pseudorecords-16.sql
type new (line 2) | CREATE TABLE new (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/correlation-names-and-pseudorecords-2.sql
type Emp_log (line 3) | CREATE TABLE Emp_log (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/cursors-overview-0.sql
type dept_temp (line 3) | CREATE TABLE dept_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/cursors-overview-2.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/description-static-sql-0.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/description-static-sql-2.sql
type employees_temp (line 3) | CREATE TABLE employees_temp AS
type employees_temp2 (line 7) | CREATE TABLE employees_temp2 AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-1.sql
type order_info (line 2) | CREATE OR REPLACE VIEW order_info AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-12.sql
type dept_view (line 14) | CREATE OR REPLACE VIEW dept_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-24.sql
type employee_salaries (line 2) | CREATE TABLE employee_salaries (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-33.sql
type emp (line 2) | CREATE TABLE emp (
type dept (line 11) | CREATE TABLE dept (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-39.sql
type Salgrade (line 2) | CREATE TABLE Salgrade (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-45.sql
type Book_table (line 3) | CREATE TABLE Book_table (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-47.sql
type Library_table (line 3) | CREATE TABLE Library_table (Section VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/dml-triggers-49.sql
type Library_view (line 2) | CREATE OR REPLACE VIEW Library_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/inserting-records-tables-0.sql
type schedule (line 3) | CREATE TABLE schedule (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/native-dynamic-sql-11.sql
type employees_temp (line 2) | CREATE TABLE employees_temp AS SELECT * FROM EMPLOYEES
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/package-example-0.sql
type log (line 3) | CREATE TABLE log (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/pl-sql-function-result-cache-5.sql
type global_config_params (line 3) | CREATE TABLE global_config_params
type app_level_config_params (line 8) | CREATE TABLE app_level_config_params
type role_level_config_params (line 14) | CREATE TABLE role_level_config_params
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/raising-exceptions-explicitly-2.sql
type t (line 3) | CREATE TABLE t (c NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/record-variables-16.sql
type t1 (line 12) | CREATE TABLE t1 (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/record-variables-22.sql
type plch_departure (line 3) | CREATE TABLE plch_departure (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/record-variables-26.sql
type t (line 2) | CREATE TABLE t (a INT, b INT, c INT INVISIBLE)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/redeclared-predefined-exceptions-0.sql
type t (line 3) | CREATE TABLE t (c NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/retrieving-error-code-and-error-message-0.sql
type errors (line 3) | CREATE TABLE errors (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/retrying-transactions-handling-exceptions-0.sql
type results (line 3) | CREATE TABLE results (
type res_name_ix (line 7) | CREATE UNIQUE INDEX res_name_ix ON results (res_name)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/serially_reusable-packages-3.sql
type people (line 3) | CREATE TABLE people (name VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/sql-data-types-29.sql
type PLS_VEC_TAB (line 2) | CREATE TABLE PLS_VEC_TAB(
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/sql-data-types-32.sql
type theVectorTable (line 3) | CREATE TABLE theVectorTable (embedding VECTOR(3, float32), id NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/sql-data-types-36.sql
type vecLogTable (line 4) | CREATE TABLE vecLogTable (embedding VECTOR(3, float32),
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/sql-data-types-48.sql
type t (line 3) | CREATE TABLE t (c CHAR(3 CHAR))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/sql-injection-0.sql
type secret_records (line 3) | CREATE TABLE secret_records (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-0.sql
type accounts (line 3) | CREATE TABLE accounts (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-11.sql
type emp (line 3) | CREATE TABLE emp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-5.sql
type emp_name (line 3) | CREATE TABLE emp_name AS
type empname_ix (line 6) | CREATE UNIQUE INDEX empname_ix
type emp_sal (line 9) | CREATE TABLE emp_sal AS
type empsal_ix (line 12) | CREATE UNIQUE INDEX empsal_ix
type emp_job (line 15) | CREATE TABLE emp_job AS
type empjobid_ix (line 18) | CREATE UNIQUE INDEX empjobid_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-6.sql
type emp_name (line 3) | CREATE TABLE emp_name AS
type empname_ix (line 6) | CREATE UNIQUE INDEX empname_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-7.sql
type emp_name (line 3) | CREATE TABLE emp_name AS
type empname_ix (line 6) | CREATE UNIQUE INDEX empname_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/transaction-processing-and-control-9.sql
type emp (line 3) | CREATE TABLE emp AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/trigger-restrictions-0.sql
type log (line 3) | CREATE TABLE log (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/trigger-restrictions-6.sql
type p (line 3) | CREATE TABLE p (p1 NUMBER CONSTRAINT pk_p_p1 PRIMARY KEY)
type f (line 8) | CREATE TABLE f (f1 NUMBER CONSTRAINT fk_f_f1 REFERENCES p)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/triggers-publishing-events-48.sql
type event_table (line 2) | CREATE TABLE event_table (col VARCHAR2(2030)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/lnpls/what-is-capture-0.sql
type tab1 (line 3) | CREATE TABLE tab1 (col1 NUMBER, col2 NUMBER)
type tab2 (line 6) | CREATE TABLE tab2 (col1 NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-109.sql
type emptab (line 4) | CREATE TABLE emptab OF emp_t;
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-11.sql
type JOBS_Temp (line 2) | CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-111.sql
type staff (line 5) | CREATE TABLE staff
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-115.sql
type t1 (line 2) | CREATE TABLE t1 (n NUMBER, x ANYDATA)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-122.sql
type table1 (line 2) | CREATE TABLE table1 (T NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-16.sql
type product (line 2) | CREATE TABLE product(
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-31.sql
type students (line 2) | CREATE TABLE students (last_name VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-36.sql
type t1 (line 2) | CREATE TABLE t1 (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-40.sql
type JOBS_Temp (line 2) | CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-52.sql
type print_media_part (line 2) | CREATE TABLE print_media_part (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-63.sql
type exchange_table (line 2) | CREATE TABLE exchange_table (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-70.sql
type cost_ix (line 2) | CREATE INDEX cost_ix ON costs(channel_id)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-71.sql
type emp (line 4) | CREATE TABLE emp OF emp_t (
type dept (line 8) | CREATE TABLE dept (dno NUMBER, mgr_ref REF emp_t SCOPE is emp)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-74.sql
type emp2 (line 2) | CREATE TABLE emp2 AS SELECT * FROM employees
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-77.sql
type JOBS_TEMP (line 2) | CREATE TABLE JOBS_TEMP AS SELECT * FROM HR.JOBS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-81.sql
type JOBS_Temp (line 2) | CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/ALTER-TABLE-95.sql
type t1 (line 3) | CREATE TABLE t1 (name VARCHAR2(10)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CAST-10.sql
type projects (line 2) | CREATE TABLE projects
type emps_short (line 4) | CREATE TABLE emps_short
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CAST-7.sql
type cust_address (line 6) | CREATE TABLE cust_address (
type cust_short (line 14) | CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31)
type states (line 16) | CREATE TABLE states (state_id NUMBER, addresses address_array_t)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/COLLATION-0.sql
type id_table (line 2) | CREATE TABLE id_table
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/COLUMN_VALUE-Pseudocolumn-4.sql
type my_customers (line 2) | CREATE TABLE my_customers (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-CLUSTER-10.sql
type emp_dept_index (line 2) | CREATE INDEX emp_dept_index
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-CLUSTER-2.sql
type dept_10 (line 2) | CREATE TABLE dept_10
type dept_20 (line 5) | CREATE TABLE dept_20
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-CLUSTER-8.sql
type dept (line 2) | CREATE TABLE dept (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-CLUSTER-9.sql
type empl (line 2) | CREATE TABLE empl (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-CONTEXT-1.sql
type hr_org_secure_view (line 2) | CREATE VIEW hr_org_secure_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-EDITION-2.sql
type e_view (line 3) | CREATE EDITIONING VIEW e_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-EDITION-3.sql
type e_view (line 3) | CREATE OR REPLACE EDITIONING VIEW e_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-0.sql
type mvi_1 (line 2) | CREATE MULTIVALUE INDEX mvi_1 ON mytable t
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-10.sql
type area_index (line 2) | CREATE INDEX area_index ON xwarehouses e
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-12.sql
type upper_ix (line 2) | CREATE INDEX upper_ix ON employees (UPPER(last_name))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-14.sql
type income_ix (line 2) | CREATE INDEX income_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-15.sql
type src_idx (line 2) | CREATE INDEX src_idx ON print_media(text_length(ad_sourcetext))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-19.sql
type promo_ix (line 2) | CREATE UNIQUE INDEX promo_ix ON orders
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-20.sql
type cost_ix (line 2) | CREATE INDEX cost_ix ON sales (amount_sold)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-21.sql
type cust_last_name_ix (line 2) | CREATE INDEX cust_last_name_ix ON customers (cust_last_name)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-22.sql
type prod_idx (line 2) | CREATE INDEX prod_idx ON hash_products(category_id) LOCAL
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-23.sql
type sales_ix (line 2) | CREATE INDEX sales_ix ON composite_sales(time_id, prod_id)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-24.sql
type product_bm_ix (line 2) | CREATE BITMAP INDEX product_bm_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-25.sql
type hash_products (line 2) | CREATE TABLE hash_products
type sales_quota (line 24) | CREATE TABLE sales_quota
type product_bm_ix (line 30) | CREATE BITMAP INDEX product_bm_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-26.sql
type nested_tab_ix (line 2) | CREATE UNIQUE INDEX nested_tab_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-27.sql
type salary_i (line 2) | CREATE INDEX salary_i
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-28.sql
type salary_func_i (line 2) | CREATE INDEX salary_func_i ON persons p
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-29.sql
type typeid_i (line 2) | CREATE BITMAP INDEX typeid_i ON books (SYS_TYPEID(author))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-4.sql
type cust_eff_ix (line 2) | CREATE INDEX cust_eff_ix ON customers
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-6.sql
type ord_customer_ix (line 2) | CREATE INDEX ord_customer_ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-7.sql
type ord_customer_ix_demo (line 2) | CREATE INDEX ord_customer_ix_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-INDEX-8.sql
type ord_customer_ix_demo (line 2) | CREATE INDEX ord_customer_ix_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-MATERIALIZED-VIEW-4.sql
type sales_sum_table (line 2) | CREATE TABLE sales_sum_table
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-SCHEMA-0.sql
type new_product (line 3) | CREATE TABLE new_product
type new_product_view (line 5) | CREATE VIEW new_product_view
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-1.sql
type trade_ledger (line 2) | CREATE IMMUTABLE TABLE trade_ledger (tr_id NUMBER, user_name VARCHAR2(40)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-10.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-12.sql
type staging_table (line 2) | CREATE TABLE staging_table (col1 number, col2 varchar2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-13.sql
type part_staging_table (line 2) | CREATE TABLE part_staging_table (col1 number, col2 varchar2(100))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-14.sql
type employees_demo (line 2) | CREATE TABLE employees_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-15.sql
type employees_demo (line 2) | CREATE TABLE employees_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-16.sql
type myemp (line 2) | CREATE TABLE myemp (employee_id number, last_name varchar2(25),
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-20.sql
type t1 (line 2) | CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-21.sql
type t2 (line 2) | CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH ...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-22.sql
type today_sales (line 2) | CREATE GLOBAL TEMPORARY TABLE today_sales
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-23.sql
type later (line 2) | CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-26.sql
type books (line 2) | CREATE TABLE books (title VARCHAR2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-27.sql
type dept_80 (line 2) | CREATE TABLE dept_80
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-28.sql
type dept_80 (line 2) | CREATE TABLE dept_80
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-29.sql
type departments_demo (line 2) | CREATE TABLE departments_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-30.sql
type departments_demo (line 2) | CREATE TABLE departments_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-31.sql
type print_media (line 2) | CREATE TABLE print_media
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-34.sql
type print_media_new (line 2) | CREATE TABLE print_media_new
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-35.sql
type countries_demo (line 2) | CREATE TABLE countries_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-36.sql
type dept_external (line 2) | CREATE TABLE dept_external (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-39.sql
type xwarehouses (line 2) | CREATE TABLE xwarehouses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-40.sql
type xwarehouses (line 2) | CREATE TABLE xwarehouses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-41.sql
type xwarehouses (line 2) | CREATE TABLE xwarehouses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-42.sql
type range_sales (line 2) | CREATE TABLE range_sales
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-43.sql
type empl_h (line 2) | CREATE TABLE empl_h
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-46.sql
type parts (line 2) | CREATE TABLE parts (p_name) AS SELECT PARTITION_NAME FROM USER_TAB_PARTI...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-49.sql
type customers_demo (line 2) | CREATE TABLE customers_demo (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-5.sql
type bank_ledger (line 2) | CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-53.sql
type list_customers (line 2) | CREATE TABLE list_customers
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-54.sql
type print_media_demo (line 2) | CREATE TABLE print_media_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-55.sql
type hash_products (line 2) | CREATE TABLE hash_products
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-56.sql
type part_order_items (line 2) | CREATE TABLE part_order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-57.sql
type composite_sales (line 2) | CREATE TABLE composite_sales
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-58.sql
type customers_part (line 2) | CREATE TABLE customers_part (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-62.sql
type employees_obj_t (line 5) | CREATE TABLE employees_obj_t OF employees_typ (e_no PRIMARY KEY)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-63.sql
type departments_t (line 2) | CREATE TABLE departments_t
type departments_t (line 5) | CREATE TABLE departments_t (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-64.sql
type persons (line 15) | CREATE TABLE persons OF person
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-65.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-66.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER) ANNOTATIONS (ADD Hidden)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-67.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER ANNOTATIONS(Operations 'Sort' , Hidden) )
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-7.sql
type bank_ledger (line 2) | CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-72.sql
type tm1 (line 2) | CREATE TABLE tm1 (c1 NUMBER, c2 NUMBER, c3 VARCHAR2(15)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-74.sql
type t2 (line 2) | CREATE TABLE t2 (id NUMBER, doc XMLTYPE)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-8.sql
type mydoc (line 2) | CREATE TABLE mydoc(id NUMBER, docCreationTime DATE, doc CLOB, json_doc J...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLE-9.sql
type mydoc (line 2) | CREATE TABLE mydoc(id NUMBER, docCreationTime DATE, doc CLOB, json_doc J...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLESPACE-10.sql
type lmt_table1 (line 4) | CREATE TABLE lmt_table1 (col1 NUMBER, col2 VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-TABLESPACE-11.sql
type lmt_table2 (line 4) | CREATE TABLE lmt_table2 (col1 NUMBER, col2 VARCHAR2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-1.sql
type emp_view (line 2) | CREATE VIEW emp_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-10.sql
type customer_ro (line 2) | CREATE VIEW customer_ro (name, language, credit)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-11.sql
type oc_inventories (line 10) | CREATE OR REPLACE VIEW oc_inventories OF inventory_typ
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-12.sql
type warehouse_view (line 2) | CREATE VIEW warehouse_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-14.sql
type warehouse_table (line 2) | CREATE TABLE warehouse_table
type warehouse_view (line 15) | CREATE VIEW warehouse_view OF XMLTYPE
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-2.sql
type ed_orders_view (line 2) | CREATE EDITIONING VIEW ed_orders_view (o_id, o_date, o_status)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-3.sql
type emp_sal (line 2) | CREATE VIEW emp_sal (emp_id, last_name,
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-4.sql
type clerk (line 2) | CREATE VIEW clerk AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-6.sql
type clerk (line 2) | CREATE VIEW clerk AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CREATE-VIEW-7.sql
type locations_view (line 2) | CREATE VIEW locations_view AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/CURRENT_TIMESTAMP-1.sql
type current_test (line 2) | CREATE TABLE current_test (col1 TIMESTAMP WITH TIME ZONE)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Comments-1.sql
type v (line 2) | CREATE VIEW v AS
type t (line 6) | CREATE TABLE t AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Comments-44.sql
type parallel_table (line 2) | CREATE TABLE parallel_table (col1 number, col2 VARCHAR2(10)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Comments-49.sql
type target_table (line 2) | CREATE /*+ PQ_DISTRIBUTE(target_table, PARTITION) */ TABLE target_table
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Concatenation-Operator-1.sql
type tab1 (line 2) | CREATE TABLE tab1 (col1 VARCHAR2(6)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/DELETE-7.sql
type product_price_history (line 2) | CREATE TABLE product_price_history (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-15.sql
type time_table (line 2) | CREATE TABLE time_table
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-17.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-18.sql
type example (line 2) | CREATE TABLE example (id NUMBER, c1 BOOLEAN, c2 BOOL)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-21.sql
type example (line 2) | CREATE TABLE example (id NUMBER, c1 BOOLEAN, c2 BOOL)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-3.sql
type test (line 2) | CREATE TABLE test (col1 NUMBER(5,2)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-32.sql
type t (line 2) | CREATE TABLE t (v VECTOR)
type t (line 3) | CREATE TABLE t (v VECTOR(*, *)
type t (line 4) | CREATE TABLE t (v VECTOR(100)
type t (line 5) | CREATE TABLE t (v VECTOR(100, *)
type t (line 6) | CREATE TABLE t (v VECTOR(*, FLOAT32))
type t (line 7) | CREATE TABLE t (v VECTOR(100, FLOAT32))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-33.sql
type my_vect_tab (line 2) | CREATE TABLE my_vect_tab (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-34.sql
type my_vectors (line 2) | CREATE TABLE my_vectors (id NUMBER, embedding VECTOR)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Data-Types-35.sql
type my_vectors (line 2) | CREATE TABLE my_vectors (id NUMBER, embedding VECTOR(768, INT8))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/FLASHBACK-TABLE-1.sql
type employees_test (line 2) | CREATE TABLE employees_test
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/GRANT-14.sql
type dependent (line 2) | CREATE TABLE dependent
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/HEXTORAW-0.sql
type test (line 2) | CREATE TABLE test (raw_col RAW(10)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/INSERT-10.sql
type raises (line 2) | CREATE TABLE raises (emp_id NUMBER, sal NUMBER
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/INSERT-17.sql
type long_tab (line 2) | CREATE TABLE long_tab (pic_id NUMBER, long_pics LONG RAW)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/INSERT-18.sql
type lob_tab (line 2) | CREATE TABLE lob_tab (pic_id NUMBER, lob_pics BLOB)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/INSERT-26.sql
type small_orders (line 2) | CREATE TABLE small_orders
type medium_orders (line 8) | CREATE TABLE medium_orders AS SELECT * FROM small_orders
type large_orders (line 9) | CREATE TABLE large_orders AS SELECT * FROM small_orders
type special_orders (line 10) | CREATE TABLE special_orders
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/INSERT-31.sql
type people (line 2) | CREATE TABLE people (
type patients (line 9) | CREATE TABLE patients (
type staff (line 13) | CREATE TABLE staff (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/JSON_ARRAYAGG-0.sql
type id_table (line 2) | CREATE TABLE id_table (id NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/JSON_TABLE-4.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/LOCALTIMESTAMP-1.sql
type local_test (line 2) | CREATE TABLE local_test (col1 TIMESTAMP WITH LOCAL TIME ZONE)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/MERGE-0.sql
type bonuses (line 2) | CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/MERGE-1.sql
type people_source (line 2) | CREATE TABLE people_source (
type people_target (line 8) | CREATE TABLE people_target (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Multiset-Operators-0.sql
type customers_demo (line 2) | CREATE TABLE customers_demo AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/NLSSORT-1.sql
type test (line 2) | CREATE TABLE test (name VARCHAR2(15)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Object-Access-Expressions-0.sql
type short_orders (line 2) | CREATE TABLE short_orders (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Pattern-matching-Conditions-10.sql
type ducks (line 2) | CREATE TABLE ducks (f CHAR(6), v VARCHAR2(6)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REFTOHEX-0.sql
type warehouse_table (line 2) | CREATE TABLE warehouse_table OF warehouse_typ
type location_table (line 4) | CREATE TABLE location_table
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REGEXP_COUNT-12.sql
type regexp_temp (line 2) | CREATE TABLE regexp_temp(empName varchar2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REGEXP_INSTR-6.sql
type regexp_temp (line 2) | CREATE TABLE regexp_temp(empName varchar2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REGEXP_REPLACE-3.sql
type regexp_temp (line 2) | CREATE TABLE regexp_temp(empName varchar2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REGEXP_SUBSTR-4.sql
type regexp_temp (line 2) | CREATE TABLE regexp_temp(empName varchar2(20)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/RENAME-1.sql
type temporary (line 2) | CREATE TABLE temporary
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/REVOKE-14.sql
type dependent (line 2) | CREATE TABLE dependent
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-115.sql
type Ticker (line 2) | CREATE TABLE Ticker (SYMBOL VARCHAR2(10)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-118.sql
type chunk_table (line 2) | CREATE TABLE chunk_table (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-64.sql
type sales_view_ref (line 2) | CREATE OR REPLACE VIEW sales_view_ref AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-75.sql
type pivot_table (line 2) | CREATE TABLE pivot_table AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-82.sql
type new_departments (line 2) | CREATE TABLE new_departments
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SELECT-90.sql
type inventory (line 2) | CREATE TABLE inventory (time_id DATE,
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-0.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON VALIDATE '{"type" : "object"}')
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-1.sql
type tab (line 2) | CREATE TABLE tab (jcol JSON CONSTRAINT jchk
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-14.sql
type t (line 2) | CREATE TABLE t (col1 VARCHAR2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-19.sql
type t (line 2) | CREATE TABLE t (col1 VARCHAR2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-23.sql
type j_purchaseorder (line 2) | CREATE TABLE j_purchaseorder
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-28.sql
type t (line 2) | CREATE TABLE t (name VARCHAR2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-3.sql
type jtab (line 2) | CREATE TABLE jtab(jcol JSON DOMAIN jd)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-35.sql
type families (line 2) | CREATE TABLE families (family_doc VARCHAR2(200)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-36.sql
type ix (line 2) | CREATE INDEX ix
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/SQL-JSON-Conditions-5.sql
type jtab (line 2) | CREATE TABLE jtab (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Syntax-for-Schema-Objects-and-Parts-in-SQL-Statements-3.sql
type Q1_2000_sales (line 2) | CREATE VIEW Q1_2000_sales AS
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TO_BINARY_DOUBLE-0.sql
type float_point_demo (line 2) | CREATE TABLE float_point_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TO_CHAR-character-2.sql
type empl_temp (line 2) | CREATE TABLE empl_temp
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TO_CHAR-datetime-1.sql
type date_tab (line 2) | CREATE TABLE date_tab (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TO_CHAR-datetime-10.sql
type empl_temp (line 2) | CREATE TABLE empl_temp
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TO_CHAR-number-5.sql
type empl_temp (line 2) | CREATE TABLE empl_temp
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/TRANSLATE-USING-0.sql
type translate_tab (line 2) | CREATE TABLE translate_tab (char_col VARCHAR2(100)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Using-Extensible-Indexing-6.sql
type salary_index (line 2) | CREATE INDEX salary_index ON employees(salary)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Using-XML-in-SQL-Statements-8.sql
type xwarehouses (line 2) | CREATE TABLE xwarehouses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/Using-XML-in-SQL-Statements-9.sql
type xwarehouses (line 2) | CREATE TABLE xwarehouses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/XMLTRANSFORM-0.sql
type xsl_tab (line 2) | CREATE TABLE xsl_tab (col1 XMLTYPE)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/annotations_clause-0.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/annotations_clause-1.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER) ANNOTATIONS (ADD Hidden)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/annotations_clause-3.sql
type t1 (line 2) | CREATE TABLE t1 (T NUMBER ANNOTATIONS(Operations 'Sort' , Hidden) )
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/annotations_clause-4.sql
type employee (line 2) | CREATE TABLE employee (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-0.sql
type promotions_var1 (line 2) | CREATE TABLE promotions_var1
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-1.sql
type promotions_var2 (line 2) | CREATE TABLE promotions_var2
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-12.sql
type dept_20 (line 2) | CREATE TABLE dept_20
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-13.sql
type order_detail (line 2) | CREATE TABLE order_detail
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-14.sql
type Product (line 2) | CREATE TABLE Product(
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-21.sql
type products (line 2) | CREATE TABLE products
type product_components (line 8) | CREATE TABLE product_components
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-27.sql
type customer_addresses (line 11) | CREATE TABLE customer_addresses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-28.sql
type customer_addresses (line 2) | CREATE TABLE customer_addresses (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-29.sql
type employees_obj (line 2) | CREATE TABLE employees_obj
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-3.sql
type locations_demo (line 2) | CREATE TABLE locations_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-30.sql
type employees_obj (line 2) | CREATE TABLE employees_obj
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-31.sql
type promotions_var3 (line 2) | CREATE TABLE promotions_var3
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-32.sql
type games (line 2) | CREATE TABLE games (scores NUMBER CHECK (scores >= 0))
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-33.sql
type games (line 2) | CREATE TABLE games
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-4.sql
type locations_demo (line 2) | CREATE TABLE locations_demo
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-7.sql
type dept_20 (line 2) | CREATE TABLE dept_20
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-8.sql
type dept_20 (line 2) | CREATE TABLE dept_20
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/constraint-9.sql
type dept_20 (line 2) | CREATE TABLE dept_20
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-domain-17.sql
type tax_report (line 2) | CREATE TABLE tax_report(id NUMBER, income JSON DOMAIN w2_form)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-domain-28.sql
type jtab (line 2) | CREATE TABLE jtab(
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-domain-32.sql
type orders (line 2) | CREATE TABLE orders (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-vector-index-0.sql
type galaxies_hnsw_idx (line 2) | CREATE VECTOR INDEX galaxies_hnsw_idx ON galaxies (embedding)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-vector-index-1.sql
type galaxies_hnsw_idx (line 2) | CREATE VECTOR INDEX galaxies_hnsw_idx ON galaxies (embedding) ORGANIZATI...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-vector-index-2.sql
type galaxies_ivf_idx (line 2) | CREATE VECTOR INDEX galaxies_ivf_idx ON galaxies (embedding)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/create-vector-index-3.sql
type galaxies_ivf_idx (line 2) | CREATE VECTOR INDEX galaxies_ivf_idx ON galaxies (embedding) ORGANIZATIO...
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check-6.sql
type calendar_dates (line 3) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check-7.sql
type calendar_dates (line 5) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check-9.sql
type order_items (line 2) | CREATE TABLE order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check_type-5.sql
type calendar_dates (line 3) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check_type-6.sql
type calendar_dates (line 5) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_check_type-8.sql
type order_items (line 2) | CREATE TABLE order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_display-1.sql
type calendar_dates (line 2) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_display-5.sql
type order_items (line 2) | CREATE TABLE order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_name-1.sql
type hr (line 2) | CREATE TABLE hr.calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_name-5.sql
type co (line 2) | CREATE TABLE co.order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_order-1.sql
type calendar_dates (line 2) | CREATE TABLE calendar_dates (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/domain_order-5.sql
type order_items (line 2) | CREATE TABLE order_items (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/graph_table-operator-0.sql
type university (line 2) | CREATE TABLE university (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/graph_table-operator-1.sql
type persons (line 2) | CREATE TABLE persons (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/graph_table-operator-2.sql
type students (line 2) | CREATE TABLE students (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/graph_table-operator-3.sql
type friendships (line 2) | CREATE TABLE friendships (
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/storage_clause-0.sql
type divisions (line 2) | CREATE TABLE divisions
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/sys_row_etag-0.sql
type foo (line 2) | CREATE TABLE foo (c1 NUMBER, c2 NUMBER, c3 NUMBER)
FILE: zpa-checks/src/integrationTest/resources/sources/oracle-database_23/sqlrf/vector_chunks-2.sql
type documentation_tab (line 2) | CREATE TABLE documentation_tab (
Condensed preview — 5068 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,087K chars).
[
{
"path": ".editorconfig",
"chars": 363,
"preview": "root = true\n\n[*]\ncharset=utf-8\ninsert_final_newline=true\nindent_style=space\nindent_size=4\n\n[*.xml]\nindent_size=2\n\n[*.yml"
},
{
"path": ".gitattributes",
"chars": 100,
"preview": "*.sql linguist-language=PLSQL\nzpa-checks/src/integrationTest/resources/sources/** linguist-vendored\n"
},
{
"path": ".github/renovate.json",
"chars": 387,
"preview": "{\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n \"extends\": [\n \"config:best-practices\",\n"
},
{
"path": ".github/workflows/build.yml",
"chars": 5110,
"preview": "name: Build\n\non:\n push:\n branches:\n - \"*\"\n pull_request:\n branches:\n - main\n\nenv:\n JAVA_VERSION: 21\n\n"
},
{
"path": ".gitignore",
"chars": 805,
"preview": "*.pydevproject\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.settings/\n.loadpath\ntarget/\ndependency-red"
},
{
"path": ".gitmodules",
"chars": 849,
"preview": "[submodule \"its/sources/pljson\"]\n\tpath = zpa-checks/src/integrationTest/resources/sources/pljson\n\turl = https://github.c"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5493,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
},
{
"path": "CONTRIBUTING.md",
"chars": 1452,
"preview": "# Contributing\r\n\r\nThank you for your interest in contributing to our project! We appreciate your time and effort.\r\n\r\n## "
},
{
"path": "LICENSE",
"chars": 7652,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007"
},
{
"path": "LICENSE_HEADER",
"chars": 806,
"preview": "Z PL/SQL Analyzer\nCopyright (C) 2015-${year} Felipe Zorzo\nmailto:felipe AT felipezorzo DOT com DOT br\n\nThis program is f"
},
{
"path": "README.md",
"chars": 4265,
"preview": "# ZPA\n\n[ ](https://github.com/felipebz/zpa/rele"
},
{
"path": "build-logic/build.gradle.kts",
"chars": 346,
"preview": "plugins {\n `kotlin-dsl`\n}\n\nrepositories {\n gradlePluginPortal()\n mavenCentral()\n}\n\ndependencies {\n implement"
},
{
"path": "build-logic/settings.gradle.kts",
"chars": 219,
"preview": "dependencyResolutionManagement {\n // Reuse version catalog from the main build.\n versionCatalogs {\n create("
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/build-conventions.gradle.kts",
"chars": 228,
"preview": "package com.felipebz.zpa\n\nplugins {\n id(\"com.felipebz.zpa.kotlin-conventions\")\n id(\"com.felipebz.zpa.testing-conve"
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/jreleaser-conventions.gradle.kts",
"chars": 2535,
"preview": "package com.felipebz.zpa\n\nplugins {\n id(\"org.jreleaser\")\n}\n\njreleaser {\n project {\n description.set(\"ZPA - "
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/kotlin-conventions.gradle.kts",
"chars": 458,
"preview": "package com.felipebz.zpa\n\nplugins {\n id(\"java\")\n id(\"org.jetbrains.kotlin.jvm\")\n}\n\nrepositories {\n mavenCentral"
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/license-conventions.gradle.kts",
"chars": 624,
"preview": "package com.felipebz.zpa\n\nimport com.hierynomus.gradle.license.tasks.LicenseCheck\nimport com.hierynomus.gradle.license.t"
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/publishing-conventions.gradle.kts",
"chars": 2308,
"preview": "package com.felipebz.zpa\n\nimport org.gradle.api.publish.maven.MavenPublication\nimport org.gradle.kotlin.dsl.create\nimpor"
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/sonarqube-conventions.gradle.kts",
"chars": 145,
"preview": "package com.felipebz.zpa\n\nplugins {\n id(\"org.sonarqube\")\n}\n\nsonarqube {\n properties {\n property(\"sonar.proj"
},
{
"path": "build-logic/src/main/kotlin/com/felipebz/zpa/testing-conventions.gradle.kts",
"chars": 998,
"preview": "package com.felipebz.zpa\n\nplugins {\n id(\"com.felipebz.zpa.kotlin-conventions\")\n id(\"jacoco\")\n}\n\nval libs = extensi"
},
{
"path": "build.gradle.kts",
"chars": 119,
"preview": "plugins {\n base\n id(\"com.felipebz.zpa.jreleaser-conventions\")\n id(\"com.felipebz.zpa.sonarqube-conventions\")\n}\n"
},
{
"path": "gradle/libs.versions.toml",
"chars": 2710,
"preview": "[versions]\nkotlin = \"2.3.21\"\ndokka = \"2.2.0\"\ndownload = \"5.7.0\"\njreleaser = \"1.23.0\"\nlicense = \"0.16.1\"\nshadow = \"9.4.1\""
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 281,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 292,
"preview": "group=com.felipebz.zpa\nversion=4.2.0-SNAPSHOT\n\n# Workaround for Dokka issue: https://github.com/Kotlin/dokka/issues/1405"
},
{
"path": "gradlew",
"chars": 8631,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "gradlew.bat",
"chars": 2846,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "plsql-custom-rules/README.md",
"chars": 1655,
"preview": "# plsql-custom-rules\n\nThis repository contains examples of custom rules for PL/SQL code analysis using SonarQube. The ex"
},
{
"path": "plsql-custom-rules/build.gradle.kts",
"chars": 2289,
"preview": "import java.time.ZoneId\nimport java.time.format.DateTimeFormatter\nimport java.util.*\n\nplugins {\n java\n}\n\nrepositories"
},
{
"path": "plsql-custom-rules/gradle/wrapper/gradle-wrapper.properties",
"chars": 281,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "plsql-custom-rules/gradlew",
"chars": 8631,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "plsql-custom-rules/gradlew.bat",
"chars": 2846,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "plsql-custom-rules/pom.xml",
"chars": 3169,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocat"
},
{
"path": "plsql-custom-rules/settings.gradle.kts",
"chars": 40,
"preview": "rootProject.name = \"plsql-custom-rules\"\n"
},
{
"path": "plsql-custom-rules/src/main/java/com/company/plsql/ForbiddenDmlCheck.java",
"chars": 1198,
"preview": "package com.company.plsql;\n\nimport org.sonar.plugins.plsqlopen.api.annotations.Priority;\nimport org.sonar.plugins.plsqlo"
},
{
"path": "plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesDefinition.java",
"chars": 481,
"preview": "package com.company.plsql;\n\nimport org.sonar.plugins.plsqlopen.api.CustomPlSqlRulesDefinition;\n\npublic class PlSqlCustom"
},
{
"path": "plsql-custom-rules/src/main/java/com/company/plsql/PlSqlCustomRulesPlugin.java",
"chars": 255,
"preview": "package com.company.plsql;\n\nimport org.sonar.api.Plugin;\n\npublic class PlSqlCustomRulesPlugin implements Plugin {\n \n "
},
{
"path": "plsql-custom-rules/src/main/resources/META-INF/extensions.idx",
"chars": 45,
"preview": "com.company.plsql.PlSqlCustomRulesDefinition\n"
},
{
"path": "plsql-custom-rules/src/test/java/com/company/plsql/ForbiddenDmlCheckTest.java",
"chars": 310,
"preview": "package com.company.plsql;\n\nimport org.junit.jupiter.api.Test;\nimport com.felipebz.zpa.checks.verifier.PlSqlCheckVerifie"
},
{
"path": "plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesDefinitionTest.java",
"chars": 712,
"preview": "package com.company.plsql;\n\nimport org.junit.jupiter.api.Test;\nimport org.sonar.api.Plugin;\nimport org.sonar.api.SonarEd"
},
{
"path": "plsql-custom-rules/src/test/java/com/company/plsql/PlSqlCustomRulesPluginTest.java",
"chars": 472,
"preview": "package com.company.plsql;\n\nimport org.junit.jupiter.api.Test;\n\nimport static org.junit.jupiter.api.Assertions.assertEqu"
},
{
"path": "plsql-custom-rules/src/test/resources/forbidden-dml.sql",
"chars": 236,
"preview": "select * \n from user u inner join profile p on (u.id = p.user_id); -- Noncompliant {{Replace this query by a function o"
},
{
"path": "settings.gradle.kts",
"chars": 207,
"preview": "pluginManagement {\n includeBuild(\"build-logic\")\n}\n\nrootProject.name = \"zpa\"\ninclude(\":sonar-zpa-plugin\")\ninclude(\":zp"
},
{
"path": "sonar-zpa-plugin/build.gradle.kts",
"chars": 3805,
"preview": "import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar\nimport groovy.util.Node\nimport groovy.util.NodeList\nim"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/IssueTest.kt",
"chars": 2537,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/MetricsTest.kt",
"chars": 9942,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/kotlin/com/felipebz/zpa/it/Tests.kt",
"chars": 2824,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/com/felipebz/zpa/it/empty-profile.xml",
"chars": 101,
"preview": "<profile>\n <name>empty-profile</name>\n <language>plsqlopen</language>\n <rules />\n</profile>\n"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/com/felipebz/zpa/it/it-profile.xml",
"chars": 425,
"preview": "<profile>\n <name>it-profile</name>\n <language>plsqlopen</language>\n <rules>\n <rule>\n <reposit"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/coverage.xml",
"chars": 323,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<coverage version=\"1\">\n <file path=\"function ut3_demo.betwnstr\">\n <lineToCove"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/betwnstr.sql",
"chars": 296,
"preview": "CREATE OR REPLACE FUNCTION BETWNSTR(A_STRING VARCHAR2, A_START_POS INTEGER, A_END_POS INTEGER) RETURN VARCHAR2 IS\n L_ST"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/custom_rule.sql",
"chars": 68,
"preview": "declare\n x number;\nbegin\n select x\n into x\n from user;\nend;\n"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/source1.sql",
"chars": 49,
"preview": "begin\n null;\nend;\nbegin\n null; -- NOSONAR\nend;\n"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/src/source2.sql",
"chars": 89,
"preview": "declare\n i number;\nbegin\n -- a comment\n select count(*)\n into i\n from dual;\nend;"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/test/test_betwnstr.sql",
"chars": 1471,
"preview": "create or replace package test_betwnstr as\n -- %suite(Between string function)\n\n -- %test(Returns substring from start"
},
{
"path": "sonar-zpa-plugin/src/integrationTest/resources/projects/metrics/test_results.xml",
"chars": 1167,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testExecutions version=\"1\">\n <file path=\"test_betwnstr\">\n <testCase name=\"no"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSql.kt",
"chars": 1718,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlPlugin.kt",
"chars": 5282,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlProfile.kt",
"chars": 2019,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlRuleRepository.kt",
"chars": 1852,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/PlSqlSquidSensor.kt",
"chars": 4039,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/SonarQubeUtils.kt",
"chars": 1263,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/api/CustomPlSqlRulesDefinition.kt",
"chars": 1771,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/highlight/PlSqlHighlighterVisitor.kt",
"chars": 2310,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/log/SonarQubeLogger.kt",
"chars": 1858,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/log/SonarQubeLoggers.kt",
"chars": 1164,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/metrics/CpdVisitor.kt",
"chars": 1997,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeActiveRuleAdapter.kt",
"chars": 2026,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeActiveRulesAdapter.kt",
"chars": 1202,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRepositoryAdapter.kt",
"chars": 1387,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleAdapter.kt",
"chars": 3240,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleKeyAdapter.kt",
"chars": 1507,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleMetadataLoader.kt",
"chars": 2814,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/rules/SonarQubeRuleParamAdapter.kt",
"chars": 1459,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/squid/PlSqlAstScanner.kt",
"chars": 7104,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/squid/SonarQubePlSqlFile.kt",
"chars": 1762,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/MappedObject.kt",
"chars": 1416,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/ObjectLocator.kt",
"chars": 2642,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/symbols/SonarQubeSymbolTable.kt",
"chars": 1832,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/AbstractReportImporter.kt",
"chars": 3016,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/CoverageReport.kt",
"chars": 2380,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/CoverageResultImporter.kt",
"chars": 4534,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/TestExecutionReport.kt",
"chars": 3142,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/TestResultImporter.kt",
"chars": 3811,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/main/kotlin/com/felipebz/zpa/utplsql/UtPlSqlSensor.kt",
"chars": 2062,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/CustomAnnotationBasedRulesDefinitionTest.kt",
"chars": 7300,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlChecksTest.kt",
"chars": 5439,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlPluginTest.kt",
"chars": 1477,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlProfileTest.kt",
"chars": 1500,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlSquidSensorTest.kt",
"chars": 6055,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/PlSqlTest.kt",
"chars": 1732,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/api/CustomPlSqlRulesDefinitionTest.kt",
"chars": 2933,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/highlight/PlSqlHighlighterVisitorTest.kt",
"chars": 3131,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/metrics/CpdVisitorTest.kt",
"chars": 2332,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/symbols/SonarQubeSymbolTableTest.kt",
"chars": 3103,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/kotlin/com/felipebz/zpa/utplsql/UtPlSqlSensorTest.kt",
"chars": 8483,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/code.sql",
"chars": 346,
"preview": "begin\n -- this is a comment\n /*\n * another comment\n */\n for i in 1..2 loop\n \n dbms_output.put_line(i);\n \n e"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/test.sql",
"chars": 76,
"preview": "begin\n -- this is a comment\n /**\n * another comment\n */\n x := 1;\nend;"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/award_bonus.sql",
"chars": 423,
"preview": "create or replace procedure award_bonus(emp_id number, sales_amt number) as\n commission real;\n comm_missing exception;"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/betwnstr.sql",
"chars": 386,
"preview": "/* comment before the code\n so the lines in the coverage report don't match the file */\ncreate or replace function bet"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/coverage-report-all-uncovered.xml",
"chars": 327,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<coverage version=\"1\">\n <file path=\"function ut3_demo.betwnstr\">\n <lineToCove"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/coverage-report-with-paths.xml",
"chars": 355,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<coverage version=\"1\">\n <file path=\"award_bonus.sql\">\n <lineToCover lineNumbe"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/coverage-report-without-paths.xml",
"chars": 323,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<coverage version=\"1\">\n <file path=\"function ut3_demo.betwnstr\">\n <lineToCove"
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/test-report-with-paths.xml",
"chars": 469,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testExecutions version=\"1\">\n <file path=\"path/to/file.sql\">\n <testCase name="
},
{
"path": "sonar-zpa-plugin/src/test/resources/com/felipebz/zpa/utplsql/test-report-without-paths.xml",
"chars": 474,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testExecutions version=\"1\">\n <file path=\"my.suite.test_package\">\n <testCase "
},
{
"path": "sonar-zpa-plugin/src/test/resources/highlight/highlight.sql",
"chars": 76,
"preview": "begin\n -- this is a comment\n /**\n * another comment\n */\n x := 1;\nend;"
},
{
"path": "sonar-zpa-plugin/src/test/resources/metrics/cpd.sql",
"chars": 415,
"preview": "begin\n null;\nend;\ncreate package body pkg is\n procedure foo is\n begin\n null;\n end;\nend;\ncreate procedure foo is\nbe"
},
{
"path": "sonar-zpa-plugin/src/test/resources/org/sonar/l10n/languageKey/rules/plsql/ruleWithExternalInfo.html",
"chars": 36,
"preview": "description for ruleWithExternalInfo"
},
{
"path": "sonar-zpa-plugin/src/test/resources/org/sonar/l10n/languageKey/rules/repoKey/ruleWithExternalInfo.html",
"chars": 36,
"preview": "description for ruleWithExternalInfo"
},
{
"path": "sonar-zpa-plugin/src/test/resources/org/sonar/l10n/languageKey.properties",
"chars": 125,
"preview": "ruleWithExternalInfo.name=external name for ruleWithExternalInfo\nruleWithExternalInfo.param.param1Key=description for pa"
},
{
"path": "sonar-zpa-plugin/src/test/resources/org/sonar/l10n/languageWithoutBundle/empty.txt",
"chars": 0,
"preview": ""
},
{
"path": "template/changelog.tpl",
"chars": 959,
"preview": "## SonarQube compatibility\n\nThis release is compatible with SonarQube Community Build 26.2 and newer and it has been tes"
},
{
"path": "zpa-checks/build.gradle.kts",
"chars": 1639,
"preview": "import de.undercouch.gradle.tasks.download.Download\n\nplugins {\n id(\"com.felipebz.zpa.build-conventions\")\n alias(li"
},
{
"path": "zpa-checks/src/integrationTest/kotlin/com/felipebz/zpa/it/InputFile.kt",
"chars": 1948,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "zpa-checks/src/integrationTest/kotlin/com/felipebz/zpa/it/OracleDocsExtractor.kt",
"chars": 4577,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "zpa-checks/src/integrationTest/kotlin/com/felipebz/zpa/it/PlSqlRulingTest.kt",
"chars": 9449,
"preview": "/**\n * Z PL/SQL Analyzer\n * Copyright (C) 2015-2026 Felipe Zorzo\n * mailto:felipe AT felipezorzo DOT com DOT br\n *\n * Th"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/CharacterDatatypeUsageCheck.json",
"chars": 208,
"preview": "{\n \"extras/hash_util_pkg.pkb\" : [\n 284\n ],\n \"ora/ftp_util_pkg.pkb\" : [\n 92\n ],\n \"ora/xlsx_builder_pkg.pkb\" : "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/CollapsibleIfStatementsCheck.json",
"chars": 188,
"preview": "{\n \"extras/as_pdf3.pkb\" : [\n 2441,\n 2995\n ],\n \"extras/pdfgen_pkg.pkb\" : [\n 3206\n ],\n \"ora/amazon_aws_s3_pk"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/CommitRollbackCheck.json",
"chars": 47,
"preview": "{\n \"ora/soap_server_pkg.pkb\" : [\n 772\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/ComparisonWithBooleanCheck.json",
"chars": 41,
"preview": "{\n \"ora/debug_pkg.pkb\" : [\n 184\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/ComparisonWithNullCheck.json",
"chars": 92,
"preview": "{\n \"ora/pdf_builder_pkg.pkb\" : [\n 995\n ],\n \"ora/string_util_pkg.pkb\" : [\n 584\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/ConcatenationWithNullCheck.json",
"chars": 46,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 3166\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/DbmsOutputPutCheck.json",
"chars": 794,
"preview": "{\n \"demos/csv_util_pkg_demo.sql\" : [\n 45,\n 69,\n 74,\n 79\n ],\n \"demos/zip_util_pkg_demo.sql\" : [\n 32,\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/DeadCodeCheck.json",
"chars": 87,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 680\n ],\n \"ora/sylk_util_pkg.pkb\" : [\n 96\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/EmptyBlockCheck.json",
"chars": 142,
"preview": "{\n \"demos/employee_service.pkb\" : [\n 70\n ],\n \"extras/as_pdf3.pkb\" : [\n 352\n ],\n \"extras/pdfgen_pkg.pkb\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/EmptyStringAssignmentCheck.json",
"chars": 317,
"preview": "{\n \"extras/as_pdf3.pkb\" : [\n 749,\n 2429\n ],\n \"extras/pdfgen_pkg.pkb\" : [\n 1159,\n 1197,\n 1227,\n 1451"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/ExplicitInParameterCheck.json",
"chars": 8109,
"preview": "{\n \"demos/pdf_builder_pkg_demo.sql\" : [\n 188\n ],\n \"extras/as_pdf3.pkb\" : [\n 93,\n 100,\n 107,\n 107,\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/FunctionWithOutParameterCheck.json",
"chars": 281,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 836,\n 841,\n 1870,\n 1870,\n 1870,\n 1879,\n 1879,\n 1879\n ],\n \"ora"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/IfWithExitCheck.json",
"chars": 45,
"preview": "{\n \"ora/date_util_pkg.pkb\" : [\n 618\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/InequalityUsageCheck.json",
"chars": 881,
"preview": "{\n \"demos/pdf_builder_pkg_demo.sql\" : [\n 240\n ],\n \"extras/as_pdf3.pkb\" : [\n 1389,\n 1891,\n 1938,\n 2344,"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/InsertWithoutColumnsCheck.json",
"chars": 244,
"preview": "{\n \"demos/01_create_demo_tables.sql\" : [\n 38,\n 41,\n 44,\n 47,\n 50,\n 53,\n 56,\n 59,\n 62,\n 65"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/NvlWithNullParameterCheck.json",
"chars": 135,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 2835\n ],\n \"ora/json_util_pkg.pkb\" : [\n 317\n ],\n \"ora/xlsx_builder_pkg.pkb\" : "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/ParsingErrorCheck.json",
"chars": 89,
"preview": "{\n \"demos/string_util_pkg_demo.sql\" : [\n 39\n ],\n \"setup/grants.sql\" : [\n 5\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/QueryWithoutExceptionHandlingCheck.json",
"chars": 156,
"preview": "{\n \"demos/employee_service.pkb\" : [\n 109\n ],\n \"demos/owa_util_pkg_demo.sql\" : [\n 29\n ],\n \"ora/flex_ws_api.pkb"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/SameBranchCheck.json",
"chars": 88,
"preview": "{\n \"ora/rss_util_pkg.pkb\" : [\n 84\n ],\n \"ora/string_util_pkg.pkb\" : [\n 585\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/SelectAllColumnsCheck.json",
"chars": 567,
"preview": "{\n \"demos/amazon_aws_s3_pkg_demo.sql\" : [\n 40,\n 61,\n 67\n ],\n \"demos/csv_util_pkg_demo.sql\" : [\n 3,\n 15"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UnnecessaryAliasInQueryCheck.json",
"chars": 50,
"preview": "{\n \"demos/csv_util_pkg_demo.sql\" : [\n 34\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UnnecessaryElseCheck.json",
"chars": 217,
"preview": "{\n \"ora/csv_util_pkg.pkb\" : [\n 210\n ],\n \"ora/regexp_util_pkg.pkb\" : [\n 42\n ],\n \"ora/string_util_pkg.pkb\" : [\n"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UnnecessaryNullStatementCheck.json",
"chars": 66,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 1037,\n 1052,\n 2942\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UnusedParameterCheck.json",
"chars": 424,
"preview": "{\n \"demos/datapump_cloud_pkg.pkb\" : [\n 85,\n 149,\n 150\n ],\n \"demos/employee_service.pkb\" : [\n 66,\n 74\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UnusedVariableCheck.json",
"chars": 1276,
"preview": "{\n \"extras/as_pdf3.pkb\" : [\n 350,\n 461,\n 469,\n 634,\n 718,\n 2533,\n 2534,\n 2535,\n 2536,\n 28"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/UselessParenthesisCheck.json",
"chars": 54,
"preview": "{\n \"ora/date_util_pkg.pkb\" : [\n 440,\n 441\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/VariableHidingCheck.json",
"chars": 391,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 1023,\n 1421,\n 1618,\n 1863,\n 2886\n ],\n \"ora/ms_ews_util_pkg.pkb\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/VariableInitializationWithFunctionCallCheck.json",
"chars": 1763,
"preview": "{\n \"demos/datapump_cloud_pkg.pkb\" : [\n 21,\n 22\n ],\n \"demos/plsql_status_web_pkg.pkb\" : [\n 17\n ],\n \"extras/"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/alexandria-plsql-utils/VariableInitializationWithNullCheck.json",
"chars": 472,
"preview": "{\n \"extras/pdfgen_pkg.pkb\" : [\n 878,\n 897\n ],\n \"extras/utl_file_nonstandard.pkb\" : [\n 26,\n 27\n ],\n \"ora"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/AddParenthesesInNestedExpressionCheck.json",
"chars": 148,
"preview": "{\n \"examples/condition03.sql\" : [\n 3,\n 8\n ],\n \"examples/condition05.sql\" : [\n 4\n ],\n \"examples/query_facto"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/ColumnsShouldHaveTableNameCheck.json",
"chars": 488,
"preview": "{\n \"examples/bindvar05.sql\" : [\n 1,\n 1,\n 4\n ],\n \"examples/condition11.sql\" : [\n 1\n ],\n \"examples/dblink"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/CommitRollbackCheck.json",
"chars": 252,
"preview": "{\n \"examples-sql-script/procedure_with_cursor_and_limit.sql\" : [\n 34,\n 41\n ],\n \"examples-sql-script/with_clause"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/CursorBodyInPackageSpecCheck.json",
"chars": 65,
"preview": "{\n \"examples-sql-script/package_with_cursor.sql\" : [\n 3\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/DbmsOutputPutCheck.json",
"chars": 932,
"preview": "{\n \"examples-sql-script/anonymous_block.sql\" : [\n 4,\n 7\n ],\n \"examples-sql-script/green_tools.pkb\" : [\n 7,\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/DeclareSectionWithoutDeclarationsCheck.json",
"chars": 43,
"preview": "{\n \"examples/block01.sql\" : [\n 24\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/EmptyBlockCheck.json",
"chars": 195,
"preview": "{\n \"examples-sql-script/declare_procedure_no_args.sql\" : [\n 5\n ],\n \"examples-sql-script/package_body_null.pkb\" : ["
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/ExplicitInParameterCheck.json",
"chars": 664,
"preview": "{\n \"examples-sql-script/delete_as_regular_id.pkb\" : [\n 3\n ],\n \"examples-sql-script/in_out_parameters.pks\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/IdenticalExpressionCheck.json",
"chars": 338,
"preview": "{\n \"examples/condition02.sql\" : [\n 4\n ],\n \"examples/condition03.sql\" : [\n 4\n ],\n \"examples/condition09.sql\" :"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/IfWithExitCheck.json",
"chars": 76,
"preview": "{\n \"examples-sql-script/cursor-attributes-with-spaces.sql\" : [\n 22\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/InequalityUsageCheck.json",
"chars": 271,
"preview": "{\n \"examples/bindvar03.sql\" : [\n 15\n ],\n \"examples/connect_by03.sql\" : [\n 4\n ],\n \"examples/groupby01.sql\" : ["
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/InsertWithoutColumnsCheck.json",
"chars": 49,
"preview": "{\n \"examples/values_clause.sql\" : [\n 27\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/ParsingErrorCheck.json",
"chars": 6247,
"preview": "{\n \"examples-sql-script/e_in_out_parameters.pks\" : [\n 4\n ],\n \"examples-sql-script/grants.sql\" : [\n 5\n ],\n \"ex"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/QueryWithoutExceptionHandlingCheck.json",
"chars": 122,
"preview": "{\n \"examples-sql-script/select_into.sql\" : [\n 9,\n 13,\n 17\n ],\n \"examples/insert_statement.sql\" : [\n 4\n ]"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/SelectAllColumnsCheck.json",
"chars": 3516,
"preview": "{\n \"examples-sql-script/green_table.sql\" : [\n 26\n ],\n \"examples-sql-script/package_with_cursor.sql\" : [\n 4\n ],"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/ToDateWithoutFormatCheck.json",
"chars": 81,
"preview": "{\n \"examples/to_date.sql\" : [\n 1,\n 7,\n 10,\n 13,\n 16,\n 19\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/UnnecessaryAliasInQueryCheck.json",
"chars": 1696,
"preview": "{\n \"examples-sql-script/procedure_with_cursor_and_limit.sql\" : [\n 16,\n 17\n ],\n \"examples/bindvar03.sql\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/UnnecessaryLikeCheck.json",
"chars": 106,
"preview": "{\n \"examples/condition06.sql\" : [\n 13,\n 13\n ],\n \"examples/query_factoring05.sql\" : [\n 22\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/UnusedParameterCheck.json",
"chars": 360,
"preview": "{\n \"examples-sql-script/substr_as_regular_id.pkb\" : [\n 3\n ],\n \"examples-sql-script/with_clause_in_exists_block_in_"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/UnusedVariableCheck.json",
"chars": 433,
"preview": "{\n \"examples-sql-script/anonymous_block.sql\" : [\n 2\n ],\n \"examples-sql-script/cursor-attributes-with-spaces.sql\" :"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/antlr-grammars-v4/UselessParenthesisCheck.json",
"chars": 189,
"preview": "{\n \"examples/condition06.sql\" : [\n 13\n ],\n \"examples/condition08.sql\" : [\n 5\n ],\n \"examples/condition15.sql\" "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/CommitRollbackCheck.json",
"chars": 36,
"preview": "{\n \"UPLOAD_DB.pcd\" : [\n 22\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/DeclareSectionWithoutDeclarationsCheck.json",
"chars": 47,
"preview": "{\n \"WEBUTIL_DEMO/PRE-FORM.tgg\" : [\n 2\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/EmptyStringAssignmentCheck.json",
"chars": 36,
"preview": "{\n \"FILES_WBP.pcd\" : [\n 65\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/ExplicitInParameterCheck.json",
"chars": 45,
"preview": "{\n \"SET_BROWSER_MESSAGE.pcd\" : [\n 1\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/InvalidReferenceToObjectCheck.json",
"chars": 76,
"preview": "{\n \"BUILTINS/BUILTINS__READ_IMAGE__WHEN-BUTTON-PRESSED.tgg\" : [\n 5\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/QueryWithoutExceptionHandlingCheck.json",
"chars": 103,
"preview": "{\n \"F_GET_TIMER_VALUE.fun\" : [\n 6\n ],\n \"WEBUTIL_DEMO/WHEN-NEW-FORM-INSTANCE.tgg\" : [\n 20\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/UnnecessaryElseCheck.json",
"chars": 48,
"preview": "{\n \"WEBUTIL_DEMO/PRE-FORM.tgg\" : [\n 26\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/UnusedVariableCheck.json",
"chars": 37,
"preview": "{\n \"DOWNLOAD_AS.pcd\" : [\n 3\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/VariableInitializationWithFunctionCallCheck.json",
"chars": 70,
"preview": "{\n \"C_API/C_API__CALL_C_API__WHEN-BUTTON-PRESSED.tgg\" : [\n 9\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0001/VariableInitializationWithNullCheck.json",
"chars": 66,
"preview": "{\n \"HOST/HOST__RUN_HOST__WHEN-BUTTON-PRESSED.tgg\" : [\n 3\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0002/EmptyBlockCheck.json",
"chars": 195,
"preview": "{\n \"BL_EMPLOYEES.pkb\" : [\n 13,\n 18,\n 23,\n 28,\n 33,\n 38,\n 43,\n 48\n ],\n \"BL_MAINBLOCK.pkb\" : [\n"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0002/VariableInitializationWithFunctionCallCheck.json",
"chars": 62,
"preview": "{\n \"CONST_LOCAL.pks\" : [\n 12,\n 13,\n 14,\n 17\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0002_2/EmptyBlockCheck.json",
"chars": 110,
"preview": "{\n \"WNB.pcd\" : [\n 3\n ],\n \"WNF.pcd\" : [\n 3\n ],\n \"WNI.pcd\" : [\n 3\n ],\n \"WNR.pcd\" : [\n 3\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0003/EmptyBlockCheck.json",
"chars": 102,
"preview": "{\n \"BL_MAINBLOCK.pkb\" : [\n 5,\n 10,\n 15,\n 20,\n 25,\n 30,\n 35,\n 40,\n 45\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0003/InequalityUsageCheck.json",
"chars": 62,
"preview": "{\n \"EMPLOYEES_LI/EMPLOYEES_LI__PRE-QUERY.tgg\" : [\n 2\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0003/VariableInitializationWithFunctionCallCheck.json",
"chars": 70,
"preview": "{\n \"CONST_LOCAL.pks\" : [\n 12,\n 13,\n 14,\n 15,\n 18\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/ExplicitInParameterCheck.json",
"chars": 38,
"preview": "{\n \"ERRORMESSAGE.pcd\" : [\n 1\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/InequalityUsageCheck.json",
"chars": 49,
"preview": "{\n \"RELEASE_LOCKS/POST-FORM.tgg\" : [\n 5\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/RaiseStandardExceptionCheck.json",
"chars": 52,
"preview": "{\n \"V$LOCK/V$LOCK__POST-QUERY.tgg\" : [\n 51\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/ReturnOfBooleanExpressionCheck.json",
"chars": 33,
"preview": "{\n \"IS_DBA.fun\" : [\n 11\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/UnnecessaryElseCheck.json",
"chars": 33,
"preview": "{\n \"IS_DBA.fun\" : [\n 13\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/UnusedVariableCheck.json",
"chars": 90,
"preview": "{\n \"V$SESSION/V$SESSION__PB_KILL_SESSION__WHEN-BUTTON-PRESSED.tgg\" : [\n 3,\n 4\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0004/VariableInitializationWithFunctionCallCheck.json",
"chars": 143,
"preview": "{\n \"RELEASE_LOCKS/POST-FORM.tgg\" : [\n 3\n ],\n \"STEUERBLOCK/STEUERBLOCK__PB_CONNECT__WHEN-BUTTON-PRESSED.tgg\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0005/EmptyBlockCheck.json",
"chars": 50,
"preview": "{\n \"TIMEOUTPJC_TEST/ON-LOGON.tgg\" : [\n 2\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0005/EmptyStringAssignmentCheck.json",
"chars": 443,
"preview": "{\n \"TEST/TEST__PRESET1__WHEN-BUTTON-PRESSED.tgg\" : [\n 7\n ],\n \"TEST/TEST__PRESET2__WHEN-BUTTON-PRESSED.tgg\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0005/InvalidReferenceToObjectCheck.json",
"chars": 64,
"preview": "{\n \"TIMEOUTPJC_TEST/WHEN-NEW-FORM-INSTANCE.tgg\" : [\n 3\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0006/QueryWithoutExceptionHandlingCheck.json",
"chars": 43,
"preview": "{\n \"F_GET_TIMER_VALUE.fun\" : [\n 6\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0007/InequalityUsageCheck.json",
"chars": 83,
"preview": "{\n \"ALL_OBJECTS/ALL_OBJECTS__CALL_EXCEL__WHEN-BUTTON-PRESSED.tgg\" : [\n 10\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0008/EmptyBlockCheck.json",
"chars": 47,
"preview": "{\n \"LATENCY_TEST/ON-LOGON.tgg\" : [\n 2\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0008/InvalidReferenceToObjectCheck.json",
"chars": 99,
"preview": "{\n \"P_WHEN_NEW_FORM_INSTANCE.pcd\" : [\n 13,\n 14,\n 15,\n 30,\n 50,\n 70,\n 90\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0008/UnusedVariableCheck.json",
"chars": 175,
"preview": "{\n \"LATENCY_TEST/WHEN-TIMER-EXPIRED.tgg\" : [\n 18\n ],\n \"P_DOWNLOAD_DOKUMENT_AS.pcd\" : [\n 3,\n 7,\n 9\n ],\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0009/CharacterDatatypeUsageCheck.json",
"chars": 36,
"preview": "{\n \"G.pkb\" : [\n 47,\n 62\n ]\n}"
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0009/CollapsibleIfStatementsCheck.json",
"chars": 368,
"preview": "{\n \"BLK_HANDLG/BLK_HANDLG__BT_COMPILE_SINGLE__WHEN-BUTTON-PRESSED.tgg\" : [\n 22,\n 28,\n 34,\n 40,\n 46,\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0009/DeadCodeCheck.json",
"chars": 336,
"preview": "{\n \"PKG_CONFIG.pkb\" : [\n 500\n ],\n \"PRC_CHECK_FAM.pcd\" : [\n 91,\n 131\n ],\n \"PRC_GET_CHK_REF_INFO.pcd\" : [\n "
},
{
"path": "zpa-checks/src/integrationTest/resources/expected/demo0009/DeclareSectionWithoutDeclarationsCheck.json",
"chars": 55,
"preview": "{\n \"FORMSAPI_WIZARD_2905/ON-LOGON.tgg\" : [\n 3\n ]\n}"
}
]
// ... and 4868 more files (download for full content)
About this extraction
This page contains the full source code of the felipebz/zpa GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 5068 files (3.2 MB), approximately 1.2M tokens, and a symbol index with 474 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.