refactoring of belongs, thanks Jonathan
This commit is contained in:
1 parent
8d97fe3d26
commit
61d81c01c4
2 files changed
+13
-13
No files matched your search
@@ -1 +1 @@
|
|||||||
Version 2.6.0-development+timestamp.2013.08.09.16.07.32
|
Version 2.6.0-development+timestamp.2013.08.15.09.08.28
|
||||||
+12
-12
@@ -1263,17 +1263,12 @@ class BaseAdapter(ConnectionPool):
|
|||||||
return '(%s OR %s)' % (self.expand(first), self.expand(second))
|
return '(%s OR %s)' % (self.expand(first), self.expand(second))
|
||||||
|
|
||||||
def BELONGS(self, first, second):
|
def BELONGS(self, first, second):
|
||||||
if isinstance(second, str):
|
if isinstance(second, str):
|
||||||
return '(%s IN (%s))' % (self.expand(first), second[:-1])
|
return '(%s IN (%s))' % (self.expand(first), second[:-1])
|
||||||
if not second:
|
if not second:
|
||||||
return '(1=0)'
|
return '(1=0)'
|
||||||
if isinstance(second, (list,tuple,frozenset)):
|
items = ','.join(self.expand(item, first.type) for item in second)
|
||||||
second = set(second) # remove duplicates, make mutable
|
return '(%s IN (%s))' % (self.expand(first), items)
|
||||||
if isinstance(second, set) and None in second:
|
|
||||||
second.remove(None)
|
|
||||||
return self.OR(self.EQ(first, None), self.BELONGS(first, second))
|
|
||||||
items = ','.join(self.expand(item, first.type) for item in second)
|
|
||||||
return '(%s IN (%s))' % (self.expand(first), items)
|
|
||||||
|
|
||||||
def REGEXP(self, first, second):
|
def REGEXP(self, first, second):
|
||||||
"regular expression operator"
|
"regular expression operator"
|
||||||
@@ -9070,7 +9065,7 @@ class Expression(object):
|
|||||||
db = self.db
|
db = self.db
|
||||||
return Query(db, db._adapter.REGEXP, self, value)
|
return Query(db, db._adapter.REGEXP, self, value)
|
||||||
|
|
||||||
def belongs(self, *value):
|
def belongs(self, *value, **kwattr):
|
||||||
"""
|
"""
|
||||||
Accepts the following inputs:
|
Accepts the following inputs:
|
||||||
field.belongs(1,2)
|
field.belongs(1,2)
|
||||||
@@ -9085,6 +9080,11 @@ class Expression(object):
|
|||||||
value = value[0]
|
value = value[0]
|
||||||
if isinstance(value,Query):
|
if isinstance(value,Query):
|
||||||
value = db(value)._select(value.first._table._id)
|
value = db(value)._select(value.first._table._id)
|
||||||
|
elif not isinstance(value, basestring):
|
||||||
|
value = set(value)
|
||||||
|
if kwattr.get('null') and None in value:
|
||||||
|
value.remove(None)
|
||||||
|
return (self == None) | Query(db, db._adapter.BELONGS, self, value)
|
||||||
return Query(db, db._adapter.BELONGS, self, value)
|
return Query(db, db._adapter.BELONGS, self, value)
|
||||||
|
|
||||||
def startswith(self, value):
|
def startswith(self, value):
|
||||||
|
|||||||
Reference in new issue
Block a user