From f9e75d19a92f0d071c87bf596c0372a949df978c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Tue, 26 Sep 2023 08:17:44 +0200 Subject: [PATCH] [FIX] *: Fix bad usage of 'like'/'ilike' operator The 'like'/'ilike' operators automatically add the wildcard character (`%`) at the beginning and at the end of the value. This commit fixes the incorrect usage. closes odoo/odoo#136007 Related: odoo/enterprise#47886 Signed-off-by: Raphael Collet --- addons/account/models/account_journal.py | 2 +- addons/account/models/account_report.py | 2 +- addons/account/tests/test_account_all_l10n.py | 2 +- addons/account/tests/test_chart_template.py | 2 +- addons/account/tests/test_tax_report.py | 2 +- addons/l10n_it_edi/models/account_move.py | 2 +- addons/mrp_subcontracting/models/stock_warehouse.py | 2 +- addons/payment/models/payment_transaction.py | 2 +- addons/stock/__init__.py | 2 +- addons/stock_delivery/models/stock_picking.py | 2 +- addons/website/models/assets.py | 2 +- odoo/addons/base/tests/test_base.py | 6 +++--- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/addons/account/models/account_journal.py b/addons/account/models/account_journal.py index cdd5656d0d2..2488f3049e0 100644 --- a/addons/account/models/account_journal.py +++ b/addons/account/models/account_journal.py @@ -601,7 +601,7 @@ class AccountJournal(models.Model): journal_code_base = prefix_map.get(journal_type) existing_codes = set(self.env['account.journal'].with_context(active_test=False).search([ *self.env['account.journal']._check_company_domain(company), - ('code', 'like', journal_code_base + '%'), + ('code', '=like', journal_code_base + '%'), ]).mapped('code') + (cache or [])) for num in range(1, 100): diff --git a/addons/account/models/account_report.py b/addons/account/models/account_report.py index 403201c75ae..b7cb8fd5b77 100644 --- a/addons/account/models/account_report.py +++ b/addons/account/models/account_report.py @@ -137,7 +137,7 @@ class AccountReport(models.Model): # as their sections if report.root_report_id: report[field_name] = report.root_report_id[field_name] - elif len(report.section_main_report_ids) == 1 and not self.env['ir.actions.client'].search_count([('context', 'ilike', f"%'report_id': {report.id}"), ('tag', '=', 'account_report')]): + elif len(report.section_main_report_ids) == 1 and not self.env['ir.actions.client'].search_count([('context', 'ilike', f"'report_id': {report.id}"), ('tag', '=', 'account_report')]): report[field_name] = report.section_main_report_ids[field_name] else: report[field_name] = default_value diff --git a/addons/account/tests/test_account_all_l10n.py b/addons/account/tests/test_account_all_l10n.py index 3c120701f4a..1fc08c895ef 100644 --- a/addons/account/tests/test_account_all_l10n.py +++ b/addons/account/tests/test_account_all_l10n.py @@ -18,7 +18,7 @@ def test_all_l10n(env): # Install the requiriments l10n_mods = env['ir.module.module'].search([ - ('name', 'like', 'l10n%'), + ('name', '=like', 'l10n%'), ('state', '=', 'uninstalled'), ]) l10n_mods.button_immediate_install() diff --git a/addons/account/tests/test_chart_template.py b/addons/account/tests/test_chart_template.py index 7f80cb7a8f3..20b5e69a891 100644 --- a/addons/account/tests/test_chart_template.py +++ b/addons/account/tests/test_chart_template.py @@ -286,7 +286,7 @@ class TestChartTemplate(TransactionCase): self.env['account.chart.template'].try_loading('test', company=company_2, install_demo=False) taxes_1_companies = self.env['account.tax'].search([ - ('name', 'like', '%Tax 1'), + ('name', '=like', '%Tax 1'), ('company_id', 'in', [self.company_1.id, company_2.id]), ]) # we should have 4 records: 2 companies * (1 original tax + 1 recreated tax) diff --git a/addons/account/tests/test_tax_report.py b/addons/account/tests/test_tax_report.py index d82d43b4d2c..a41ef8a6e48 100644 --- a/addons/account/tests/test_tax_report.py +++ b/addons/account/tests/test_tax_report.py @@ -71,7 +71,7 @@ class TaxReportTest(AccountTestInvoicingCommon): def _get_tax_tags(self, country, tag_name=None, active_test=True): domain = [('country_id', '=', country.id), ('applicability', '=', 'taxes')] if tag_name: - domain.append(('name', 'like', '_' + tag_name)) + domain.append(('name', '=like', '_' + tag_name)) return self.env['account.account.tag'].with_context(active_test=active_test).search(domain) def test_create_shared_tags(self): diff --git a/addons/l10n_it_edi/models/account_move.py b/addons/l10n_it_edi/models/account_move.py index d1f7df5507a..0922792ea56 100644 --- a/addons/l10n_it_edi/models/account_move.py +++ b/addons/l10n_it_edi/models/account_move.py @@ -127,7 +127,7 @@ class AccountMove(models.Model): """ it_tax_report_vj_lines = self.env['account.report.line'].search([ ('report_id.country_id.code', '=', 'IT'), - ('code', 'like', 'VJ%'), + ('code', '=like', 'VJ%'), ]) vj_lines_tags = it_tax_report_vj_lines.expression_ids._get_matching_tags() for move in self: diff --git a/addons/mrp_subcontracting/models/stock_warehouse.py b/addons/mrp_subcontracting/models/stock_warehouse.py index 5fd3e6c6b1b..c50de0abf10 100644 --- a/addons/mrp_subcontracting/models/stock_warehouse.py +++ b/addons/mrp_subcontracting/models/stock_warehouse.py @@ -156,7 +156,7 @@ class StockWarehouse(models.Model): def _get_sequence_values(self, name=False, code=False): values = super(StockWarehouse, self)._get_sequence_values(name=name, code=code) - count = self.env['ir.sequence'].search_count([('prefix', 'like', self.code + '/SBC%/%')]) + count = self.env['ir.sequence'].search_count([('prefix', '=like', self.code + '/SBC%/%')]) values.update({ 'subcontracting_type_id': { 'name': self.name + ' ' + _('Sequence subcontracting'), diff --git a/addons/payment/models/payment_transaction.py b/addons/payment/models/payment_transaction.py index 67a94f912ac..47df8f02493 100644 --- a/addons/payment/models/payment_transaction.py +++ b/addons/payment/models/payment_transaction.py @@ -372,7 +372,7 @@ class PaymentTransaction(models.Model): # query wouldn't help either as the selector is arbitrary and doing that would be an # open-door to SQL injections. same_prefix_references = self.sudo().search( - [('reference', 'like', f'{prefix}{separator}%')] + [('reference', '=like', f'{prefix}{separator}%')] ).with_context(prefetch_fields=False).mapped('reference') # A final regex search is necessary to figure out the next sequence number. The previous diff --git a/addons/stock/__init__.py b/addons/stock/__init__.py index 5d92aa6951b..beb185f50ab 100644 --- a/addons/stock/__init__.py +++ b/addons/stock/__init__.py @@ -11,7 +11,7 @@ from . import populate # TODO: Apply proper fix & remove in master def pre_init_hook(env): env['ir.model.data'].search([ - ('model', 'like', '%stock%'), + ('model', 'like', 'stock'), ('module', '=', 'stock') ]).unlink() diff --git a/addons/stock_delivery/models/stock_picking.py b/addons/stock_delivery/models/stock_picking.py index 47f54a7b82c..e6c2ed36c09 100644 --- a/addons/stock_delivery/models/stock_picking.py +++ b/addons/stock_delivery/models/stock_picking.py @@ -103,7 +103,7 @@ class StockPicking(models.Model): def _compute_return_label(self): for picking in self: if picking.carrier_id: - picking.return_label_ids = self.env['ir.attachment'].search([('res_model', '=', 'stock.picking'), ('res_id', '=', picking.id), ('name', 'like', '%s%%' % picking.carrier_id.get_return_label_prefix())]) + picking.return_label_ids = self.env['ir.attachment'].search([('res_model', '=', 'stock.picking'), ('res_id', '=', picking.id), ('name', '=like', '%s%%' % picking.carrier_id.get_return_label_prefix())]) else: picking.return_label_ids = False diff --git a/addons/website/models/assets.py b/addons/website/models/assets.py index f893ea0eeec..4b46048407f 100644 --- a/addons/website/models/assets.py +++ b/addons/website/models/assets.py @@ -55,7 +55,7 @@ class Assets(models.AbstractModel): IrAttachment.search([ '|', ('id', '=', delete_attachment_id), ('original_id', '=', delete_attachment_id), - ('name', 'like', '%google-font%') + ('name', 'like', 'google-font'), ]).unlink() google_local_fonts = values.get('google-local-fonts') diff --git a/odoo/addons/base/tests/test_base.py b/odoo/addons/base/tests/test_base.py index 7aef5fda157..c47009f012b 100644 --- a/odoo/addons/base/tests/test_base.py +++ b/odoo/addons/base/tests/test_base.py @@ -127,15 +127,15 @@ class TestGroups(TransactionCase): def test_res_groups_fullname_search(self): all_groups = self.env['res.groups'].search([]) - groups = all_groups.search([('full_name', 'like', '%Sale%')]) + groups = all_groups.search([('full_name', 'like', 'Sale')]) self.assertItemsEqual(groups.ids, [g.id for g in all_groups if 'Sale' in g.full_name], "did not match search for 'Sale'") - groups = all_groups.search([('full_name', 'like', '%Technical%')]) + groups = all_groups.search([('full_name', 'like', 'Technical')]) self.assertItemsEqual(groups.ids, [g.id for g in all_groups if 'Technical' in g.full_name], "did not match search for 'Technical'") - groups = all_groups.search([('full_name', 'like', '%Sales /%')]) + groups = all_groups.search([('full_name', 'like', 'Sales /')]) self.assertItemsEqual(groups.ids, [g.id for g in all_groups if 'Sales /' in g.full_name], "did not match search for 'Sales /'")