From bc784f9556995ff0f4bf42144e55ff38441f065e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 18 Feb 2006 16:32:33 +0000 Subject: postgres needs to explicitly pre-execute PassiveDefaults on primary key columns, test added --- lib/sqlalchemy/databases/postgres.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'lib/sqlalchemy/databases/postgres.py') diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index d93a084ee..a5b5b250d 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -317,12 +317,19 @@ class PGSchemaDropper(ansisql.ANSISchemaDropper): class PGDefaultRunner(ansisql.ANSIDefaultRunner): def get_column_default(self, column): - if column.primary_key and 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)) - return c.fetchone()[0] + if column.primary_key: + # passive defaults on primary keys have to be overridden + if isinstance(column.default, schema.PassiveDefault): + 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)) + return c.fetchone()[0] + else: + return ansisql.ANSIDefaultRunner.get_column_default(self, column) else: return ansisql.ANSIDefaultRunner.get_column_default(self, column) - + def visit_sequence(self, seq): if not seq.optional: c = self.proxy("select nextval('%s')" % seq.name) -- cgit v1.2.1