Changeset 6650
- Timestamp:
- 11/04/07 00:05:24 (10 months ago)
- Files:
-
- django/trunk/django/core/management/sql.py (modified) (5 diffs)
- django/trunk/django/db/backends/__init__.py (modified) (1 diff)
- django/trunk/django/db/backends/mysql/base.py (modified) (1 diff)
- django/trunk/django/db/backends/mysql_old/base.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/core/management/sql.py
r6298 r6650 253 253 pending_references = {} 254 254 qn = connection.ops.quote_name 255 inline_references = connection.features.inline_fk_references 255 256 for f in opts.fields: 256 257 col_type = f.db_type() … … 273 274 field_output.append(connection.ops.tablespace_sql(tablespace, inline=True)) 274 275 if f.rel: 275 if f.rel.to in known_models:276 if inline_references and f.rel.to in known_models: 276 277 field_output.append(style.SQL_KEYWORD('REFERENCES') + ' ' + \ 277 278 style.SQL_TABLE(qn(f.rel.to._meta.db_table)) + ' (' + \ … … 342 343 from django.db import connection, models 343 344 from django.contrib.contenttypes import generic 345 from django.db.backends.util import truncate_name 344 346 345 347 opts = model._meta 346 348 final_output = [] 347 349 qn = connection.ops.quote_name 350 inline_references = connection.features.inline_fk_references 348 351 for f in opts.many_to_many: 349 352 if not isinstance(f.rel, generic.GenericRel): … … 355 358 table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \ 356 359 style.SQL_TABLE(qn(f.m2m_db_table())) + ' ('] 357 table_output.append(' %s %s %s%s,' % \360 table_output.append(' %s %s %s%s,' % 358 361 (style.SQL_FIELD(qn('id')), 359 362 style.SQL_COLTYPE(models.AutoField(primary_key=True).db_type()), 360 363 style.SQL_KEYWORD('NOT NULL PRIMARY KEY'), 361 364 tablespace_sql)) 362 table_output.append(' %s %s %s %s (%s)%s,' % \ 363 (style.SQL_FIELD(qn(f.m2m_column_name())), 364 style.SQL_COLTYPE(models.ForeignKey(model).db_type()), 365 style.SQL_KEYWORD('NOT NULL REFERENCES'), 366 style.SQL_TABLE(qn(opts.db_table)), 367 style.SQL_FIELD(qn(opts.pk.column)), 368 connection.ops.deferrable_sql())) 369 table_output.append(' %s %s %s %s (%s)%s,' % \ 370 (style.SQL_FIELD(qn(f.m2m_reverse_name())), 371 style.SQL_COLTYPE(models.ForeignKey(f.rel.to).db_type()), 372 style.SQL_KEYWORD('NOT NULL REFERENCES'), 373 style.SQL_TABLE(qn(f.rel.to._meta.db_table)), 374 style.SQL_FIELD(qn(f.rel.to._meta.pk.column)), 375 connection.ops.deferrable_sql())) 376 table_output.append(' %s (%s, %s)%s' % \ 365 if inline_references: 366 deferred = [] 367 table_output.append(' %s %s %s %s (%s)%s,' % 368 (style.SQL_FIELD(qn(f.m2m_column_name())), 369 style.SQL_COLTYPE(models.ForeignKey(model).db_type()), 370 style.SQL_KEYWORD('NOT NULL REFERENCES'), 371 style.SQL_TABLE(qn(opts.db_table)), 372 style.SQL_FIELD(qn(opts.pk.column)), 373 connection.ops.deferrable_sql())) 374 table_output.append(' %s %s %s %s (%s)%s,' % 375 (style.SQL_FIELD(qn(f.m2m_reverse_name())), 376 style.SQL_COLTYPE(models.ForeignKey(f.rel.to).db_type()), 377 style.SQL_KEYWORD('NOT NULL REFERENCES'), 378 style.SQL_TABLE(qn(f.rel.to._meta.db_table)), 379 style.SQL_FIELD(qn(f.rel.to._meta.pk.column)), 380 connection.ops.deferrable_sql())) 381 else: 382 table_output.append(' %s %s %s,' % 383 (style.SQL_FIELD(qn(f.m2m_column_name())), 384 style.SQL_COLTYPE(models.ForeignKey(model).db_type()), 385 style.SQL_KEYWORD('NOT NULL'))) 386 table_output.append(' %s %s %s,' % 387 (style.SQL_FIELD(qn(f.m2m_reverse_name())), 388 style.SQL_COLTYPE(models.ForeignKey(f.rel.to).db_type()), 389 style.SQL_KEYWORD('NOT NULL'))) 390 deferred = [ 391 (f.m2m_db_table(), f.m2m_column_name(), opts.db_table, 392 opts.pk.column), 393 ( f.m2m_db_table(), f.m2m_reverse_name(), 394 f.rel.to._meta.db_table, f.rel.to._meta.pk.column) 395 ] 396 table_output.append(' %s (%s, %s)%s' % 377 397 (style.SQL_KEYWORD('UNIQUE'), 378 398 style.SQL_FIELD(qn(f.m2m_column_name())), … … 385 405 table_output.append(';') 386 406 final_output.append('\n'.join(table_output)) 407 408 for r_table, r_col, table, col in deferred: 409 r_name = '%s_refs_%s_%x' % (r_col, col, 410 abs(hash((r_table, table)))) 411 final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' % 412 (qn(r_table), 413 truncate_name(r_name, connection.ops.max_name_length()), 414 qn(r_col), qn(table), qn(col), 415 connection.ops.deferrable_sql())) 387 416 388 417 # Add any extra SQL needed to support auto-incrementing PKs django/trunk/django/db/backends/__init__.py
r6601 r6650 44 44 allows_unique_and_pk = True 45 45 autoindexes_primary_keys = True 46 inline_fk_references = True 46 47 needs_datetime_string_cast = True 47 48 needs_upper_for_iops = False django/trunk/django/db/backends/mysql/base.py
r6244 r6650 62 62 class DatabaseFeatures(BaseDatabaseFeatures): 63 63 autoindexes_primary_keys = False 64 inline_fk_references = False 64 65 65 66 class DatabaseOperations(BaseDatabaseOperations): django/trunk/django/db/backends/mysql_old/base.py
r5983 r6650 66 66 class DatabaseFeatures(BaseDatabaseFeatures): 67 67 autoindexes_primary_keys = False 68 inline_fk_references = False 68 69 69 70 class DatabaseOperations(BaseDatabaseOperations):
