summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-05-30 10:47:51 -0400
committerMark Felder <feld@feld.me>2024-05-30 10:49:45 -0400
commitb5fcb82bffd3f31cf1318c1504fcb97e56b892cd (patch)
treeba9f2062db89a6b2b2a445058db4a8ac5f393a78
parentb4332b47d513c58587f6d43c8bf6a373b7489d67 (diff)
downloadpleroma-b5fcb82bffd3f31cf1318c1504fcb97e56b892cd.tar.gz
pleroma-b5fcb82bffd3f31cf1318c1504fcb97e56b892cd.zip
Test for missing FK indexes
-rw-r--r--test/fixtures/unindexed_fk.sql27
-rw-r--r--test/pleroma/schema_test.exs17
2 files changed, 44 insertions, 0 deletions
diff --git a/test/fixtures/unindexed_fk.sql b/test/fixtures/unindexed_fk.sql
new file mode 100644
index 000000000..3b71679cf
--- /dev/null
+++ b/test/fixtures/unindexed_fk.sql
@@ -0,0 +1,27 @@
+-- Unindexed FK -- Missing indexes - For CI
+
+WITH y AS (
+SELECT
+pg_catalog.format('%I', c1.relname) AS referencing_tbl,
+pg_catalog.quote_ident(a1.attname) AS referencing_column,
+(SELECT pg_get_expr(indpred, indrelid) FROM pg_catalog.pg_index WHERE indrelid = t.conrelid AND indkey[0] = t.conkey[1] AND indpred IS NOT NULL LIMIT 1) partial_statement
+FROM pg_catalog.pg_constraint t
+JOIN pg_catalog.pg_attribute a1 ON a1.attrelid = t.conrelid AND a1.attnum = t.conkey[1]
+JOIN pg_catalog.pg_class c1 ON c1.oid = t.conrelid
+JOIN pg_catalog.pg_namespace n1 ON n1.oid = c1.relnamespace
+JOIN pg_catalog.pg_class c2 ON c2.oid = t.confrelid
+JOIN pg_catalog.pg_namespace n2 ON n2.oid = c2.relnamespace
+JOIN pg_catalog.pg_attribute a2 ON a2.attrelid = t.confrelid AND a2.attnum = t.confkey[1]
+WHERE t.contype = 'f'
+AND NOT EXISTS (
+SELECT 1
+FROM pg_catalog.pg_index i
+WHERE i.indrelid = t.conrelid
+AND i.indkey[0] = t.conkey[1]
+AND indpred IS NULL
+)
+)
+SELECT referencing_tbl || '.' || referencing_column as "column"
+FROM y
+WHERE (partial_statement IS NULL OR partial_statement <> ('(' || referencing_column || ' IS NOT NULL)'))
+ORDER BY 1; \ No newline at end of file
diff --git a/test/pleroma/schema_test.exs b/test/pleroma/schema_test.exs
new file mode 100644
index 000000000..9bddd2031
--- /dev/null
+++ b/test/pleroma/schema_test.exs
@@ -0,0 +1,17 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.SchemaTest do
+ use Pleroma.DataCase, async: true
+
+ alias Pleroma.Repo
+
+ test "No unindexed foreign keys" do
+ query = File.read!("test/fixtures/unindexed_fk.sql")
+
+ {:ok, result} = Repo.query(query)
+
+ assert Enum.empty?(result.rows)
+ end
+end