Repository navigation
Release 4.2.0
Highlights
ZPA 4.2.0 brings the largest expansion of Oracle SQL and PL/SQL grammar support in the project's history.
Hundreds of syntax gaps have been addressed across Oracle SQL, PL/SQL, DDL, SQL/JSON, and other areas, reducing known parsing gaps in the integration test corpus to nearly zero.
This release represents a major step toward comprehensive Oracle syntax coverage and provides a much stronger foundation for analysis of real-world PL/SQL codebases.
SonarQube compatibility
This release supports SonarQube Community Build 26.2 and newer and has been tested with versions 26.2 through 26.10.
SonarQube commercial builds are not supported. If you need to analyze projects without installing a SonarQube plugin, consider using zpa-cli.
Install or update
- Download sonar-zpa-plugin-4.2.0.jar.
- Copy it to
SONARQUBE_HOME/extensions/plugins, replacing the previous ZPA version. - Restart SonarQube.
A note from Brazil
ZPA is developed in Brazil, and releasing software can feel secondary while the country is going through a critical political and social struggle.
To me, open source has always meant more than simply making code available. It is about sharing knowledge, building collectively, and believing that cooperation, rather than the pursuit of individual profit, can help create a better world. These values do not stop at software.
Brazil has already paid a heavy price for authoritarianism, political violence, structural inequality, and contempt for democratic institutions. With these forces once again threatening our public life, silence is complicity.
I believe democracy must be actively defended and fascism must be opposed. No political project is worth sacrificing human dignity, social rights, or the right of the working class and marginalized communities to organize and fight for a better life.
Solidarity is not charity; it is an act of resistance. Caring for the vulnerable is not a threat. A society should be judged not by how much unchecked power its most privileged are allowed to exercise, but by the dignity, rights, and material conditions guaranteed to everyone.
If you find ZPA useful and wish to support my work, please consider redirecting your financial support to the grassroots initiatives listed on my GitHub Sponsors page instead.
Take care of each other, organize, and do not take our rights for granted.
What's changed
🚀 Features
api
- add experimental support for project-aware custom rules (#80)
checks
- support safe built-ins in deterministic function candidates
- add rule "Consider declaring suitable functions DETERMINISTIC"
- add rule "Deterministic functions should not depend on external state"
- extend "Sequence NEXTVAL in conditional results" rule to support DECODE validation (#135)
- add rule "Sequence NEXTVAL should not be used in conditional results" (#135)
- add rule "Adjacent string literals should be merged" (#110)
- add rule "utPLSQL tests should have descriptions" (#93)
- add rule "Unresolved utPLSQL setup and cleanup references" (#93)
- add rule "Invalid utPLSQL context structure" (#93)
- add rule "Invalid utPLSQL annotation arguments" (#93)
- add rule "Conflicting utPLSQL annotations" (#93)
- add rule "Ineffective utPLSQL annotations in package bodies" (#93)
- add rule "Package body parameters should match the specification's NOCOPY qualification" (#80)
core
- expose parameter default metadata for package functions
- add typed syntax view for SELECT statements (#400)
- add typed syntax view for IF statements (#400)
- add typed syntax view for variable declarations (#400)
- add typed syntax view for method calls (#400)
- add typed syntax views for table references (#400)
- evaluate static expressions in datatype constraints (#187)
dev/oracle
- add Oracle probe for syntax and grammar experiments
matchers
- use effective semantic types (#309)
parser
- support tablespace set DDL
- support object attribute paths in table constraints
- support immutable and blockchain tables
- support LOB storage clause syntax
- support inline REF constraints
- support ALTER ANALYTIC VIEW syntax
- support ALTER HIERARCHY syntax
- support ALTER JAVA syntax
- support CREATE INDEXTYPE and ALTER INDEXTYPE syntax
- support CREATE OPERATOR and ALTER OPERATOR syntax
- support CREATE EDITION syntax
- support FLASHBACK TABLE syntax
- support CREATE RESTORE POINT syntax
- support ALTER RESOURCE COST syntax
- support RENAME syntax
- support ASSOCIATE and DISASSOCIATE STATISTICS syntax
- support CREATE VECTOR INDEX
- support Oracle vector functions
- support ALTER TYPE
- support Oracle rank and approximate aggregates
- complete PL/SQL unit headers
- support CREATE and ALTER LIBRARY syntax
- support TRUNCATE CLUSTER syntax
- support ALTER SYNONYM syntax
- support CREATE and ALTER SEQUENCE syntax
- support CREATE SEARCH INDEX syntax
- support Oracle data mining functions
- expand ALTER TABLE properties
- support CREATE TABLE physical properties
- support XMLType table and column storage
- support create table as select, alter table column clauses, alter system, create context and call
- add full CREATE INDEX support (#124)
- add full ALTER INDEX support (#124)
- optimize JSON object access parsing
- support MODEL clause (closes #58)
project
- index sequence declarations
- introduce built-in project analysis queries and consumer (#309)
- resolve package body subprogram declarations (#309)
- correlate package subprogram specifications (#309)
- add support for parsing package bodies and their subprograms (#309)
- compose semantic RECORD field types (#309)
- classify semantic type references (#309)
- resolve arbitrary RECORD member paths (#309)
- resolve second-hop RECORD field type during path resolution (#309)
- introduce bounded RECORD member path resolution logic (#309)
- add RECORD field type resolution logic (#309)
- resolve RECORD member targets (#309)
- add AST-free RECORD field metadata (#309)
- propagate project type resolutions to symbols during semantic analysis
- add named-type resolver (#309)
- introduce initial version of a project declaration extractor and symbol index (#309)
semantic
- attach project type resolutions to datatype nodes (#309)
semantics
toolkit
- integrate semantic inspection into zpa-toolkit
🐛 Fixes
build
- update sqlcl version in integrationTest to 26.3.0.260.1620
- update workflows to refine artifact handling
- update JReleaser signing configuration
- update Gradle scripts for configuration and syntax improvements
checks
- handle function modifiers in deterministic candidates
- ignore guaranteed single-row aggregates in QueryWithoutExceptionHandling (#247)
- make DisabledTestCheck respect utPLSQL annotations (#93)
- make utPLSQL annotation validation context-aware (#93)
ci
- adjust dependency submission trigger and remove unused workflow
core
- recognize empty national string literals
dev/oracle
- serialize probe executions with file locking logic
grammar
- support sharded table partitionsets and consistent hash
- support SQL-defined JSON relational duality views
- complete pluggable database keystore and container map syntax
- complete ENABLE EDITIONS user clauses
- complete JSON_VALUE handler syntax
- complete JSON return datatype parsing
- support TYPE clauses in JSON_TABLE columns
- support CREATE TYPE IF NOT EXISTS
- allow optional separators in multi-column domains
- support ALTER ASSERTION
- model JSON_TRANSFORM handler syntax
- support JSON_TRANSFORM set operations
- complete index-organized table attributes
- support column visibility in ALTER TABLE MODIFY
- support CREATE TABLE visibility and behavior properties
- enhance DROP command parsing
- widen the json and xml functions to what Oracle accepts
- parse subprogram properties, streaming clause and multiset operands
- parse the DML constructs Oracle accepts but the grammar rejected
- refine partition extension syntax
- scope analytic null treatment by function
- restrict the new constructs to what Oracle accepts
- support IS separator in JSON object functions (#401)
- support CREATE JAVA statements (#401)
- support MATCH_RECOGNIZE row pattern matching (#401)
- support CREATE MATERIALIZED VIEW LOG syntax
- enhance CREATE MATERIALIZED VIEW support with new clauses and keywords
- enhance CREATE VIEW and MATERIALIZED VIEW support with new clauses and keywords (#401)
- support the OVERLAPS predicate (#401)
- allow empty OVER clause for LISTAGG (#401)
- support OUT as identifier while preserving parameter modes (#401)
- a second batch of constructs found in the same code base
- parse row limiting without a row count, log as an alias and lock table
- parse null treatment inside the argument list and from first/last
- parse partition-extended table names in insert and merge
- parse cross apply and outer apply
- parse ignore/respect nulls in analytic functions
- parse partition-extended table names
- parse lateral inline views
lexer
- support $elsif directives in conditional compilation
- accept padding inside a date literal
- accept date literals without leading zeros
parser
- improve support of UPDATE INDEXES syntax used by ALTER TABLE ... MODIFY PARTITION BY ...
- improve CREATE/ALTER SEQUENCE handling with SHARD, SCALE, and EXTEND/NOEXTEND modifiers
- enhance LOB parameter handling
- support MOVE TABLE SUBPARTITION syntax
- support MODIFY TABLE SUBPARTITION and enhance SHRINK SPACE handling
- support CREATE JSON RELATIONAL DUALITY VIEW syntax
- support wrapped PL/SQL source
- classify CREATE CONTROLFILE documentation artifact
- support stacked labels for PL/SQL statements
- support CREATE SCHEMA syntax
- support subquery restrictions in DML table expressions
- support traditional AUDIT syntax
- support TIME literals
- support SWITCHOVER TO LIBRARY syntax for key management
- support ALL modifier in aggregate functions
- support AS OF SNAPSHOT syntax for flashback queries
- support flexible ordering of WRITE options in COMMIT statements
- support FORALL indices/values with expression operands
- support additional pragma statements in executable sections
- support CTE VALUES clause in WITH statements
- support CREATE SHARDED TABLE and directory partitioning syntax
- support CREATE TABLE clauses for external and heap-organized tables
- support CREATE DATABASE and CREATE CONTROLFILE syntax
- support trigger call bodies and referencing clause variations
- support CREATE DISKGROUP syntax
- support CREATE ANALYTIC VIEW syntax
- support analytic view query syntax
- support SET CONSTRAINTS expressions
- support FLASHBACK DATABASE and PMEM FILESTORE statements
- support vector datatype and distance operators
- support COLLATE operator in expressions
- support additional ALTER TABLE MODIFY clauses
- support RETURNING with OLD/NEW as modifiers
- support interval qualifiers in expressions
- support IS DANGLING condition
- support datatype-less columns in table definitions
- support DOMAIN clauses in table definitions
- support INTERVAL and REFERENCE partitioning clauses
- support CHR USING character set
- support MERGE statements without USING clause
- support row-limiting partitions and accuracy clauses
- add support for JSON validation clauses in table columns and expressions
- complete JSON_TRANSFORM handlers
- support SQL/JSON type clauses
- add support for OID and PERSISTABLE clauses in CREATE TYPE and CREATE VIEW
- support storage and datafile clauses in ALTER PLUGGABLE DATABASE
- support CREATE PLUGGABLE DATABASE and related clauses
- rejectsTrailingTokensAndTargets
- support PDB_CONTAINERS_CLAUSE in ALTER PLUGGABLE DATABASE
- support CREATE LOCKDOWN PROFILE
- handle deprecated FINISH and CANCEL forms in MANAGED STANDBY RECOVERY, improve test coverage
- add support for MANAGED STANDBY RECOVERY and RECOVER TO LOGICAL STANDBY clauses in ALTER DATABASE
- simplify and clarify grammar rules and comments
- support RENAME GLOBAL_NAME and BLOCK CHANGE TRACKING clauses in ALTER DATABASE
- support ALTER DISKGROUP filegroups
- support SAVE/DISCARD STATE in ALTER PLUGGABLE DATABASE
- support ALTER DATABASE startup clauses
- support extended CASE controls
- support MLE modules and call specifications
- support ALTER DATABASE default tablespace settings
- support MLE environment DDL
- support direct-join UPDATE and DELETE
- support PREPARE and DROP MIRROR COPY clauses
- support ALTER PLUGGABLE DATABASE UNPLUG
- support ALTER DATABASE general recovery
- add support for FLASHBACK QUERY clause
- support ALTER DISKGROUP maintenance clauses
- support ALTER DISKGROUP syntax
- support VIRTUAL and JSON collection tables
- support LOST WRITE PROTECTION syntax
- support ALTER DATABASE file clauses
- extend ADMINISTER KEY MANAGEMENT key management clauses
- extend ADMINISTER KEY MANAGEMENT support with keystore lifecycle management
- support ADMINISTER KEY MANAGEMENT secret management clauses
- support ALTER DATABASE logfile clauses
- support ALTER PLUGGABLE DATABASE operations
- support ADMINISTER KEY MANAGEMENT and keystore operations
- support datatype-less CTAS column definitions
- support JSON datatype modifiers and limits
- support floating-point conditions
- support SEGMENT CREATION clauses in partition and subpartition definitions
- support CREATE TABLE supplemental logging
- support legacy COMPUTE STATISTICS in CREATE INDEX and constraint clauses
- support SELECT sample clause
- support table compression in CREATE TABLE
- support XMLType virtual columns
- support identity columns
- support CREATE TABLE in-memory and staging properties
- restrict data mining attributes to value expressions
- support ALTER VIEW syntax
- support CREATE and ALTER INMEMORY JOIN GROUP syntax
- support EXPLAIN PLAN syntax
- support CREATE PFILE and CREATE SPFILE syntax
- support PURGE statement syntax
- support CREATE and ALTER FLASHBACK ARCHIVE syntax
- support CREATE and ALTER OUTLINE syntax
- support CREATE and ALTER DATABASE LINK syntax
- support ALTER DIMENSION and ALTER ATTRIBUTE DIMENSION syntax
- support CREATE DIMENSION syntax
- support CREATE ATTRIBUTE DIMENSION and CREATE HIERARCHY syntax
- support ALTER MATERIALIZED VIEW LOG syntax
- support ALTER MATERIALIZED VIEW syntax
- support CREATE and ALTER MATERIALIZED ZONEMAP syntax
- support INSERT SET clause
- support WINDOW and QUALIFY clauses
- support CREATE FLEXIBLE DOMAIN syntax
- support ENUM type in CREATE DOMAIN syntax
- support multi-column CREATE DOMAIN syntax
- support ALTER DOMAIN syntax
- support CREATE ASSERTION syntax
- support AUDIT and NOAUDIT statement syntax
- support ANALYZE statement syntax
- correct typo in PHYSICAL_ATTRIBUTES_CLAUSE definition
- support CREATE CLUSTER, ALTER CLUSTER, and TABLE CLUSTER syntax
- support CREATE ROLLBACK SEGMENT and ALTER ROLLBACK SEGMENT syntax
- support CREATE ROLE and ALTER ROLE syntax
- support CREATE TABLESPACE and ALTER TABLESPACE syntax
- support CREATE PROFILE and ALTER PROFILE syntax
- support ALTER USER syntax and USER PROXY clause
- support CREATE USER syntax
- support ALTER AUDIT POLICY syntax
- support CREATE PROPERTY GRAPH syntax
- support CREATE AUDIT POLICY syntax
- support REVOKE statement and associated syntax
- add support for CREATE DOMAIN syntax
- add support for ALTER LOCKDOWN PROFILE syntax
- support annotations syntax for CREATE TABLE and ALTER TABLE
- add support for GRAPH_TABLE operator and related graph syntax
- support TRUNCATE PARTITION and SUBPARTITION syntax in ALTER TABLE
- support MOVE PARTITION syntax in ALTER TABLE
- support EXCHANGE PARTITION and SUBPARTITION syntax in ALTER TABLE
- support RENAME PARTITION and SUBPARTITION syntax in ALTER TABLE
- support ADD PARTITION syntax in ALTER TABLE
- support MODIFY PARTITION LOCAL INDEXES syntax in ALTER TABLE
- support MERGE PARTITIONS syntax in ALTER TABLE
- support SPLIT PARTITION syntax in ALTER TABLE
- support DROP CONSTRAINT clause in ALTER TABLE
- support RENAME COLUMN clause in ALTER TABLE
- support column encryption syntax in TABLE and ALTER TABLE definitions
- support COLLATE and ANNOTATIONS clause in ALTER TABLE
- support ENABLE/DISABLE clauses in ALTER TABLE
- support MODIFY CONSTRAINT and CONSTRAINT STATE in ALTER TABLE
- support out-of-line REF constraints
- support DROP COLUMN clause in ALTER TABLE
- support CLUSTER_ID function
- support CLUSTER_DETAILS function
- support CLUSTER_SET function and mining syntax
- support PERCENTILE_DISC and PERCENTILE_CONT functions
- support UNIQUE in LISTAGG
- complete COLLECT aggregate syntax support
- reject duplicate ONLINE in ALTER TABLE MOVE
- tighten CALL statement grammar
- allow indented SQL*Plus slash terminators
- support object tables and nested table storage
- support index-organized tables
- support SQL*Plus host command aliases
- support using index constraint clauses
- support parenthesized alter table add clauses
- add ContextKey for MODEL expression scopes
- align PIVOT and UNPIVOT grammar with Oracle (closes #54)
- complete Oracle LISTAGG syntax support (closes #259)
- complete CREATE SEQUENCE syntax support
project
- exclude function modifiers from return type identity
symbols
- resolve schema-qualified and package-qualified types correctly in DefaultTypeSolver
test
- handle multiple line endings in WrappedSourceChannelTest
tests
- update expected results for ParsingErrorCheck with new INVALID_SOURCE case
- update expected results for ParsingErrorCheck
toolkit
- preserve FlatLaf scaling for monospaced fonts
🔄️ Changes
checks
- reuse nvl matcher in NvlWithNullParameterCheck
- skip non-select-column nodes early in VariableInCountCheck
- reuse dbms_output matchers
lexer
- narrow DATE and TIMESTAMP channel admission
- optimize string literal matching logic
- replace identifier regex with manual scanner
- avoid unnecessary numeric regex matches
matchers
- avoid temporary allocations in MethodMatcher
parser
- avoid factorial CREATE DOMAIN grammar expansion
- dispatch LITERAL by token type
- optimize CALL_EXPRESSION function admission
- optimize non-reserved keyword matching
symbols
- fuse scope-holder visitor dispatch
- index symbols by name per scope
walker
- avoid iterators when visiting children
- skip unused token callbacks
ZPA Toolkit
Download zpa-toolkit-4.2.0.jar to inspect the parser AST and symbol table.
The toolkit requires Java 21 or newer.
Developing custom ZPA plugins?
Binary compatibility is not guaranteed between ZPA versions. Custom plugins should be recompiled against the same version of sonar-zpa-plugin used by the SonarQube instance.