[ssplanner] Prevent execution of write queries involving computed relations
Previously, setting a computed relation upon entity creation or
modification (using the ORM or an RQL query) would usually fail with an
operational error in the backend ("no such table"). However, under some
mysterious circumstances (like passing a string as value in cw_set for a
computed relation), the RQL to SQL transformation would simply drop the
clause.
To prevent this to happen, we add a check for computed relation before
adding a relation to an execution plan. This check raises a QueryError.
It happens in several places:
* in querier.InsertPlan.add_relation_def() (called from several places
in ssplanner steps) for INSERT queries,
* in ssplanner.UpdateStep.execute() for SET queries and,
* in ssplanner.SSplanner.build_delete_plan() for DELETE queries.
Tests added to unittest_querier.py because unittest_sslplanner.py looked
inappropriate (it has only unit tests) and the former already had a
NonRegressionTC class.
=================
CubicWeb features
=================
This page summarizes features found in the bare cubicweb framework and indicates
how mature and documented they are.
:code maturity (CM):
- 0: experimental, not ready at all for production, may be killed
- 1: draft / unsatisfying, API may change in a near future, and will
certainly change in the long term
- 2: good enough, API sounds good but will probably evolve a bit with more
hindsight
- 3: mature, backward incompatible changes unexpected (may still evolve
though, of course)
:documentation level (DL):
- 0: no documentation
- 1: poor documentation
- 2: some valuable documentation but incomplete coverage
- 3: good / complete documentation
Instance configuration and maintainance
=======================================
.. table::
+-------------------------------------------------------------------+----+----+
| FEATURE | CM | DL |
+===============+===================================================+====+====+
| setup | installation | 2 | 3 |
| +---------------------------------------------------+----+----+
| | environment variables | 3 | 2 |
| +---------------------------------------------------+----+----+
| | running modes | 2 | 2 |
| +---------------------------------------------------+----+----+
| | administration tasks | 2 | 2 |
| +---------------------------------------------------+----+----+
| | configuration file | 2 | 1 |
+---------------+---------------------------------------------------+----+----+
| configuration | user / groups handling | 3 | 1 |
| +---------------------------------------------------+----+----+
| | site configuration | 3 | 1 |
| +---------------------------------------------------+----+----+
| | distributed configuration | 2 | 1 |
+---------------+---------------------------------------------------+----+----+
| multi-sources | capabilities | NA | 0 |
| +---------------------------------------------------+----+----+
| | configuration | 2 | 0 |
| +---------------------------------------------------+----+----+
| | ldap integration | 2 | 1 |
+---------------+---------------------------------------------------+----+----+
| usage | custom ReST markup | 2 | 0 |
| +---------------------------------------------------+----+----+
| | personal preferences | 2 | 1 |
+---------------+---------------------------------------------------+----+----+
Core development
================
.. table::
+--------------------------------------------------------------------+----+----+
| FEATURE | CM | DL |
+===========+========================================================+====+====+
| base | concepts | NA | 3 |
| +--------------------------------------------------------+----+----+
| | security model | NA | 2 |
| +--------------------------------------------------------+----+----+
| | database initialization | 2 | 1 |
+-----------+--------------------------------------------------------+----+----+
| rql | base | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | write | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | function | 2 | 0 |
| +--------------------------------------------------------+----+----+
| | outer joins | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | aggregates | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | subqueries | 2 | 0 |
+-----------+--------------------------------------------------------+----+----+
| schema | base | 2 | 3 |
| +--------------------------------------------------------+----+----+
| | constraints | 3 | 2 |
| +--------------------------------------------------------+----+----+
| | security | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | inheritance | 1 | 1 |
| +--------------------------------------------------------+----+----+
| | customization | 1 | 1 |
| +--------------------------------------------------------+----+----+
| | introspection | 2 | 1 |
+-----------+--------------------------------------------------------+----+----+
| vregistry | appobject | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | registration | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | selection | 3 | 2 |
| +--------------------------------------------------------+----+----+
| | core selectors | 3 | 3 |
| +--------------------------------------------------------+----+----+
| | custom selectors | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | debugging selection | 2 | 1 |
+-----------+--------------------------------------------------------+----+----+
| entities | interfaces | 2 | ? |
| +--------------------------------------------------------+----+----+
| | customization (`dc_`, ...) | 2 | ? |
| +--------------------------------------------------------+----+----+
| | app logic | 2 | 2 |
| +--------------------------------------------------------+----+----+
| | orm configuration | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | pluggable mixins | 1 | 0 |
| +--------------------------------------------------------+----+----+
| | workflow | 3 | 2 |
+-----------+--------------------------------------------------------+----+----+
| dbapi | connection | 3 | 1 |
| +--------------------------------------------------------+----+----+
| | data management | 1 | 1 |
| +--------------------------------------------------------+----+----+
| | result set | 3 | 1 |
| +--------------------------------------------------------+----+----+
| | transaction, undo | 2 | 0 |
+-----------+--------------------------------------------------------+----+----+
| cube | layout | 2 | 3 |
| +--------------------------------------------------------+----+----+
| | new cube | 2 | 2 |
+-----------+--------------------------------------------------------+----+----+
| migration | context | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | commands | 2 | 2 |
+-----------+--------------------------------------------------------+----+----+
| testlib | CubicWebTC | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | automatic tests | 2 | 2 |
+-----------+--------------------------------------------------------+----+----+
| i18n | mark string | 3 | 2 |
| +--------------------------------------------------------+----+----+
| | customize strings from other cubes / cubicweb | 3 | 1 |
| +--------------------------------------------------------+----+----+
| | update catalog | 3 | 2 |
+-----------+--------------------------------------------------------+----+----+
| more | reloading tips | NA | 0 |
| +--------------------------------------------------------+----+----+
| | site_cubicweb | 2 | ? |
| +--------------------------------------------------------+----+----+
| | adding options in configuration file | 3 | 0 |
| +--------------------------------------------------------+----+----+
| | adding options in site configuration / preferences | 3 | ? |
| +--------------------------------------------------------+----+----+
| | optimizing / profiling | 2 | 1 |
| +--------------------------------------------------------+----+----+
| | c-c plugins | 3 | 0 |
| +--------------------------------------------------------+----+----+
| | crypto services | 0 | 0 |
| +--------------------------------------------------------+----+----+
| | massive import | 2 | 0 |
| +--------------------------------------------------------+----+----+
| | mime type based conversion | 2 | 0 |
| +--------------------------------------------------------+----+----+
| | CWCache | 1 | 0 |
+-----------+--------------------------------------------------------+----+----+
Web UI development
==================
.. table::
+--------------------------------------------------------------------+----+----+
| FEATURE | CM | DL |
+============+=======================================================+====+====+
| base | web request | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | exceptions | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | session, authentication | 1 | 0 |
| +-------------------------------------------------------+----+----+
| | http caching | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | external resources | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | static files | 2 | ? |
| +-------------------------------------------------------+----+----+
| | data sharing | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | graphical chart customization | 1 | 1 |
+------------+-------------------------------------------------------+----+----+
| publishing | cycle | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | error handling | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | transactions | NA | ? |
+------------+-------------------------------------------------------+----+----+
| controller | base | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | view | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | edit | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | json | 2 | 1 |
+------------+-------------------------------------------------------+----+----+
| views | base | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | templates | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | boxes | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | components | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | primary | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | tabs | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | xml | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | text | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | table | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | plot | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | navigation | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | calendar, timeline | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | index | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | breadcrumbs | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | actions | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | debugging | 2 | 1 |
+------------+-------------------------------------------------------+----+----+
| form | base | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | fields | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | widgets | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | captcha | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | renderers | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | validation error handling | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | autoform | 2 | 2 |
| +-------------------------------------------------------+----+----+
| | reledit | 2 | 0 |
+------------+-------------------------------------------------------+----+----+
| facets | base | 2 | ? |
| +-------------------------------------------------------+----+----+
| | configuration | 2 | 1 |
| +-------------------------------------------------------+----+----+
| | custom facets | 2 | 0 |
+------------+-------------------------------------------------------+----+----+
| css | base | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | customization | 1 | 1 |
+------------+-------------------------------------------------------+----+----+
| js | base | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | jquery | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | base functions | 1 | 0 |
| +-------------------------------------------------------+----+----+
| | widgets | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | ajax | 1 | 0 |
| +-------------------------------------------------------+----+----+
| | widgets | 1 | 1 |
+------------+-------------------------------------------------------+----+----+
| other | page template | 0 | 0 |
| +-------------------------------------------------------+----+----+
| | inline doc (wdoc) | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | magic search | 2 | 0 |
| +-------------------------------------------------------+----+----+
| | url mapping | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | apache style url rewrite | 1 | 1 |
| +-------------------------------------------------------+----+----+
| | sparql | 1 | 0 |
| +-------------------------------------------------------+----+----+
| | bookmarks | 2 | 1 |
+------------+-------------------------------------------------------+----+----+
Repository development
======================
.. table::
+--------------------------------------------------------------------+----+----+
| FEATURE | CM | DL |
+==============+=====================================================+====+====+
| base | session | 2 | 2 |
| +-----------------------------------------------------+----+----+
| | more security control | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | debugging | 2 | 0 |
+--------------+-----------------------------------------------------+----+----+
| hooks | development | 2 | 2 |
| +-----------------------------------------------------+----+----+
| | abstract hooks | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | core hooks | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | control | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | operation | 2 | 2 |
+--------------+-----------------------------------------------------+----+----+
| notification | sending email | 2 | ? |
| +-----------------------------------------------------+----+----+
| | base views | 1 | ? |
| +-----------------------------------------------------+----+----+
| | supervisions | 1 | 0 |
+--------------+-----------------------------------------------------+----+----+
| source | storages | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | authentication plugins | 2 | 0 |
| +-----------------------------------------------------+----+----+
| | custom sources | 2 | 0 |
+--------------+-----------------------------------------------------+----+----+