From: Mike Bayer Date: Sun, 28 Nov 2010 20:50:00 +0000 (-0500) Subject: - mappers can be created against select() constructs, or others, X-Git-Tag: rel_0_7b1~223 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb1274de9c37a1c8c88f4965051039f262646a37;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - mappers can be created against select() constructs, or others, that don't ultimately have any Table objects referenced. [ticket:1876] --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index be7909a05a..13caf1db34 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -447,11 +447,6 @@ class Mapper(object): self.tables = sqlutil.find_tables(self.mapped_table) - if not self.tables: - raise sa_exc.InvalidRequestError( - "Could not find any Table objects in mapped table '%s'" - % self.mapped_table) - self._pks_by_table = {} self._cols_by_table = {} diff --git a/test/orm/inheritance/test_concrete.py b/test/orm/inheritance/test_concrete.py index 43ba36ace1..9db095d928 100644 --- a/test/orm/inheritance/test_concrete.py +++ b/test/orm/inheritance/test_concrete.py @@ -371,7 +371,7 @@ class ConcreteTest(_base.MappedTest): self.assert_sql_count(testing.db, go, 1) - + class PropertyInheritanceTest(_base.MappedTest): @classmethod diff --git a/test/orm/test_selectable.py b/test/orm/test_selectable.py index 30278b5bcc..54d0980a02 100644 --- a/test/orm/test_selectable.py +++ b/test/orm/test_selectable.py @@ -4,14 +4,15 @@ import sqlalchemy as sa from test.lib import testing from sqlalchemy import String, Integer, select from test.lib.schema import Table, Column -from sqlalchemy.orm import mapper, create_session -from test.lib.testing import eq_ +from sqlalchemy.orm import mapper, Session +from test.lib.testing import eq_, AssertsCompiledSQL from test.orm import _base + # TODO: more tests mapping to selects -class SelectableNoFromsTest(_base.MappedTest): +class SelectableNoFromsTest(_base.MappedTest, AssertsCompiledSQL): @classmethod def define_tables(cls, metadata): Table('common', metadata, @@ -28,10 +29,24 @@ class SelectableNoFromsTest(_base.MappedTest): def test_no_tables(self): selectable = select(["x", "y", "z"]).alias() - assert_raises_message(sa.exc.InvalidRequestError, - "Could not find any Table objects", - mapper, Subset, selectable) + mapper(Subset, selectable, primary_key=[selectable.c.x]) + + self.assert_compile( + Session().query(Subset), + "SELECT anon_1.x, anon_1.y, anon_1.z FROM (SELECT x, y, z) AS anon_1", + use_default_dialect=True + ) + + @testing.resolve_artifact_names + def test_no_table_needs_pl(self): + selectable = select(["x", "y", "z"]).alias() + assert_raises_message( + sa.exc.ArgumentError, + "could not assemble any primary key columns", + mapper, Subset, selectable + ) + @testing.resolve_artifact_names def test_no_selects(self): subset_select = select([common.c.id, common.c.data]) @@ -42,7 +57,7 @@ class SelectableNoFromsTest(_base.MappedTest): subset_select = select([common.c.id, common.c.data]).alias() subset_mapper = mapper(Subset, subset_select) - sess = create_session(bind=testing.db) + sess = Session(bind=testing.db) sess.add(Subset(data=1)) sess.flush() sess.expunge_all()