mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 04:44:37 +03:00
Decouple galleries from scenes (#1057)
This commit is contained in:
@@ -21,7 +21,7 @@ import (
|
||||
|
||||
var DB *sqlx.DB
|
||||
var dbPath string
|
||||
var appSchemaVersion uint = 17
|
||||
var appSchemaVersion uint = 18
|
||||
var databaseSchemaVersion uint
|
||||
|
||||
const sqlite3Driver = "sqlite3ex"
|
||||
|
||||
138
pkg/database/migrations/18_scene_galleries.up.sql
Normal file
138
pkg/database/migrations/18_scene_galleries.up.sql
Normal file
@@ -0,0 +1,138 @@
|
||||
-- recreate the tables referencing galleries to correct their references
|
||||
ALTER TABLE `galleries` rename to `_galleries_old`;
|
||||
ALTER TABLE `galleries_images` rename to `_galleries_images_old`;
|
||||
ALTER TABLE `galleries_tags` rename to `_galleries_tags_old`;
|
||||
ALTER TABLE `performers_galleries` rename to `_performers_galleries_old`;
|
||||
|
||||
CREATE TABLE `galleries` (
|
||||
`id` integer not null primary key autoincrement,
|
||||
`path` varchar(510),
|
||||
`checksum` varchar(255) not null,
|
||||
`zip` boolean not null default '0',
|
||||
`title` varchar(255),
|
||||
`url` varchar(255),
|
||||
`date` date,
|
||||
`details` text,
|
||||
`studio_id` integer,
|
||||
`rating` tinyint,
|
||||
`file_mod_time` datetime,
|
||||
`organized` boolean not null default '0',
|
||||
`created_at` datetime not null,
|
||||
`updated_at` datetime not null,
|
||||
foreign key(`studio_id`) references `studios`(`id`) on delete SET NULL
|
||||
);
|
||||
|
||||
DROP INDEX IF EXISTS `index_galleries_on_scene_id`;
|
||||
DROP INDEX IF EXISTS `galleries_path_unique`;
|
||||
DROP INDEX IF EXISTS `galleries_checksum_unique`;
|
||||
DROP INDEX IF EXISTS `index_galleries_on_studio_id`;
|
||||
|
||||
CREATE UNIQUE INDEX `galleries_path_unique` on `galleries` (`path`);
|
||||
CREATE UNIQUE INDEX `galleries_checksum_unique` on `galleries` (`checksum`);
|
||||
CREATE INDEX `index_galleries_on_studio_id` on `galleries` (`studio_id`);
|
||||
|
||||
CREATE TABLE `scenes_galleries` (
|
||||
`scene_id` integer,
|
||||
`gallery_id` integer,
|
||||
foreign key(`scene_id`) references `scenes`(`id`) on delete CASCADE,
|
||||
foreign key(`gallery_id`) references `galleries`(`id`) on delete CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX `index_scenes_galleries_on_scene_id` on `scenes_galleries` (`scene_id`);
|
||||
CREATE INDEX `index_scenes_galleries_on_gallery_id` on `scenes_galleries` (`gallery_id`);
|
||||
|
||||
CREATE TABLE `galleries_images` (
|
||||
`gallery_id` integer,
|
||||
`image_id` integer,
|
||||
foreign key(`gallery_id`) references `galleries`(`id`) on delete CASCADE,
|
||||
foreign key(`image_id`) references `images`(`id`) on delete CASCADE
|
||||
);
|
||||
|
||||
DROP INDEX IF EXISTS `index_galleries_images_on_image_id`;
|
||||
DROP INDEX IF EXISTS `index_galleries_images_on_gallery_id`;
|
||||
|
||||
CREATE INDEX `index_galleries_images_on_image_id` on `galleries_images` (`image_id`);
|
||||
CREATE INDEX `index_galleries_images_on_gallery_id` on `galleries_images` (`gallery_id`);
|
||||
|
||||
CREATE TABLE `performers_galleries` (
|
||||
`performer_id` integer,
|
||||
`gallery_id` integer,
|
||||
foreign key(`performer_id`) references `performers`(`id`) on delete CASCADE,
|
||||
foreign key(`gallery_id`) references `galleries`(`id`) on delete CASCADE
|
||||
);
|
||||
|
||||
DROP INDEX IF EXISTS `index_performers_galleries_on_gallery_id`;
|
||||
DROP INDEX IF EXISTS `index_performers_galleries_on_performer_id`;
|
||||
|
||||
CREATE INDEX `index_performers_galleries_on_gallery_id` on `performers_galleries` (`gallery_id`);
|
||||
CREATE INDEX `index_performers_galleries_on_performer_id` on `performers_galleries` (`performer_id`);
|
||||
|
||||
CREATE TABLE `galleries_tags` (
|
||||
`gallery_id` integer,
|
||||
`tag_id` integer,
|
||||
foreign key(`gallery_id`) references `galleries`(`id`) on delete CASCADE,
|
||||
foreign key(`tag_id`) references `tags`(`id`) on delete CASCADE
|
||||
);
|
||||
|
||||
DROP INDEX IF EXISTS `index_galleries_tags_on_tag_id`;
|
||||
DROP INDEX IF EXISTS `index_galleries_tags_on_gallery_id`;
|
||||
|
||||
CREATE INDEX `index_galleries_tags_on_tag_id` on `galleries_tags` (`tag_id`);
|
||||
CREATE INDEX `index_galleries_tags_on_gallery_id` on `galleries_tags` (`gallery_id`);
|
||||
|
||||
-- populate from the old tables
|
||||
INSERT INTO `galleries`
|
||||
(
|
||||
`id`,
|
||||
`path`,
|
||||
`checksum`,
|
||||
`zip`,
|
||||
`title`,
|
||||
`url`,
|
||||
`date`,
|
||||
`details`,
|
||||
`studio_id`,
|
||||
`rating`,
|
||||
`file_mod_time`,
|
||||
`organized`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
)
|
||||
SELECT
|
||||
`id`,
|
||||
`path`,
|
||||
`checksum`,
|
||||
`zip`,
|
||||
`title`,
|
||||
`url`,
|
||||
`date`,
|
||||
`details`,
|
||||
`studio_id`,
|
||||
`rating`,
|
||||
`file_mod_time`,
|
||||
`organized`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
FROM `_galleries_old`;
|
||||
|
||||
INSERT INTO `scenes_galleries`
|
||||
(
|
||||
`scene_id`,
|
||||
`gallery_id`
|
||||
)
|
||||
SELECT
|
||||
`scene_id`,
|
||||
`id`
|
||||
FROM `_galleries_old`
|
||||
WHERE scene_id IS NOT NULL;
|
||||
|
||||
-- these tables are a direct copy
|
||||
INSERT INTO `galleries_images` SELECT * from `_galleries_images_old`;
|
||||
INSERT INTO `galleries_tags` SELECT * from `_galleries_tags_old`;
|
||||
INSERT INTO `performers_galleries` SELECT * from `_performers_galleries_old`;
|
||||
|
||||
-- drop old tables
|
||||
DROP TABLE `_galleries_old`;
|
||||
DROP TABLE `_galleries_images_old`;
|
||||
DROP TABLE `_galleries_tags_old`;
|
||||
DROP TABLE `_performers_galleries_old`;
|
||||
Reference in New Issue
Block a user