'Compiled', 'CompoundSelect', 'Executor', 'FromClause', 'Join',
'Select', 'Selectable', 'TableClause', 'alias', 'and_', 'asc',
'between_', 'bindparam', 'case', 'cast', 'column', 'delete',
- 'desc', 'except_', 'except_all', 'exists', 'extract', 'func', 'modifier',
+ 'desc', 'distinct', 'except_', 'except_all', 'exists', 'extract', 'func', 'modifier',
'insert', 'intersect', 'intersect_all', 'join', 'literal',
'literal_column', 'not_', 'null', 'or_', 'outerjoin', 'select',
'subquery', 'table', 'text', 'union', 'union_all', 'update',]
return clause._negate()
+def distinct(expr):
+ """return a ``DISTINCT`` clause."""
+
+ return _UnaryExpression(expr, operator="DISTINCT")
+
def between(ctest, cleft, cright):
"""Return a ``BETWEEN`` predicate clause.
return _Function(self.__names[-1], packagenames=self.__names[0:-1], *c, **o)
func = _FunctionGenerator()
+
+# TODO: use UnaryExpression for this instead ?
modifier = _FunctionGenerator(group=False)
+
def _compound_select(keyword, *selects, **kwargs):
return CompoundSelect(keyword, *selects, **kwargs)
checkparams = {'myothertable_othername': 'asdf', 'myothertable_othername_1':'foo', 'myothertable_otherid': 9, 'mytable_myid': 12}
)
+ def testdistinct(self):
+ self.runtest(
+ select([table1.c.myid.distinct()]), "SELECT DISTINCT mytable.myid FROM mytable"
+ )
+
+ self.runtest(
+ select([distinct(table1.c.myid)]), "SELECT DISTINCT mytable.myid FROM mytable"
+ )
+
def testoperators(self):
self.runtest(
table1.select((table1.c.myid != 12) & ~(table1.c.name=='john')),