SrampToJcrSql2QueryVisitor is extremely brittle and inflexible. See
SRAMP-622 for an example. The following query is next to impossible:
/s-ramp/xsd/XsdDocument[relWithAttr[s-ramp:getRelationshipAttribute(., 'FooKey') = 'FooValue' and @FooProperty = 'FooValue']]
Note that the getRelationshipAttribute predicate function affects the relWithAttr relationship itself, while the @FooProperty check must go in the target artifact sub-query. Correctly handling this query will require a Builder pattern to be introduced.
Attempt to use ModeShape's JCR-JQOM:
ModeShape also has a builder class, but it's not public and may pose additional issues.
(10:00:16 AM) rhauch: brmeyer: well, it's not public: https://github.com/ModeShape/modeshape/blob/master/modeshape-jcr/src/main/java/org/modeshape/jcr/query/QueryBuilder.java and https://github.com/ModeShape/modeshape/blob/master/modeshape-jcr/src/test/java/org/modeshape/jcr/query/QueryBuilderTest.java#L71
(10:01:39 AM) rhauch: brmeyer: that builder is somewhat limited, and it is really meant for hard-coded code. For example, there are places where you'd have to build strings (e.g., using "AS" for aliases)