You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "David Buchmann (Issue Comment Edited) (JIRA)" <ji...@apache.org> on 2012/03/28 14:16:34 UTC

[jira] [Issue Comment Edited] (JCR-3219) regression with self-join queries

    [ https://issues.apache.org/jira/browse/JCR-3219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13240364#comment-13240364 ] 

David Buchmann edited comment on JCR-3219 at 3/28/12 12:15 PM:
---------------------------------------------------------------

sorry for being silent so long. i finally took the time to create a minimal example. here we go:

this is the data i load in the repository

<?xml version="1.0" encoding="UTF-8"?>
<sv:node
        xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
        xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jcr="http://www.jcp.org/jcr/1.0"
        xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
        xmlns:rep="internal"

    sv:name="container"
>
    <sv:node sv:name="data1">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>nt:unstructured</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:mimeType" sv:type="String">
            <sv:value>text/plain</sv:value>
        </sv:property>
    </sv:node>

    <sv:node sv:name="data2">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>nt:unstructured</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:mimeType" sv:type="String">
            <sv:value>text/plain</sv:value>
        </sv:property>
        <sv:property sv:name="value" sv:type="String">
            <sv:value>42</sv:value>
        </sv:property>
    </sv:node>

</sv:node>

and this is my java code:


        Credentials sc = new SimpleCredentials("admin","admin".toCharArray());
        Session s = repo.login(sc,workspace);

        Node root = s.getRootNode();

        NodeIterator nodes = root.getNodes();

        while (nodes.hasNext()) {
            try {
                Node n = nodes.nextNode();
                if (! "jcr:system".equals(n.getName()) && ! "rep:policy".equals(n.getName())) {
                    n.remove();
                }
            } catch (Exception e) {}
        }
        s.save();
        s.importXML("/", new FileInputStream("/home/david/liip/jackalope/JavaDavexClient/test.xml"), ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING);

        s.save();

        QueryManager qm = s.getWorkspace().getQueryManager();
        Query q = qm.createQuery("SELECT data.value FROM [nt:unstructured] AS data INNER JOIN [nt:unstructured] AS second ON data.[jcr:mimeType] = second.[jcr:mimeType] WHERE data.value = '42'", Query.JCR_JQOM);
        QueryResult r = q.execute();
        RowIterator i = r.getRows();
        while (i.hasNext()) {
            Row n = i.nextRow();
            System.out.println("Found: "+n.getPath("data"));
        }

with jackrabbit 2.3.6 this outputs:

Found: /container/data2

with jackrabbit 2.4, this outputs:

Found: /container/data2
Found: /container/data2

                
      was (Author: dbu):
    sorry for being silent so long. i finally took the time to create a minimal example. here we go:

this is the data i load in the repository

<?xml version="1.0" encoding="UTF-8"?>
<sv:node
        xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
        xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jcr="http://www.jcp.org/jcr/1.0"
        xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
        xmlns:rep="internal"

    sv:name="container"
>
    <sv:node sv:name="data1">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>nt:unstructured</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:mimeType" sv:type="String">
            <sv:value>text/plain</sv:value>
        </sv:property>
    </sv:node>

    <sv:node sv:name="data2">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>nt:unstructured</sv:value>
        </sv:property>
        <sv:property sv:name="jcr:mimeType" sv:type="String">
            <sv:value>text/plain</sv:value>
        </sv:property>
        <sv:property sv:name="value" sv:type="String">
            <sv:value>42</sv:value>
        </sv:property>
    </sv:node>

</sv:node>

and this is my java code:


        Credentials sc = new SimpleCredentials("admin","admin".toCharArray());
        Session s = repo.login(sc,workspace);

        Node root = s.getRootNode();

        NodeIterator nodes = root.getNodes();

        while (nodes.hasNext()) {
            try {
                Node n = nodes.nextNode();
                if (! "jcr:system".equals(n.getName()) && ! "rep:policy".equals(n.getName())) {
                    n.remove();
                }
            } catch (Exception e) {}
        }
        s.save();
        s.importXML("/", new FileInputStream("/home/david/liip/jackalope/JavaDavexClient/test.xml"), ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING);

        s.save();

        QueryManager qm = s.getWorkspace().getQueryManager();
        //Query q = qm.createQuery("SELECT data.value FROM [nt:unstructured] AS data INNER JOIN [nt:unstructured] AS second ON data.[jcr:mimeType] = second.[jcr:mimeType] WHERE data.value = 42", Query.JCR_JQOM);
        Query q = qm.createQuery("SELECT data.value FROM [nt:unstructured] AS data INNER JOIN [nt:unstructured] AS second ON data.[jcr:mimeType] = second.[jcr:mimeType] WHERE data.value = '42'", Query.JCR_JQOM);
        QueryResult r = q.execute();
        RowIterator i = r.getRows();
        while (i.hasNext()) {
            Row n = i.nextRow();
            System.out.println("Found: "+n.getPath("data"));
        }

with jackrabbit 2.3.6 this outputs:

Found: /container/data2

with jackrabbit 2.4, this outputs:

Found: /container/data2
Found: /container/data2

                  
> regression with self-join queries
> ---------------------------------
>
>                 Key: JCR-3219
>                 URL: https://issues.apache.org/jira/browse/JCR-3219
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-jcr-server, query, sql
>            Reporter: David Buchmann
>            Priority: Minor
>         Attachments: JCR-3219-test.patch
>
>
> affects version 2.3.7
> running a query that joins on the same node type against 2.3.6 returns 1 result, while running it against 2.3.7 returns the same node 3 times. if i join two different node types, i get only one result row...
> to reproduce: in my repository, i have 2 unstructured nodes with the same jcr:mimeType and one of them having the field zeronumber with value 0.
>             QueryManager qm = s.getWorkspace().getQueryManager();
>             Query q = qm.createQuery("SELECT data.zeronumber FROM [nt:unstructured] AS data INNER JOIN [nt:unstructured] AS second ON data.[jcr:mimeType] = second.[jcr:mimeType] WHERE data.zeronumber = 0", Query.JCR_JQOM);
>             QueryResult r = q.execute();
>             RowIterator i = r.getRows();
>             while (i.hasNext()) {
>                 Row n = i.nextRow();
>                 System.out.println(n.getPath("data"));
>             }
> jukka suspects this could be introduced by JCR-3198

--
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