[REV] expression: revert performance search one2many commit

Revert commit 54cd73a4f4 as it prevents customers from closing
their pos sessions without timeouting.

closes odoo/odoo#88941

X-original-commit: 43165dc3f7a8cc199219b8a32b65eb0ee7b5c2dd
Signed-off-by: Julien Castiaux <juc@odoo.com>
Signed-off-by: Olivier Dony <odo@odoo.com>
This commit is contained in:
Aurélien (avd)
2022-04-15 19:08:42 +02:00
parent 03b59ae410
commit d10e32e141
2 changed files with 9 additions and 16 deletions
+6 -8
View File
@@ -1673,10 +1673,9 @@ class TestOne2many(TransactionCase):
with self.assertQueries(['''
SELECT "res_partner".id
FROM "res_partner"
WHERE EXISTS (
SELECT 1 FROM "res_partner_bank" AS "res_partner__bank_ids"
WHERE "res_partner__bank_ids"."partner_id" = "res_partner".id
)
WHERE ("res_partner"."id" IN (
SELECT "partner_id" FROM "res_partner_bank" WHERE "partner_id" IS NOT NULL
))
ORDER BY "res_partner"."id"
''']):
self.Partner.search([('bank_ids', '!=', False)], order='id')
@@ -1684,10 +1683,9 @@ class TestOne2many(TransactionCase):
with self.assertQueries(['''
SELECT "res_partner".id
FROM "res_partner"
WHERE NOT EXISTS (
SELECT 1 FROM "res_partner_bank" AS "res_partner__bank_ids"
WHERE "res_partner__bank_ids"."partner_id" = "res_partner".id
)
WHERE ("res_partner"."id" NOT IN (
SELECT "partner_id" FROM "res_partner_bank" WHERE "partner_id" IS NOT NULL
))
ORDER BY "res_partner"."id"
''']):
self.Partner.search([('bank_ids', '=', False)], order='id')
+3 -8
View File
@@ -809,14 +809,9 @@ class expression(object):
else:
if inverse_field.store and not (inverse_is_int and domain):
# rewrite condition to match records with/without lines
exists = 'EXISTS' if operator in NEGATIVE_TERM_OPERATORS else 'NOT EXISTS'
rel_alias = _generate_table_alias(alias, field.name)
push_result(f"""
{exists} (
SELECT 1 FROM "{comodel._table}" AS "{rel_alias}"
WHERE "{rel_alias}"."{inverse_field.name}" = "{alias}".id
)
""", [])
op1 = 'inselect' if operator in NEGATIVE_TERM_OPERATORS else 'not inselect'
subquery = f'SELECT "{inverse_field.name}" FROM "{comodel._table}" WHERE "{inverse_field.name}" IS NOT NULL'
push(('id', op1, (subquery, [])), model, alias, internal=True)
else:
comodel_domain = [(inverse_field.name, '!=', False)]
if inverse_is_int and domain: