diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-02-04 17:37:36 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-02-04 17:37:36 -0500 |
commit | d5cc2f83c1183eb65d0daac3532a1645d0cd9513 (patch) | |
tree | 627f42c47b5d4222168006e9b9077d25c8a67d30 /lib/sqlalchemy | |
parent | 4f1274fc1fc675e2a482b68d658b36597f243c31 (diff) | |
download | sqlalchemy-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.py | 19 |
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) |