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

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

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!

img
img
img
img

5 thoughts on “[Q&A Friday] SELECT clause in Nuxeo NXQL queries

  1. Your reply makes perfect sense, thanks. I am not convinced that the improvement wouldn’t be valuable though, the Automation API seems to be the preferred remote interface technology and remote calls is precisely when you want to be able to precisely control the amount of data you retrieve based on the specific view or task at hand…
    Nothing that can’t be dealt with with a custom operation though, I will take that approach.

  2. Your reply makes perfect sense, thanks. I am not convinced that the improvement wouldn’t be valuable though, the Automation API seems to be the preferred remote interface technology and remote calls is precisely when you want to be able to precisely control the amount of data you retrieve based on the specific view or task at hand…
    Nothing that can’t be dealt with with a custom operation though, I will take that approach.

  3. Hi I am using this code but the DocumentModel does not have the Blob file:

    String sql = “SELECT * FROM File”;

    DocumentModelList dml = documentManager. query(sql, 1);

  4. Hi I am using this code but the DocumentModel does not have the Blob file:

    String sql = “SELECT * FROM File”;

    DocumentModelList dml = documentManager. query(sql, 1);

  5. I simply want to mention I’m newbie to blogging and really loved you’re web blog. Most likely I’m planning to bookmark your website . You amazingly come with exceptional articles. Thanks a lot for revealing your website.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>