summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-11-16 19:33:26 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-11-16 19:33:26 +0000
commite1268d4f57ad19d7d38e4f4130e72f44f91fe964 (patch)
treec884c4b422aecb146f21126c9d5d1119ad2c0b6b /lib
parent1ff2b7826876dfadc1ce11e8b15a3cb6ac5d289f (diff)
downloadsqlalchemy-e1268d4f57ad19d7d38e4f4130e72f44f91fe964.tar.gz
- Query.select_from(), from_statement() ensure
that the given argument is a FromClause, or Text/Select/Union, respectively. - Query.add_column() can accept FromClause objects in the same manner as session.query() can.
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/query.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 82a698fd0..d88876312 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -562,8 +562,11 @@ class Query(object):
"""Add a SQL ColumnElement to the list of result columns to be returned."""
self._entities = list(self._entities)
- c = _ColumnEntity(self, column)
- self.__setup_aliasizers([c])
+ l = len(self._entities)
+ _ColumnEntity(self, column)
+ # _ColumnEntity may add many entities if the
+ # given arg is a FROM clause
+ self.__setup_aliasizers(self._entities[l:])
def options(self, *args):
"""Return a new Query object, applying the given list of
@@ -930,6 +933,8 @@ class Query(object):
if isinstance(from_obj, (tuple, list)):
util.warn_deprecated("select_from() now accepts a single Selectable as its argument, which replaces any existing FROM criterion.")
from_obj = from_obj[-1]
+ if not isinstance(from_obj, expression.FromClause):
+ raise sa_exc.ArgumentError("select_from() accepts FromClause objects only.")
self.__set_select_from(from_obj)
def __getitem__(self, item):
@@ -1013,6 +1018,10 @@ class Query(object):
"""
if isinstance(statement, basestring):
statement = sql.text(statement)
+
+ if not isinstance(statement, (expression._TextClause, expression._SelectBaseMixin)):
+ raise sa_exc.ArgumentError("from_statement accepts text(), select(), and union() objects only.")
+
self._statement = statement
def first(self):