Do not convert select query value into list when searching on char with in operator
Closes #14898 (grafted from f62e20c70717ed0a40ad86a7dd5672577f73626b) --HG-- branch : 8.0
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
import string
|
||||
import warnings
|
||||
|
||||
from sql import Column, Expression, Query
|
||||
from sql import Column, CombiningQuery, Expression, Query, Select
|
||||
from sql.conditionals import Coalesce, NullIf
|
||||
from sql.functions import Trim
|
||||
from sql.operators import Not
|
||||
@@ -121,10 +121,11 @@ class Char(FieldTranslate):
|
||||
return column
|
||||
|
||||
def _domain_value(self, operator, value):
|
||||
if operator in {'in', 'not in'}:
|
||||
value = [v if v is not None else '' for v in value]
|
||||
elif value is None:
|
||||
value = ''
|
||||
if not isinstance(value, (Select, CombiningQuery)):
|
||||
if operator in {'in', 'not in'}:
|
||||
value = [v if v is not None else '' for v in value]
|
||||
elif value is None:
|
||||
value = ''
|
||||
value = super()._domain_value(operator, value)
|
||||
if self.search_unaccented and operator.endswith('ilike'):
|
||||
database = Transaction().database
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import unittest
|
||||
|
||||
from sql import Literal
|
||||
from sql import Literal, Select
|
||||
|
||||
from trytond import backend
|
||||
from trytond.model.exceptions import (
|
||||
@@ -55,9 +55,17 @@ class CommonTestCaseMixin:
|
||||
chars_bar = Char.search([
|
||||
('char', '=', "Bar"),
|
||||
])
|
||||
chars_select_foo = Char.search([
|
||||
('char', '=', Select([Literal('Foo')])),
|
||||
])
|
||||
chars_select_bar = Char.search([
|
||||
('char', '=', Select([Literal('Bar')])),
|
||||
])
|
||||
|
||||
self.assertListEqual(chars_foo, [char])
|
||||
self.assertListEqual(chars_bar, [])
|
||||
self.assertListEqual(chars_select_foo, [char])
|
||||
self.assertListEqual(chars_select_bar, [])
|
||||
|
||||
@with_transaction()
|
||||
def test_search_equals_none(self):
|
||||
@@ -178,10 +186,18 @@ class CommonTestCaseMixin:
|
||||
chars_empty = Char.search([
|
||||
('char', 'in', []),
|
||||
])
|
||||
chars_select_foo = Char.search([
|
||||
('char', 'in', Select([Literal('Foo')])),
|
||||
])
|
||||
chars_select_bar = Char.search([
|
||||
('char', 'in', Select([Literal('Bar')])),
|
||||
])
|
||||
|
||||
self.assertListEqual(chars_foo, [char])
|
||||
self.assertListEqual(chars_bar, [])
|
||||
self.assertListEqual(chars_empty, [])
|
||||
self.assertListEqual(chars_select_foo, [char])
|
||||
self.assertListEqual(chars_select_bar, [])
|
||||
|
||||
@with_transaction()
|
||||
def test_search_in_none(self):
|
||||
|
||||
Reference in New Issue
Block a user