[Q&A Friday] SELECT clause in Nuxeo NXQL queries

Sun 07 October 2012 By Laurent Doguin

Hello Everyone! Today we have a question from Franck. He's asking why he cannot do query with a specific select clause like this :

[email protected]:/> query "select dc:title from myDocumentType"
[email protected]:/>`

while this is working fine:

[email protected]:/> query "select * from myDocumentType"
/default-domain/workspaces/Library/sections/North America

SELECT clause in NXQL queries SELECT clause in NXQL queries

Frank is actually running those queries from Nuxeo Shell. The query command uses the Document.Query operation which itself uses CoreSession#query. This method will only return a DocumentModelList so you cannot use a specific select clause in your query. And this makes sense, because with Content Automation, you usually manipulate Documents.

So when can you use a specific select clause? You have to use CoreSession#queryAndFetch. This will return an IterableQueryResult. If you still want to do your query from the shell, a quick and easy way to do it is to use a Groovy script like this:

iterableQueryResult = Session.queryAndFetch("SELECT dc:title,ecm:uuid FROM Document WHERE dc:title = 'Workspace'", "NXQL");
out = "";
out += iterableQueryResult.next().toString() + "n";
// don't forget to close it!
return out;

To call it you have to use the script command and give it the path of your Groovy script:

[email protected]:/> script /home/ldoguin/test.groovy
{ecm:uuid=168458db-47fc-4c34-be50-bdc6f4dbcb56, dc:title=Workspace}

If you want to know more about Nuxeo's NXQL, take a look at the documentation.


Category: Product & Development
Tagged: Java, Q&A