diff options
| author | Raphael Collet <rco@odoo.com> | 2020-06-17 16:48:27 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2020-08-18 13:02:41 +0000 |
| commit | 69869ab681e2271ae802ca3ab7285ee83580208d (patch) | |
| tree | 341e265274c89177361498f411e20277f64a5b61 /addons | |
| parent | 0f7f163d2e2bb9cc38f2b037dae6df2eae9466a4 (diff) | |
[IMP] core: introduce subqueries in search
Make the method `_search` return a `Query` object, and make that object
generate a subquery when used on the right-hand side of a condition.
closes odoo/odoo#52403
Related: odoo/enterprise#10945
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/hr/models/res_users.py | 8 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_performance.py | 26 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_performance.py | 6 | ||||
| -rw-r--r-- | addons/test_mass_mailing/tests/test_performance.py | 4 |
4 files changed, 19 insertions, 25 deletions
diff --git a/addons/hr/models/res_users.py b/addons/hr/models/res_users.py index a00e9b1d134..d4fe54e74e2 100644 --- a/addons/hr/models/res_users.py +++ b/addons/hr/models/res_users.py @@ -198,13 +198,7 @@ class User(models.Model): user.employee_id = self.env['hr.employee'].search([('id', 'in', user.employee_ids.ids), ('company_id', '=', self.env.company.id)], limit=1) def _search_company_employee(self, operator, value): - employees = self.env['hr.employee'].search([ - ('name', operator, value), - '|', - ('company_id', '=', self.env.company.id), - ('company_id', '=', False) - ], order='company_id ASC') - return [('id', 'in', employees.mapped('user_id').ids)] + return [('employee_ids', operator, value)] def action_create_employee(self): self.ensure_one() diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index 078f8778799..1ffea697f4a 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -231,7 +231,7 @@ class TestMailAPIPerformance(BaseMailPerformance): #voip module read activity_type during create leading to one less query in enterprise on action_feedback category = activity.activity_type_id.category - with self.assertQueryCount(__system__=18, emp=22): + with self.assertQueryCount(__system__=16, emp=20): activity.action_feedback(feedback='Zizisse Done !') @users('__system__', 'emp') @@ -248,7 +248,7 @@ class TestMailAPIPerformance(BaseMailPerformance): record.write({'name': 'Dupe write'}) - with self.assertQueryCount(__system__=19, emp=22): + with self.assertQueryCount(__system__=17, emp=20): record.action_close('Dupe feedback') self.assertEqual(record.activity_ids, self.env['mail.activity']) @@ -290,7 +290,7 @@ class TestMailAPIPerformance(BaseMailPerformance): }).create({}) composer.onchange_template_id_wrapper() - with self.assertQueryCount(__system__=39, emp=42): + with self.assertQueryCount(__system__=37, emp=40): composer.send_mail() # remove created partner to ensure tests are the same each run @@ -302,7 +302,7 @@ class TestMailAPIPerformance(BaseMailPerformance): def test_message_assignation_email(self): self.user_test.write({'notification_type': 'email'}) record = self.env['mail.test.track'].create({'name': 'Test'}) - with self.assertQueryCount(__system__=39, emp=40): + with self.assertQueryCount(__system__=37, emp=38): record.write({ 'user_id': self.user_test.id, }) @@ -355,7 +355,7 @@ class TestMailAPIPerformance(BaseMailPerformance): def test_message_post_one_email_notification(self): record = self.env['mail.test.simple'].create({'name': 'Test'}) - with self.assertQueryCount(__system__=32, emp=33): + with self.assertQueryCount(__system__=30, emp=31): record.message_post( body='<p>Test Post Performances with an email ping</p>', partner_ids=self.customer.ids, @@ -494,7 +494,7 @@ class TestMailComplexPerformance(BaseMailPerformance): self.container.message_subscribe(self.user_portal.partner_id.ids) record = self.container.with_user(self.env.user) - with self.assertQueryCount(__system__=68, emp=69): + with self.assertQueryCount(__system__=63, emp=64): record.message_post( body='<p>Test Post Performances</p>', message_type='comment', @@ -511,7 +511,7 @@ class TestMailComplexPerformance(BaseMailPerformance): record = self.container.with_user(self.env.user) template_id = self.env.ref('test_mail.mail_test_container_tpl').id - with self.assertQueryCount(__system__=78, emp=80): + with self.assertQueryCount(__system__=73, emp=75): record.message_post_with_template(template_id, message_type='comment', composition_mode='comment') self.assertEqual(record.message_ids[0].body, '<p>Adding stuff on %s</p>' % record.name) @@ -582,7 +582,7 @@ class TestMailComplexPerformance(BaseMailPerformance): }) rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id) - with self.assertQueryCount(__system__=39, emp=40): + with self.assertQueryCount(__system__=37, emp=38): rec.write({'user_id': self.user_portal.id}) self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) # write tracking message @@ -602,7 +602,7 @@ class TestMailComplexPerformance(BaseMailPerformance): customer_id = self.customer.id user_id = self.user_portal.id - with self.assertQueryCount(__system__=116, emp=117): + with self.assertQueryCount(__system__=109, emp=110): rec = self.env['mail.test.ticket'].create({ 'name': 'Test', 'container_id': container_id, @@ -631,7 +631,7 @@ class TestMailComplexPerformance(BaseMailPerformance): rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) self.assertEqual(len(rec1.message_ids), 1) - with self.assertQueryCount(__system__=82, emp=82): + with self.assertQueryCount(__system__=77, emp=77): rec.write({ 'name': 'Test2', 'container_id': self.container.id, @@ -668,7 +668,7 @@ class TestMailComplexPerformance(BaseMailPerformance): rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.user_portal.partner_id | self.env.user.partner_id) - with self.assertQueryCount(__system__=90, emp=90): + with self.assertQueryCount(__system__=85, emp=85): rec.write({ 'name': 'Test2', 'container_id': container_id, @@ -701,7 +701,7 @@ class TestMailComplexPerformance(BaseMailPerformance): rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) - with self.assertQueryCount(__system__=32, emp=33): + with self.assertQueryCount(__system__=29, emp=30): rec.write({ 'name': 'Test2', 'customer_id': customer_id, @@ -951,7 +951,7 @@ class TestMailHeavyPerformancePost(BaseMailPerformance): ] self.attachements = self.env['ir.attachment'].with_user(self.env.user).create(self.vals) attachement_ids = self.attachements.ids - with self.assertQueryCount(emp=85): + with self.assertQueryCount(emp=81): self.cr.sql_log = self.warm and self.cr.sql_log_count record.with_context({}).message_post( body='<p>Test body <img src="cid:cid1"> <img src="cid:cid2"></p>', diff --git a/addons/test_mail_full/tests/test_sms_performance.py b/addons/test_mail_full/tests/test_sms_performance.py index 42b6763e30c..8acdf795b6a 100644 --- a/addons/test_mail_full/tests/test_sms_performance.py +++ b/addons/test_mail_full/tests/test_sms_performance.py @@ -51,7 +51,7 @@ class TestSMSPerformance(BaseMailPerformance, sms_common.SMSCase): def test_message_sms_record_1_partner(self): record = self.test_record.with_user(self.env.user) pids = self.customer.ids - with self.mockSMSGateway(), self.assertQueryCount(employee=25): # test_mail_enterprise: 25 + with self.mockSMSGateway(), self.assertQueryCount(employee=23): # test_mail_enterprise: 25 messages = record._message_sms( body='Performance Test', partner_ids=pids, @@ -66,7 +66,7 @@ class TestSMSPerformance(BaseMailPerformance, sms_common.SMSCase): def test_message_sms_record_10_partners(self): record = self.test_record.with_user(self.env.user) pids = self.partners.ids - with self.mockSMSGateway(), self.assertQueryCount(employee=43): # test_mail_enterprise: 43 + with self.mockSMSGateway(), self.assertQueryCount(employee=41): # test_mail_enterprise: 43 messages = record._message_sms( body='Performance Test', partner_ids=pids, @@ -80,7 +80,7 @@ class TestSMSPerformance(BaseMailPerformance, sms_common.SMSCase): @warmup def test_message_sms_record_default(self): record = self.test_record.with_user(self.env.user) - with self.mockSMSGateway(), self.assertQueryCount(employee=28): # test_mail_enterprise: 28 + with self.mockSMSGateway(), self.assertQueryCount(employee=26): # test_mail_enterprise: 28 messages = record._message_sms( body='Performance Test', ) diff --git a/addons/test_mass_mailing/tests/test_performance.py b/addons/test_mass_mailing/tests/test_performance.py index b6d784f1723..5ae91d52aa6 100644 --- a/addons/test_mass_mailing/tests/test_performance.py +++ b/addons/test_mass_mailing/tests/test_performance.py @@ -51,7 +51,7 @@ class TestMassMailPerformance(TestMassMailPerformanceBase): }) # runbot needs +50 compared to local - with self.assertQueryCount(__system__=1914, marketing=1915): + with self.assertQueryCount(__system__=1714, marketing=1715): mailing.action_send_mail() self.assertEqual(mailing.sent, 50) @@ -91,7 +91,7 @@ class TestMassMailBlPerformance(TestMassMailPerformanceBase): }) # runbot needs +62 compared to local - with self.assertQueryCount(__system__=2241, marketing=2242): + with self.assertQueryCount(__system__=1993, marketing=1994): mailing.action_send_mail() self.assertEqual(mailing.sent, 50) |
