]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Default generators like Sequence() translate correctly
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 7 Jan 2010 00:07:19 +0000 (00:07 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 7 Jan 2010 00:07:19 +0000 (00:07 +0000)
across a copy() operation.

- Sequence() and other DefaultGenerator objects are accepted
as the value for the "default" and "onupdate" keyword
arguments of Column, in addition to being accepted
positionally.

CHANGES
lib/sqlalchemy/schema.py
test/engine/test_metadata.py

diff --git a/CHANGES b/CHANGES
index b25239af851d4fdf35bdb3e7c8ef631283e4f360..1071f013260193572e1e12559f61b53002c29cb5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,14 @@ CHANGES
       declarative helpers which place common columns on multiple 
       subclasses.
     
+    - Default generators like Sequence() translate correctly
+      across a copy() operation.
+      
+    - Sequence() and other DefaultGenerator objects are accepted 
+      as the value for the "default" and "onupdate" keyword
+      arguments of Column, in addition to being accepted
+      positionally.  
+      
     - Fixed a column arithmetic bug that affected column
       correspondence for cloned selectables which contain
       free-standing column expressions.   This bug is
index ce095799b0f2deb55798728cd9c4c2b05b49b044..7ea852a05a48d6f468a0bea00929e7519818056a 100644 (file)
@@ -697,7 +697,7 @@ class Column(SchemaItem, expression.ColumnClause):
 
         toinit = list(self.args)
         if self.default is not None:
-            if isinstance(self.default, ColumnDefault):
+            if isinstance(self.default, DefaultGenerator):
                 toinit.append(self.default)
             else:
                 toinit.append(ColumnDefault(self.default))
@@ -707,7 +707,10 @@ class Column(SchemaItem, expression.ColumnClause):
             else:
                 toinit.append(DefaultClause(self.server_default))
         if self.onupdate is not None:
-            toinit.append(ColumnDefault(self.onupdate, for_update=True))
+            if isinstance(self.onupdate, DefaultGenerator):
+                toinit.append(self.onupdate)
+            else:
+                toinit.append(ColumnDefault(self.onupdate, for_update=True))
         if self.server_onupdate is not None:
             if isinstance(self.server_onupdate, FetchedValue):
                 toinit.append(self.server_default)
index 6f1a45e5da9608de4084cca792bbb690fa7528a7..5ee6e7d386a86a19785c26a4714fdb87e21ca55a 100644 (file)
@@ -1,7 +1,8 @@
 from sqlalchemy.test.testing import assert_raises, assert_raises_message
 import pickle
 from sqlalchemy import MetaData
-from sqlalchemy import Integer, String, UniqueConstraint, CheckConstraint, ForeignKey, Sequence
+from sqlalchemy import Integer, String, UniqueConstraint, CheckConstraint, ForeignKey, \
+                            Sequence, ColumnDefault
 from sqlalchemy.test.schema import Table
 from sqlalchemy.test.schema import Column
 import sqlalchemy as tsa
@@ -61,7 +62,7 @@ class MetaDataTest(TestBase, ComparesTables):
         meta = MetaData()
 
         table = Table('mytable', meta,
-            Column('myid', Integer, primary_key=True),
+            Column('myid', Integer, Sequence('foo_id_seq'), primary_key=True),
             Column('name', String(40), nullable=True),
             Column('foo', String(40), nullable=False, server_default='x', server_onupdate='q'),
             Column('bar', String(40), nullable=False, default='y', onupdate='z'),
@@ -114,6 +115,7 @@ class MetaDataTest(TestBase, ComparesTables):
                 assert 'x' in str(table_c.c.foo.server_default.arg)
                 
                 if not reflect:
+                    assert isinstance(table_c.c.myid.default, Sequence)
                     assert str(table_c.c.foo.server_onupdate.arg) == 'q'
                     assert str(table_c.c.bar.default.arg) == 'y'
                     assert getattr(table_c.c.bar.onupdate.arg, 'arg', table_c.c.bar.onupdate.arg) == 'z'
@@ -199,6 +201,15 @@ class TableOptionsTest(TestBase):
             assert t.info['bar'] == 'zip'
 
 class ColumnOptionsTest(TestBase):
+    
+    def test_default_generators(self):
+        g1, g2 = Sequence('foo_id_seq'), ColumnDefault('f5')
+        assert Column(default=g1).default is g1
+        assert Column(onupdate=g1).onupdate is g1
+        assert Column(default=g2).default is g2
+        assert Column(onupdate=g2).onupdate is g2
+        
+        
     def test_column_info(self):
         
         c1 = Column('foo', info={'x':'y'})