From e8d8fa14b63a994ac1e0953bbe494a7c6ade9572 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 1 Mar 2006 07:22:53 +0000 Subject: [PATCH] added schema support for postgres column defaults, fix for [ticket:88] --- lib/sqlalchemy/databases/postgres.py | 7 ++++++- test/query.py | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 7bb329ccb7..67e3d5cf57 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -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) diff --git a/test/query.py b/test/query.py index 3b4653c4ef..8c732b75a5 100644 --- a/test/query.py +++ b/test/query.py @@ -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(): -- 2.47.2