diff options
| author | Boulder Sprinters <boulder-sprinters@djangoproject.com> | 2006-11-16 19:11:32 +0000 |
|---|---|---|
| committer | Boulder Sprinters <boulder-sprinters@djangoproject.com> | 2006-11-16 19:11:32 +0000 |
| commit | fb3a93975fe07c6589fa371971b873ab268689ef (patch) | |
| tree | aeb82e0935fa26ac6079a01d18563934030ed6fa | |
| parent | cd2866a36482f2679388df0dadbdd98c91529fe0 (diff) | |
boulder-oracle-sprint: Fixed "Identifier too long" errors and problems with sequence and trigger naming.
git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4080 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/core/management.py | 10 | ||||
| -rw-r--r-- | django/db/backends/oracle/base.py | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/django/core/management.py b/django/core/management.py index 2a0af677db..c733d6c027 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -199,11 +199,12 @@ def _get_sql_model_create(model, known_models=set()): # To simulate auto-incrementing primary keys in Oracle -- creating primary tables if settings.DATABASE_ENGINE == 'oracle' and opts.has_auto_field: - sequence_name = truncate_name('%s_sq' % opts.db_table, backend.get_max_name_length()) + name_length = backend.get_max_name_length() - 3 + sequence_name = '%s_sq' % truncate_name(opts.db_table, name_length) sequence_statement = 'CREATE SEQUENCE %s;' % sequence_name final_output.append(sequence_statement) trigger_statement = '' + \ - 'CREATE OR REPLACE TRIGGER %s\n' % truncate_name('%s_tr' % opts.db_table, backend.get_max_name_length()) + \ + 'CREATE OR REPLACE TRIGGER %s\n' % ('%s_tr' % truncate_name(opts.db_table, name_length)) + \ ' BEFORE INSERT ON %s\n' % backend.quote_name(opts.db_table) + \ ' FOR EACH ROW\n' + \ ' WHEN (new.id IS NULL)\n' + \ @@ -277,12 +278,13 @@ def _get_many_to_many_sql_for_model(model): # To simulate auto-incrementing primary keys in Oracle -- creating m2m tables if settings.DATABASE_ENGINE == 'oracle': + name_length = backend.get_max_name_length() - 3 m_table = f.m2m_db_table() - sequence_name = truncate_name('%s_sq' % m_table, backend.get_max_name_length()) + sequence_name = '%s_sq' % truncate_name(m_table, name_length) sequence_statement = 'CREATE SEQUENCE %s;' % sequence_name final_output.append(sequence_statement) trigger_statement = '' + \ - 'CREATE OR REPLACE TRIGGER %s\n' % truncate_name('%s_tr' % m_table, backend.get_max_name_length()) + \ + 'CREATE OR REPLACE TRIGGER %s\n' % ('%s_tr' % truncate_name(m_table, name_length)) + \ ' BEFORE INSERT ON %s\n' % backend.quote_name(m_table) + \ ' FOR EACH ROW\n' + \ ' WHEN (new.id IS NULL)\n' + \ diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 5334747327..5831ca47da 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -99,7 +99,8 @@ dictfetchmany = util.dictfetchmany dictfetchall = util.dictfetchall def get_last_insert_id(cursor, table_name, pk_name): - cursor.execute('SELECT %s_sq.currval FROM dual' % table_name) + sq_name = util.truncate_name(table_name, get_max_name_length()-3) + cursor.execute('SELECT %s_sq.currval FROM dual' % sq_name) return cursor.fetchone()[0] def get_date_extract_sql(lookup_type, table_name): |
