diff options
Diffstat (limited to 'tests/modeltests/schema_evolution')
| -rw-r--r-- | tests/modeltests/schema_evolution/models.py | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/tests/modeltests/schema_evolution/models.py b/tests/modeltests/schema_evolution/models.py index 7842e6209a..b401881714 100644 --- a/tests/modeltests/schema_evolution/models.py +++ b/tests/modeltests/schema_evolution/models.py @@ -3,6 +3,7 @@ Schema Evolution Tests """ from django.db import models +from django.conf import settings GENDER_CHOICES = ( ('M', 'Male'), @@ -27,7 +28,10 @@ __test__ = {'API_TESTS':""" >>> from django.db import connection, get_introspection_module >>> app = models.get_apps()[-1] >>> cursor = connection.cursor() +"""} +if settings.DATABASE_ENGINE == 'mysql': + __test__['API_TESTS'] += """ # the table as it is supposed to be >>> create_table_sql = management.get_sql_all(app) >>> print create_table_sql @@ -85,7 +89,55 @@ ALTER TABLE `schema_evolution_person` DROP COLUMN `gender`; 0L >>> management.get_sql_evolution(app) ['ALTER TABLE `schema_evolution_person` MODIFY COLUMN `name` varchar(20) NOT NULL;'] +""" + +if settings.DATABASE_ENGINE == 'postgresql': + __test__['API_TESTS'] += """ +# the table as it is supposed to be +>>> create_table_sql = management.get_sql_all(app) +>>> print create_table_sql +['CREATE TABLE "schema_evolution_person" (\\n "id" serial NOT NULL PRIMARY KEY,\\n "name" varchar(20) NOT NULL,\\n "gender" varchar(1) NOT NULL,\\n "gender2" varchar(1) NOT NULL\\n)\\n;'] +# make sure we don't evolve an unedited table +>>> management.get_sql_evolution(app) +[] -"""} +# delete a column, so it looks like we've recently added a field +>>> cursor.execute( backend.get_drop_column_sql( 'schema_evolution_person', 'gender' ) ) +>>> management.get_sql_evolution(app) +['ALTER TABLE "schema_evolution_person" ADD COLUMN "gender" varchar(1);\\nALTER TABLE "schema_evolution_person" ALTER COLUMN "gender" SET NOT NULL;'] + +# reset the db +>>> cursor.execute('DROP TABLE schema_evolution_person;'); cursor.execute(create_table_sql[0]) + +# add a column, so it looks like we've recently deleted a field +>>> cursor.execute( backend.get_add_column_sql( 'schema_evolution_person', 'gender_nothere', 'varchar(1)', True, False, False ) ) +>>> management.get_sql_evolution(app) +['-- warning: as the following may cause data loss, it/they must be run manually', u'-- ALTER TABLE "schema_evolution_person" DROP COLUMN "gender_nothere";', '-- end warning'] + +# reset the db +>>> cursor.execute('DROP TABLE schema_evolution_person;'); cursor.execute(create_table_sql[0]) + +# rename column, so it looks like we've recently renamed a field +>>> cursor.execute( backend.get_change_column_name_sql( 'schema_evolution_person', {}, 'gender2', 'gender_old', 'varchar(1)' ) ) +>>> management.get_sql_evolution(app) +['ALTER TABLE "schema_evolution_person" RENAME COLUMN "gender_old" TO "gender2";'] + +# reset the db +>>> cursor.execute('DROP TABLE schema_evolution_person;'); cursor.execute(create_table_sql[0]) + +# rename table, so it looks like we've recently renamed a model +>>> cursor.execute( backend.get_change_table_name_sql( 'schema_evolution_personold', 'schema_evolution_person' ) ) +>>> management.get_sql_evolution(app) +['ALTER TABLE "schema_evolution_personold" RENAME TO "schema_evolution_person";'] + +# reset the db +>>> cursor.execute(create_table_sql[0]) + +# change column flags, so it looks like we've recently changed a column flag +>>> cursor.execute( backend.get_change_column_def_sql( 'schema_evolution_person', 'name', 'varchar(10)', True, False, False ) ) +>>> management.get_sql_evolution(app) +['ALTER TABLE "schema_evolution_person" ADD COLUMN "name_tmp" varchar(20);\\nUPDATE "schema_evolution_person" SET "name_tmp" = "name";\\nALTER TABLE "schema_evolution_person" DROP COLUMN "name";\\nALTER TABLE "schema_evolution_person" RENAME COLUMN "name_tmp" TO "name";\\nALTER TABLE "schema_evolution_person" ALTER COLUMN "name" SET NOT NULL;'] + +""" |
