def test_name_auto_generation(self): """ A name longer than 30 characters (since len(BrinIndex.suffix) is 4 rather than usual limit of 3) is okay for PostgreSQL. For this test, the name of the field ('datetimes') must be at least 7 characters to generate a name longer than 30 characters. """ index = BrinIndex(fields=['datetimes']) index.set_name_with_model(DateTimeArrayModel) self.assertEqual(index.name, 'postgres_te_datetim_abf104_brin')
def test_deconstruction(self): index = BrinIndex(fields=['title'], name='test_title_brin', autosummarize=True, pages_per_range=16) path, args, kwargs = index.deconstruct() self.assertEqual(path, 'django.contrib.postgres.indexes.BrinIndex') self.assertEqual(args, ()) self.assertEqual(kwargs, { 'fields': ['title'], 'name': 'test_title_brin', 'autosummarize': True, 'pages_per_range': 16, })
def test_brin_index_not_supported(self): index_name = 'brin_index_exception' index = BrinIndex(fields=['field'], name=index_name) with self.assertRaisesMessage(NotSupportedError, 'BRIN indexes require PostgreSQL 9.5+.'): with mock.patch( 'django.db.connection.features.has_brin_index_support', False): with connection.schema_editor() as editor: editor.add_index(CharFieldModel, index) self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
class Meta: verbose_name = _("Report") verbose_name_plural = _("Reports") ordering = ['-created_at'] get_latest_by = 'created_at' permissions = ( # ("view_report", "Can see all report"), # ("add_report", "Can add a new report"), # ("change_report", "Can edit the report"), # ("delete_report", "Can delete the report"), ) indexes = [BrinIndex(fields=['created_at'], pages_per_range=16)]
def test_brin_index(self): index_name = 'char_field_model_field_brin' index = BrinIndex(fields=['field'], name=index_name, pages_per_range=4) with connection.schema_editor() as editor: editor.add_index(CharFieldModel, index) constraints = self.get_constraints(CharFieldModel._meta.db_table) self.assertEqual(constraints[index_name]['type'], BrinIndex.suffix) self.assertEqual(constraints[index_name]['options'], ['pages_per_range=4']) with connection.schema_editor() as editor: editor.remove_index(CharFieldModel, index) self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
def test_brin_parameters(self): index_name = "char_field_brin_params" index = BrinIndex(fields=["field"], name=index_name, autosummarize=True) with connection.schema_editor() as editor: editor.add_index(CharFieldModel, index) constraints = self.get_constraints(CharFieldModel._meta.db_table) self.assertEqual(constraints[index_name]["type"], BrinIndex.suffix) self.assertEqual(constraints[index_name]["options"], ["autosummarize=on"]) with connection.schema_editor() as editor: editor.remove_index(CharFieldModel, index) self.assertNotIn( index_name, self.get_constraints(CharFieldModel._meta.db_table) )
class Meta: constraints = [ UniqueConstraint( fields=["team", "challenge"], condition=Q(correct=True, team__isnull=False), name="unique_team_challenge_correct", ), UniqueConstraint( fields=["solved_by", "challenge"], condition=Q(correct=True), name="unique_member_challenge_correct", ), ] indexes = [BrinIndex(fields=["challenge"], autosummarize=True)]
class Meta: app_label = 'shared_foundation' db_table = 'nwapp_shared_organizations' verbose_name = _('Shared Organization') verbose_name_plural = _('Shared Organizations') default_permissions = () permissions = () indexes = (BrinIndex( fields=[ 'created_at', 'last_modified_at', ], autosummarize=True, ), )
def test_brin_autosummarize_not_supported(self): index_name = 'brin_options_exception' index = BrinIndex(fields=['field'], name=index_name, autosummarize=True) with self.assertRaisesMessage( NotSupportedError, 'BRIN option autosummarize requires PostgreSQL 10+.'): with mock.patch( 'django.db.backends.postgresql.features.DatabaseFeatures.has_brin_autosummarize', False): with connection.schema_editor() as editor: editor.add_index(CharFieldModel, index) self.assertNotIn(index_name, self.get_constraints(CharFieldModel._meta.db_table))
def __init__(self, *args, **kwargs): super(Migration, self).__init__(*args, **kwargs) # The assignment of operations can be moved to the class definition # when support for Django 1.8 is dropped. if django.VERSION >= (1, 11, 0): self.operations = [ migrations.AddField(model_name='DummyModel', name='indexed', field=models.CharField(max_length=100)), migrations.AlterField( model_name='DummyModel', name='indexed', field=models.CharField( max_length=100, db_index=True, ), ), migrations.AlterField( model_name='DummyModel', name='indexed', field=models.CharField( max_length=100, db_index=True, unique=True, ), ), migrations.AlterField( model_name='DummyModel', name='indexed', field=models.CharField(max_length=100), ), migrations.AddIndex( model_name='dummymodel', index=BrinIndex( fields=['indexed'], name='indexed_brin', ), ), migrations.RemoveIndex( model_name='dummymodel', name='indexed_brin', ), migrations.RemoveField( model_name='DummyModel', name='indexed', ), ]
class Meta: app_label = 'foundation' db_table = 'mika_alarm_items' verbose_name = _('Alert Item') verbose_name_plural = _('Alert Items') default_permissions = () permissions = () indexes = ( BrinIndex( fields=['created_at'], autosummarize=True, ), ) index_together = ( ('user', 'type_of', 'state', 'created_at', ), )
class Meta: app_label = 'foundation' db_table = 'mika_production_inspections' verbose_name = _('Production Inspection') verbose_name_plural = _('Production Inspections') default_permissions = () permissions = ( # ("can_get_opening_hours_specifications", "Can get opening hours specifications"), # ("can_get_opening_hours_specification", "Can get opening hours specifications"), # ("can_post_opening_hours_specification", "Can create opening hours specifications"), # ("can_put_opening_hours_specification", "Can update opening hours specifications"), # ("can_delete_opening_hours_specification", "Can delete opening hours specifications"), ) indexes = (BrinIndex( fields=['created_at', 'last_modified_at'], autosummarize=True, ), )
class Meta: app_label = 'foundation' db_table = 'mika_task_items' ordering = ['due_date'] verbose_name = _('Task Item') verbose_name_plural = _('Task Items') default_permissions = () permissions = () indexes = (BrinIndex( fields=[ 'due_date', 'created_at', 'last_modified_at', ], autosummarize=True, ), ) index_together = (('user', 'created_at', 'is_closed'), )
class Meta: app_label = 'foundation' db_table = 'mika_device_reports' verbose_name = _('Device Report') verbose_name_plural = _('Device Reports') unique_together = ("device", "label", "start_dt", "finish_dt") default_permissions = () permissions = ( # ("can_get_opening_hours_specifications", "Can get opening hours specifications"), # ("can_get_opening_hours_specification", "Can get opening hours specifications"), # ("can_post_opening_hours_specification", "Can create opening hours specifications"), # ("can_put_opening_hours_specification", "Can update opening hours specifications"), # ("can_delete_opening_hours_specification", "Can delete opening hours specifications"), ) indexes = (BrinIndex( fields=['created_at', 'last_modified_at'], autosummarize=True, ), )
class Meta: app_label = 'foundation' db_table = 'mika_time_series_json_data' verbose_name = _('Time-Series JSON Datum') verbose_name_plural = _('Time-Series JSON Data') default_permissions = () unique_together = ("instrument", "timestamp") permissions = ( # ("can_get_opening_hours_specifications", "Can get opening hours specifications"), # ("can_get_opening_hours_specification", "Can get opening hours specifications"), # ("can_post_opening_hours_specification", "Can create opening hours specifications"), # ("can_put_opening_hours_specification", "Can update opening hours specifications"), # ("can_delete_opening_hours_specification", "Can delete opening hours specifications"), ) indexes = (BrinIndex( fields=['timestamp'], autosummarize=True, ), )
def test_add_other_index_type(self): project_state = self.set_up_test_model(self.app_label, index=False) table_name = '%s_pony' % self.app_label new_state = project_state.clone() operation = AddIndexConcurrently( 'Pony', BrinIndex(fields=['pink'], name='pony_pink_brin_idx'), ) self.assertIndexNotExists(table_name, ['pink']) # Add index. with connection.schema_editor(atomic=False) as editor: operation.database_forwards(self.app_label, editor, project_state, new_state) self.assertIndexExists(table_name, ['pink'], index_type='brin') # Reversal. with connection.schema_editor(atomic=False) as editor: operation.database_backwards(self.app_label, editor, new_state, project_state) self.assertIndexNotExists(table_name, ['pink'])
class Meta: indexes = (BrinIndex(fields=['created']), ) verbose_name = "Лог менеджера сообществ" verbose_name_plural = "Логи менеджеров сообществ" ordering = ["-created"]
class Meta: indexes = (BrinIndex(fields=['created']), ) verbose_name = "Лог менеджера пользоватетей" verbose_name_plural = "Логи менеджеров пользоватетей" ordering = ["-created"]
def test_repr(self): index = BrinIndex(fields=['title'], pages_per_range=4) another_index = BrinIndex(fields=['title']) self.assertEqual(repr(index), "<BrinIndex: fields='title', pages_per_range=4>") self.assertEqual(repr(another_index), "<BrinIndex: fields='title'>")
class Meta: indexes = (BrinIndex(fields=['created']),) verbose_name = 'Опрос' verbose_name_plural = 'Опросы'
class Meta: unique_together = ('year', 'month', 'day') indexes = [BrinIndex(fields=['calculated_at'], pages_per_range=16)]
class Meta: ordering = ('-created_at', ) verbose_name = _("bounty") verbose_name_plural = _("bounties") indexes = (BrinIndex(fields=['created_at']), )
class Meta: indexes = (BrinIndex(fields=['created']), ) verbose_name = 'Фото' verbose_name_plural = 'Фото' ordering = ["-created"]
class Meta: indexes = [BrinIndex(fields=["timestamp"])] unique_together = ("text", "timestamp") ordering = ["text"]
def test_deconstruction(self): index = BrinIndex(fields=['title'], name='test_title_brin') path, args, kwargs = index.deconstruct() self.assertEqual(path, 'django.contrib.postgres.indexes.BrinIndex') self.assertEqual(args, ()) self.assertEqual(kwargs, {'fields': ['title'], 'name': 'test_title_brin'})
class Meta: verbose_name = _("weekend") verbose_name_plural = _("weekends") indexes = (BrinIndex(fields=['date']), )
class Meta: indexes = (BrinIndex(fields=['created']), ) verbose_name = "Лог суперменеджера активностей депутатов" verbose_name_plural = "Логи суперменеджеров активностей депутатов" ordering = ["-created"]
class Meta: ordering = ('-id', ) indexes = (BrinIndex(fields=['timestamp']), )
class Meta: indexes = (BrinIndex(fields=['search']), ) verbose_name = 'Новость' verbose_name_plural = 'Новости'
class Meta: ordering = ["-created"] verbose_name = "Проект" verbose_name_plural = "Проекты" indexes = (BrinIndex(fields=['created']), )
def test_not_eq(self): index = BrinIndex(fields=['title']) index_with_page_range = BrinIndex(fields=['title'], pages_per_range=16) self.assertNotEqual(index, index_with_page_range)
class Meta: db_tablespace = "pg_default" indexes = [BrinIndex(fields=["timestamp"])] unique_together = ("text", "timestamp") ordering = ["text"]
class Meta: get_latest_by = 'timestamp' indexes = [BrinIndex(fields=['timestamp'], pages_per_range=64)]