doc/book/annexes/rql/usecases.rst
author Philippe Pepiot <ph@itsalwaysdns.eu>
Tue, 31 Mar 2020 18:22:05 +0200
changeset 12966 6cd938c29ca3
parent 12790 6f74e28be048
permissions -rw-r--r--
[server] Make connection pooler configurable and set better default values Drop the configuration connections-pool-size and add new configurations options: * connections-pool-min-size. Set to 0 by default so we open connections only when needed. This avoid opening min-size*processes connections at startup, which is, it think, a good default. * connections-pool-max-size. Set to 0 (unlimited) by default, so we move the bottleneck to postgresql. * connections-idle-timeout. Set to 10 minutes. I don't have arguments about this except that this is the default in pgbouncer.

.. _rql_usecases:

RQL usecases
------------

Search bar
~~~~~~~~~~

The search bar is available on a CubicWeb instance to use RQL and it's use and
configuration is described in `:doc:_searchbar`

Use of RQL in Card documents - ReST
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

With a CubicWeb instance supporting object types with ReST content (for example
`Card <https://www.cubicweb.org/project/cubicweb-card>`_), one can build content
based on RQL queries as dynamic documents.

For this, use the `rql` and `rql-table` ReST directive, for more information
about custom ReST directives `head over to the sphinx documentation
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html>`_
which uses them extensivelly.

rql directive
~~~~~~~~~~~~~

The `rql` directive takes as input an RQL expression and a view to apply to the
result.

For example, create a Card content by opening
http://cubicweb_example.org/add/Card and add the following content, as an
example : a table of blog entries (10 most recent blog entries table with user
and date information) ::

   Recent blog entries
   -------------------

   :rql:`Any B,U,D ORDERBY D DESC LIMIT 10 WHERE B is BlogEntry, B title T, B creation_date D, B created_by U:table`

.. image:: ../../images/example-card-with-rql-directive.png

rql-table directive
~~~~~~~~~~~~~~~~~~~

`rql-table` enables more customization, enabling you to modify the column
(`header`) contents, and the view applied for a specific column (`colvids`).

For example, create a Card content by openning http://cubicweb_example.org/add/Card and add the following content ::

        Blog entries with rql-table
        -----------------------------

        .. rql-table::
           :vid: table
           :headers: Title with link, who wrote it, at what date
           :colvids: 1=sameetypelist

           Any B,U,D ORDERBY D DESC LIMIT 10 WHERE B is BlogEntry, B title T, B creation_date D, B created_by U

All fields but the RQL string are optionnal. The ``:headers:`` option can
contain empty column names.

.. image:: ../../images/example-card-with-rql-table-directive.png

Use in python projects and CLI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`cwclientlib <https://pypi.org/project/cwclientlib/>` enables you to use RQL
in your python projects using only web requests. This project also provides a
remote command line interface (CLI) you can use to replace a server side
`cubicweb-ctl shell`.

Use in JavaScript/React components
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`cwclientelements <https://forge.extranet.logilab.fr/open-source/cwclientelements>`
is a library of reusable React components for building web application with
cubicweb and RQL.