diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-18 16:32:33 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-18 16:32:33 +0000 |
commit | bc784f9556995ff0f4bf42144e55ff38441f065e (patch) | |
tree | 3eeff2ccad28fc2c71be205cff38ce2c65c501fa /lib/sqlalchemy/databases/postgres.py | |
parent | 63f11ac1b05988ff74d769e88abe6abc661dc2e6 (diff) | |
download | sqlalchemy-bc784f9556995ff0f4bf42144e55ff38441f065e.tar.gz |
postgres needs to explicitly pre-execute PassiveDefaults on primary key columns, test added
Diffstat (limited to 'lib/sqlalchemy/databases/postgres.py')
-rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 15 |
1 files changed, 11 insertions, 4 deletions
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) |