+++ /dev/null
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import migrations
-
-
-def populate_ancestors(apps, schema_editor):
- """Fixes the ancestry cache."""
- # TODO: table names
- from django.db import connection, transaction
- if connection.vendor == 'postgres':
- cursor = connection.cursor()
- cursor.execute("""
- WITH RECURSIVE ancestry AS (
- SELECT book.id, book.parent_id
- FROM catalogue_book AS book
- WHERE book.parent_id IS NOT NULL
- UNION
- SELECT ancestor.id, book.parent_id
- FROM ancestry AS ancestor, catalogue_book AS book
- WHERE ancestor.parent_id = book.id
- AND book.parent_id IS NOT NULL
- )
- INSERT INTO catalogue_book_ancestor
- (from_book_id, to_book_id)
- SELECT id, parent_id
- FROM ancestry
- ORDER BY id;
- """)
- else:
- Book = apps.get_model("catalogue", "Book")
- for book in Book.objects.exclude(parent=None):
- parent = book.parent
- while parent is not None:
- book.ancestor.add(parent)
- parent = parent.parent
-
-
-def remove_book_tags(apps, schema_editor):
- Tag = apps.get_model("catalogue", "Tag")
- Book = apps.get_model("catalogue", "Book")
- Tag.objects.filter(category='book').delete()
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('catalogue', '0002_book_ancestor'),
- ]
-
- operations = [
- migrations.RunPython(populate_ancestors),
- migrations.RunPython(remove_book_tags),
- ]