diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-11-16 19:33:26 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-11-16 19:33:26 +0000 |
| commit | e1268d4f57ad19d7d38e4f4130e72f44f91fe964 (patch) | |
| tree | c884c4b422aecb146f21126c9d5d1119ad2c0b6b /lib | |
| parent | 1ff2b7826876dfadc1ce11e8b15a3cb6ac5d289f (diff) | |
| download | sqlalchemy-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.py | 13 |
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): |
