summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorDerek Anderson <public@kered.org>2007-08-03 22:38:44 +0000
committerDerek Anderson <public@kered.org>2007-08-03 22:38:44 +0000
commitdb79faa3285361e6f6778bfc003edd8844196f7e (patch)
tree8a9392f9b2a3079357c44c1b47ae833bc18e376a /django
parent6aad6a8a48b38f32ca77f758ea5bdc9eb187d96a (diff)
schema-evolution:
added "default" support so when you add a not null column to a non-empty table you don't get an sql exception git-svn-id: http://code.djangoproject.com/svn/django/branches/schema-evolution@5794 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/core/schema_evolution.py4
-rw-r--r--django/db/backends/mysql/base.py9
-rw-r--r--django/db/backends/postgresql/base.py8
-rw-r--r--django/db/backends/postgresql_psycopg2/base.py8
-rw-r--r--django/db/backends/sqlite3/base.py7
5 files changed, 26 insertions, 10 deletions
diff --git a/django/core/schema_evolution.py b/django/core/schema_evolution.py
index 76660827d3..55f3dea1c4 100644
--- a/django/core/schema_evolution.py
+++ b/django/core/schema_evolution.py
@@ -25,7 +25,7 @@ def get_sql_evolution_check_for_new_fields(klass, new_table_name):
data_type = f.get_internal_type()
col_type = data_types.get(data_type)
if col_type is not None:
- output.extend( backend.get_add_column_sql( klass._meta.db_table, f.column, management.style.SQL_COLTYPE(col_type % rel_field.__dict__), f.null, f.unique, f.primary_key ) )
+ output.extend( backend.get_add_column_sql( klass._meta.db_table, f.column, management.style.SQL_COLTYPE(col_type % rel_field.__dict__), f.null, f.unique, f.primary_key, f.default ) )
return output
def get_sql_evolution_check_for_changed_model_name(klass):
@@ -120,7 +120,7 @@ def get_sql_evolution_check_for_changed_field_flags(klass, new_table_name):
# col_def += ' '+ style.SQL_KEYWORD('UNIQUE')
# if f.primary_key:
# col_def += ' '+ style.SQL_KEYWORD('PRIMARY KEY')
- output.extend( backend.get_change_column_def_sql( klass._meta.db_table, cf, col_type_def, f.null, f.unique, f.primary_key ) )
+ output.extend( backend.get_change_column_def_sql( klass._meta.db_table, cf, col_type_def, f.null, f.unique, f.primary_key, f.default ) )
#print db_table, cf, f.maxlength, introspection.get_known_column_flags(cursor, db_table, cf)
return output
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index 9676e09390..9827ccce75 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -256,17 +256,19 @@ def get_change_column_name_sql( table_name, indexes, old_col_name, new_col_name,
output.append( 'ALTER TABLE '+ quote_name(table_name) +' CHANGE COLUMN '+ quote_name(old_col_name) +' '+ quote_name(new_col_name) +' '+ col_def + ';' )
return output
-def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
col_def = col_type +' '+ ('%sNULL' % (not null and 'NOT ' or ''))
if unique:
col_def += ' '+ 'UNIQUE'
if primary_key:
col_def += ' '+ 'PRIMARY KEY'
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ col_def += ' '+ 'DEFAULT '+ quote_name(str(default))
output.append( 'ALTER TABLE '+ quote_name(table_name) +' MODIFY COLUMN '+ quote_name(col_name) +' '+ col_def + ';' )
return output
-def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
field_output = []
field_output.append('ALTER TABLE')
@@ -279,6 +281,9 @@ def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_ke
field_output.append(('UNIQUE'))
if primary_key:
field_output.append(('PRIMARY KEY'))
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ field_output.append(('DEFAULT'))
+ field_output.append((quote_name(str(default))))
output.append(' '.join(field_output) + ';')
return output
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index e5ae6a6f45..b24f71b5ed 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -297,12 +297,14 @@ def get_change_column_name_sql( table_name, indexes, old_col_name, new_col_name,
output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(old_col_name) +' TO '+ quote_name(new_col_name) +';' )
return output
-def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name+'_tmp') +' '+ col_type + ';' )
output.append( 'UPDATE '+ quote_name(table_name) +' SET '+ quote_name(col_name+'_tmp') +' = '+ quote_name(col_name) + ';' )
output.append( 'ALTER TABLE '+ quote_name(table_name) +' DROP COLUMN '+ quote_name(col_name) +';' )
output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(col_name+'_tmp') +' TO '+ quote_name(col_name) + ';' )
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' )
if not null:
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' )
if unique:
@@ -310,9 +312,11 @@ def get_change_column_def_sql( table_name, col_name, col_type, null, unique, pri
return output
-def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name) +' '+ col_type + ';' )
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' )
if not null:
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' )
if unique:
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index d86a5c6d49..7e89d51cd0 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -239,12 +239,14 @@ def get_change_column_name_sql( table_name, indexes, old_col_name, new_col_name,
output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(old_col_name) +' TO '+ quote_name(new_col_name) +';' )
return output
-def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name+'_tmp') +' '+ col_type + ';' )
output.append( 'UPDATE '+ quote_name(table_name) +' SET '+ quote_name(col_name+'_tmp') +' = '+ quote_name(col_name) + ';' )
output.append( 'ALTER TABLE '+ quote_name(table_name) +' DROP COLUMN '+ quote_name(col_name) +';' )
output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(col_name+'_tmp') +' TO '+ quote_name(col_name) + ';' )
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' )
if not null:
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' )
if unique:
@@ -252,9 +254,11 @@ def get_change_column_def_sql( table_name, col_name, col_type, null, unique, pri
return output
-def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name) +' '+ col_type + ';' )
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' )
if not null:
output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' )
if unique:
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index d9bc82fe16..8edac29420 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -241,7 +241,7 @@ def get_change_column_name_sql( table_name, indexes, old_col_name, new_col_name,
return output
-def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
# sqlite doesn't support column modifications, so we fake it
model = get_model_from_table_name(table_name)
@@ -262,7 +262,7 @@ def get_change_column_def_sql( table_name, col_name, col_type, null, unique, pri
return output
-def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):
+def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ):
output = []
field_output = []
field_output.append('ALTER TABLE')
@@ -275,6 +275,9 @@ def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_ke
field_output.append(('UNIQUE'))
if primary_key:
field_output.append(('PRIMARY KEY'))
+ if default and str(default) != 'django.db.models.fields.NOT_PROVIDED':
+ field_output.append(('DEFAULT'))
+ field_output.append((quote_name(str(default))))
output.append(' '.join(field_output) + ';')
return output