diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql.py | 17 |
2 files changed, 11 insertions, 14 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 5d82b594f..ce2f78bb7 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -241,12 +241,10 @@ class Query(object): ret = self.extension.select(self, arg=arg, **kwargs) if ret is not mapper.EXT_PASS: return ret - try: - s = arg._selectable() - except AttributeError: - return self.select_whereclause(whereclause=arg, **kwargs) + if isinstance(arg, sql.FromClause): + return self.select_statement(arg, **kwargs) else: - return self.select_statement(s, **kwargs) + return self.select_whereclause(whereclause=arg, **kwargs) def select_whereclause(self, whereclause=None, params=None, **kwargs): """given a WHERE criterion, create a SELECT statement, execute and return the resulting instances.""" 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() |
