Django

Code

Changeset 3444

Show
Ignore:
Timestamp:
07/24/06 19:47:55 (2 years ago)
Author:
jpellerin
Message:

[multi-db] Updated django.core.management to use SchemaBuilder? for each model to create sequence reset statements.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/multiple-db-support/django/core/management.py

    r3427 r3444  
    207207def get_sql_sequence_reset(app): 
    208208    "Returns a list of the SQL statements to reset PostgreSQL sequences for the given app." 
    209     from django.db import backend, models 
    210     output = [] 
    211     for model in models.get_models(app): 
    212         for f in model._meta.fields: 
    213             if isinstance(f, models.AutoField): 
    214                 output.append("%s setval('%s', (%s max(%s) %s %s));" % \ 
    215                     (style.SQL_KEYWORD('SELECT'), 
    216                     style.SQL_FIELD('%s_%s_seq' % (model._meta.db_table, f.column)), 
    217                     style.SQL_KEYWORD('SELECT'), 
    218                     style.SQL_FIELD(backend.quote_name(f.column)), 
    219                     style.SQL_KEYWORD('FROM'), 
    220                     style.SQL_TABLE(backend.quote_name(model._meta.db_table)))) 
    221                 break # Only one AutoField is allowed per model, so don't bother continuing. 
    222         for f in model._meta.many_to_many: 
    223             output.append("%s setval('%s', (%s max(%s) %s %s));" % \ 
    224                 (style.SQL_KEYWORD('SELECT'), 
    225                 style.SQL_FIELD('%s_id_seq' % f.m2m_db_table()), 
    226                 style.SQL_KEYWORD('SELECT'), 
    227                 style.SQL_FIELD(backend.quote_name('id')), 
    228                 style.SQL_KEYWORD('FROM'), 
    229                 style.SQL_TABLE(f.m2m_db_table()))) 
    230     return output 
     209    from django.db import model_connection_name 
     210    from django.db.models import get_models 
     211    connection_output = {} 
     212    for model in get_models(app): 
     213        connection_name = model_connection_name(model) 
     214        output = connection_output.setdefault(connection_name, []) 
     215        builder = model._default_manager.db.get_creation_module().builder 
     216        try: 
     217            output.extend(builder.get_sequence_reset(model, style)) 
     218        except AttributeError: 
     219            sys.stderr.write( 
     220                "%s is configured to use database engine %s, which does "  
     221                "not support sequence reset.\n" %  
     222                (model.__name__, 
     223                 model._default_manager.db.connection.settings.DATABASE_ENGINE)) 
     224     
     225    return _collate(connection_output) 
    231226get_sql_sequence_reset.help_doc = "Prints the SQL statements for resetting PostgreSQL sequences for the given app name(s)." 
    232227get_sql_sequence_reset.args = APP_ARGS 
     
    451446                                    % (model, statements)) 
    452447    except Exception, e: 
     448        import traceback 
     449        print traceback.format_exception(*sys.exc_info()) 
    453450        sys.stderr.write(style.ERROR("""Error: %s couldn't be installed. Possible reasons: 
    454451  * The database isn't running or isn't configured correctly.