[ https://issues.apache.org/jira/browse/OAK-28?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Mueller updated OAK-28:
------------------------------
Description:
A query engine needs to be implemented.
This includes a query parser in oak-core (where we don't want to use the JCR API), and a query
parser in oak-jcr (where the parsed query tree needs to implement the JCR API).
To avoid writing two independent parsers, I suggest to change the parser to emit a non-JCR
query tree (so the parser can be used in oak-core). There needs to be a converter from the
non-JCR query tree to a JCR query tree, so the same parser can be used in oak-jcr.
This will still require two independent query tree implementations (about 37 duplicated classes:
37 classes for oak-core and 37 classes in oak-jcr). Plus it requires a tree converter.
If somebody has a better idea please tell me :-)
Prototype implementation of the query tree converter. Please note the class names are only
to for illustration, but I don't know yet a good naming convention. Ideas are welcome!
was:
A query engine needs to be implemented.
This includes a query parser in oak-core (where we don't want to use the JCR API), and a query
parser in oak-jcr (where the parsed query tree needs to implement the JCR API).
To avoid writing two independent parsers, I suggest to change the parser to emit a non-JCR
query tree (so the parser can be used in oak-core). There needs to be a converter from the
non-JCR query tree to a JCR query tree, so the same parser can be used in oak-jcr.
This will still require two independent query tree implementations (about 37 duplicated classes:
37 classes for oak-core and 37 classes in oak-jcr). Plus it requires a tree converter.
If somebody has a better idea please tell me :-)
Prototype implementation of the query tree converter. Please note the class names are only
to for illustration, but I don't know yet a good naming convention. Ideas are welcome!
import javax.jcr.query.qom.And;
import javax.jcr.query.qom.Constraint;
public class OakToJcrQueryTreeConverter {
public static void main(String... args) {
OakAnd oak = new OakAnd();
oak.constraint1 = new OakConstraint();
oak.constraint1.s = "x=1";
oak.constraint2 = new OakConstraint();
oak.constraint2.s = "y=1";
System.out.println("Oak constraint: " + oak);
JcrConstraint jcr = convertOakToJcr(oak);
System.out.println("JCR constraint: " + jcr);
}
static JcrConstraint convertOakToJcr(OakConstraint constraint) {
if (constraint instanceof OakAnd) {
OakAnd o = (OakAnd) constraint;
return new JcrAnd(o.constraint1, o.constraint2);
} else {
JcrConstraint c = new JcrConstraint();
c.s = constraint.s;
return c;
}
}
}
class OakConstraint {
String s;
public String toString() {
return "(OakConstraint) " + s;
}
}
class OakAnd extends OakConstraint {
public OakConstraint constraint1, constraint2;
public String toString() {
return constraint1 + " and " + constraint2;
}
}
class JcrConstraint implements Constraint {
String s;
public String toString() {
return "(JcrConstraint) " + s;
}
}
class JcrAnd extends JcrConstraint implements And {
JcrConstraint constraint1, constraint2;
JcrAnd(OakConstraint constraint1, OakConstraint constraint2) {
this.constraint1 = OakToJcrQueryTreeConverter.convertOakToJcr(constraint1);
this.constraint2 = OakToJcrQueryTreeConverter.convertOakToJcr(constraint2);
}
public JcrConstraint getConstraint1() {
return constraint1;
}
public JcrConstraint getConstraint2() {
return constraint2;
}
public String toString() {
return constraint1 + " and " + constraint2;
}
}
> Query implementation
> --------------------
>
> Key: OAK-28
> URL: https://issues.apache.org/jira/browse/OAK-28
> Project: Jackrabbit Oak
> Issue Type: New Feature
> Components: core
> Reporter: Thomas Mueller
> Assignee: Thomas Mueller
>
> A query engine needs to be implemented.
> This includes a query parser in oak-core (where we don't want to use the JCR API), and
a query parser in oak-jcr (where the parsed query tree needs to implement the JCR API).
> To avoid writing two independent parsers, I suggest to change the parser to emit a non-JCR
query tree (so the parser can be used in oak-core). There needs to be a converter from the
non-JCR query tree to a JCR query tree, so the same parser can be used in oak-jcr.
> This will still require two independent query tree implementations (about 37 duplicated
classes: 37 classes for oak-core and 37 classes in oak-jcr). Plus it requires a tree converter.
> If somebody has a better idea please tell me :-)
> Prototype implementation of the query tree converter. Please note the class names are
only to for illustration, but I don't know yet a good naming convention. Ideas are welcome!
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
|