def test_index_hint_force_order_by(self): name_idx = index_name(Author, "name") with CaptureLastQuery() as cap: list(Author.objects.force_index(name_idx, for_="ORDER BY").order_by("name")) assert ("FORCE INDEX FOR ORDER BY (`" + name_idx + "`)") in cap.query assert name_idx in used_indexes(cap.query)
def test_use_index(self): name_idx = index_name(Author, "name") with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt="").use_index(name_idx)) assert ("USE INDEX (`" + name_idx + "`)") in cap.query used = used_indexes(cap.query) assert len(used) == 0 or name_idx in used
def test_use_index(self): name_idx = index_name(Author, 'name') with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt='').use_index(name_idx)) assert ('USE INDEX (`' + name_idx + '`)') in cap.query used = used_indexes(cap.query) assert len(used) == 0 or name_idx in used
def test_ignore_index_multiple(self): name_idx = index_name(AuthorMultiIndex, "name") name_country_idx = index_name(AuthorMultiIndex, "name", "country") with CaptureLastQuery() as cap: list( AuthorMultiIndex.objects.filter(name__gt="").ignore_index( name_idx, name_country_idx)) assert ("IGNORE INDEX (`" + name_idx + "`,`" + name_country_idx + "`)") in cap.query used = used_indexes(cap.query) assert name_idx not in used assert name_country_idx not in used
def test_ignore_index_multiple(self): name_idx = index_name(AuthorMultiIndex, 'name') name_country_idx = index_name(AuthorMultiIndex, 'name', 'country') with CaptureLastQuery() as cap: list( AuthorMultiIndex.objects.filter(name__gt='').ignore_index( name_idx, name_country_idx)) assert ('IGNORE INDEX (`' + name_idx + '`,`' + name_country_idx + '`)') in cap.query used = used_indexes(cap.query) assert name_idx not in used assert name_country_idx not in used
def test_force_index_inner_query(self): title_idx = index_name(Book, "title") with CaptureLastQuery() as cap: list( Author.objects.annotate( has_books=Exists( Book.objects.filter( author_id=OuterRef("id"), title__gt="" ).force_index(title_idx, table_name="testapp_book") ) ).filter(has_books=True) ) assert ("FORCE INDEX (`" + title_idx + "`)") in cap.query used = used_indexes(cap.query) assert title_idx in used
def test_use_index_none(self): with CaptureLastQuery() as cap: list(Author.objects.values_list("name").distinct().use_index()) assert "USE INDEX () " in cap.query assert used_indexes(cap.query) == set()
def test_ignore_index_primary(self): with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt="").ignore_index("PRIMARY")) assert "IGNORE INDEX (`PRIMARY`)" in cap.query assert "PRIMARY" not in used_indexes(cap.query)
def test_ignore_index(self): name_idx = index_name(Author, "name") with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt="").ignore_index(name_idx)) assert ("IGNORE INDEX (`" + name_idx + "`)") in cap.query assert name_idx not in used_indexes(cap.query)
def test_force_index_primary(self): with CaptureLastQuery() as cap: list(Author.objects.force_index("PRIMARY")) assert ("FORCE INDEX (`PRIMARY`)") in cap.query used = used_indexes(cap.query) assert len(used) == 0 or "PRIMARY" in used
def test_ignore_index_primary(self): with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt='').ignore_index('PRIMARY')) assert 'IGNORE INDEX (`PRIMARY`)' in cap.query assert 'PRIMARY' not in used_indexes(cap.query)
def test_ignore_index(self): name_idx = index_name(Author, 'name') with CaptureLastQuery() as cap: list(Author.objects.filter(name__gt='').ignore_index(name_idx)) assert ('IGNORE INDEX (`' + name_idx + '`)') in cap.query assert name_idx not in used_indexes(cap.query)
def test_use_index_primary(self): with CaptureLastQuery() as cap: list(Author.objects.use_index('PRIMARY')) assert ('USE INDEX (`PRIMARY`)') in cap.query used = used_indexes(cap.query) assert len(used) == 0 or 'PRIMARY' in used