Merge pull request #265 from saimn/distinct

Add support for advanced queries in distinct
This commit is contained in:
Friedrich Lindenberg 2018-10-04 16:00:13 +02:00 committed by GitHub
commit 163e6554cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 8 deletions

View File

@ -546,27 +546,23 @@ class Table(object):
if not self.exists: if not self.exists:
return iter([]) return iter([])
filters = []
for column, value in _filter.items():
if not self.has_column(column):
raise DatasetException("No such column: %s" % column)
filters.append(self.table.c[column] == value)
columns = [] columns = []
clauses = []
for column in args: for column in args:
if isinstance(column, ClauseElement): if isinstance(column, ClauseElement):
filters.append(column) clauses.append(column)
else: else:
if not self.has_column(column): if not self.has_column(column):
raise DatasetException("No such column: %s" % column) raise DatasetException("No such column: %s" % column)
columns.append(self.table.c[column]) columns.append(self.table.c[column])
clause = self._args_to_clause(_filter, clauses=clauses)
if not len(columns): if not len(columns):
return iter([]) return iter([])
q = expression.select(columns, q = expression.select(columns,
distinct=True, distinct=True,
whereclause=and_(*filters), whereclause=clause,
order_by=[c.asc() for c in columns]) order_by=[c.asc() for c in columns])
return self.db.query(q) return self.db.query(q)

View File

@ -360,6 +360,12 @@ class TableTestCase(unittest.TestCase):
self.tbl.table.columns.date >= datetime(2011, 1, 2, 0, 0))) self.tbl.table.columns.date >= datetime(2011, 1, 2, 0, 0)))
assert len(x) == 4, x assert len(x) == 4, x
x = list(self.tbl.distinct('temperature', place='B€rkeley'))
assert len(x) == 3, x
x = list(self.tbl.distinct('temperature',
place=['B€rkeley', 'G€lway']))
assert len(x) == 6, x
def test_insert_many(self): def test_insert_many(self):
data = TEST_DATA * 100 data = TEST_DATA * 100
self.tbl.insert_many(data, chunk_size=13) self.tbl.insert_many(data, chunk_size=13)