summaryrefslogtreecommitdiff
path: root/tests/regressiontests/ansi_sql
diff options
context:
space:
mode:
authorJason Pellerin <jpellerin@gmail.com>2006-09-04 02:20:26 +0000
committerJason Pellerin <jpellerin@gmail.com>2006-09-04 02:20:26 +0000
commitb17f250907351923f39f8a50b87a35b26d2ca307 (patch)
treebd0202dea501c6678a0b56b8e108194aab78468d /tests/regressiontests/ansi_sql
parent5a58772a1ee470e2890d3c716ce4918555100a55 (diff)
[multi-db] Merge trunk to [3661]
git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@3712 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/ansi_sql')
-rw-r--r--tests/regressiontests/ansi_sql/__init__.py0
-rw-r--r--tests/regressiontests/ansi_sql/models.py138
-rw-r--r--tests/regressiontests/ansi_sql/sql/car.sql2
3 files changed, 140 insertions, 0 deletions
diff --git a/tests/regressiontests/ansi_sql/__init__.py b/tests/regressiontests/ansi_sql/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/ansi_sql/__init__.py
diff --git a/tests/regressiontests/ansi_sql/models.py b/tests/regressiontests/ansi_sql/models.py
new file mode 100644
index 0000000000..625106f439
--- /dev/null
+++ b/tests/regressiontests/ansi_sql/models.py
@@ -0,0 +1,138 @@
+"""
+>>> from django.db.backends.ansi import sql
+
+# so we can test with a predicatable constraint setting
+>>> real_cnst = Mod._default_manager.db.backend.supports_constraints
+>>> Mod._default_manager.db.backend.supports_constraints = True
+
+# generate create sql
+>>> builder = sql.SchemaBuilder()
+>>> builder.get_create_table(Car)
+([BoundStatement('CREATE TABLE "ansi_sql_car" (...);')], {})
+>>> builder.models_already_seen
+Set([<class 'regressiontests.ansi_sql.models.Car'>])
+>>> builder.models_already_seen = set()
+
+# test that styles are used
+>>> builder.get_create_table(Car, style=mockstyle())
+([BoundStatement('SQL_KEYWORD(CREATE TABLE) SQL_TABLE("ansi_sql_car") (...SQL_FIELD("id")...);')], {})
+
+# test pending relationships
+>>> builder.models_already_seen = set()
+>>> builder.get_create_table(Mod)
+([BoundStatement('CREATE TABLE "ansi_sql_mod" (..."car_id" integer NOT NULL,...);')], {<class 'regressiontests.ansi_sql.models.Car'>: [BoundStatement('ALTER TABLE "ansi_sql_mod" ADD CONSTRAINT ... FOREIGN KEY ("car_id") REFERENCES "ansi_sql_car" ("id");')]})
+>>> builder.models_already_seen = set()
+>>> builder.get_create_table(Car)
+([BoundStatement('CREATE TABLE "ansi_sql_car" (...);')], {})
+>>> builder.get_create_table(Mod)
+([BoundStatement('CREATE TABLE "ansi_sql_mod" (..."car_id" integer NOT NULL REFERENCES "ansi_sql_car" ("id"),...);')], {})
+
+# test many-many
+>>> builder.get_create_table(Collector)
+([BoundStatement('CREATE TABLE "ansi_sql_collector" (...);')], {})
+>>> builder.get_create_many_to_many(Collector)
+{<class 'regressiontests.ansi_sql.models.Car'>: [BoundStatement('CREATE TABLE "ansi_sql_collector_cars" (...);')]}
+
+# test indexes
+>>> builder.get_create_indexes(Car)
+[]
+>>> builder.get_create_indexes(Mod)
+[BoundStatement('CREATE INDEX ... ON "ansi_sql_mod" ("car_id");'), BoundStatement('CREATE INDEX ... ON "ansi_sql_mod" ("part");')]
+>>> builder.get_create_indexes(Collector)
+[]
+
+# test initial data
+# patch builder so that it looks for initial data where we want it to
+# >>> builder.get_initialdata_path = othertests_sql
+>>> builder.get_initialdata(Car)
+[BoundStatement('insert into ansi_sql_car (...)...values (...);')]
+
+# test drop
+>>> builder.get_drop_table(Mod)
+[BoundStatement('DROP TABLE "ansi_sql_mod";')]
+>>> builder.get_drop_table(Mod, cascade=True)
+[BoundStatement('DROP TABLE "ansi_sql_mod";')]
+>>> builder.get_drop_table(Car)
+[BoundStatement('DROP TABLE "ansi_sql_car";')]
+
+# drop with cascade
+>>> builder.tables = ['ansi_sql_car', 'ansi_sql_mod', 'ansi_sql_collector']
+>>> Mod._default_manager.db.backend.supports_constraints = False
+>>> Mod._default_manager.db.backend.supports_constraints
+False
+>>> Car._default_manager.db.backend.supports_constraints
+False
+>>> builder.get_drop_table(Car, cascade=True)
+[BoundStatement('DROP TABLE "ansi_sql_car";')]
+>>> Mod._default_manager.db.backend.supports_constraints = True
+>>> Mod._default_manager.db.backend.supports_constraints
+True
+>>> Car._default_manager.db.backend.supports_constraints
+True
+>>> builder.get_drop_table(Car, cascade=True)
+[BoundStatement('DROP TABLE "ansi_sql_car";'), BoundStatement('ALTER TABLE "ansi_sql_mod" ...')]
+>>> builder.get_drop_table(Collector)
+[BoundStatement('DROP TABLE "ansi_sql_collector";')]
+>>> builder.get_drop_table(Collector, cascade=True)
+[BoundStatement('DROP TABLE "ansi_sql_collector";'), BoundStatement('DROP TABLE "ansi_sql_collector_cars";')]
+>>> Mod._default_manager.db.backend.supports_constraints = real_cnst
+
+"""
+#import os
+#import sys
+#from django.conf import settings
+#from django.core.management import install
+from django.db import models
+#from django.db.models import loading
+
+
+# For Python 2.3
+if not hasattr(__builtins__, 'set'):
+ from sets import Set as set
+
+
+# test models
+class Car(models.Model):
+ make = models.CharField(maxlength=32)
+ model = models.CharField(maxlength=32)
+ year = models.IntegerField()
+ condition = models.CharField(maxlength=32)
+
+
+class Collector(models.Model):
+ name = models.CharField(maxlength=32)
+ cars = models.ManyToManyField(Car)
+
+
+class Mod(models.Model):
+ car = models.ForeignKey(Car)
+ part = models.CharField(maxlength=32, db_index=True)
+ description = models.TextField()
+
+
+class mockstyle:
+ """mock style that wraps text in STYLE(text), for testing"""
+ def __getattr__(self, attr):
+ if attr in ('ERROR', 'ERROR_OUTPUT', 'SQL_FIELD', 'SQL_COLTYPE',
+ 'SQL_KEYWORD', 'SQL_TABLE'):
+ return lambda text: "%s(%s)" % (attr, text)
+
+
+# def othertests_sql(mod):
+# """Look in othertests/sql for sql initialdata"""
+# return os.path.normpath(os.path.join(os.path.dirname(__file__), 'sql'))
+
+
+# # install my models and force myself into the registry of apps and models
+# # (without this, references and such to/from the models installed here
+# # won't be picked up in get_models(), since get_models() looks only at
+# # models from apps in INSTALLED_APPS, and the model and app lookup rules
+# # enforce a module structure that this test file can't follow)
+# Car.objects.install()
+# Collector.objects.install()
+# Mod.objects.install()
+# loading.get_apps()
+# loading._app_list.append(sys.modules[__name__])
+
+# # model lookup only works for pk.models, so fake up my module name
+# __name__ = 'othertests.ansi_sql.models'
diff --git a/tests/regressiontests/ansi_sql/sql/car.sql b/tests/regressiontests/ansi_sql/sql/car.sql
new file mode 100644
index 0000000000..8a377aabfb
--- /dev/null
+++ b/tests/regressiontests/ansi_sql/sql/car.sql
@@ -0,0 +1,2 @@
+insert into ansi_sql_car (make, model, year, condition)
+ values ("Chevy", "Impala", 1966, "mint"); \ No newline at end of file