From cfcf954a4c8bfa1b5d1176805ec95efa4aee40d8 Mon Sep 17 00:00:00 2001 From: Rodrigo Verdiani Date: Tue, 23 Jun 2026 21:45:15 -0300 Subject: [PATCH] feat(database): add indexes for content provider and images --- .../V0017__AddIndexImagesObjectKey.java | 36 +++++++++++++++++++ .../migration/V0016__CLEAR_TAIMU_CONTENT.sql | 10 ++++-- .../V0017__ADD_INDEX_IMAGES_OBJECT_KEY.sql | 1 - 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 src/main/java/db/migration/V0017__AddIndexImagesObjectKey.java delete mode 100644 src/main/resources/db/migration/V0017__ADD_INDEX_IMAGES_OBJECT_KEY.sql diff --git a/src/main/java/db/migration/V0017__AddIndexImagesObjectKey.java b/src/main/java/db/migration/V0017__AddIndexImagesObjectKey.java new file mode 100644 index 0000000..afebe58 --- /dev/null +++ b/src/main/java/db/migration/V0017__AddIndexImagesObjectKey.java @@ -0,0 +1,36 @@ +package db.migration; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.Statement; +import javax.sql.DataSource; +import org.flywaydb.core.api.configuration.Configuration; +import org.flywaydb.core.api.migration.BaseJavaMigration; +import org.flywaydb.core.api.migration.Context; + +public class V0017__AddIndexImagesObjectKey extends BaseJavaMigration { + + @Override + public void migrate(Context context) throws Exception { + Configuration config = context.getConfiguration(); + + try (Connection conn = getFreshConnection(config); + Statement stmt = conn.createStatement()) { + stmt.execute( + "CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_images_object_key ON images(object_key)"); + } + } + + private Connection getFreshConnection(Configuration config) throws Exception { + DataSource dataSource = config.getDataSource(); + if (dataSource != null) { + return dataSource.getConnection(); + } + return DriverManager.getConnection(config.getUrl(), config.getUser(), config.getPassword()); + } + + @Override + public boolean canExecuteInTransaction() { + return false; + } +} diff --git a/src/main/resources/db/migration/V0016__CLEAR_TAIMU_CONTENT.sql b/src/main/resources/db/migration/V0016__CLEAR_TAIMU_CONTENT.sql index 292c5ea..3f33b1c 100644 --- a/src/main/resources/db/migration/V0016__CLEAR_TAIMU_CONTENT.sql +++ b/src/main/resources/db/migration/V0016__CLEAR_TAIMU_CONTENT.sql @@ -1,3 +1,9 @@ +CREATE INDEX IF NOT EXISTS idx_manga_ingest_reviews_provider ON manga_ingest_reviews(content_provider_id); +CREATE INDEX IF NOT EXISTS idx_manga_content_provider_provider ON manga_content_provider(content_provider_id); +CREATE INDEX IF NOT EXISTS idx_manga_content_images_image ON manga_content_images(image_id); +CREATE INDEX IF NOT EXISTS idx_mangas_cover_image ON mangas(cover_image_id); +CREATE INDEX IF NOT EXISTS idx_content_providers_name ON content_providers(name); + DELETE FROM manga_ingest_reviews WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu'); @@ -5,5 +11,5 @@ DELETE FROM manga_content_provider WHERE content_provider_id = (SELECT id FROM content_providers WHERE name = 'Taimu'); DELETE FROM images -WHERE id NOT IN (SELECT DISTINCT image_id FROM manga_content_images WHERE image_id IS NOT NULL) - AND id NOT IN (SELECT DISTINCT cover_image_id FROM mangas WHERE cover_image_id IS NOT NULL); +WHERE NOT EXISTS (SELECT 1 FROM manga_content_images WHERE image_id = images.id) + AND NOT EXISTS (SELECT 1 FROM mangas WHERE cover_image_id = images.id); diff --git a/src/main/resources/db/migration/V0017__ADD_INDEX_IMAGES_OBJECT_KEY.sql b/src/main/resources/db/migration/V0017__ADD_INDEX_IMAGES_OBJECT_KEY.sql deleted file mode 100644 index b7a7cac..0000000 --- a/src/main/resources/db/migration/V0017__ADD_INDEX_IMAGES_OBJECT_KEY.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE INDEX IF NOT EXISTS idx_images_object_key ON images(object_key);