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

[bash] Administrator@127.0.0.1:/> query "select dc:title from myDocumentType" Administrator@127.0.0.1:/>` [/bash]

while this is working fine:

[bash] Administrator@127.0.0.1:/> query "select * from myDocumentType" /default-domain/workspaces/Library/sections/North America [/bash]

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:

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

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

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

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

Cheers!


Category: Product & Development
Tagged: Java, Q&A
Check out the features of our latest Nuxeo Platform Download Nuxeo