summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/postgres.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-02-18 16:32:33 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-02-18 16:32:33 +0000
commitbc784f9556995ff0f4bf42144e55ff38441f065e (patch)
tree3eeff2ccad28fc2c71be205cff38ce2c65c501fa /lib/sqlalchemy/databases/postgres.py
parent63f11ac1b05988ff74d769e88abe6abc661dc2e6 (diff)
downloadsqlalchemy-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.py15
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)