1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

Fixed sequence naming bug. 93 of 100 tests pass now.

git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4740 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Boulder Sprinters 2007-03-16 04:58:36 +00:00
parent 385f99433b
commit 945c4ddf24
2 changed files with 21 additions and 19 deletions

View File

@ -213,7 +213,7 @@ def _get_sql_model_create(model, known_models=set()):
full_statement.append(');')
final_output.append('\n'.join(full_statement))
if opts.has_auto_field:
if opts.has_auto_field and hasattr(backend, 'get_autoinc_sql'):
# Add any extra SQL needed to support auto-incrementing primary keys
autoinc_sql = backend.get_autoinc_sql(opts.db_table)
if autoinc_sql:

View File

@ -108,13 +108,14 @@ class FormatStylePlaceholderCursor(Database.Cursor):
query, params = self._rewrite_args(query, params)
return Database.Cursor.executemany(self, query, params)
def quote_name(name):
# Oracle requires that quoted names be uppercase.
name = name.upper()
# SQL92 requires delimited (quoted) names to be case-sensitive. When
# not quoted, Oracle has case-insensitive behavior for identifiers, but
# always defaults to uppercase.
# We simplify things by making Oracle identifiers always uppercase.
if not name.startswith('"') and not name.endswith('"'):
name = '"%s"' % util.truncate_name(name.upper(), get_max_name_length())
return name
return name.upper()
dictfetchone = util.dictfetchone
dictfetchmany = util.dictfetchmany
@ -169,9 +170,8 @@ def get_max_name_length():
def get_autoinc_sql(table):
# To simulate auto-incrementing primary keys in Oracle, we have to
# create a sequence and a trigger.
name_length = get_max_name_length() - 3
sq_name = '%s_sq' % util.truncate_name(table, name_length)
tr_name = '%s_tr' % util.truncate_name(table, name_length)
sq_name = get_sequence_name(table)
tr_name = get_trigger_name(table)
sequence_sql = 'CREATE SEQUENCE %s;' % sq_name
trigger_sql = """CREATE OR REPLACE TRIGGER %s
BEFORE INSERT ON %s
@ -203,13 +203,7 @@ def get_sql_flush(style, tables, sequences):
# down the square?
for sequence_info in sequences:
table_name = sequence_info['table']
column_name = sequence_info['column']
if column_name and len(column_name):
# sequence name in this case will be <table>_<column>_seq
seq_name = '%s_%s_seq' % (table_name, column_name)
else:
# sequence name in this case will be <table>_id_seq
seq_name = '%s_id_seq' % table_name
seq_name = get_sequence_name(table_name)
sql.append('%s %s %s;' % \
(style.SQL_KEYWORD('DROP'),
style.SQL_KEYWORD('SEQUENCE'),
@ -224,11 +218,19 @@ def get_sql_flush(style, tables, sequences):
else:
return []
def get_drop_sequence(table):
def get_sequence_name(table):
name_length = get_max_name_length() - 3
sq_name = '%s_sq' % util.truncate_name(table, name_length)
drop_sequence_sql = 'DROP SEQUENCE %s;' % sq_name
return drop_sequence_sql
return '%s_SQ' % util.truncate_name(table, name_length).upper()
def get_trigger_name(table):
name_length = get_max_name_length() - 3
return '%s_TR' % util.truncate_name(table, name_length).upper()
def get_create_sequence(table):
return 'CREATE SEQUENCE %s;' % get_sequence_name(table)
def get_drop_sequence(table):
return 'DROP SEQUENCE %s;' % get_sequence_name(table)
def get_query_set_class(DefaultQuerySet):
"Create a custom QuerySet class for Oracle."