diff --git a/django/core/management.py b/django/core/management.py index 01169fa48f..01739f6e1f 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -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: diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 35b053fafb..20aed3feee 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -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