diff options
| author | wan <wan@odoo.com> | 2020-08-12 15:29:15 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2020-08-20 07:45:18 +0000 |
| commit | f2ceef0e2f0efb2e47b5f595a80009184305a2c4 (patch) | |
| tree | fc890511b910167a2ecec0881ddd7169007cbe10 /odoo/addons/base | |
| parent | 9ad16bf84a0a1e33426105ec20670042e00f19b9 (diff) | |
[IMP] core: add models defined by a query instead of a table/view
By adding a parameter `_table_query` on the Model, we can now have views
that depend on the context. The query is used instead of the table name
in ORM operations. This allows to pre-compute some values to improve
performance, instead of storing context values in the database.
Co-authored-by: william-andre <wan@odoo.com>
Co-authored-by: rco-odoo <rco@odoo.com>
Diffstat (limited to 'odoo/addons/base')
| -rw-r--r-- | odoo/addons/base/tests/test_osv.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/odoo/addons/base/tests/test_osv.py b/odoo/addons/base/tests/test_osv.py index 6dc11d8fd98..be284c3fd78 100644 --- a/odoo/addons/base/tests/test_osv.py +++ b/odoo/addons/base/tests/test_osv.py @@ -80,3 +80,22 @@ class QueryTestCase(BaseCase): self.assertEqual(tmp_cat_cmp_par, 'product_product__product_tmpl_id__product_category_id__56d55687') tmp_cat_stm_par = query.join(tmp_cat_stm, 'partner_id', 'res_partner', 'id', 'partner_id') self.assertEqual(tmp_cat_stm_par, 'product_product__product_tmpl_id__product_category_id__9_363fdd') + + def test_table_expression(self): + query = Query(None, 'foo') + from_clause, where_clause, where_params = query.get_sql() + self.assertEqual(from_clause, '"foo"') + + query = Query(None, 'bar', 'SELECT id FROM foo') + from_clause, where_clause, where_params = query.get_sql() + self.assertEqual(from_clause, '(SELECT id FROM foo) AS "bar"') + + query = Query(None, 'foo') + query.add_table('bar', 'SELECT id FROM foo') + from_clause, where_clause, where_params = query.get_sql() + self.assertEqual(from_clause, '"foo", (SELECT id FROM foo) AS "bar"') + + query = Query(None, 'foo') + query.join('foo', 'bar_id', 'SELECT id FROM foo', 'id', 'bar') + from_clause, where_clause, where_params = query.get_sql() + self.assertEqual(from_clause, '"foo" JOIN (SELECT id FROM foo) AS "foo__bar" ON ("foo"."bar_id" = "foo__bar"."id")') |
