speedup CONTAINS when un-necessary REPLACE
This commit is contained in:
+14
-5
@@ -1255,13 +1255,22 @@ class BaseAdapter(ConnectionPool):
|
||||
return '(%s LIKE %s)' % (self.expand(first),
|
||||
self.expand('%'+second, 'string'))
|
||||
|
||||
def CONTAINS(self,first,second,case_sensitive=False):
|
||||
def CONTAINS(self,first,second,case_sensitive=False):
|
||||
if first.type in ('string','text', 'json'):
|
||||
second = Expression(None,self.CONCAT('%',Expression(
|
||||
None,self.REPLACE(second,('%','%%'))),'%'))
|
||||
if isinstance(second,Expression):
|
||||
second = Expression(None,self.CONCAT('%',Expression(
|
||||
None,self.REPLACE(second,('%','%%'))),'%'))
|
||||
else:
|
||||
second = '%'+str(second).replace('%','%%')+'%'
|
||||
elif first.type.startswith('list:'):
|
||||
second = Expression(None,self.CONCAT('%|',Expression(None,self.REPLACE(
|
||||
Expression(None,self.REPLACE(second,('%','%%'))),('|','||'))),'|%'))
|
||||
if isinstance(second,Expression):
|
||||
second = Expression(None,self.CONCAT(
|
||||
'%|',Expression(None,self.REPLACE(
|
||||
Expression(None,self.REPLACE(
|
||||
second,('%','%%'))),('|','||'))),'|%'))
|
||||
else:
|
||||
second = '%|'+str(second).replace('%','%%')\
|
||||
.replace('|','||')+'|%'
|
||||
op = case_sensitive and self.LIKE or self.ILIKE
|
||||
return op(first,second)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user