]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- mappers can be created against select() constructs, or others,
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Nov 2010 20:50:00 +0000 (15:50 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Nov 2010 20:50:00 +0000 (15:50 -0500)
that don't ultimately have any Table objects referenced.
[ticket:1876]

lib/sqlalchemy/orm/mapper.py
test/orm/inheritance/test_concrete.py
test/orm/test_selectable.py

index be7909a05a3e5db3151ebd76372de783e428923a..13caf1db34ad3595a7b1ede9a848cca8cd501638 100644 (file)
@@ -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 = {}
 
index 43ba36ace12a3b47c4aee22c66827debaf0e273b..9db095d928c442f4fdd64b28f13d649cde94d509 100644 (file)
@@ -371,7 +371,7 @@ class ConcreteTest(_base.MappedTest):
 
         self.assert_sql_count(testing.db, go, 1)
 
-
+        
 class PropertyInheritanceTest(_base.MappedTest):
 
     @classmethod
index 30278b5bccb79ca6f2a89eac4e4a8b44590f82bf..54d0980a02a0d27748b407de92ac9725162b13c9 100644 (file)
@@ -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()