diff --git a/tests/_utils/setup.sql b/tests/_utils/setup.sql index b7b416b35cd5..e5b166c1ff61 100644 --- a/tests/_utils/setup.sql +++ b/tests/_utils/setup.sql @@ -551,3 +551,13 @@ CREATE TABLE `fixtures_naturalkeything_naturalkeything` ( KEY (`from_naturalkeything_id`), KEY (`to_naturalkeything_id`) ); + +-- one_to_one +CREATE TABLE `one_to_one_favorites_restaurant` ( + `favorites_id` BIGINT NOT NULL, + `restaurant_id` BIGINT NOT NULL, + SHARD KEY (`favorites_id`), + UNIQUE KEY (`favorites_id`, `restaurant_id`), + KEY (`favorites_id`), + KEY (`restaurant_id`) +); diff --git a/tests/one_to_one/models.py b/tests/one_to_one/models.py index ca459e9edfec..9653c5fab499 100644 --- a/tests/one_to_one/models.py +++ b/tests/one_to_one/models.py @@ -7,6 +7,8 @@ """ from django.db import models +from django_singlestore.schema import ModelStorageManager + class Place(models.Model): name = models.CharField(max_length=50) @@ -26,7 +28,7 @@ def __str__(self): class Bar(models.Model): - place = models.OneToOneField(Place, models.CASCADE) + place = models.OneToOneField(Place, models.CASCADE, primary_key=True) serves_cocktails = models.BooleanField(default=True) @@ -34,6 +36,8 @@ class UndergroundBar(models.Model): place = models.OneToOneField(Place, models.SET_NULL, null=True) serves_cocktails = models.BooleanField(default=True) + objects = ModelStorageManager("ROWSTORE REFERENCE") + class Waiter(models.Model): restaurant = models.ForeignKey(Restaurant, models.CASCADE) @@ -45,7 +49,16 @@ def __str__(self): class Favorites(models.Model): name = models.CharField(max_length=50) - restaurants = models.ManyToManyField(Restaurant) + restaurants = models.ManyToManyField("Restaurant", through="FavoritesRestaurant") + + +class FavoritesRestaurant(models.Model): + favorites = models.ForeignKey(Favorites, on_delete=models.CASCADE) + restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE) + + class Meta: + unique_together = (('favorites', 'restaurant'),) + db_table = "one_to_one_favorites_restaurant" class ManualPrimaryKey(models.Model): @@ -54,7 +67,7 @@ class ManualPrimaryKey(models.Model): class RelatedModel(models.Model): - link = models.OneToOneField(ManualPrimaryKey, models.CASCADE) + link = models.OneToOneField(ManualPrimaryKey, models.CASCADE, primary_key=True) name = models.CharField(max_length=50) @@ -62,13 +75,15 @@ class MultiModel(models.Model): link1 = models.OneToOneField(Place, models.CASCADE) link2 = models.OneToOneField(ManualPrimaryKey, models.CASCADE) name = models.CharField(max_length=50) + + objects = ModelStorageManager(table_storage_type="ROWSTORE REFERENCE") def __str__(self): return "Multimodel %s" % self.name class Target(models.Model): - name = models.CharField(max_length=50, unique=True) + name = models.CharField(max_length=50, primary_key=True) class Pointer(models.Model): @@ -76,11 +91,11 @@ class Pointer(models.Model): class Pointer2(models.Model): - other = models.OneToOneField(Target, models.CASCADE, related_name="second_pointer") + other = models.OneToOneField(Target, models.CASCADE, related_name="second_pointer", primary_key=True) class HiddenPointer(models.Model): - target = models.OneToOneField(Target, models.CASCADE, related_name="hidden+") + target = models.OneToOneField(Target, models.CASCADE, related_name="hidden+", primary_key=True) class ToFieldPointer(models.Model): @@ -107,5 +122,5 @@ def get_queryset(self): class Director(models.Model): is_temp = models.BooleanField(default=False) - school = models.OneToOneField(School, models.CASCADE) + school = models.OneToOneField(School, models.CASCADE, primary_key=True) objects = DirectorManager()