DMV (Dynamic Management View) query parser, model and predicate evaluation — Eclipse Daanse.
DMV queries are how XMLA/Analysis-Services clients ask schema rowsets with SQL-like text:
SELECT [DISTINCT] [TOP n] ( * | column [, column]* )
FROM ( $SYSTEM.<rowset>
| SYSTEMRESTRICTSCHEMA ( $SYSTEM.<rowset> [, restriction = literal]* ) )
[WHERE predicate]
[ORDER BY column [ASC|DESC] [, column [ASC|DESC]]*]JOIN, GROUP BY, LIKE, CAST and CONVERT are not part of the language (Microsoft's DMV documentation).
| Module | Content |
|---|---|
model.api |
The statement model (DmvStatement: columns or star, rowset, restrictions, where, order by, distinct, top), the sealed predicate hierarchy, and DmvPredicates — the one shared WHERE evaluation |
model.record |
Immutable record implementations |
parser.api |
DmvParserProvider / DmvParser / DmvParserException |
parser.ccc |
The CongoCC-generated parser, registered as an OSGi DS service |
parser.tck |
The conformance suite every parser implementation has to pass |
DmvStatement statement = dmvParserProvider
.newParser("SELECT [CUBE_NAME] FROM $SYSTEM.MDSCHEMA_CUBES WHERE [CUBE_SOURCE] = 1")
.parseDmvStatement();
statement.table(); // "MDSCHEMA_CUBES"
statement.columns(); // ["CUBE_NAME"] - empty list means SELECT *
statement.where(); // Optional<DmvPredicate>
statement.orderBy(); // List<OrderByItem>
boolean keep = DmvPredicates.matches(statement.where().orElse(null), row::get);Requires JDK 25+ and Maven 3.9+.
mvn clean verify
The parser is generated by CongoCC into parser.ccc/src/gen/java; run
mvn generate-sources once before importing into an IDE.