]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added schema support for postgres column defaults, fix for [ticket:88]
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 1 Mar 2006 07:22:53 +0000 (07:22 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 1 Mar 2006 07:22:53 +0000 (07:22 +0000)
lib/sqlalchemy/databases/postgres.py
test/query.py

index 7bb329ccb78f6dff3a7b75e3dcd2d9b5da5f721d..67e3d5cf57a0f6e16c1d3a0014598b5d7bf17fa3 100644 (file)
@@ -338,7 +338,12 @@ class PGDefaultRunner(ansisql.ANSIDefaultRunner):
                 c = self.proxy("select %s" % column.default.arg)
                 return c.fetchone()[0]
             elif isinstance(column.type, types.Integer) and (column.default is None or (isinstance(column.default, schema.Sequence) and column.default.optional)):
-                c = self.proxy("select nextval('%s_%s_seq')" % (column.table.name, column.name))
+                sch = column.table.schema
+                if sch is not None:
+                    exc = "select nextval('%s.%s_%s_seq')" % (sch, column.table.name, column.name)
+                else:
+                    exc = "select nextval('%s_%s_seq')" % (column.table.name, column.name)
+                c = self.proxy(exc)
                 return c.fetchone()[0]
             else:
                 return ansisql.ANSIDefaultRunner.get_column_default(self, column)
index 3b4653c4efa4ebea859582818ae2f7c204cc5893..8c732b75a56ff555b5a33fd8ded257efb7b2ce17 100644 (file)
@@ -67,6 +67,29 @@ class QueryTest(PersistTest):
             self.assert_(l == [(1, 'user', 'lala')])
         finally:
             db.execute("drop table speedy_users", None)
+
+    def testschema(self):
+        if not db.engine.__module__.endswith('postgres'):
+            return 
+            
+        test_table = Table('my_table', db,
+                    Column('id', Integer, primary_key=True),
+                    Column('data', String(20), nullable=False),
+                    schema='alt_schema'
+                 )
+        test_table.create()
+        try:
+            # plain insert
+            test_table.insert().execute(data='test')
+
+            # try with a PassiveDefault
+            test_table.deregister()
+            test_table = Table('my_table', db, autoload=True, redefine=True, schema='alt_schema')
+            test_table.insert().execute(data='test')
+
+        finally:
+            test_table.drop()
+
     def testdefaults(self):
         x = {'x':50}
         def mydefault():