From 8a48ee2c8c0a28c059e8d60ef1da4c8b2ddf0738 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 19 Jan 2007 20:32:13 +0000 Subject: - changed "BooleanExpression" to subclass from "BinaryExpression", so that boolean expressions can also follow column-clause behaviors (i.e. label(), etc). - query.select() had to become more picky about what it considers to be a full "selectable" and what it considers to be a fragment that represents a WHERE criterion - looks for the presence of a FromClause now (which is still pretty liberal, since i originally intended the check to be for select() only). the previous exception-catch method also added a little stack tracing overhead anyway. --- lib/sqlalchemy/sql.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'lib/sqlalchemy/sql.py') diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index dbd119fd1..e0bae905a 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -1076,8 +1076,14 @@ class _BinaryClause(ClauseElement): self.left.compare(other.left) and self.right.compare(other.right) ) -class _BooleanExpression(_BinaryClause): - """represents a boolean expression, which is only useable in WHERE criterion.""" +class _BinaryExpression(_BinaryClause, ColumnElement): + """represents a binary expression, which can be in a WHERE criterion or in the column list + of a SELECT. By adding "ColumnElement" to its inherited list, it becomes a Selectable + unit which can be placed in the column list of a SELECT.""" + pass + +class _BooleanExpression(_BinaryExpression): + """represents a boolean expression.""" def __init__(self, *args, **kwargs): self.negate = kwargs.pop('negate', None) super(_BooleanExpression, self).__init__(*args, **kwargs) @@ -1087,13 +1093,6 @@ class _BooleanExpression(_BinaryClause): else: return super(_BooleanExpression, self)._negate() -class _BinaryExpression(_BinaryClause, ColumnElement): - """represents a binary expression, which can be in a WHERE criterion or in the column list - of a SELECT. By adding "ColumnElement" to its inherited list, it becomes a Selectable - unit which can be placed in the column list of a SELECT.""" - pass - - class Join(FromClause): def __init__(self, left, right, onclause=None, isouter = False): self.left = left._selectable() -- cgit v1.2.1