]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed issue where a :class:`.MetaData` object that used a naming
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 10 Apr 2015 15:20:14 +0000 (11:20 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 10 Apr 2015 15:20:14 +0000 (11:20 -0400)
convention would not properly work with pickle.  The attribute was
skipped leading to inconsistencies and failures if the unpickled
:class:`.MetaData` object were used to base additional tables
from.
fixes #3362

doc/build/changelog/changelog_09.rst
lib/sqlalchemy/sql/schema.py
test/sql/test_metadata.py

index e48585ea7d3e6e8afed38bcd9cbe5d3934f6433b..7960da626e12f32196645517cc2e787a3d06ef9e 100644 (file)
 .. changelog::
     :version: 0.9.10
 
+    .. change::
+        :tags: bug, sql
+        :tickets: 3362
+        :versions: 1.0.0
+
+        Fixed issue where a :class:`.MetaData` object that used a naming
+        convention would not properly work with pickle.  The attribute was
+        skipped leading to inconsistencies and failures if the unpickled
+        :class:`.MetaData` object were used to base additional tables
+        from.
+
     .. change::
         :tags: bug, postgresql
         :tickets: 3354
index e40909850869e739a3ea5c4d954c2c0e6c494f85..bbbd28b4dbb2b836f754585f4925ff297ffe8d29 100644 (file)
@@ -3359,11 +3359,14 @@ class MetaData(SchemaItem):
                 'schema': self.schema,
                 'schemas': self._schemas,
                 'sequences': self._sequences,
-                'fk_memos': self._fk_memos}
+                'fk_memos': self._fk_memos,
+                'naming_convention': self.naming_convention
+                }
 
     def __setstate__(self, state):
         self.tables = state['tables']
         self.schema = state['schema']
+        self.naming_convention = state['naming_convention']
         self._bind = None
         self._sequences = state['sequences']
         self._schemas = state['schemas']
index 65e1e60cef3f53f3e38a2e258bde88b57a1f7646..db5e73e52b0e1591f7024ef8a286b7bdb6505703 100644 (file)
@@ -3575,3 +3575,16 @@ class NamingConventionTest(fixtures.TestBase, AssertsCompiledSQL):
         u1.append_constraint(ck1)
 
         eq_(ck1.name, "ck_user_foo")
+
+    def test_pickle_metadata(self):
+        m = MetaData(naming_convention={"pk": "%(table_name)s_pk"})
+
+        m2 = pickle.loads(pickle.dumps(m))
+
+        eq_(m2.naming_convention, {"pk": "%(table_name)s_pk"})
+
+        t2a = Table('t2', m, Column('id', Integer, primary_key=True))
+        t2b = Table('t2', m2, Column('id', Integer, primary_key=True))
+
+        eq_(t2a.primary_key.name, t2b.primary_key.name)
+        eq_(t2b.primary_key.name, "t2_pk")