[FIX] base: Correct optimization of name_search
[FIX] base: Correct optimization of name_search

Commit 5fcf891e07bf61518e6bf0be0dc4f27859d45778 introduced optimizations for
name_search in several models.  However, that produces some counter-intuitive
searches.

In a DB with project and custom data:

    >>> Project = self.env['project.task']
    >>> Project.search([('user_id', 'ilike', 'demo')]).mapped('user_id.name')
    ['Marc Demo']

    >>> Project.search([('user_id', 'not ilike', 'demo')]).mapped('user_id.name')
    ['Marc Demo']

The projects returned with 'not ilike' are a super-set of those returned with
'ilike':

    >>> Project.search([('user_id', 'ilike', 'demo')])
    project.task(22, 21, 20, 16, 14, 13)

    >>> Project.search([('user_id', 'not ilike', 'demo')])
    project.task(22, 21, 29, 28, 27, 26, 25, 20, 16, 14, 13, 31, 30)

This commit fix this behaviour by choosing '!=' instead of '=' whenever the
operator is a negation operator.

The 'res.users' is more exposed than the other models touched by
5fcf891e07bf61518e6bf0be0dc4f27859d45778, because user may search for 'Created
by' in the web client.

closes odoo/odoo#40140

X-original-commit: b3c539b09a0bd462309a10c565cb91375a7011b9
Signed-off-by: Yannick Tivisse (yti) <200a91eb0e5cc4726d6a3430713b580138f34298@odoo.com>

ygol/odoo,ygol/odoo,ygol/odoo,ygol/odoo,ygol/odoo,ygol/odoo,ygol/odoo