mirror of
https://github.com/django/django.git
synced 2025-07-04 17:59:13 +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:
parent
385f99433b
commit
945c4ddf24
@ -213,7 +213,7 @@ def _get_sql_model_create(model, known_models=set()):
|
|||||||
full_statement.append(');')
|
full_statement.append(');')
|
||||||
final_output.append('\n'.join(full_statement))
|
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
|
# Add any extra SQL needed to support auto-incrementing primary keys
|
||||||
autoinc_sql = backend.get_autoinc_sql(opts.db_table)
|
autoinc_sql = backend.get_autoinc_sql(opts.db_table)
|
||||||
if autoinc_sql:
|
if autoinc_sql:
|
||||||
|
@ -108,13 +108,14 @@ class FormatStylePlaceholderCursor(Database.Cursor):
|
|||||||
query, params = self._rewrite_args(query, params)
|
query, params = self._rewrite_args(query, params)
|
||||||
return Database.Cursor.executemany(self, query, params)
|
return Database.Cursor.executemany(self, query, params)
|
||||||
|
|
||||||
|
|
||||||
def quote_name(name):
|
def quote_name(name):
|
||||||
# Oracle requires that quoted names be uppercase.
|
# SQL92 requires delimited (quoted) names to be case-sensitive. When
|
||||||
name = name.upper()
|
# 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('"'):
|
if not name.startswith('"') and not name.endswith('"'):
|
||||||
name = '"%s"' % util.truncate_name(name.upper(), get_max_name_length())
|
name = '"%s"' % util.truncate_name(name.upper(), get_max_name_length())
|
||||||
return name
|
return name.upper()
|
||||||
|
|
||||||
dictfetchone = util.dictfetchone
|
dictfetchone = util.dictfetchone
|
||||||
dictfetchmany = util.dictfetchmany
|
dictfetchmany = util.dictfetchmany
|
||||||
@ -169,9 +170,8 @@ def get_max_name_length():
|
|||||||
def get_autoinc_sql(table):
|
def get_autoinc_sql(table):
|
||||||
# To simulate auto-incrementing primary keys in Oracle, we have to
|
# To simulate auto-incrementing primary keys in Oracle, we have to
|
||||||
# create a sequence and a trigger.
|
# create a sequence and a trigger.
|
||||||
name_length = get_max_name_length() - 3
|
sq_name = get_sequence_name(table)
|
||||||
sq_name = '%s_sq' % util.truncate_name(table, name_length)
|
tr_name = get_trigger_name(table)
|
||||||
tr_name = '%s_tr' % util.truncate_name(table, name_length)
|
|
||||||
sequence_sql = 'CREATE SEQUENCE %s;' % sq_name
|
sequence_sql = 'CREATE SEQUENCE %s;' % sq_name
|
||||||
trigger_sql = """CREATE OR REPLACE TRIGGER %s
|
trigger_sql = """CREATE OR REPLACE TRIGGER %s
|
||||||
BEFORE INSERT ON %s
|
BEFORE INSERT ON %s
|
||||||
@ -203,13 +203,7 @@ def get_sql_flush(style, tables, sequences):
|
|||||||
# down the square?
|
# down the square?
|
||||||
for sequence_info in sequences:
|
for sequence_info in sequences:
|
||||||
table_name = sequence_info['table']
|
table_name = sequence_info['table']
|
||||||
column_name = sequence_info['column']
|
seq_name = get_sequence_name(table_name)
|
||||||
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
|
|
||||||
sql.append('%s %s %s;' % \
|
sql.append('%s %s %s;' % \
|
||||||
(style.SQL_KEYWORD('DROP'),
|
(style.SQL_KEYWORD('DROP'),
|
||||||
style.SQL_KEYWORD('SEQUENCE'),
|
style.SQL_KEYWORD('SEQUENCE'),
|
||||||
@ -224,11 +218,19 @@ def get_sql_flush(style, tables, sequences):
|
|||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def get_drop_sequence(table):
|
def get_sequence_name(table):
|
||||||
name_length = get_max_name_length() - 3
|
name_length = get_max_name_length() - 3
|
||||||
sq_name = '%s_sq' % util.truncate_name(table, name_length)
|
return '%s_SQ' % util.truncate_name(table, name_length).upper()
|
||||||
drop_sequence_sql = 'DROP SEQUENCE %s;' % sq_name
|
|
||||||
return drop_sequence_sql
|
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):
|
def get_query_set_class(DefaultQuerySet):
|
||||||
"Create a custom QuerySet class for Oracle."
|
"Create a custom QuerySet class for Oracle."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user