def test_generated_name_ends_with_partial(self):
     idx = PartialIndex(fields=['a', 'b'],
                        unique=False,
                        where_postgresql='a = false',
                        where_sqlite='a = 0')
     idx.set_name_with_model(AB)
     self.assertEqual(idx.name[-8:], '_partial')
Esempio n. 2
0
 class Meta:
     indexes = [
         PartialIndex(fields=['-order'],
                      unique=False,
                      where=PQ(is_complete=False)),
         PartialIndex(fields=['group'],
                      unique=True,
                      where=PQ(is_complete=False)),
     ]
Esempio n. 3
0
 class Meta:
     db_table = "recipient_lookup"
     indexes = [
         PartialIndex(fields=["duns"],
                      unique=True,
                      where=PQ(duns__isnull=False)),
         PartialIndex(fields=["parent_duns"],
                      unique=False,
                      where=PQ(parent_duns__isnull=False)),
     ]
Esempio n. 4
0
 class Meta:
     indexes = [
         PartialIndex(fields=['-order'],
                      unique=False,
                      where_postgresql='is_complete = false',
                      where_sqlite='is_complete = 0'),
         PartialIndex(fields=['group'],
                      unique=True,
                      where_postgresql='is_complete = false',
                      where_sqlite='is_complete = 0'),
     ]
Esempio n. 5
0
 class Meta:
     indexes = [
         PartialIndex(fields=['room', 'label'],
                      unique=True,
                      where=PQ(deleted_at__isnull=True)),
         PartialIndex(fields=['user', 'label'],
                      unique=True,
                      where=PQ(deleted_at__isnull=True)),
         PartialIndex(fields=['uuid'],
                      unique=True,
                      where=PQ(deleted_at__isnull=True)),
     ]
     unique_together = [['room', 'user']]  # Regardless of deletion status
 def test_where_changes_generated_name(self):
     idx1 = PartialIndex(fields=['a', 'b'], unique=False, where='a IS NULL')
     idx1.set_name_with_model(AB)
     idx2 = PartialIndex(fields=['a', 'b'],
                         unique=False,
                         where='a IS NOT NULL')
     idx2.set_name_with_model(AB)
     self.assertNotEqual(idx1.name, idx2.name)
 def test_all_where_different(self):
     with self.assertRaisesRegexp(ValueError, '^If providing a single'):
         PartialIndex(fields=['a', 'b'],
                      unique=True,
                      where='a IS NULL',
                      where_postgresql='a IS NOT NULL',
                      where_sqlite='a = 3')
 def test_where_sqlite_changes_generated_name(self):
     idx1 = PartialIndex(fields=['a', 'b'],
                         unique=False,
                         where_postgresql='a = false',
                         where_sqlite='a = 0')
     idx1.set_name_with_model(AB)
     idx2 = PartialIndex(fields=['a', 'b'],
                         unique=False,
                         where_postgresql='a = false',
                         where_sqlite='a = 1')
     idx2.set_name_with_model(AB)
     self.assertNotEqual(idx1.name, idx2.name)
Esempio n. 9
0
 def test_unique_text(self):
     index_name = 'roombookingtext_test_idx'
     index = PartialIndex(fields=['user', 'room'], name=index_name, unique=True, where='deleted_at IS NULL')
     self.assertAddRemoveConstraint(RoomBookingText, index_name, index, {
         'columns': ['user_id', 'room_id'],
         'primary_key': False,
         'check': False,
         'index': True,
         'unique': True,
     })
Esempio n. 10
0
 def test_unique_q(self):
     index_name = 'roombookingq_test_idx'
     index = PartialIndex(fields=['user', 'room'], name=index_name, unique=True, where=PQ(deleted_at__isnull=True))
     self.assertAddRemoveConstraint(RoomBookingQ, index_name, index, {
         'columns': ['user_id', 'room_id'],
         'primary_key': False,
         'check': False,
         'index': True,
         'unique': True,
     })
Esempio n. 11
0
 def test_not_unique_q(self):
     index_name = 'jobq_test_idx'
     index = PartialIndex(fields=['-group'], name=index_name, unique=False, where=PQ(is_complete=False))
     self.assertAddRemoveConstraint(JobQ, index_name, index, {
         'columns': ['group'],
         'orders': ['DESC'],
         'primary_key': False,
         'check': False,
         'index': True,
         'unique': False,
     })
Esempio n. 12
0
 def test_not_unique_text(self):
     index_name = 'jobtext_test_idx'
     index = PartialIndex(fields=['-group'], name=index_name, unique=False, where_postgresql='is_complete = false', where_sqlite='is_complete = 0')
     self.assertAddRemoveConstraint(JobText, index_name, index, {
         'columns': ['group'],
         'orders': ['DESC'],
         'primary_key': False,
         'check': False,
         'index': True,
         'unique': False,
     })
Esempio n. 13
0
 class Meta:
     unique_together = [
         # HACK work around unique=True implies db_index=True
         # https://code.djangoproject.com/ticket/24082
         # Avoid extra varchar_pattern_ops index
         # since we do not do LIKE queries on these
         # https://stackoverflow.com/a/50926644/10840
         ("key",),
     ]
     index_together = [("parent_id", "type_code", "name")]
     indexes = [
         PartialIndex(
             fields=['expires_on'],
             unique=False,
             where=PQ(expires_on__isnull=False),
         ),
         PartialIndex(
             fields=['type_code', 'created_on'],
             unique=False,
             where=PQ(domain='icds-cas'),
         ),
     ]
Esempio n. 14
0
class PartialIndexMultiTextWhereTest(SimpleTestCase):
    """Test simple fields and methods on the PartialIndex class with separate where_vendor='' arguments."""

    def setUp(self):
        self.idx = PartialIndex(fields=['a', 'b'], unique=True, where_postgresql='a = false', where_sqlite='a = 0')

    def test_no_unique(self):
        with self.assertRaisesMessage(ValueError, 'Unique must be True or False'):
            PartialIndex(fields=['a', 'b'], where_postgresql='a = false', where_sqlite='a = 0')

    def test_fields(self):
        self.assertEqual(self.idx.unique, True)
        self.assertEqual(self.idx.where, '')
        self.assertEqual(self.idx.where_postgresql, 'a = false')
        self.assertEqual(self.idx.where_sqlite, 'a = 0')

    def test_repr(self):
        self.assertEqual(repr(self.idx), "<PartialIndex: fields='a, b', unique=True, where_postgresql='a = false', where_sqlite='a = 0'>")

    def test_deconstruct(self):
        path, args, kwargs = self.idx.deconstruct()
        self.assertEqual(path, 'partial_index.PartialIndex')
        self.assertEqual((), args)
        self.assertEqual(kwargs['fields'], ['a', 'b'])
        self.assertEqual(kwargs['unique'], True)
        self.assertNotIn('where', kwargs)
        self.assertEqual(kwargs['where_postgresql'], 'a = false')
        self.assertEqual(kwargs['where_sqlite'], 'a = 0')
        self.assertIn('name', kwargs)  # Exact value of name is not tested.

    def test_suffix(self):
        self.assertEqual(self.idx.suffix, 'partial')

    def test_generated_name_ends_with_partial(self):
        idx = PartialIndex(fields=['a', 'b'], unique=False, where_postgresql='a = false', where_sqlite='a = 0')
        idx.set_name_with_model(AB)
        self.assertEqual(idx.name[-8:], '_partial')

    def test_where_postgresql_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where_postgresql='a = false', where_sqlite='a = 0')
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', 'b'], unique=False, where_postgresql='a = true', where_sqlite='a = 0')
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)

    def test_where_sqlite_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where_postgresql='a = false', where_sqlite='a = 0')
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', 'b'], unique=False, where_postgresql='a = false', where_sqlite='a = 1')
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)
Esempio n. 15
0
 class Meta:
     indexes = [
         models.Index(fields=[
             "date_joined",
         ]),
         models.Index(fields=[
             "gender",
         ]),
         models.Index(fields=[
             "last_login",
         ]),
         models.Index(fields=[
             "updated_at",
         ]),
         PartialIndex(fields=[
             "is_active",
         ],
                      unique=False,
                      where_postgresql="is_active = false"),
         PartialIndex(fields=[
             "email_verified",
         ],
                      unique=False,
                      where_postgresql="email_verified = true"),
         PartialIndex(fields=[
             "msisdn_verified",
         ],
                      unique=False,
                      where_postgresql="msisdn_verified = true"),
         TrigramIndex(fields=["username"], ),
         TrigramIndex(fields=["msisdn"], ),
         TrigramIndex(fields=["email"], ),
         TrigramIndex(fields=["first_name"], ),
         TrigramIndex(fields=["last_name"], ),
         TrigramIndex(fields=["nickname"], ),
         TrigramIndex(fields=["q"], ),
     ]
Esempio n. 16
0
    def test_unique(self):
        num_constraints_before = len(self.get_constraints(RoomBooking))

        # Add the index
        index_name = 'roombooking_test_idx'
        index = PartialIndex(fields=['user', 'room'], name=index_name, unique=True, where='deleted_at IS NULL')
        with self.schema_editor() as editor:
            editor.add_index(RoomBooking, index)
        constraints = self.get_constraints(RoomBooking)
        self.assertEqual(len(constraints), num_constraints_before + 1)
        self.assertEqual(constraints[index_name]['columns'], ['user_id', 'room_id'])
        self.assertEqual(constraints[index_name]['primary_key'], False)
        self.assertEqual(constraints[index_name]['check'], False)
        self.assertEqual(constraints[index_name]['index'], True)
        self.assertEqual(constraints[index_name]['unique'], True)

        # Drop the index
        with self.schema_editor() as editor:
            editor.remove_index(RoomBooking, index)
        constraints = self.get_constraints(RoomBooking)
        self.assertEqual(len(constraints), num_constraints_before)
        self.assertNotIn(index_name, constraints)
Esempio n. 17
0
    def test_not_unique(self):
        num_constraints_before = len(self.get_constraints(Job))

        # Add the index
        index_name = 'job_test_idx'
        index = PartialIndex(fields=['-group'], name=index_name, unique=False, where_postgresql='is_complete = false', where_sqlite='is_complete = 0')
        with self.schema_editor() as editor:
            editor.add_index(Job, index)
        constraints = self.get_constraints(Job)
        self.assertEqual(len(constraints), num_constraints_before + 1)
        self.assertEqual(constraints[index_name]['columns'], ['group'])
        self.assertEqual(constraints[index_name]['orders'], ['DESC'])
        self.assertEqual(constraints[index_name]['primary_key'], False)
        self.assertEqual(constraints[index_name]['check'], False)
        self.assertEqual(constraints[index_name]['index'], True)
        self.assertEqual(constraints[index_name]['unique'], False)

        # Drop the index
        with self.schema_editor() as editor:
            editor.remove_index(Job, index)
        constraints = self.get_constraints(Job)
        self.assertEqual(len(constraints), num_constraints_before)
        self.assertNotIn(index_name, constraints)
Esempio n. 18
0
 def test_pg_and_sqlite_where_same(self):
     with self.assertRaisesRegexp(ValueError, 'must be different'):
         PartialIndex(fields=['a', 'b'], unique=True, where_postgresql='a IS NULL', where_sqlite='a IS NULL')
Esempio n. 19
0
 def test_where_not_provided(self):
     # Same as text based test - keep a copy here for the future when text-based are removed entirely.
     with self.assertRaisesRegexp(ValueError, 'must be provided'):
         PartialIndex(fields=['a', 'b'], unique=True)
Esempio n. 20
0
 def test_single_and_sqlite_where_different(self):
     with self.assertRaisesRegexp(ValueError, 'must not provide'):
         PartialIndex(fields=['a', 'b'], unique=True, where='a IS NULL', where_sqlite='a IS NOT NULL')
Esempio n. 21
0
 def test_all_where_same(self):
     with self.assertRaisesRegexp(ValueError, 'must not provide'):
         PartialIndex(fields=['a', 'b'], unique=True, where='a IS NULL', where_postgresql='a IS NULL', where_sqlite='a IS NULL')
Esempio n. 22
0
 def test_where_changes_generated_name(self):
     idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
     idx1.set_name_with_model(AB)
     idx2 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=False))
     idx2.set_name_with_model(AB)
     self.assertNotEqual(idx1.name, idx2.name)
Esempio n. 23
0
 def test_same_args_same_name(self):
     idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
     idx1.set_name_with_model(AB)
     idx2 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
     idx2.set_name_with_model(AB)
     self.assertEqual(idx1.name, idx2.name)
Esempio n. 24
0
 def test_generated_name_ends_with_partial(self):
     idx = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
     idx.set_name_with_model(AB)
     self.assertEqual(idx.name[-8:], '_partial')
Esempio n. 25
0
 def test_single_q_and_pg_and_sqlite(self):
     with self.assertRaisesRegexp(ValueError, 'must not provide'):
         PartialIndex(fields=['a', 'b'], unique=True, where=PQ(a__isnull=True), where_postgresql='a IS NULL', where_sqlite='a IS NULL')
Esempio n. 26
0
 def test_no_unique(self):
     with self.assertRaisesMessage(ValueError, 'Unique must be True or False'):
         PartialIndex(fields=['a', 'b'], where='a is null')
Esempio n. 27
0
 def setUp(self):
     self.idx = PartialIndex(fields=['a', 'b'], unique=True, where='a IS NULL')
Esempio n. 28
0
class PartialIndexSinglePQWhereTest(SimpleTestCase):
    """Test simple fields and methods on the PartialIndex class with a Q-based where predicate."""

    def setUp(self):
        self.idx = PartialIndex(fields=['a', 'b'], unique=True, where=PQ(a__isnull=True))

    def test_no_unique(self):
        with self.assertRaisesMessage(ValueError, 'Unique must be True or False'):
            PartialIndex(fields=['a', 'b'], where=PQ(a__isnull=True))

    def test_fields(self):
        self.assertEqual(self.idx.unique, True)
        self.assertEqual(self.idx.where, PQ(a__isnull=True))
        self.assertEqual(self.idx.where_postgresql, '')
        self.assertEqual(self.idx.where_sqlite, '')

    def test_repr(self):
        self.assertEqual(repr(self.idx), "<PartialIndex: fields='a, b', unique=True, where=<PQ: (AND: ('a__isnull', True))>>")

    def test_deconstruct_pq(self):
        path, args, kwargs = self.idx.deconstruct()
        self.assertEqual(path, 'partial_index.PartialIndex')
        self.assertEqual((), args)
        self.assertEqual(kwargs['fields'], ['a', 'b'])
        self.assertEqual(kwargs['unique'], True)
        self.assertEqual(kwargs['where'], PQ(a__isnull=True))
        self.assertNotIn('where_postgresql', kwargs)
        self.assertNotIn('where_sqlite', kwargs)
        self.assertIn('name', kwargs)  # Exact value of name is not tested.

    def test_suffix(self):
        self.assertEqual(self.idx.suffix, 'partial')

    def test_generated_name_ends_with_partial(self):
        idx = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx.set_name_with_model(AB)
        self.assertEqual(idx.name[-8:], '_partial')

    def test_same_args_same_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx2.set_name_with_model(AB)
        self.assertEqual(idx1.name, idx2.name)

    def test_field_sort_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', '-b'], unique=False, where=PQ(a__isnull=True))
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)

    def test_field_order_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['b', 'a'], unique=False, where=PQ(a__isnull=True))
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)

    def test_unique_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', 'b'], unique=True, where=PQ(a__isnull=True))
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)

    def test_where_changes_generated_name(self):
        idx1 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=True))
        idx1.set_name_with_model(AB)
        idx2 = PartialIndex(fields=['a', 'b'], unique=False, where=PQ(a__isnull=False))
        idx2.set_name_with_model(AB)
        self.assertNotEqual(idx1.name, idx2.name)
Esempio n. 29
0
 class Meta:
     indexes = [PartialIndex(fields=['user', 'room'], unique=True, where='deleted_at IS NULL')]
Esempio n. 30
0
 def setUp(self):
     self.idx = PartialIndex(fields=['a', 'b'], unique=True, where=PQ(a__isnull=True))