]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
merge r6616 of 0.5 branch, allow DefaultGenerators as "default" and "onupdate"
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 7 Jan 2010 00:24:30 +0000 (00:24 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 7 Jan 2010 00:24:30 +0000 (00:24 +0000)
CHANGES
lib/sqlalchemy/schema.py
test/engine/test_metadata.py

diff --git a/CHANGES b/CHANGES
index 1ea57e02e39a42129b0d76bf74167e14f16a50e4..a24c5c333722eee038d0e04fa5667a23dbaf3dc3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -801,6 +801,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 8761b7be669297be6ea05583385df3be7608ec97..86ef9c82533d8a5d8fbae4d6726c442da7e3e799 100644 (file)
@@ -670,7 +670,10 @@ class Column(SchemaItem, expression.ColumnClause):
                 args.append(DefaultClause(self.server_default))
                 
         if self.onupdate is not None:
-            args.append(ColumnDefault(self.onupdate, for_update=True))
+            if isinstance(self.onupdate, (ColumnDefault, Sequence)):
+                args.append(self.onupdate)
+            else:
+                args.append(ColumnDefault(self.onupdate, for_update=True))
             
         if self.server_onupdate is not None:
             if isinstance(self.server_onupdate, FetchedValue):
index 6e846096bd5b35e46bb72d8a3ad94e30dffcddec..2fadfe27269636d9a1547092c2c655ce8668e0c7 100644 (file)
@@ -1,7 +1,8 @@
 from sqlalchemy.test.testing import assert_raises, assert_raises_message
 import pickle
 from sqlalchemy import Integer, String, UniqueConstraint, CheckConstraint,\
-                        ForeignKey, MetaData, Sequence, ForeignKeyConstraint
+                        ForeignKey, MetaData, Sequence, ForeignKeyConstraint,\
+                        ColumnDefault
 from sqlalchemy.test.schema import Table, Column
 from sqlalchemy import schema
 import sqlalchemy as tsa
@@ -99,7 +100,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'),
@@ -154,6 +155,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'
@@ -241,6 +243,15 @@ class TableOptionsTest(TestBase, AssertsCompiledSQL):
             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'})