This adds the possibility to manage data on a normalized relational database in N:M relations. On the relation editor in a form, the tools to add, delete, link and unlink work (also) on the linking table if a relation is visualized as N:M relation. Configuration is done through the fields tab where on the relation a second relation can be chosen (if there is a suitable relation in terms of a second relation on the linking table). Limitations =========== QGIS is not a database management system. It is based on assumptions about the underlying database system. In particular it expects * A `ON DELETE CASCADE` or similar measure on the second relation * Does not take care of setting the primary key when adding features. Either users need to be instructed to set them manually or - if it's a database derived value - the layers need to be in transaction mode (currently only activatable through the API)
QGIS unit tests
Build tests
Make sure that you have enabled building of tests in CMake.
cmake -DENABLE_TESTS=ON ..
Run tests
You can run all tests using make check
.
Individual tests can be run using ctest
.
For example if the output of make check
ends like this:
The following tests FAILED:
77 - PyQgsLocalServer (Failed)
You could re-run the failing test with:
ctest -V -R PyQgsLocalServer
The parameter -V
enables verbose mode and -R
takes a regular expression as
parameter and will only run matching tests.
Advanced configuration
Postgres
Make sure that you have enabled building of postgres test in CMake.
cmake -DENABLE_PGTEST=ON ..
To test the postgres provider you will need to have a database available to which the postgres provider can connect. The server will need to have postgis support enabled. By default the test uses the following connection options: dbname='qgis_test' host=localhost port=5432 user='postgres' password='postgres'
If this does not match your setup you can set the environment variable QGIS_PGTEST_DB to the desired connection string.
Please note that the database needs to be initialized using the sql-script tests/testdata/provider/testdata.sql It takes care of activating postgis for the test database and creates some tables containing test data.