Split _args_to_clause into two functions
This commit is contained in:
parent
5a93c61bf6
commit
00d2279abf
@ -371,39 +371,42 @@ class Table(object):
|
|||||||
return self.db.ensure_schema
|
return self.db.ensure_schema
|
||||||
return ensure
|
return ensure
|
||||||
|
|
||||||
|
def _generate_clause(self, column, op, value):
|
||||||
|
if op in ('like',):
|
||||||
|
return self.table.c[column].like(value)
|
||||||
|
if op in ('ilike',):
|
||||||
|
return self.table.c[column].ilike(value)
|
||||||
|
if op in ('>', 'gt'):
|
||||||
|
return self.table.c[column] > value
|
||||||
|
if op in ('<', 'lt'):
|
||||||
|
return self.table.c[column] < value
|
||||||
|
if op in ('>=', 'gte'):
|
||||||
|
return self.table.c[column] >= value
|
||||||
|
if op in ('<=', 'lte'):
|
||||||
|
return self.table.c[column] <= value
|
||||||
|
if op in ('=', '==', 'is'):
|
||||||
|
return self.table.c[column] == value
|
||||||
|
if op in ('!=', '<>', 'not'):
|
||||||
|
return self.table.c[column] != value
|
||||||
|
if op in ('in'):
|
||||||
|
return self.table.c[column].in_(value)
|
||||||
|
if op in ('between', '..'):
|
||||||
|
start, end = value
|
||||||
|
return self.table.c[column].between(start, end)
|
||||||
|
return false()
|
||||||
|
|
||||||
def _args_to_clause(self, args, clauses=()):
|
def _args_to_clause(self, args, clauses=()):
|
||||||
clauses = list(clauses)
|
clauses = list(clauses)
|
||||||
for column, value in args.items():
|
for column, value in args.items():
|
||||||
if not self.has_column(column):
|
if not self.has_column(column):
|
||||||
clauses.append(false())
|
clauses.append(false())
|
||||||
elif isinstance(value, (list, tuple)):
|
elif isinstance(value, (list, tuple, set)):
|
||||||
clauses.append(self.table.c[column].in_(value))
|
clauses.append(self._generate_clause(column, 'in', value))
|
||||||
elif isinstance(value, dict):
|
elif isinstance(value, dict):
|
||||||
key = list(value.keys())[0]
|
for op, op_value in value.items():
|
||||||
if key in ('like',):
|
clauses.append(self._generate_clause(column, op, op_value))
|
||||||
clauses.append(self.table.c[column].like(value[key]))
|
|
||||||
elif key in ('ilike',):
|
|
||||||
clauses.append(self.table.c[column].ilike(value[key]))
|
|
||||||
elif key in ('>', 'gt'):
|
|
||||||
clauses.append(self.table.c[column] > value[key])
|
|
||||||
elif key in ('<', 'lt'):
|
|
||||||
clauses.append(self.table.c[column] < value[key])
|
|
||||||
elif key in ('>=', 'gte'):
|
|
||||||
clauses.append(self.table.c[column] >= value[key])
|
|
||||||
elif key in ('<=', 'lte'):
|
|
||||||
clauses.append(self.table.c[column] <= value[key])
|
|
||||||
elif key in ('=', '==', 'is'):
|
|
||||||
clauses.append(self.table.c[column] == value[key])
|
|
||||||
elif key in ('!=', '<>', 'not'):
|
|
||||||
clauses.append(self.table.c[column] != value[key])
|
|
||||||
elif key in ('between', '..'):
|
|
||||||
start = value[key][0]
|
|
||||||
end = value[key][1]
|
|
||||||
clauses.append(self.table.c[column].between(start, end))
|
|
||||||
else:
|
|
||||||
clauses.append(false())
|
|
||||||
else:
|
else:
|
||||||
clauses.append(self.table.c[column] == value)
|
clauses.append(self._generate_clause(column, '=', value))
|
||||||
return and_(*clauses)
|
return and_(*clauses)
|
||||||
|
|
||||||
def _args_to_order_by(self, order_by):
|
def _args_to_order_by(self, order_by):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user