summaryrefslogtreecommitdiff
path: root/django/db
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/db
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/db')
-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
4 files changed, 24 insertions, 8 deletions
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