Changeset 5794 for django/branches/schema-evolution
- Timestamp:
- 08/03/07 17:38:44 (1 year ago)
- Files:
-
- django/branches/schema-evolution/django/core/schema_evolution.py (modified) (2 diffs)
- django/branches/schema-evolution/django/db/backends/mysql/base.py (modified) (3 diffs)
- django/branches/schema-evolution/django/db/backends/postgresql/base.py (modified) (3 diffs)
- django/branches/schema-evolution/django/db/backends/postgresql_psycopg2/base.py (modified) (3 diffs)
- django/branches/schema-evolution/django/db/backends/sqlite3/base.py (modified) (3 diffs)
- django/branches/schema-evolution/tests/modeltests/schema_evolution/models.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/schema-evolution/django/core/schema_evolution.py
r5789 r5794 26 26 col_type = data_types.get(data_type) 27 27 if col_type is not None: 28 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 ) )28 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 ) ) 29 29 return output 30 30 … … 121 121 # if f.primary_key: 122 122 # col_def += ' '+ style.SQL_KEYWORD('PRIMARY KEY') 123 output.extend( backend.get_change_column_def_sql( klass._meta.db_table, cf, col_type_def, f.null, f.unique, f.primary_key ) )123 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 ) ) 124 124 #print db_table, cf, f.maxlength, introspection.get_known_column_flags(cursor, db_table, cf) 125 125 return output django/branches/schema-evolution/django/db/backends/mysql/base.py
r5787 r5794 257 257 return output 258 258 259 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):259 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 260 260 output = [] 261 261 col_def = col_type +' '+ ('%sNULL' % (not null and 'NOT ' or '')) … … 264 264 if primary_key: 265 265 col_def += ' '+ 'PRIMARY KEY' 266 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 267 col_def += ' '+ 'DEFAULT '+ quote_name(str(default)) 266 268 output.append( 'ALTER TABLE '+ quote_name(table_name) +' MODIFY COLUMN '+ quote_name(col_name) +' '+ col_def + ';' ) 267 269 return output 268 270 269 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):271 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 270 272 output = [] 271 273 field_output = [] … … 280 282 if primary_key: 281 283 field_output.append(('PRIMARY KEY')) 284 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 285 field_output.append(('DEFAULT')) 286 field_output.append((quote_name(str(default)))) 282 287 output.append(' '.join(field_output) + ';') 283 288 return output django/branches/schema-evolution/django/db/backends/postgresql/base.py
r5787 r5794 298 298 return output 299 299 300 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):300 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 301 301 output = [] 302 302 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name+'_tmp') +' '+ col_type + ';' ) … … 304 304 output.append( 'ALTER TABLE '+ quote_name(table_name) +' DROP COLUMN '+ quote_name(col_name) +';' ) 305 305 output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(col_name+'_tmp') +' TO '+ quote_name(col_name) + ';' ) 306 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 307 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' ) 306 308 if not null: 307 309 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' ) … … 311 313 return output 312 314 313 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):315 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 314 316 output = [] 315 317 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name) +' '+ col_type + ';' ) 318 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 319 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' ) 316 320 if not null: 317 321 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' ) django/branches/schema-evolution/django/db/backends/postgresql_psycopg2/base.py
r5792 r5794 240 240 return output 241 241 242 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):242 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 243 243 output = [] 244 244 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name+'_tmp') +' '+ col_type + ';' ) … … 246 246 output.append( 'ALTER TABLE '+ quote_name(table_name) +' DROP COLUMN '+ quote_name(col_name) +';' ) 247 247 output.append( 'ALTER TABLE '+ quote_name(table_name) +' RENAME COLUMN '+ quote_name(col_name+'_tmp') +' TO '+ quote_name(col_name) + ';' ) 248 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 249 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' ) 248 250 if not null: 249 251 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' ) … … 253 255 return output 254 256 255 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):257 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 256 258 output = [] 257 259 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ADD COLUMN '+ quote_name(col_name) +' '+ col_type + ';' ) 260 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 261 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET DEFAULT '+ quote_name(str(default)) +';' ) 258 262 if not null: 259 263 output.append( 'ALTER TABLE '+ quote_name(table_name) +' ALTER COLUMN '+ quote_name(col_name) +' SET NOT NULL;' ) django/branches/schema-evolution/django/db/backends/sqlite3/base.py
r5790 r5794 242 242 return output 243 243 244 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key ):244 def get_change_column_def_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 245 245 # sqlite doesn't support column modifications, so we fake it 246 246 … … 263 263 return output 264 264 265 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key ):265 def get_add_column_sql( table_name, col_name, col_type, null, unique, primary_key, default ): 266 266 output = [] 267 267 field_output = [] … … 276 276 if primary_key: 277 277 field_output.append(('PRIMARY KEY')) 278 if default and str(default) != 'django.db.models.fields.NOT_PROVIDED': 279 field_output.append(('DEFAULT')) 280 field_output.append((quote_name(str(default)))) 278 281 output.append(' '.join(field_output) + ';') 279 282 return output django/branches/schema-evolution/tests/modeltests/schema_evolution/models.py
r5792 r5794 23 23 24 24 class Muebles(models.Model): 25 tipo = models.CharField(maxlength=40 )25 tipo = models.CharField(maxlength=40, default="woot") 26 26 # new fields 27 27 fecha_publicacion = models.DateTimeField('date published') … … 98 98 0L\n0L 99 99 100 # delete a datetime column pair, so it looks like we've recently added a datetime field100 # delete a datetime column, so it looks like we've recently added a datetime field 101 101 >>> for sql in backend.get_drop_column_sql( 'schema_evolution_muebles', 'fecha_publicacion' ): print sql; cursor.execute(sql) 102 102 ALTER TABLE `schema_evolution_muebles` DROP COLUMN `fecha_publicacion`; … … 104 104 >>> management.get_sql_evolution(app) 105 105 ['ALTER TABLE `schema_evolution_muebles` ADD COLUMN `fecha_publicacion` datetime NOT NULL;'] 106 107 # reset the db 108 >>> cursor.execute('DROP TABLE schema_evolution_muebles;'); cursor.execute(create_table_sql[1]) 109 0L\n0L 110 111 # delete a column with a default value, so it looks like we've recently added a column 112 >>> for sql in backend.get_drop_column_sql( 'schema_evolution_muebles', 'tipo' ): print sql; cursor.execute(sql) 113 ALTER TABLE `schema_evolution_muebles` DROP COLUMN `tipo`; 114 0L 115 >>> management.get_sql_evolution(app) 116 ['ALTER TABLE `schema_evolution_muebles` ADD COLUMN `tipo` varchar(40) NOT NULL DEFAULT `woot`;'] 106 117 107 118 """ … … 125 136 126 137 # add a column, so it looks like we've recently deleted a field 127 >>> for sql in backend.get_add_column_sql( 'schema_evolution_person', 'gender_nothere', 'varchar(1)', True, False, False ): cursor.execute(sql)138 >>> for sql in backend.get_add_column_sql( 'schema_evolution_person', 'gender_nothere', 'varchar(1)', True, False, False, None ): cursor.execute(sql) 128 139 >>> management.get_sql_evolution(app) 129 140 ['-- warning: the following may cause data loss', u'ALTER TABLE "schema_evolution_person" DROP COLUMN "gender_nothere";', '-- end warning'] … … 149 160 150 161 # change column flags, so it looks like we've recently changed a column flag 151 >>> for sql in backend.get_change_column_def_sql( 'schema_evolution_person', 'name', 'varchar(10)', True, False, False ): cursor.execute(sql)162 >>> for sql in backend.get_change_column_def_sql( 'schema_evolution_person', 'name', 'varchar(10)', True, False, False, None ): cursor.execute(sql) 152 163 >>> management.get_sql_evolution(app) 153 164 ['ALTER TABLE "schema_evolution_person" ADD COLUMN "name_tmp" varchar(20);', 'UPDATE "schema_evolution_person" SET "name_tmp" = "name";', 'ALTER TABLE "schema_evolution_person" DROP COLUMN "name";', 'ALTER TABLE "schema_evolution_person" RENAME COLUMN "name_tmp" TO "name";', 'ALTER TABLE "schema_evolution_person" ALTER COLUMN "name" SET NOT NULL;'] … … 161 172 >>> management.get_sql_evolution(app) 162 173 ['ALTER TABLE "schema_evolution_muebles" ADD COLUMN "fecha_publicacion" timestamp with time zone;', 'ALTER TABLE "schema_evolution_muebles" ALTER COLUMN "fecha_publicacion" SET NOT NULL;'] 174 175 # reset the db 176 >>> cursor.execute('DROP TABLE schema_evolution_muebles;'); cursor.execute(create_table_sql[1]) 177 178 # delete a column with a default value, so it looks like we've recently added a column 179 >>> for sql in backend.get_drop_column_sql( 'schema_evolution_muebles', 'tipo' ): print sql; cursor.execute(sql) 180 ALTER TABLE "schema_evolution_muebles" DROP COLUMN "tipo"; 181 >>> management.get_sql_evolution(app) 182 ['ALTER TABLE "schema_evolution_muebles" ADD COLUMN "tipo" varchar(40);', 'ALTER TABLE "schema_evolution_muebles" ALTER COLUMN "tipo" SET DEFAULT "woot";', 'ALTER TABLE "schema_evolution_muebles" ALTER COLUMN "tipo" SET NOT NULL;'] 163 183 """ 164 184 … … 277 297 ['ALTER TABLE "schema_evolution_muebles" ADD COLUMN "fecha_publicacion" datetime NOT NULL;'] 278 298 279 280 """ 281 299 # reset the db 300 >>> cursor.execute('DROP TABLE schema_evolution_muebles;').__class__ 301 <class 'django.db.backends.sqlite3.base.SQLiteCursorWrapper'> 302 >>> cursor.execute(create_table_sql[1]).__class__ 303 <class 'django.db.backends.sqlite3.base.SQLiteCursorWrapper'> 304 305 # delete a column with a default value, so it looks like we've recently added a column 306 >>> for sql in ['DROP TABLE schema_evolution_muebles;','CREATE TABLE "schema_evolution_muebles" ("id" integer NOT NULL UNIQUE PRIMARY KEY,"fecha_publicacion" datetime NOT NULL);']: cursor.execute(sql).__class__ 307 <class 'django.db.backends.sqlite3.base.SQLiteCursorWrapper'> 308 <class 'django.db.backends.sqlite3.base.SQLiteCursorWrapper'> 309 >>> management.get_sql_evolution(app) 310 ['ALTER TABLE "schema_evolution_muebles" ADD COLUMN "tipo" varchar(40) NOT NULL DEFAULT "woot";'] 311 312 """ 313
