diff --git a/CHANGES b/CHANGES index b7504b9670..516309c3d5 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ 0.3.2 - added keywords for EXCEPT, INTERSECT, EXCEPT ALL, INTERSECT ALL [ticket:247] +- added label() function to Select class, when scalar=True is used +to create a scalar subquery. 0.3.1 - Engine/Pool: diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index b3d61dc7e8..17c0a25f76 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -1494,6 +1494,9 @@ class Select(_SelectBaseMixin, FromClause): self._raw_columns.append(column) + if self.is_scalar and not hasattr(self, 'type'): + self.type = column.type + # if the column is a Select statement itself, # accept visitor column.accept_visitor(self.__correlator) @@ -1502,7 +1505,17 @@ class Select(_SelectBaseMixin, FromClause): for f in column._get_from_objects(): f.accept_visitor(self.__correlator) self._process_froms(column, False) - + def _make_proxy(self, selectable, name): + if self.is_scalar: + return self._raw_columns[0]._make_proxy(selectable, name) + else: + raise exceptions.InvalidRequestError("Not a scalar select statement") + def label(self, name): + if not self.is_scalar: + raise exceptions.InvalidRequestError("Not a scalar select statement") + else: + return label(name, self) + def _exportable_columns(self): return self._raw_columns def _proxy_column(self, column):