[
https://jira.nuxeo.com/browse/NXP-8001?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=107059#comment-107059
]
Florent Guillaume commented on NXP-8001:
----------------------------------------
There are two methods to do queries in Nuxeo using NXQL, and they return
different kinds of results.
- {{CoreSession.query()}} returns documents, so it must get unique document ids
from the query. Whenever a query with a complex property like {{foo/*/bar}} is
used, there are internal {{JOINs}} used which mean that you could get several
rows for the same document id, so a {{DISTINCT}} has to be added internally to
the SQL query.
- {{CoreSession.queryAndFetch()}} returns arbitrary columns and closely mirrors
an actual SQL query, you can specify exactly which columns you want, and you
can put or not an explicit {{DISTINCT}}. You're in control of the query.
But in both cases you must deal with the fact that in SQL, if you do a {{SELECT
DISTINCT}} that has an {{ORDER BY}} then the {{ORDER BY}} columns must be in
the {{SELECT DISTINCT}} list. That's imposed by SQL.
In NXQL a {{SELECT *}} is actually turned into a {{SELECT ecm:uuid}} and is
mostly used for {{CoreSession.query()}}, conversely this method just needs the
document id so {{SELECT *}} is always enough for it.
For {{CoreSession.queryAndFetch()}} you usually specify the columns you want
explicitly, and when you just want the ids then {{SELECT ecm:uuid}} is usually
more explicit than doing {{SELECT *}}, but the latter is legal.
> querying for complex types and ordering is failing
> --------------------------------------------------
>
> Key: NXP-8001
> URL: https://jira.nuxeo.com/browse/NXP-8001
> Project: Nuxeo Enterprise Platform
> Issue Type: Bug
> Components: Core SQL Storage
> Affects Versions: 5.5-SNAPSHOT
> Reporter: Stéphane Lacoin
> Assignee: Florent Guillaume
> Priority: Major
> Fix For: 5.5
>
>
> Cannot execute queries with constraints on complex types and with an ordering
> clause. The generated SQL statements is not correct. The ordering field is
> not included in the output fields, but it's required (on PostgreSQL at least)
> when there's a {{DISTINCT}}.
> {code}
> SELECT * from Document where ecm:isProxy = 0 and content/name =
> 'testfile.txt' ORDER BY dc:title
> {code}
> {noformat}
> SELECT DISTINCT "HIERARCHY"."ID" AS "_C1"
> FROM "HIERARCHY"
> JOIN "HIERARCHY" "_H1" ON "HIERARCHY"."ID" = "_H1"."PARENTID"
> LEFT JOIN "CONTENT" "_F1" ON "_H1"."ID" = "_F1"."ID"
> LEFT JOIN "DUBLINCORE" "_F2" ON "HIERARCHY"."ID" = "_F2"."ID"
> WHERE "HIERARCHY"."PRIMARYTYPE" IN ('Document', '...')
> AND "_F1"."NAME" = 'testfile.txt'
> AND "_H1"."NAME" = 'content'
> ORDER BY "_F2"."TITLE"
> {noformat}
> {noformat}
> ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
> {noformat}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
ECM-tickets mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm-tickets