[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| - The Semantic Web is a construction game!
=====================================================
|cubicweb| is a semantic web application framework, licensed under the LGPL,
that empowers developers to efficiently build web applications by reusing
components (called `cubes`) and following the well known object-oriented design
principles.
Main Features
~~~~~~~~~~~~~
* an engine driven by the explicit :ref:`data model
<TutosBaseCustomizingTheApplicationDataModel>` of the application,
* a query language named :ref:`RQL <RQL>` similar to W3C's SPARQL,
* a :ref:`selection+view <TutosBaseCustomizingTheApplicationCustomViews>`
mechanism for semi-automatic XHTML/XML/JSON/text generation,
* a library of reusable :ref:`components <Cube>` (data model and views) that
fulfill common needs,
* the power and flexibility of the Python_ programming language,
* the reliability of SQL databases, LDAP directories, Subversion and Mercurial
for storage backends.
Built since 2000 from an R&D effort still continued, supporting 100,000s of
daily visits at some production sites, |cubicweb| is a proven end to end solution
for semantic web application development that promotes quality, reusability and
efficiency.
QuickStart
~~~~~~~~~~
The impatient developer will move right away to :ref:`SetUpEnv` then to :ref:`ConfigEnv`.
Social
~~~~~~
* Chat on the `jabber forum`_
* Discuss on the `mailing-list`_
* Discover on the `blog`_
* Contribute on the forge_
.. _Logilab: http://www.logilab.fr/
.. _forge: http://www.cubicweb.org/project/
.. _Python: http://www.python.org/
.. _`jabber forum`: http://www.logilab.org/blogentry/6718
.. _`mailing-list`: http://lists.cubicweb.org/mailman/listinfo/cubicweb
.. _blog: http://www.cubicweb.org/blog/1238
Narrative Documentation
~~~~~~~~~~~~~~~~~~~~~~~
A.k.a. "The Book"
.. toctree::
:maxdepth: 2
book/intro/index
.. toctree::
:maxdepth: 2
tutorials/index
.. toctree::
:maxdepth: 3
book/devrepo/index
book/devweb/index
book/pyramid/index
.. toctree::
:maxdepth: 2
book/admin/index
book/additionnal_services/index
book/annexes/index
Changes
~~~~~~~
.. toctree::
:maxdepth: 2
changes/changelog
Reference documentation
~~~~~~~~~~~~~~~~~~~~~~~
API
'''
.. toctree::
:maxdepth: 1
:glob:
api/*
.. toctree::
:maxdepth: 1
book/en/devweb/js_api/index
Developpers
~~~~~~~~~~~
.. toctree::
:maxdepth: 1
:glob:
dev/*
Indexes
~~~~~~~
* the :ref:`genindex`,
* the :ref:`modindex`,