jackrabbit-oak-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Mueller (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (OAK-28) Query implementation
Date Fri, 16 Mar 2012 15:25:39 GMT

     [ 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

        

Mime
View raw message