mirror of
https://github.com/carrotquest/django-clickhouse.git
synced 2025-02-16 19:00:34 +03:00
Added tests and fixes for bulk_create_returning and save_returning
This commit is contained in:
parent
6493373c8f
commit
a39a04fa52
|
@ -102,7 +102,7 @@ class ClickHouseSyncQuerySetMixin(ClickHouseSyncRegisterMixin):
|
||||||
|
|
||||||
|
|
||||||
# I add library dependant mixins to base classes only if libraries are installed
|
# I add library dependant mixins to base classes only if libraries are installed
|
||||||
qs_bases = [ClickHouseSyncQuerySetMixin, DjangoQuerySet]
|
qs_bases = [ClickHouseSyncQuerySetMixin]
|
||||||
|
|
||||||
if not getattr(UpdateReturningMixin, 'fake', False):
|
if not getattr(UpdateReturningMixin, 'fake', False):
|
||||||
qs_bases.append(ClickHouseSyncUpdateReturningQuerySetMixin)
|
qs_bases.append(ClickHouseSyncUpdateReturningQuerySetMixin)
|
||||||
|
@ -110,6 +110,9 @@ if not getattr(UpdateReturningMixin, 'fake', False):
|
||||||
if not getattr(BulkUpdateManagerMixin, 'fake', False):
|
if not getattr(BulkUpdateManagerMixin, 'fake', False):
|
||||||
qs_bases.append(ClickHouseSyncBulkUpdateQuerySetMixin)
|
qs_bases.append(ClickHouseSyncBulkUpdateQuerySetMixin)
|
||||||
|
|
||||||
|
|
||||||
|
# QuerySet must be the last one, so it can be redeclared in mixins
|
||||||
|
qs_bases.append(DjangoQuerySet)
|
||||||
ClickHouseSyncQuerySet = type('ClickHouseSyncModelQuerySet', tuple(qs_bases), {})
|
ClickHouseSyncQuerySet = type('ClickHouseSyncModelQuerySet', tuple(qs_bases), {})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,17 +2,31 @@
|
||||||
This file contains sample models to use in tests
|
This file contains sample models to use in tests
|
||||||
"""
|
"""
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models.manager import BaseManager
|
||||||
|
from django_pg_returning.models import UpdateReturningModel
|
||||||
|
|
||||||
from django_clickhouse.models import ClickHouseSyncModel
|
from django_clickhouse.models import ClickHouseSyncModel, ClickHouseSyncQuerySet
|
||||||
|
|
||||||
|
|
||||||
class TestModel(ClickHouseSyncModel):
|
class TestQuerySet(ClickHouseSyncQuerySet):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestManager(BaseManager.from_queryset(TestQuerySet)):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TestModel(UpdateReturningModel, ClickHouseSyncModel):
|
||||||
|
objects = TestManager()
|
||||||
|
|
||||||
value = models.IntegerField()
|
value = models.IntegerField()
|
||||||
created_date = models.DateField()
|
created_date = models.DateField()
|
||||||
created = models.DateTimeField()
|
created = models.DateTimeField()
|
||||||
|
|
||||||
|
|
||||||
class SecondaryTestModel(ClickHouseSyncModel):
|
class SecondaryTestModel(UpdateReturningModel, ClickHouseSyncModel):
|
||||||
|
objects = TestManager()
|
||||||
|
|
||||||
value = models.IntegerField()
|
value = models.IntegerField()
|
||||||
created_date = models.DateField()
|
created_date = models.DateField()
|
||||||
created = models.DateTimeField()
|
created = models.DateTimeField()
|
||||||
|
|
|
@ -102,6 +102,16 @@ class TestOperations(TransactionTestCase):
|
||||||
self.assertListEqual([('update', "%s.%d" % (self.db_alias, item.id)) for item in self.before_op_items],
|
self.assertListEqual([('update', "%s.%d" % (self.db_alias, item.id)) for item in self.before_op_items],
|
||||||
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
||||||
|
|
||||||
|
def test_bulk_create_returning(self):
|
||||||
|
items = [
|
||||||
|
self.django_model(created_date=datetime.date.today(), created=datetime.datetime.now(), value=i)
|
||||||
|
for i in range(5)
|
||||||
|
]
|
||||||
|
items = self.django_model.objects.bulk_create_returning(items)
|
||||||
|
self.assertEqual(5, len(items))
|
||||||
|
self.assertSetEqual({('insert', "%s.%d" % (self.db_alias, instance.pk)) for instance in items},
|
||||||
|
set(self.storage.get_operations(self.clickhouse_model.get_import_key(), 10)))
|
||||||
|
|
||||||
def test_qs_update_returning(self):
|
def test_qs_update_returning(self):
|
||||||
self.django_model.objects.filter(pk=1).update_returning(created_date=datetime.date.today())
|
self.django_model.objects.filter(pk=1).update_returning(created_date=datetime.date.today())
|
||||||
self.assertListEqual([('update', "%s.1" % self.db_alias)],
|
self.assertListEqual([('update', "%s.1" % self.db_alias)],
|
||||||
|
@ -123,6 +133,19 @@ class TestOperations(TransactionTestCase):
|
||||||
self.assertListEqual([('delete', "%s.%d" % (self.db_alias, item.id)) for item in self.before_op_items],
|
self.assertListEqual([('delete', "%s.%d" % (self.db_alias, item.id)) for item in self.before_op_items],
|
||||||
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
||||||
|
|
||||||
|
def test_save_returning(self):
|
||||||
|
# INSERT operation
|
||||||
|
instance = self.django_model(created_date=datetime.date.today(), created=datetime.datetime.now(), value=2)
|
||||||
|
instance.save_returning()
|
||||||
|
self.assertListEqual([('insert', "%s.%d" % (self.db_alias, instance.pk))],
|
||||||
|
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
||||||
|
|
||||||
|
# UPDATE operation
|
||||||
|
instance.save_returning()
|
||||||
|
self.assertListEqual([('insert', "%s.%d" % (self.db_alias, instance.pk)),
|
||||||
|
('update', "%s.%d" % (self.db_alias, instance.pk))],
|
||||||
|
self.storage.get_operations(self.clickhouse_model.get_import_key(), 10))
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
instance = self.django_model.objects.get(pk=1)
|
instance = self.django_model.objects.get(pk=1)
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user