From 662e854feddf7bfd33aa0f756760390edace7697 Mon Sep 17 00:00:00 2001
From: Bastien Abadie <bastien@nextcairn.com>
Date: Fri, 18 May 2018 10:23:50 +0200
Subject: [PATCH] Setup PG materialized views for parents/children as cache.

---
 arkindex/documents/migrations/0003_cache.py | 63 +++++++++++++++++++++
 arkindex/documents/models.py                |  4 +-
 2 files changed, 65 insertions(+), 2 deletions(-)
 create mode 100644 arkindex/documents/migrations/0003_cache.py

diff --git a/arkindex/documents/migrations/0003_cache.py b/arkindex/documents/migrations/0003_cache.py
new file mode 100644
index 0000000000..3a122d8000
--- /dev/null
+++ b/arkindex/documents/migrations/0003_cache.py
@@ -0,0 +1,63 @@
+# Generated by Django 2.0 on 2018-05-18 08:09
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documents', '0002_element_zone'),
+    ]
+
+    operations = [
+        migrations.RunSQL(
+            """
+            create materialized view elements_parents_cache as
+            (
+                select * from elements_parents
+            );
+            """,
+            reverse_sql="drop materialized view if exists elements_parents_cache;"
+        ),
+        migrations.RunSQL(
+            """
+            create materialized view elements_children_cache as
+            (
+                select * from elements_children
+            );
+            """,
+            reverse_sql="drop materialized view if exists elements_children_cache;"
+        ),
+        migrations.RunSQL(
+            """
+            create index idx_elements_parents_cache_id on elements_parents_cache (id);
+            """,
+            reverse_sql="drop index if exists idx_elements_parents_cache_id;"
+        ),
+        migrations.RunSQL(
+            """
+            create index idx_elements_parents_cache_parent on elements_parents_cache (parent_id);
+            """,
+            reverse_sql="drop index if exists idx_elements_parents_cache_parent;"
+        ),
+        migrations.RunSQL(
+            """
+            create index idx_elements_children_cache_id on elements_children_cache (id);
+            """,
+            reverse_sql="drop index if exists idx_elements_children_cache_id;"
+        ),
+        migrations.RunSQL(
+            """
+            create index idx_elements_children_cache_child on elements_children_cache (child_id);
+            """,
+            reverse_sql="drop index if exists idx_elements_children_cache_child;"
+        ),
+        migrations.AlterModelTable(
+            name='elementchildren',
+            table='elements_children_cache',
+        ),
+        migrations.AlterModelTable(
+            name='elementparents',
+            table='elements_parents_cache',
+        ),
+    ]
diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py
index 2834783b1a..fb0df1486f 100644
--- a/arkindex/documents/models.py
+++ b/arkindex/documents/models.py
@@ -40,7 +40,7 @@ class ElementParents(models.Model):
 
     class Meta:
         managed = False
-        db_table = 'elements_parents'
+        db_table = 'elements_parents_cache'
 
 
 class ElementChildren(models.Model):
@@ -51,7 +51,7 @@ class ElementChildren(models.Model):
 
     class Meta:
         managed = False
-        db_table = 'elements_children'
+        db_table = 'elements_children_cache'
 
 
 class Element(IndexableModel):
-- 
GitLab