[
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