summaryrefslogtreecommitdiff
path: root/odoo/addons/base/tests
diff options
context:
space:
mode:
authorwan <wan@odoo.com>2020-08-12 15:29:15 +0000
committerRaphael Collet <rco@odoo.com>2020-08-20 07:45:18 +0000
commitf2ceef0e2f0efb2e47b5f595a80009184305a2c4 (patch)
treefc890511b910167a2ecec0881ddd7169007cbe10 /odoo/addons/base/tests
parent9ad16bf84a0a1e33426105ec20670042e00f19b9 (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/tests')
-rw-r--r--odoo/addons/base/tests/test_osv.py19
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")')