summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-02-04 17:37:36 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2011-02-04 17:37:36 -0500
commitd5cc2f83c1183eb65d0daac3532a1645d0cd9513 (patch)
tree627f42c47b5d4222168006e9b9077d25c8a67d30 /lib/sqlalchemy
parent4f1274fc1fc675e2a482b68d658b36597f243c31 (diff)
downloadsqlalchemy-d5cc2f83c1183eb65d0daac3532a1645d0cd9513.tar.gz
- When explicit sequence execution derives the name
of the auto-generated sequence of a SERIAL column, which currently only occurs if implicit_returning=False, now accommodates if the table + column name is greater than 63 characters using the same logic Postgresql uses. [ticket:1083]
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index 4e7e114c9..22d269cdf 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -706,14 +706,23 @@ class PGExecutionContext(default.DefaultExecutionContext):
# execute the sequence associated with a SERIAL primary
# key column. for non-primary-key SERIAL, the ID just
# generates server side.
- sch = column.table.schema
+ try:
+ seq_name = column._postgresql_seq_name
+ except AttributeError:
+ tab = column.table.name
+ col = column.name
+ tab = tab[0:29 + max(0, (29 - len(col)))]
+ col = col[0:29 + max(0, (29 - len(tab)))]
+ column._postgresql_seq_name = seq_name = "%s_%s_seq" % (tab, col)
+
+ sch = column.table.schema
if sch is not None:
- exc = "select nextval('\"%s\".\"%s_%s_seq\"')" % \
- (sch, column.table.name, column.name)
+ exc = "select nextval('\"%s\".\"%s\"')" % \
+ (sch, seq_name)
else:
- exc = "select nextval('\"%s_%s_seq\"')" % \
- (column.table.name, column.name)
+ exc = "select nextval('\"%s\"')" % \
+ (seq_name, )
return self._execute_scalar(exc, column.type)