Django

Code

Changeset 5027

Show
Ignore:
Timestamp:
04/18/07 17:40:53 (2 years ago)
Author:
bouldersprinters
Message:

boulder-oracle-sprint: Fixed #4056: Added optional "tablespace" parameter to Fields to specify a tablespace for the column's index in backends that support it, primarily for use in Oracle.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/boulder-oracle-sprint/django/core/management.py

    r5022 r5027  
    179179            data_type = f.get_internal_type() 
    180180        col_type = data_types[data_type] 
     181        tablespace = f.tablespace or opts.tablespace 
    181182        if col_type is not None: 
    182183            # Make the definition (e.g. 'foo VARCHAR(30)') for this field. 
     
    188189            if f.primary_key: 
    189190                field_output.append(style.SQL_KEYWORD('PRIMARY KEY')) 
     191            if tablespace and backend.supports_tablespaces and (f.unique or f.primary_key) and backend.autoindexes_primary_keys: 
     192                # We must specify the index tablespace inline, because we 
     193                # won't be generating a CREATE INDEX statement for this field. 
     194                field_output.append(backend.get_tablespace_sql(tablespace, inline=True)) 
    190195            if f.rel: 
    191196                if f.rel.to in known_models: 
     
    213218    full_statement.append(')') 
    214219    if opts.tablespace and backend.supports_tablespaces: 
    215         full_statement.append(backend.get_tablespace_sql() % backend.quote_name(opts.tablespace)) 
     220        full_statement.append(backend.get_tablespace_sql(opts.tablespace)) 
    216221    full_statement.append(';') 
    217222    final_output.append('\n'.join(full_statement)) 
     
    262267    for f in opts.many_to_many: 
    263268        if not isinstance(f.rel, GenericRel): 
     269            tablespace = f.tablespace or opts.tablespace 
     270            if tablespace and backend.supports_tablespaces and backend.autoindexes_primary_keys: 
     271                tablespace_sql = ' ' + backend.get_tablespace_sql(tablespace, inline=True) 
     272            else: 
     273                tablespace_sql = '' 
    264274            table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \ 
    265275                style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' ('] 
    266             table_output.append('    %s %s %s,' % \ 
     276            table_output.append('    %s %s %s%s,' % \ 
    267277                (style.SQL_FIELD(backend.quote_name('id')), 
    268278                style.SQL_COLTYPE(data_types['AutoField']), 
    269                 style.SQL_KEYWORD('NOT NULL PRIMARY KEY'))) 
     279                style.SQL_KEYWORD('NOT NULL PRIMARY KEY'), 
     280                tablespace_sql)) 
    270281            table_output.append('    %s %s %s %s (%s)%s,' % \ 
    271282                (style.SQL_FIELD(backend.quote_name(f.m2m_column_name())), 
     
    282293                style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column)), 
    283294                backend.get_deferrable_sql())) 
    284             table_output.append('    %s (%s, %s)' % \ 
     295            table_output.append('    %s (%s, %s)%s' % \ 
    285296                (style.SQL_KEYWORD('UNIQUE'), 
    286297                style.SQL_FIELD(backend.quote_name(f.m2m_column_name())), 
    287                 style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())))) 
     298                style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())), 
     299                tablespace_sql)) 
    288300            table_output.append(')') 
    289301            if opts.tablespace and backend.supports_tablespaces: 
    290                 table_output.append(backend.get_tablespace_sql() % opts.tablespace) 
     302                # f.tablespace is only for indices, so ignore its value here. 
     303                table_output.append(backend.get_tablespace_sql(opts.tablespace)) 
    291304            table_output.append(';') 
    292305            final_output.append('\n'.join(table_output)) 
     
    469482 
    470483    for f in model._meta.fields: 
    471         if f.db_index and not (f.primary_key and backend.autoindexes_primary_keys): 
     484        if f.db_index and not ((f.primary_key or f.unique) and backend.autoindexes_primary_keys): 
    472485            unique = f.unique and 'UNIQUE ' or '' 
     486            tablespace = f.tablespace or model._meta.tablespace 
     487            if tablespace and backend.supports_tablespaces: 
     488                tablespace_sql = ' ' + backend.get_tablespace_sql(tablespace) 
     489            else: 
     490                tablespace_sql = '' 
    473491            output.append( 
    474492                style.SQL_KEYWORD('CREATE %sINDEX' % unique) + ' ' + \ 
     
    476494                style.SQL_KEYWORD('ON') + ' ' + \ 
    477495                style.SQL_TABLE(backend.quote_name(model._meta.db_table)) + ' ' + \ 
    478                 "(%s);" % style.SQL_FIELD(backend.quote_name(f.column)) 
     496                "(%s)" % style.SQL_FIELD(backend.quote_name(f.column)) + \ 
     497                "%s;" % tablespace_sql 
    479498            ) 
    480499    return output 
  • django/branches/boulder-oracle-sprint/django/db/backends/ado_mssql/base.py

    r5026 r5027  
    155155    return "BEGIN;" 
    156156 
    157 def get_tablespace_sql(): 
    158     return "ON %s" 
     157def get_tablespace_sql(tablespace, inline=False): 
     158    return "ON %s" % quote_name(tablespace) 
    159159 
    160160def get_autoinc_sql(table): 
  • django/branches/boulder-oracle-sprint/django/db/backends/mysql/base.py

    r5022 r5027  
    138138needs_upper_for_iops = False 
    139139supports_constraints = True 
    140 supports_tablespaces = Tru
     140supports_tablespaces = Fals
    141141uses_case_insensitive_names = False 
    142142 
     
    201201def get_start_transaction_sql(): 
    202202    return "BEGIN;" 
    203  
    204 def get_tablespace_sql(): 
    205     return "TABLESPACE %s STORAGE DISK" 
    206203 
    207204def get_autoinc_sql(table): 
  • django/branches/boulder-oracle-sprint/django/db/backends/oracle/base.py

    r5024 r5027  
    170170    return None 
    171171 
    172 def get_tablespace_sql(): 
    173     return "TABLESPACE %s" 
     172def get_tablespace_sql(tablespace, inline=False): 
     173    return "%sTABLESPACE %s" % ((inline and "USING INDEX " or ""), quote_name(tablespace)) 
    174174 
    175175def get_autoinc_sql(table): 
  • django/branches/boulder-oracle-sprint/django/db/backends/postgresql/base.py

    r5026 r5027  
    111111needs_upper_for_iops = False 
    112112supports_constraints = True 
    113 supports_tablespaces = Tru
     113supports_tablespaces = Fals
    114114uses_case_insensitive_names = False 
    115115 
     
    174174def get_start_transaction_sql(): 
    175175    return "BEGIN;" 
    176  
    177 def get_tablespace_sql(): 
    178     return "TABLESPACE %s" 
    179176 
    180177def get_autoinc_sql(table): 
  • django/branches/boulder-oracle-sprint/django/db/backends/postgresql_psycopg2/base.py

    r5026 r5027  
    7979needs_upper_for_iops = False 
    8080supports_constraints = True 
    81 supports_tablespaces = Tru
     81supports_tablespaces = Fals
    8282uses_case_insensitive_names = True 
    8383 
     
    134134def get_start_transaction_sql(): 
    135135    return "BEGIN;" 
    136  
    137 def get_tablespace_sql(): 
    138     return "TABLESPACE %s" 
    139136 
    140137def get_autoinc_sql(table): 
  • django/branches/boulder-oracle-sprint/django/db/models/fields/__init__.py

    r5021 r5027  
    7171        prepopulate_from=None, unique_for_date=None, unique_for_month=None, 
    7272        unique_for_year=None, validator_list=None, choices=None, radio_admin=None, 
    73         help_text='', db_column=None): 
     73        help_text='', db_column=None, tablespace=None): 
    7474        self.name = name 
    7575        self.verbose_name = verbose_name 
     
    8888        self.help_text = help_text 
    8989        self.db_column = db_column 
     90        self.tablespace = tablespace 
    9091 
    9192        # Set db_index to True if the field has a relationship and doesn't explicitly set db_index.