You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Dirk Rudolph (Jira)" <ji...@apache.org> on 2020/05/13 16:56:00 UTC

[jira] [Updated] (OAK-9060) IllegalArgumentException when using facets in union queries

     [ https://issues.apache.org/jira/browse/OAK-9060?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dirk Rudolph updated OAK-9060:
------------------------------
    Description: 
I get the following exception when trying to execute a JCR-SQL2 query with a facet selector and 2 path constraints, being optimised to a union of 2 queries:

{code}
select s.[jcr:path], [rep:facet(jcr:content/tags)] from [cq:Page] as s where ((isdescendantnode(s,'/content/pathA') or isdescendantnode(s,'/content/pathB')) order by s.[jcr:content/date] desc
{code}

The same query works well with only one of the path constraints.

{code}java.lang.IllegalArgumentException: Invalid path: rep:facet(jcr:content/tags
        at org.apache.jackrabbit.oak.query.QueryImpl.getOakPath(QueryImpl.java:1249) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.AstElement.normalizePropertyName(AstElement.java:94) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:566) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.ColumnImpl.currentProperty(ColumnImpl.java:59) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl.currentRow(QueryImpl.java:892) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.fetchNext(QueryImpl.java:831) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.hasNext(QueryImpl.java:856) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.bothHaveRows(UnionQueryImpl.java:483) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.<init>(UnionQueryImpl.java:436) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl.getRows(UnionQueryImpl.java:304) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ResultImpl$1.iterator(ResultImpl.java:72) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$1.<init>(QueryResultImpl.java:85) [org.apache.jackrabbit.oak-jcr:1.10.3]
        at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getRows(QueryResultImpl.java:83) [org.apache.jackrabbit.oak-jcr:1.10.3]
{code}

Apparently when copying the columns in [1] the information that the column is a FacetColumnImpl is lost because FacetColumnImpl does not override the copyOf().

[1] https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.10.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java#L1420

  was:
I get the following exception when trying to execute a JCR-SQL2 query with a facet selector and 2 path constraints, being optimised to a union of 2 queries:

{code}
select s.[jcr:path], [rep:facet(jcr:content/tags)] from [cq:Page] as s where ((isdescendantnode(s,'/content/pathA') or isdescendantnode(s,'/content/pathB')) order by s.[jcr:content/date] desc
{code}

The same query works well with only one of the path constraints.

{code}java.lang.IllegalArgumentException: Invalid path: rep:facet(jcr:content/genericComponent
        at org.apache.jackrabbit.oak.query.QueryImpl.getOakPath(QueryImpl.java:1249) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.AstElement.normalizePropertyName(AstElement.java:94) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:566) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ast.ColumnImpl.currentProperty(ColumnImpl.java:59) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl.currentRow(QueryImpl.java:892) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.fetchNext(QueryImpl.java:831) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.hasNext(QueryImpl.java:856) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.bothHaveRows(UnionQueryImpl.java:483) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.<init>(UnionQueryImpl.java:436) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.UnionQueryImpl.getRows(UnionQueryImpl.java:304) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.query.ResultImpl$1.iterator(ResultImpl.java:72) [org.apache.jackrabbit.oak-core:1.10.3]
        at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$1.<init>(QueryResultImpl.java:85) [org.apache.jackrabbit.oak-jcr:1.10.3]
        at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getRows(QueryResultImpl.java:83) [org.apache.jackrabbit.oak-jcr:1.10.3]
{code}

Apparently when copying the columns in [1] the information that the column is a FacetColumnImpl is lost because FacetColumnImpl does not override the copyOf();

[1] https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.10.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java#L1420


> IllegalArgumentException when using facets in union queries
> -----------------------------------------------------------
>
>                 Key: OAK-9060
>                 URL: https://issues.apache.org/jira/browse/OAK-9060
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>    Affects Versions: 1.10.3
>            Reporter: Dirk Rudolph
>            Priority: Major
>
> I get the following exception when trying to execute a JCR-SQL2 query with a facet selector and 2 path constraints, being optimised to a union of 2 queries:
> {code}
> select s.[jcr:path], [rep:facet(jcr:content/tags)] from [cq:Page] as s where ((isdescendantnode(s,'/content/pathA') or isdescendantnode(s,'/content/pathB')) order by s.[jcr:content/date] desc
> {code}
> The same query works well with only one of the path constraints.
> {code}java.lang.IllegalArgumentException: Invalid path: rep:facet(jcr:content/tags
>         at org.apache.jackrabbit.oak.query.QueryImpl.getOakPath(QueryImpl.java:1249) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.ast.AstElement.normalizePropertyName(AstElement.java:94) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.ast.SelectorImpl.currentProperty(SelectorImpl.java:566) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.ast.ColumnImpl.currentProperty(ColumnImpl.java:59) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.QueryImpl.currentRow(QueryImpl.java:892) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.fetchNext(QueryImpl.java:831) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.hasNext(QueryImpl.java:856) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.bothHaveRows(UnionQueryImpl.java:483) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.UnionQueryImpl$FacetMerger.<init>(UnionQueryImpl.java:436) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.UnionQueryImpl.getRows(UnionQueryImpl.java:304) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.query.ResultImpl$1.iterator(ResultImpl.java:72) [org.apache.jackrabbit.oak-core:1.10.3]
>         at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$1.<init>(QueryResultImpl.java:85) [org.apache.jackrabbit.oak-jcr:1.10.3]
>         at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getRows(QueryResultImpl.java:83) [org.apache.jackrabbit.oak-jcr:1.10.3]
> {code}
> Apparently when copying the columns in [1] the information that the column is a FacetColumnImpl is lost because FacetColumnImpl does not override the copyOf().
> [1] https://github.com/apache/jackrabbit-oak/blob/jackrabbit-oak-1.10.8/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java#L1420



--
This message was sent by Atlassian Jira
(v8.3.4#803005)