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