Commit 6b5a6076 authored by Matt Boersma's avatar Matt Boersma
Browse files

Fixed #7628 -- Oracle backend won't try to recreate existing sequences during...

Fixed #7628 -- Oracle backend won't try to recreate existing sequences during syncdb.  Thanks, cmarshal.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8522 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent fbf09ee1
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -26,12 +26,14 @@ from django.utils.encoding import smart_str, force_unicode
DatabaseError = Database.Error
IntegrityError = Database.IntegrityError


class DatabaseFeatures(BaseDatabaseFeatures):
    empty_fetchmany_value = ()
    needs_datetime_string_cast = False
    uses_custom_query_class = True
    interprets_empty_strings_as_nulls = True


class DatabaseOperations(BaseDatabaseOperations):
    def autoinc_sql(self, table, column):
        # To simulate auto-incrementing primary keys in Oracle, we have to
@@ -40,7 +42,17 @@ class DatabaseOperations(BaseDatabaseOperations):
        tr_name = get_trigger_name(table)
        tbl_name = self.quote_name(table)
        col_name = self.quote_name(column)
        sequence_sql = 'CREATE SEQUENCE %s;' % sq_name
        sequence_sql = """
            DECLARE
                i INTEGER;
            BEGIN
                SELECT COUNT(*) INTO i FROM USER_CATALOG
                    WHERE TABLE_NAME = '%(sq_name)s' AND TABLE_TYPE = 'SEQUENCE';
                IF i = 0 THEN
                    EXECUTE IMMEDIATE 'CREATE SEQUENCE %(sq_name)s';
                END IF;
            END;
            /""" % locals()
        trigger_sql = """
            CREATE OR REPLACE TRIGGER %(tr_name)s
            BEFORE INSERT ON %(tbl_name)s
@@ -265,6 +277,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
        cursor.arraysize = 100
        return cursor


class OracleParam(object):
    """
    Wrapper object for formatting parameters for Oracle. If the string
@@ -285,6 +298,7 @@ class OracleParam(object):
        else:
            self.input_size = None


class FormatStylePlaceholderCursor(Database.Cursor):
    """
    Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var"