feat(database): consolidate PostgreSQL migrations into a single baseline schema with quoted identifiers to resolve persistent case-sensitivity issues and JDBC migration failures

This commit is contained in:
tiny Flutter team 2026-04-07 23:13:22 +07:00
parent 1b4f8018ae
commit ff6bf2d6ac
87 changed files with 661 additions and 1355 deletions

View file

@ -0,0 +1,637 @@
-- PostgreSQL full schema (RE-AUDITED from SQLite dump)
-- This file contains the complete schema as of V20250730173126
-- Built with QUOTED identifiers for case-sensitivity on PostgreSQL
CREATE TABLE "LIBRARY"
(
"ID" varchar NOT NULL PRIMARY KEY,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"NAME" varchar NOT NULL,
"ROOT" varchar NOT NULL,
"IMPORT_COMICINFO_BOOK" boolean NOT NULL DEFAULT true,
"IMPORT_COMICINFO_SERIES" boolean NOT NULL DEFAULT true,
"IMPORT_COMICINFO_COLLECTION" boolean NOT NULL DEFAULT true,
"IMPORT_EPUB_BOOK" boolean NOT NULL DEFAULT true,
"IMPORT_EPUB_SERIES" boolean NOT NULL DEFAULT true,
"SCAN_FORCE_MODIFIED_TIME" boolean NOT NULL DEFAULT false,
"SCAN_STARTUP" boolean NOT NULL DEFAULT false,
"IMPORT_LOCAL_ARTWORK" boolean NOT NULL DEFAULT true,
"IMPORT_COMICINFO_READLIST" boolean NOT NULL DEFAULT true,
"IMPORT_BARCODE_ISBN" boolean NOT NULL DEFAULT true,
"CONVERT_TO_CBZ" boolean NOT NULL DEFAULT false,
"REPAIR_EXTENSIONS" boolean NOT NULL DEFAULT false,
"EMPTY_TRASH_AFTER_SCAN" boolean NOT NULL DEFAULT false,
"IMPORT_MYLAR_SERIES" boolean NOT NULL DEFAULT true,
"SERIES_COVER" varchar NOT NULL DEFAULT 'FIRST',
"UNAVAILABLE_DATE" timestamp NULL DEFAULT NULL,
"HASH_FILES" boolean NOT NULL DEFAULT true,
"HASH_PAGES" boolean NOT NULL DEFAULT false,
"ANALYZE_DIMENSIONS" boolean NOT NULL DEFAULT true,
"IMPORT_COMICINFO_SERIES_APPEND_VOLUME" boolean NOT NULL DEFAULT true,
"ONESHOTS_DIRECTORY" varchar NULL DEFAULT NULL,
"SCAN_CBX" boolean NOT NULL DEFAULT true,
"SCAN_PDF" boolean NOT NULL DEFAULT true,
"SCAN_EPUB" boolean NOT NULL DEFAULT true,
"SCAN_INTERVAL" varchar NOT NULL DEFAULT 'EVERY_6H',
"HASH_KOREADER" boolean NOT NULL DEFAULT false
);
CREATE TABLE "USER"
(
"ID" varchar NOT NULL PRIMARY KEY,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"EMAIL" varchar NOT NULL UNIQUE,
"PASSWORD" varchar NOT NULL,
"SHARED_ALL_LIBRARIES" boolean NOT NULL DEFAULT true,
"AGE_RESTRICTION" integer,
"AGE_RESTRICTION_ALLOW_ONLY" boolean
);
CREATE TABLE "USER_LIBRARY_SHARING"
(
"USER_ID" varchar NOT NULL,
"LIBRARY_ID" varchar NOT NULL,
PRIMARY KEY ("USER_ID", "LIBRARY_ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID"),
FOREIGN KEY ("LIBRARY_ID") REFERENCES "LIBRARY" ("ID")
);
CREATE TABLE "SERIES"
(
"ID" varchar NOT NULL PRIMARY KEY,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"FILE_LAST_MODIFIED" timestamp NOT NULL,
"NAME" varchar NOT NULL,
"URL" varchar NOT NULL,
"LIBRARY_ID" varchar NOT NULL,
"BOOK_COUNT" integer NOT NULL DEFAULT 0,
"DELETED_DATE" timestamp NULL DEFAULT NULL,
"oneshot" boolean NOT NULL DEFAULT false,
FOREIGN KEY ("LIBRARY_ID") REFERENCES "LIBRARY" ("ID")
);
CREATE TABLE "SERIES_METADATA"
(
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"STATUS" varchar NOT NULL,
"STATUS_LOCK" boolean NOT NULL DEFAULT false,
"TITLE" varchar NOT NULL,
"TITLE_LOCK" boolean NOT NULL DEFAULT false,
"TITLE_SORT" varchar NOT NULL,
"TITLE_SORT_LOCK" boolean NOT NULL DEFAULT false,
"SERIES_ID" varchar NOT NULL PRIMARY KEY,
"PUBLISHER" varchar NOT NULL DEFAULT '',
"PUBLISHER_LOCK" boolean NOT NULL DEFAULT false,
"READING_DIRECTION" varchar NULL,
"READING_DIRECTION_LOCK" boolean NOT NULL DEFAULT false,
"AGE_RATING" integer NULL,
"AGE_RATING_LOCK" boolean NOT NULL DEFAULT false,
"SUMMARY" text NOT NULL DEFAULT '',
"SUMMARY_LOCK" boolean NOT NULL DEFAULT false,
"LANGUAGE" varchar NOT NULL DEFAULT '',
"LANGUAGE_LOCK" boolean NOT NULL DEFAULT false,
"GENRES_LOCK" boolean NOT NULL DEFAULT false,
"TAGS_LOCK" boolean NOT NULL DEFAULT false,
"TOTAL_BOOK_COUNT" integer NULL,
"TOTAL_BOOK_COUNT_LOCK" boolean NOT NULL DEFAULT false,
"SHARING_LABELS_LOCK" boolean NOT NULL DEFAULT false,
"LINKS_LOCK" boolean NOT NULL DEFAULT false,
"ALTERNATE_TITLES_LOCK" boolean NOT NULL DEFAULT false,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "BOOK"
(
"ID" varchar NOT NULL PRIMARY KEY,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"FILE_LAST_MODIFIED" timestamp NOT NULL,
"NAME" varchar NOT NULL,
"URL" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
"FILE_SIZE" bigint NOT NULL DEFAULT 0,
"NUMBER" integer NOT NULL DEFAULT 0,
"LIBRARY_ID" varchar NOT NULL,
"FILE_HASH" varchar NOT NULL DEFAULT '',
"DELETED_DATE" timestamp NULL DEFAULT NULL,
"oneshot" boolean NOT NULL DEFAULT false,
"FILE_HASH_KOREADER" varchar NOT NULL DEFAULT '',
FOREIGN KEY ("LIBRARY_ID") REFERENCES "LIBRARY" ("ID"),
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "MEDIA_PAGE"
(
"FILE_NAME" varchar NOT NULL,
"MEDIA_TYPE" varchar NOT NULL,
"NUMBER" integer NOT NULL,
"BOOK_ID" varchar NOT NULL,
"WIDTH" integer NULL,
"HEIGHT" integer NULL,
"FILE_HASH" varchar NOT NULL DEFAULT '',
"FILE_SIZE" bigint NULL,
PRIMARY KEY ("BOOK_ID", "NUMBER"),
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "MEDIA_FILE"
(
"FILE_NAME" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
"MEDIA_TYPE" varchar NULL,
"SUB_TYPE" varchar NULL,
"FILE_SIZE" bigint NULL,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "BOOK_METADATA_AUTHOR"
(
"NAME" varchar NOT NULL,
"ROLE" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "COLLECTION"
(
"ID" varchar NOT NULL PRIMARY KEY,
"NAME" varchar NOT NULL,
"ORDERED" boolean NOT NULL DEFAULT false,
"SERIES_COUNT" integer NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE "COLLECTION_SERIES"
(
"COLLECTION_ID" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
"NUMBER" integer NOT NULL,
PRIMARY KEY ("COLLECTION_ID", "SERIES_ID"),
FOREIGN KEY ("COLLECTION_ID") REFERENCES "COLLECTION" ("ID"),
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "THUMBNAIL_BOOK"
(
"ID" varchar NOT NULL PRIMARY KEY,
"THUMBNAIL" bytea NULL,
"URL" varchar NULL,
"SELECTED" boolean NOT NULL DEFAULT false,
"TYPE" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"BOOK_ID" varchar NOT NULL,
"WIDTH" integer NOT NULL DEFAULT 0,
"HEIGHT" integer NOT NULL DEFAULT 0,
"MEDIA_TYPE" varchar NOT NULL DEFAULT '',
"FILE_SIZE" bigint NOT NULL DEFAULT 0,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "MEDIA"
(
"MEDIA_TYPE" varchar NULL,
"STATUS" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"COMMENT" varchar NULL,
"BOOK_ID" varchar NOT NULL PRIMARY KEY,
"PAGE_COUNT" integer NOT NULL DEFAULT 0,
"EXTENSION_CLASS" varchar NULL,
"_UNUSED" varchar NULL,
"EXTENSION_VALUE_BLOB" bytea NULL,
"EPUB_DIVINA_COMPATIBLE" boolean NOT NULL DEFAULT false,
"EPUB_IS_KEPUB" boolean NOT NULL DEFAULT false,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "READLIST"
(
"ID" varchar NOT NULL PRIMARY KEY,
"NAME" varchar NOT NULL,
"BOOK_COUNT" integer NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"SUMMARY" text NOT NULL DEFAULT '',
"ORDERED" boolean NOT NULL DEFAULT true
);
CREATE TABLE "READLIST_BOOK"
(
"READLIST_ID" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
"NUMBER" integer NOT NULL,
PRIMARY KEY ("READLIST_ID", "BOOK_ID"),
FOREIGN KEY ("READLIST_ID") REFERENCES "READLIST" ("ID"),
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "SERIES_METADATA_GENRE"
(
"GENRE" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "SERIES_METADATA_TAG"
(
"TAG" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "BOOK_METADATA_TAG"
(
"TAG" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "BOOK_METADATA"
(
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"NUMBER" varchar NOT NULL,
"NUMBER_LOCK" boolean NOT NULL DEFAULT false,
"NUMBER_SORT" real NOT NULL,
"NUMBER_SORT_LOCK" boolean NOT NULL DEFAULT false,
"RELEASE_DATE" date NULL,
"RELEASE_DATE_LOCK" boolean NOT NULL DEFAULT false,
"SUMMARY" text NOT NULL DEFAULT '',
"SUMMARY_LOCK" boolean NOT NULL DEFAULT false,
"TITLE" varchar NOT NULL,
"TITLE_LOCK" boolean NOT NULL DEFAULT false,
"AUTHORS_LOCK" boolean NOT NULL DEFAULT false,
"TAGS_LOCK" boolean NOT NULL DEFAULT false,
"BOOK_ID" varchar NOT NULL PRIMARY KEY,
"ISBN" varchar NOT NULL DEFAULT '',
"ISBN_LOCK" boolean NOT NULL DEFAULT false,
"LINKS_LOCK" boolean NOT NULL DEFAULT false,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "BOOK_METADATA_AGGREGATION"
(
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"RELEASE_DATE" date NULL,
"SUMMARY" text NOT NULL DEFAULT '',
"SUMMARY_NUMBER" varchar NOT NULL DEFAULT '',
"SERIES_ID" varchar NOT NULL PRIMARY KEY,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "BOOK_METADATA_AGGREGATION_AUTHOR"
(
"NAME" varchar NOT NULL,
"ROLE" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "READ_PROGRESS_SERIES"
(
"SERIES_ID" varchar NOT NULL,
"USER_ID" varchar NOT NULL,
"READ_COUNT" integer NOT NULL,
"IN_PROGRESS_COUNT" integer NOT NULL,
"MOST_RECENT_READ_DATE" timestamp NULL,
"LAST_MODIFIED_DATE" timestamp NULL,
PRIMARY KEY ("SERIES_ID", "USER_ID"),
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "SIDECAR"
(
"URL" varchar NOT NULL PRIMARY KEY,
"PARENT_URL" varchar NOT NULL,
"LAST_MODIFIED_TIME" timestamp NOT NULL,
"LIBRARY_ID" varchar NOT NULL
);
CREATE TABLE "AUTHENTICATION_ACTIVITY"
(
"USER_ID" varchar NULL DEFAULT NULL,
"EMAIL" varchar NULL DEFAULT NULL,
"IP" varchar NULL DEFAULT NULL,
"USER_AGENT" varchar NULL DEFAULT NULL,
"SUCCESS" boolean NOT NULL,
"ERROR" varchar NULL DEFAULT NULL,
"DATE_TIME" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"SOURCE" varchar NULL DEFAULT NULL,
"API_KEY_ID" varchar NULL DEFAULT NULL,
"API_KEY_COMMENT" varchar NULL DEFAULT NULL,
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "BOOK_METADATA_AGGREGATION_TAG"
(
"TAG" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "THUMBNAIL_SERIES"
(
"ID" varchar NOT NULL PRIMARY KEY,
"URL" varchar NULL DEFAULT NULL,
"SELECTED" boolean NOT NULL DEFAULT false,
"THUMBNAIL" bytea NULL DEFAULT NULL,
"TYPE" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"SERIES_ID" varchar NOT NULL,
"WIDTH" integer NOT NULL DEFAULT 0,
"HEIGHT" integer NOT NULL DEFAULT 0,
"MEDIA_TYPE" varchar NOT NULL DEFAULT '',
"FILE_SIZE" bigint NOT NULL DEFAULT 0,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "READ_PROGRESS"
(
"BOOK_ID" varchar NOT NULL,
"USER_ID" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"PAGE" integer NOT NULL,
"COMPLETED" boolean NOT NULL,
"READ_DATE" timestamp NULL DEFAULT CURRENT_TIMESTAMP,
"device_id" varchar DEFAULT '',
"device_name" varchar DEFAULT '',
"locator" bytea NULL,
PRIMARY KEY ("BOOK_ID", "USER_ID"),
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "THUMBNAIL_COLLECTION"
(
"ID" varchar NOT NULL PRIMARY KEY,
"SELECTED" boolean NOT NULL DEFAULT false,
"THUMBNAIL" bytea NOT NULL,
"TYPE" varchar NOT NULL,
"COLLECTION_ID" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"WIDTH" integer NOT NULL DEFAULT 0,
"HEIGHT" integer NOT NULL DEFAULT 0,
"MEDIA_TYPE" varchar NOT NULL DEFAULT '',
"FILE_SIZE" bigint NOT NULL DEFAULT 0,
FOREIGN KEY ("COLLECTION_ID") REFERENCES "COLLECTION" ("ID")
);
CREATE TABLE "THUMBNAIL_READLIST"
(
"ID" varchar NOT NULL PRIMARY KEY,
"SELECTED" boolean NOT NULL DEFAULT false,
"THUMBNAIL" bytea NOT NULL,
"TYPE" varchar NOT NULL,
"READLIST_ID" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"WIDTH" integer NOT NULL DEFAULT 0,
"HEIGHT" integer NOT NULL DEFAULT 0,
"MEDIA_TYPE" varchar NOT NULL DEFAULT '',
"FILE_SIZE" bigint NOT NULL DEFAULT 0,
FOREIGN KEY ("READLIST_ID") REFERENCES "READLIST" ("ID")
);
CREATE TABLE "BOOK_METADATA_LINK"
(
"LABEL" varchar NOT NULL,
"URL" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
FOREIGN KEY ("BOOK_ID") REFERENCES "BOOK" ("ID")
);
CREATE TABLE "HISTORICAL_EVENT"
(
"ID" varchar NOT NULL PRIMARY KEY,
"TYPE" varchar NOT NULL,
"BOOK_ID" varchar NULL,
"SERIES_ID" varchar NULL,
"TIMESTAMP" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE "HISTORICAL_EVENT_PROPERTIES"
(
"ID" varchar NOT NULL,
"KEY" varchar NOT NULL,
"VALUE" varchar NOT NULL,
PRIMARY KEY ("ID", "KEY"),
FOREIGN KEY ("ID") REFERENCES "HISTORICAL_EVENT" ("ID")
);
CREATE TABLE "SERIES_METADATA_SHARING"
(
"LABEL" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "USER_SHARING"
(
"LABEL" varchar NOT NULL,
"ALLOW" boolean NOT NULL,
"USER_ID" varchar NOT NULL,
PRIMARY KEY ("LABEL", "ALLOW", "USER_ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "SERIES_METADATA_LINK"
(
"LABEL" varchar NOT NULL,
"URL" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "SERIES_METADATA_ALTERNATE_TITLE"
(
"LABEL" varchar NOT NULL,
"TITLE" varchar NOT NULL,
"SERIES_ID" varchar NOT NULL,
FOREIGN KEY ("SERIES_ID") REFERENCES "SERIES" ("ID")
);
CREATE TABLE "PAGE_HASH"
(
"HASH" varchar NOT NULL PRIMARY KEY,
"SIZE" bigint NULL,
"ACTION" varchar NOT NULL,
"DELETE_COUNT" integer NOT NULL DEFAULT 0,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE "PAGE_HASH_THUMBNAIL"
(
"HASH" varchar NOT NULL PRIMARY KEY,
"THUMBNAIL" bytea NOT NULL
);
CREATE TABLE "ANNOUNCEMENTS_READ"
(
"USER_ID" varchar NOT NULL,
"ANNOUNCEMENT_ID" varchar NOT NULL,
PRIMARY KEY ("USER_ID", "ANNOUNCEMENT_ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "LIBRARY_EXCLUSIONS"
(
"LIBRARY_ID" varchar NOT NULL,
"EXCLUSION" varchar NOT NULL,
PRIMARY KEY ("LIBRARY_ID", "EXCLUSION"),
FOREIGN KEY ("LIBRARY_ID") REFERENCES "LIBRARY" ("ID")
);
CREATE TABLE "SERVER_SETTINGS"
(
"KEY" varchar NOT NULL PRIMARY KEY,
"VALUE" varchar NULL
);
CREATE TABLE "USER_API_KEY"
(
"ID" varchar NOT NULL PRIMARY KEY,
"USER_ID" varchar NOT NULL,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"LAST_MODIFIED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"API_KEY" varchar NOT NULL UNIQUE,
"COMMENT" varchar NOT NULL,
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "SYNC_POINT"
(
"ID" varchar NOT NULL PRIMARY KEY,
"CREATED_DATE" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
"USER_ID" varchar NOT NULL,
"API_KEY_ID" varchar NULL,
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "SYNC_POINT_BOOK_REMOVED_SYNCED"
(
"SYNC_POINT_ID" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
PRIMARY KEY ("SYNC_POINT_ID", "BOOK_ID"),
FOREIGN KEY ("SYNC_POINT_ID") REFERENCES "SYNC_POINT" ("ID")
);
CREATE TABLE "SYNC_POINT_BOOK"
(
"SYNC_POINT_ID" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
"BOOK_CREATED_DATE" timestamp NOT NULL,
"BOOK_LAST_MODIFIED_DATE" timestamp NOT NULL,
"BOOK_FILE_LAST_MODIFIED" timestamp NOT NULL,
"BOOK_FILE_SIZE" bigint NOT NULL,
"BOOK_FILE_HASH" varchar NOT NULL,
"BOOK_METADATA_LAST_MODIFIED_DATE" timestamp NOT NULL,
"BOOK_READ_PROGRESS_LAST_MODIFIED_DATE" timestamp NULL,
"SYNCED" boolean NOT NULL DEFAULT false,
"BOOK_THUMBNAIL_ID" varchar NULL,
PRIMARY KEY ("SYNC_POINT_ID", "BOOK_ID"),
FOREIGN KEY ("SYNC_POINT_ID") REFERENCES "SYNC_POINT" ("ID")
);
CREATE TABLE "SYNC_POINT_READLIST"
(
"SYNC_POINT_ID" varchar NOT NULL,
"READLIST_ID" varchar NOT NULL,
"READLIST_NAME" varchar NOT NULL,
"READLIST_CREATED_DATE" timestamp NOT NULL,
"READLIST_LAST_MODIFIED_DATE" timestamp NOT NULL,
"SYNCED" boolean NOT NULL DEFAULT false,
PRIMARY KEY ("SYNC_POINT_ID", "READLIST_ID"),
FOREIGN KEY ("SYNC_POINT_ID") REFERENCES "SYNC_POINT" ("ID")
);
CREATE TABLE "SYNC_POINT_READLIST_BOOK"
(
"SYNC_POINT_ID" varchar NOT NULL,
"READLIST_ID" varchar NOT NULL,
"BOOK_ID" varchar NOT NULL,
PRIMARY KEY ("SYNC_POINT_ID", "READLIST_ID", "BOOK_ID"),
FOREIGN KEY ("SYNC_POINT_ID") REFERENCES "SYNC_POINT" ("ID")
);
CREATE TABLE "SYNC_POINT_READLIST_REMOVED_SYNCED"
(
"SYNC_POINT_ID" varchar NOT NULL,
"READLIST_ID" varchar NOT NULL,
PRIMARY KEY ("SYNC_POINT_ID", "READLIST_ID"),
FOREIGN KEY ("SYNC_POINT_ID") REFERENCES "SYNC_POINT" ("ID")
);
CREATE TABLE "USER_ROLE"
(
"USER_ID" varchar NOT NULL,
"ROLE" varchar NOT NULL,
PRIMARY KEY ("USER_ID", "ROLE"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
CREATE TABLE "CLIENT_SETTINGS_GLOBAL"
(
"KEY" varchar NOT NULL PRIMARY KEY,
"VALUE" varchar NOT NULL,
"ALLOW_UNAUTHORIZED" boolean NOT NULL DEFAULT false
);
CREATE TABLE "CLIENT_SETTINGS_USER"
(
"USER_ID" varchar NOT NULL,
"KEY" varchar NOT NULL,
"VALUE" varchar NOT NULL,
PRIMARY KEY ("KEY", "USER_ID"),
FOREIGN KEY ("USER_ID") REFERENCES "USER" ("ID")
);
-- Indices
CREATE INDEX "idx__thumbnail_book__book_id" on "THUMBNAIL_BOOK" ("BOOK_ID");
CREATE INDEX "idx__series_metadata_sharing__series_id" on "SERIES_METADATA_SHARING" ("SERIES_ID");
CREATE INDEX "idx__book_metadata_aggregation_tag__series_id" on "BOOK_METADATA_AGGREGATION_TAG" ("SERIES_ID");
CREATE INDEX "idx__thumbnail_collection__collection_id" on "THUMBNAIL_COLLECTION" ("COLLECTION_ID");
CREATE INDEX "idx__thumbnail_readlist__readlist_id" on "THUMBNAIL_READLIST" ("READLIST_ID");
CREATE INDEX "idx__thumbnail_series__series_id" on "THUMBNAIL_SERIES" ("SERIES_ID");
CREATE INDEX "idx__authentication_activity__user_id" on "AUTHENTICATION_ACTIVITY" ("USER_ID");
CREATE INDEX "idx__book_metadata__number_sort" on "BOOK_METADATA" ("NUMBER_SORT");
CREATE INDEX "idx__series__last_modified_date" on "SERIES" ("LAST_MODIFIED_DATE");
CREATE INDEX "idx__series__created_date" on "SERIES" ("CREATED_DATE");
CREATE INDEX "idx__book_metadata__release_date" on "BOOK_METADATA" ("RELEASE_DATE");
CREATE INDEX "idx__read_progress__last_modified_date" on "READ_PROGRESS" ("LAST_MODIFIED_DATE");
CREATE INDEX "idx__media__status" on "MEDIA" ("STATUS");
CREATE INDEX "idx__series_metadata_link__series_id" on "SERIES_METADATA_LINK" ("SERIES_ID");
CREATE INDEX "idx__series_metadata_alternate_title__series_id" on "SERIES_METADATA_ALTERNATE_TITLE" ("SERIES_ID");
CREATE INDEX "idx__series_metadata__title" on "SERIES_METADATA" ("TITLE");
CREATE INDEX "idx__library_exclusions__library_id" on "LIBRARY_EXCLUSIONS" ("LIBRARY_ID");
CREATE INDEX "idx__thumbnail_book__width" on "THUMBNAIL_BOOK" ("WIDTH");
CREATE INDEX "idx__thumbnail_book__height" on "THUMBNAIL_BOOK" ("HEIGHT");
CREATE INDEX "idx__thumbnail_book__file_size" on "THUMBNAIL_BOOK" ("FILE_SIZE");
CREATE INDEX "idx__user_api_key__user_id" on "USER_API_KEY" ("USER_ID");
CREATE INDEX "idx__sync_point__user_id" on "SYNC_POINT" ("USER_ID");
CREATE INDEX "idx__sync_point_book_removed_status__sync_point_id" on "SYNC_POINT_BOOK_REMOVED_SYNCED" ("SYNC_POINT_ID");
CREATE INDEX "idx__sync_point_book__sync_point_id" on "SYNC_POINT_BOOK" ("SYNC_POINT_ID");
CREATE INDEX "idx__sync_point_readlist__sync_point_id" on "SYNC_POINT_READLIST" ("SYNC_POINT_ID");
CREATE INDEX "idx__sync_point_readlist_book__sync_point_id_readlist_id" on "SYNC_POINT_READLIST_BOOK" ("SYNC_POINT_ID", "READLIST_ID");
CREATE INDEX "idx__book_metadata_link__book_id" on "BOOK_METADATA_LINK" ("BOOK_ID");
CREATE INDEX "idx__book__series_id" on "BOOK" ("SERIES_ID");
CREATE INDEX "idx__book__library_id" on "BOOK" ("LIBRARY_ID");
CREATE INDEX "idx__book_metadata_author__book_id" on "BOOK_METADATA_AUTHOR" ("BOOK_ID");
CREATE INDEX "idx__book_metadata_tag__book_id" on "BOOK_METADATA_TAG" ("BOOK_ID");
CREATE INDEX "idx__media_file__book_id" on "MEDIA_FILE" ("BOOK_ID");
CREATE INDEX "idx__series__library_id" on "SERIES" ("LIBRARY_ID");
CREATE INDEX "idx__series_metadata_genre__series_id" on "SERIES_METADATA_GENRE" ("SERIES_ID");
CREATE INDEX "idx__series_metadata_tag__series_id" on "SERIES_METADATA_TAG" ("SERIES_ID");
CREATE INDEX "idx__book_metadata_aggregation_author__series_id" on "BOOK_METADATA_AGGREGATION_AUTHOR" ("SERIES_ID");
CREATE INDEX "idx__book__created_date" on "BOOK" ("CREATED_DATE");

View file

@ -1,194 +0,0 @@
CREATE TABLE LIBRARY
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
NAME varchar NOT NULL,
ROOT varchar NOT NULL,
IMPORT_COMICINFO_BOOK boolean NOT NULL DEFAULT true,
IMPORT_COMICINFO_SERIES boolean NOT NULL DEFAULT true,
IMPORT_COMICINFO_COLLECTION boolean NOT NULL DEFAULT true,
IMPORT_EPUB_BOOK boolean NOT NULL DEFAULT true,
IMPORT_EPUB_SERIES boolean NOT NULL DEFAULT true
);
CREATE TABLE "USER"
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
EMAIL varchar NOT NULL UNIQUE,
PASSWORD varchar NOT NULL,
SHARED_ALL_LIBRARIES boolean NOT NULL DEFAULT true,
ROLE_ADMIN boolean NOT NULL DEFAULT false,
ROLE_FILE_DOWNLOAD boolean NOT NULL DEFAULT true,
ROLE_PAGE_STREAMING boolean NOT NULL DEFAULT true
);
CREATE TABLE USER_LIBRARY_SHARING
(
USER_ID varchar NOT NULL,
LIBRARY_ID varchar NOT NULL,
PRIMARY KEY (USER_ID, LIBRARY_ID),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID),
FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (ID)
);
CREATE TABLE SERIES
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
FILE_LAST_MODIFIED timestamp NOT NULL,
NAME varchar NOT NULL,
URL varchar NOT NULL,
LIBRARY_ID varchar NOT NULL,
FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (ID)
);
CREATE TABLE SERIES_METADATA
(
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
STATUS varchar NOT NULL,
STATUS_LOCK boolean NOT NULL DEFAULT false,
TITLE varchar NOT NULL,
TITLE_LOCK boolean NOT NULL DEFAULT false,
TITLE_SORT varchar NOT NULL,
TITLE_SORT_LOCK boolean NOT NULL DEFAULT false,
SUMMARY text,
SUMMARY_LOCK boolean NOT NULL DEFAULT false,
PUBLISHER varchar,
PUBLISHER_LOCK boolean NOT NULL DEFAULT false,
READING_DIRECTION varchar,
READING_DIRECTION_LOCK boolean NOT NULL DEFAULT false,
AGE_RATING integer,
AGE_RATING_LOCK boolean NOT NULL DEFAULT false,
LANGUAGE varchar,
LANGUAGE_LOCK boolean NOT NULL DEFAULT false,
SERIES_ID varchar NOT NULL PRIMARY KEY,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
CREATE TABLE BOOK
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
FILE_LAST_MODIFIED timestamp NOT NULL,
NAME varchar NOT NULL,
URL varchar NOT NULL,
FILE_SIZE bigint NOT NULL,
NUMBER integer,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
CREATE TABLE MEDIA
(
MEDIA_TYPE varchar NULL,
STATUS varchar NOT NULL,
THUMBNAIL bytea NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
COMMENT varchar NULL,
BOOK_ID varchar NOT NULL PRIMARY KEY,
PAGE_COUNT integer NOT NULL DEFAULT 0,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE MEDIA_PAGE
(
FILE_NAME varchar NOT NULL,
MEDIA_TYPE varchar NOT NULL,
NUMBER integer NOT NULL,
BOOK_ID varchar NOT NULL,
PRIMARY KEY (BOOK_ID, NUMBER),
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE MEDIA_FILE
(
FILE_NAME varchar NOT NULL,
BOOK_ID varchar NOT NULL,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE BOOK_METADATA
(
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
TITLE varchar NOT NULL,
TITLE_LOCK boolean NOT NULL DEFAULT false,
TITLE_SORT varchar NOT NULL,
TITLE_SORT_LOCK boolean NOT NULL DEFAULT false,
SUMMARY text,
SUMMARY_LOCK boolean NOT NULL DEFAULT false,
NUMBER varchar,
NUMBER_LOCK boolean NOT NULL DEFAULT false,
NUMBER_SORT double precision,
NUMBER_SORT_LOCK boolean NOT NULL DEFAULT false,
RELEASE_DATE date,
RELEASE_DATE_LOCK boolean NOT NULL DEFAULT false,
AUTHORS text,
AUTHORS_LOCK boolean NOT NULL DEFAULT false,
BOOK_ID varchar NOT NULL PRIMARY KEY,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE READ_PROGRESS
(
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PAGE integer NOT NULL,
COMPLETED boolean NOT NULL DEFAULT false,
USER_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
PRIMARY KEY (USER_ID, BOOK_ID),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID),
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE READLIST
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
NAME varchar NOT NULL,
SUMMARY text,
FILTERED boolean NOT NULL DEFAULT false,
USER_ID varchar NOT NULL,
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
CREATE TABLE READLIST_BOOKS
(
READLIST_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
NUMBER integer NOT NULL,
PRIMARY KEY (READLIST_ID, BOOK_ID),
FOREIGN KEY (READLIST_ID) REFERENCES READLIST (ID),
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
CREATE TABLE COLLECTION
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
NAME varchar NOT NULL,
SUMMARY text,
FILTERED boolean NOT NULL DEFAULT false,
USER_ID varchar NOT NULL,
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
CREATE TABLE COLLECTION_SERIES
(
COLLECTION_ID varchar NOT NULL,
SERIES_ID varchar NOT NULL,
NUMBER integer NOT NULL,
PRIMARY KEY (COLLECTION_ID, SERIES_ID),
FOREIGN KEY (COLLECTION_ID) REFERENCES COLLECTION (ID),
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);

View file

@ -1,4 +0,0 @@
alter table media_page
add column width int NULL;
alter table media_page
add column height int NULL;

View file

@ -1,13 +0,0 @@
-- This is a multi-steps migration, mixing 2 SQL migrations and a Java migration in-between
CREATE TABLE THUMBNAIL_BOOK
(
ID varchar NOT NULL PRIMARY KEY,
THUMBNAIL bytea NULL,
URL varchar NULL,
SELECTED boolean NOT NULL DEFAULT false,
TYPE varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
BOOK_ID varchar NOT NULL,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);

View file

@ -1,26 +0,0 @@
-- This is a multi-steps migration, mixing 2 SQL migrations and a Java migration in-between
CREATE INDEX idx__thumbnail_book__book_id on THUMBNAIL_BOOK (BOOK_ID);
-- Remove column THUMBNAIL from table MEDIA
ALTER TABLE MEDIA
RENAME TO _MEDIA_OLD;
CREATE TABLE MEDIA
(
MEDIA_TYPE varchar NULL,
STATUS varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
COMMENT varchar NULL,
BOOK_ID varchar NOT NULL PRIMARY KEY,
PAGE_COUNT integer NOT NULL DEFAULT 0,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
INSERT INTO MEDIA (MEDIA_TYPE, STATUS, CREATED_DATE, LAST_MODIFIED_DATE, COMMENT, BOOK_ID, PAGE_COUNT)
SELECT MEDIA_TYPE, STATUS, CREATED_DATE, LAST_MODIFIED_DATE, COMMENT, BOOK_ID, PAGE_COUNT
FROM _MEDIA_OLD;
DROP TABLE _MEDIA_OLD;

View file

@ -1,10 +0,0 @@
CREATE TABLE THUMBNAIL_SERIES
(
ID varchar NOT NULL PRIMARY KEY,
URL varchar NOT NULL,
SELECTED boolean NOT NULL DEFAULT false,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);

View file

@ -1,4 +0,0 @@
alter table library
add column SCAN_FORCE_MODIFIED_TIME boolean NOT NULL DEFAULT false;
alter table library
add column SCAN_DEEP boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
alter table library
add column IMPORT_LOCAL_ARTWORK boolean NOT NULL DEFAULT true;

View file

@ -1,20 +0,0 @@
CREATE TABLE READLIST
(
ID varchar NOT NULL PRIMARY KEY,
NAME varchar NOT NULL,
BOOK_COUNT int NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE READLIST_BOOK
(
READLIST_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
NUMBER int NOT NULL,
PRIMARY KEY (READLIST_ID, BOOK_ID),
FOREIGN KEY (READLIST_ID) REFERENCES READLIST (ID),
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
alter table library
add column IMPORT_COMICINFO_READLIST boolean NOT NULL DEFAULT true;

View file

@ -1,52 +0,0 @@
alter table series_metadata
add column PUBLISHER varchar NOT NULL DEFAULT '';
alter table series_metadata
add column PUBLISHER_LOCK boolean NOT NULL DEFAULT false;
alter table series_metadata
add column READING_DIRECTION varchar NULL;
alter table series_metadata
add column READING_DIRECTION_LOCK boolean NOT NULL DEFAULT false;
alter table series_metadata
add column AGE_RATING int NULL;
alter table series_metadata
add column AGE_RATING_LOCK boolean NOT NULL DEFAULT false;
alter table SERIES_METADATA
add column SUMMARY varchar NOT NULL DEFAULT '';
alter table SERIES_METADATA
add column SUMMARY_LOCK boolean NOT NULL DEFAULT false;
alter table SERIES_METADATA
add column LANGUAGE varchar NOT NULL DEFAULT '';
alter table SERIES_METADATA
add column LANGUAGE_LOCK boolean NOT NULL DEFAULT false;
alter table SERIES_METADATA
add column GENRES_LOCK boolean NOT NULL DEFAULT false;
alter table SERIES_METADATA
add column TAGS_LOCK boolean NOT NULL DEFAULT false;
CREATE TABLE SERIES_METADATA_GENRE
(
GENRE varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
CREATE TABLE SERIES_METADATA_TAG
(
TAG varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
CREATE TABLE BOOK_METADATA_TAG
(
TAG varchar NOT NULL,
BOOK_ID varchar NOT NULL,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);

View file

@ -1,45 +0,0 @@
ALTER TABLE BOOK_METADATA
RENAME TO _BOOK_METADATA_OLD;
CREATE TABLE BOOK_METADATA
(
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
NUMBER varchar NOT NULL,
NUMBER_LOCK boolean NOT NULL DEFAULT false,
NUMBER_SORT real NOT NULL,
NUMBER_SORT_LOCK boolean NOT NULL DEFAULT false,
RELEASE_DATE date NULL,
RELEASE_DATE_LOCK boolean NOT NULL DEFAULT false,
SUMMARY varchar NOT NULL DEFAULT '',
SUMMARY_LOCK boolean NOT NULL DEFAULT false,
TITLE varchar NOT NULL,
TITLE_LOCK boolean NOT NULL DEFAULT false,
AUTHORS_LOCK boolean NOT NULL DEFAULT false,
TAGS_LOCK boolean NOT NULL DEFAULT false,
BOOK_ID varchar NOT NULL PRIMARY KEY,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
INSERT INTO BOOK_METADATA (CREATED_DATE, LAST_MODIFIED_DATE, NUMBER, NUMBER_LOCK, NUMBER_SORT, NUMBER_SORT_LOCK,
RELEASE_DATE, RELEASE_DATE_LOCK, SUMMARY, SUMMARY_LOCK, TITLE, TITLE_LOCK, AUTHORS_LOCK,
BOOK_ID)
SELECT CREATED_DATE,
LAST_MODIFIED_DATE,
NUMBER,
NUMBER_LOCK,
NUMBER_SORT,
NUMBER_SORT_LOCK,
RELEASE_DATE,
RELEASE_DATE_LOCK,
SUMMARY,
SUMMARY_LOCK,
TITLE,
TITLE_LOCK,
AUTHORS_LOCK,
BOOK_ID
FROM _BOOK_METADATA_OLD;
DROP TABLE _BOOK_METADATA_OLD;

View file

@ -1,15 +0,0 @@
CREATE INDEX idx__book__series_id on BOOK (SERIES_ID);
CREATE INDEX idx__book__library_id on BOOK (LIBRARY_ID);
CREATE INDEX idx__book_metadata_author__book_id on BOOK_METADATA_AUTHOR (BOOK_ID);
CREATE INDEX idx__book_metadata_tag__book_id on BOOK_METADATA_TAG (BOOK_ID);
CREATE INDEX idx__media_file__book_id on MEDIA_FILE (BOOK_ID);
CREATE INDEX idx__series__library_id on SERIES (LIBRARY_ID);
CREATE INDEX idx__series_metadata_genre__series_id on SERIES_METADATA_GENRE (SERIES_ID);
CREATE INDEX idx__series_metadata_tag__series_id on SERIES_METADATA_TAG (SERIES_ID);
CREATE INDEX idx__thumbnail_series__series_id on THUMBNAIL_SERIES (SERIES_ID);

View file

@ -1,37 +0,0 @@
UPDATE BOOK_METADATA_TAG
SET tag = lower(trim(tag));
delete
from BOOK_METADATA_TAG
where ROWID not in
(
select min(rowid)
from BOOK_METADATA_TAG
group by tag, BOOK_ID
);
UPDATE SERIES_METADATA_TAG
SET tag = lower(trim(tag));
delete
from SERIES_METADATA_TAG
where ROWID not in
(
select min(rowid)
from SERIES_METADATA_TAG
group by tag, SERIES_ID
);
UPDATE SERIES_METADATA_GENRE
SET GENRE = lower(trim(GENRE));
delete
from SERIES_METADATA_GENRE
where ROWID not in
(
select min(rowid)
from SERIES_METADATA_GENRE
group by GENRE, SERIES_ID
);

View file

@ -1,20 +0,0 @@
CREATE TABLE BOOK_METADATA_AGGREGATION
(
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
RELEASE_DATE date NULL,
SUMMARY varchar NOT NULL DEFAULT '',
SUMMARY_NUMBER varchar NOT NULL DEFAULT '',
SERIES_ID varchar NOT NULL PRIMARY KEY,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
CREATE TABLE BOOK_METADATA_AGGREGATION_AUTHOR
(
NAME varchar NOT NULL,
ROLE varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
INSERT INTO BOOK_METADATA_AGGREGATION(SERIES_ID)
SELECT ID
from SERIES;

View file

@ -1,7 +0,0 @@
alter table library
add column IMPORT_BARCODE_ISBN boolean NOT NULL DEFAULT true;
alter table book_metadata
add column ISBN varchar NOT NULL DEFAULT '';
alter table book_metadata
add column ISBN_LOCK boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
alter table library
add column CONVERT_TO_CBZ boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
alter table library
add column REPAIR_EXTENSIONS boolean NOT NULL DEFAULT false;

View file

@ -1,18 +0,0 @@
-- fix media type for files analyzed with tika 1.23 or before which didn't get the rar version
update MEDIA
set MEDIA_TYPE = 'application/x-rar-compressed; version=4'
where MEDIA_TYPE = 'application/x-rar-compressed'
and STATUS = 'READY';
-- rar files that could have had an incorrect analysis are marked at OUTDATED to be ra-analyzed
update MEDIA
set STATUS = 'OUTDATED'
where BOOK_ID in (
select F.BOOK_ID
from MEDIA_FILE F
left join MEDIA M on F.BOOK_ID = M.BOOK_ID
where F.FILE_NAME like '%.%'
and M.MEDIA_TYPE like 'application/x-rar-compressed%'
and lower(replace(F.FILE_NAME, rtrim(F.FILE_NAME, replace(F.FILE_NAME, '.', '')), ''))
in ('jpg', 'jpeg', 'webp', 'tiff', 'tif', 'gif', 'png', 'bmp')
);

View file

@ -1 +0,0 @@
CREATE INDEX idx__book_metadata_aggregation_author__series_id on BOOK_METADATA_AGGREGATION_AUTHOR (SERIES_ID);

View file

@ -1,29 +0,0 @@
alter table SERIES
add column BOOK_COUNT int NOT NULL DEFAULT false;
update SERIES
set BOOK_COUNT = (
SELECT COUNT(b.ID)
FROM BOOK b
WHERE b.SERIES_ID = SERIES.ID
);
CREATE TABLE READ_PROGRESS_SERIES
(
SERIES_ID varchar NOT NULL,
USER_ID varchar NOT NULL,
READ_COUNT int NOT NULL,
IN_PROGRESS_COUNT int NOT NULL,
PRIMARY KEY (SERIES_ID, USER_ID),
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
insert into READ_PROGRESS_SERIES
select BOOK.SERIES_ID,
READ_PROGRESS.USER_ID,
sum(case when READ_PROGRESS.COMPLETED = 1 then 1 else 0 end) as READ_COUNT,
sum(case when READ_PROGRESS.COMPLETED = 0 then 1 else 0 end) as IN_PROGRESS_COUNT
from BOOK
inner join READ_PROGRESS on (BOOK.ID = READ_PROGRESS.BOOK_ID)
group by BOOK.SERIES_ID, READ_PROGRESS.USER_ID;

View file

@ -1,2 +0,0 @@
create index idx__book__created_date on BOOK (CREATED_DATE);

View file

@ -1,7 +0,0 @@
CREATE TABLE SIDECAR
(
URL varchar NOT NULL PRIMARY KEY,
PARENT_URL varchar NOT NULL,
LAST_MODIFIED_TIME timestamp NOT NULL,
LIBRARY_ID varchar NOT NULL
);

View file

@ -1,6 +0,0 @@
DELETE
FROM SIDECAR
WHERE LIBRARY_ID NOT IN (
SELECT ID
FROM LIBRARY
)

View file

@ -1,11 +0,0 @@
create table AUTHENTICATION_ACTIVITY
(
USER_ID varchar NULL DEFAULT NULL,
EMAIL varchar NULL DEFAULT NULL,
IP varchar NULL DEFAULT NULL,
USER_AGENT varchar NULL DEFAULT NULL,
SUCCESS boolean NOT NULL,
ERROR varchar NULL DEFAULT NULL,
DATE_TIME timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (USER_ID) references "USER" (ID)
);

View file

@ -1,11 +0,0 @@
ALTER TABLE BOOK
ADD COLUMN FILE_HASH varchar NOT NULL DEFAULT '';
ALTER TABLE BOOK
ADD COLUMN DELETED_DATE timestamp NULL DEFAULT NULL;
ALTER TABLE SERIES
ADD COLUMN DELETED_DATE timestamp NULL DEFAULT NULL;
alter table library
add column EMPTY_TRASH_AFTER_SCAN boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
alter table library
add column IMPORT_MYLAR_SERIES boolean NOT NULL DEFAULT true;

View file

@ -1,2 +0,0 @@
alter table library
add column SERIES_COVER varchar NOT NULL DEFAULT 'FIRST';

View file

@ -1,83 +0,0 @@
-- FTS for BOOK_METADATA
create virtual table fts_book_metadata using fts5(title, isbn, book_id UNINDEXED, content=book_metadata, tokenize = 'porter unicode61 remove_diacritics 2');
INSERT INTO fts_book_metadata(fts_book_metadata) VALUES('rebuild');
-- Triggers to keep the FTS index up to date
CREATE TRIGGER book_metadata__after_insert AFTER INSERT ON book_metadata BEGIN
INSERT INTO fts_book_metadata(rowid, title, isbn, book_id) VALUES (new.rowid, new.title, new.isbn, new.book_id);
END;
CREATE TRIGGER book_metadata__after_delete AFTER DELETE ON book_metadata BEGIN
INSERT INTO fts_book_metadata(fts_book_metadata, rowid, title, isbn, book_id) VALUES('delete', old.rowid, old.title, old.isbn, old.book_id);
END;
CREATE TRIGGER book_metadata__after_update AFTER UPDATE ON book_metadata BEGIN
INSERT INTO fts_book_metadata(fts_book_metadata, rowid, title, isbn, book_id) VALUES('delete', old.rowid, old.title, old.isbn, old.book_id);
INSERT INTO fts_book_metadata(rowid, title, isbn, book_id) VALUES (new.rowid, new.title, new.isbn, new.book_id);
END;
-- FTS for SERIES_METADATA
create virtual table fts_series_metadata using fts5(title, publisher, series_id UNINDEXED, content=series_metadata, tokenize = 'porter unicode61 remove_diacritics 2');
INSERT INTO fts_series_metadata(fts_series_metadata) VALUES('rebuild');
-- Triggers to keep the FTS index up to date
CREATE TRIGGER series_metadata__after_insert AFTER INSERT ON series_metadata BEGIN
INSERT INTO fts_series_metadata(rowid, title, publisher, series_id) VALUES (new.rowid, new.title, new.publisher, new.series_id);
END;
CREATE TRIGGER series_metadata__after_delete AFTER DELETE ON series_metadata BEGIN
INSERT INTO fts_series_metadata(fts_series_metadata, rowid, title, publisher, series_id) VALUES('delete', old.rowid, old.title, old.publisher, old.series_id);
END;
CREATE TRIGGER series_metadata__after_update AFTER UPDATE ON series_metadata BEGIN
INSERT INTO fts_series_metadata(fts_series_metadata, rowid, title, publisher, series_id) VALUES('delete', old.rowid, old.title, old.publisher, old.series_id);
INSERT INTO fts_series_metadata(rowid, title, publisher, series_id) VALUES (new.rowid, new.title, new.publisher, new.series_id);
END;
-- FTS for COLLECTION
create virtual table fts_collection using fts5(name, id UNINDEXED, content=collection, tokenize = 'porter unicode61 remove_diacritics 2');
INSERT INTO fts_collection(fts_collection) VALUES('rebuild');
-- Triggers to keep the FTS index up to date
CREATE TRIGGER collection__after_insert AFTER INSERT ON collection BEGIN
INSERT INTO fts_collection(rowid, name, id) VALUES (new.rowid, new.name, new.id);
END;
CREATE TRIGGER collection__after_delete AFTER DELETE ON collection BEGIN
INSERT INTO fts_collection(fts_collection, rowid, name, id) VALUES('delete', old.rowid, old.name, old.id);
END;
CREATE TRIGGER collection__after_update AFTER UPDATE ON collection BEGIN
INSERT INTO fts_collection(fts_collection, rowid, name, id) VALUES('delete', old.rowid, old.name, old.id);
INSERT INTO fts_collection(rowid, name, id) VALUES (new.rowid, new.name, new.id);
END;
-- FTS for READLIST
create virtual table fts_readlist using fts5(name, id UNINDEXED, content=readlist, tokenize = 'porter unicode61 remove_diacritics 2');
INSERT INTO fts_readlist(fts_readlist) VALUES('rebuild');
-- Triggers to keep the FTS index up to date
CREATE TRIGGER readlist__after_insert AFTER INSERT ON readlist BEGIN
INSERT INTO fts_readlist(rowid, name, id) VALUES (new.rowid, new.name, new.id);
END;
CREATE TRIGGER readlist__after_delete AFTER DELETE ON readlist BEGIN
INSERT INTO fts_readlist(fts_readlist, rowid, name, id) VALUES('delete', old.rowid, old.name, old.id);
END;
CREATE TRIGGER readlist__after_update AFTER UPDATE ON readlist BEGIN
INSERT INTO fts_readlist(fts_readlist, rowid, name, id) VALUES('delete', old.rowid, old.name, old.id);
INSERT INTO fts_readlist(rowid, name, id) VALUES (new.rowid, new.name, new.id);
END;
-- FTS for BOOK_METADATA_AGGREGATION_AUTHORS
create virtual table fts_book_metadata_aggregation_author using fts5(name, series_id UNINDEXED, content=book_metadata_aggregation_author, tokenize = 'porter unicode61 remove_diacritics 2');
INSERT INTO fts_book_metadata_aggregation_author(fts_book_metadata_aggregation_author) VALUES('rebuild');
-- Triggers to keep the FTS index up to date
CREATE TRIGGER book_metadata_aggregation_author__after_insert AFTER INSERT ON book_metadata_aggregation_author BEGIN
INSERT INTO fts_book_metadata_aggregation_author(rowid, name, series_id) VALUES (new.rowid, new.name, new.series_id);
END;
CREATE TRIGGER book_metadata_aggregation_author__after_delete AFTER DELETE ON book_metadata_aggregation_author BEGIN
INSERT INTO fts_book_metadata_aggregation_author(fts_book_metadata_aggregation_author, rowid, name, series_id) VALUES('delete', old.rowid, old.name, old.series_id);
END;
CREATE TRIGGER book_metadata_aggregation_author__after_update AFTER UPDATE ON book_metadata_aggregation_author BEGIN
INSERT INTO fts_book_metadata_aggregation_author(fts_book_metadata_aggregation_author, rowid, name, series_id) VALUES('delete', old.rowid, old.name, old.series_id);
INSERT INTO fts_book_metadata_aggregation_author(rowid, name, series_id) VALUES (new.rowid, new.name, new.series_id);
END;

View file

@ -1,4 +0,0 @@
alter table series_metadata
add column TOTAL_BOOK_COUNT int NULL;
alter table series_metadata
add column TOTAL_BOOK_COUNT_LOCK boolean NOT NULL DEFAULT false;

View file

@ -1,12 +0,0 @@
CREATE TABLE BOOK_METADATA_AGGREGATION_TAG
(
TAG varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
-- aggregate existing data
insert into BOOK_METADATA_AGGREGATION_TAG
select distinct bt.TAG, b.SERIES_ID
from BOOK_METADATA_TAG bt
left join BOOK B on B.ID = bt.BOOK_ID;

View file

@ -1,2 +0,0 @@
alter table readlist
add column SUMMARY varchar not NULL default '';

View file

@ -1,24 +0,0 @@
drop table fts_book_metadata;
DROP TRIGGER book_metadata__after_insert;
DROP TRIGGER book_metadata__after_delete;
DROP TRIGGER book_metadata__after_update;
drop table fts_series_metadata;
DROP TRIGGER series_metadata__after_insert;
DROP TRIGGER series_metadata__after_delete;
DROP TRIGGER series_metadata__after_update;
drop table fts_collection;
DROP TRIGGER collection__after_insert;
DROP TRIGGER collection__after_delete;
DROP TRIGGER collection__after_update;
drop table fts_readlist;
DROP TRIGGER readlist__after_insert;
DROP TRIGGER readlist__after_delete;
DROP TRIGGER readlist__after_update;
drop table fts_book_metadata_aggregation_author;
DROP TRIGGER book_metadata_aggregation_author__after_insert;
DROP TRIGGER book_metadata_aggregation_author__after_delete;
DROP TRIGGER book_metadata_aggregation_author__after_update;

View file

@ -1,2 +0,0 @@
ALTER TABLE LIBRARY
ADD COLUMN UNAVAILABLE_DATE timestamp NULL DEFAULT NULL;

View file

@ -1,4 +0,0 @@
CREATE TABLE TEMP_URL_LIST
(
URL varchar NOT NULL
);

View file

@ -1,20 +0,0 @@
ALTER TABLE THUMBNAIL_SERIES RENAME TO TMP_THUMBNAIL_SERIES;
CREATE TABLE THUMBNAIL_SERIES
(
ID varchar NOT NULL PRIMARY KEY,
URL varchar NULL DEFAULT NULL,
SELECTED boolean NOT NULL DEFAULT false,
THUMBNAIL bytea NULL DEFAULT NULL,
TYPE varchar not null,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
INSERT INTO THUMBNAIL_SERIES(ID, URL, SELECTED, CREATED_DATE, LAST_MODIFIED_DATE, SERIES_ID, TYPE)
SELECT ID, URL, SELECTED, CREATED_DATE, LAST_MODIFIED_DATE, SERIES_ID, "SIDECAR" AS TYPE
FROM TMP_THUMBNAIL_SERIES;
DROP TABLE TMP_THUMBNAIL_SERIES;

View file

@ -1,2 +0,0 @@
update SERIES_METADATA
set language = lower(language);

View file

@ -1,24 +0,0 @@
CREATE TABLE SPRING_SESSION
(
PRIMARY_ID CHARACTER(36) NOT NULL,
SESSION_ID CHARACTER(36) NOT NULL,
CREATION_TIME INTEGER NOT NULL,
LAST_ACCESS_TIME INTEGER NOT NULL,
MAX_INACTIVE_INTERVAL INTEGER NOT NULL,
EXPIRY_TIME INTEGER NOT NULL,
PRINCIPAL_NAME VARCHAR(100),
CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
);
CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);
CREATE TABLE SPRING_SESSION_ATTRIBUTES
(
SESSION_PRIMARY_ID CHAR(36) NOT NULL,
ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
ATTRIBUTE_BYTES bytea NOT NULL,
CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION (PRIMARY_ID) ON DELETE CASCADE
);

View file

@ -1,21 +0,0 @@
ALTER TABLE READ_PROGRESS RENAME TO TMP_READ_PROGRESS;
CREATE TABLE READ_PROGRESS
(
BOOK_ID varchar NOT NULL,
USER_ID varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PAGE int NOT NULL,
COMPLETED boolean NOT NULL,
READ_DATE timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (BOOK_ID, USER_ID),
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
INSERT INTO READ_PROGRESS(BOOK_ID, USER_ID, CREATED_DATE, LAST_MODIFIED_DATE, PAGE, COMPLETED, READ_DATE)
SELECT BOOK_ID, USER_ID, CREATED_DATE, LAST_MODIFIED_DATE, PAGE, COMPLETED, LAST_MODIFIED_DATE
FROM TMP_READ_PROGRESS;
DROP TABLE TMP_READ_PROGRESS;

View file

@ -1,2 +0,0 @@
ALTER TABLE AUTHENTICATION_ACTIVITY
ADD COLUMN SOURCE varchar NULL DEFAULT NULL;

View file

@ -1,2 +0,0 @@
drop table if exists SPRING_SESSION_ATTRIBUTES;
drop table if exists SPRING_SESSION;

View file

@ -1,6 +0,0 @@
CREATE TABLE TEMP_STRING_LIST
(
STRING varchar NOT NULL
);
DROP TABLE TEMP_URL_LIST;

View file

@ -1,23 +0,0 @@
CREATE TABLE THUMBNAIL_COLLECTION
(
ID varchar NOT NULL PRIMARY KEY,
SELECTED boolean NOT NULL DEFAULT false,
THUMBNAIL bytea NOT NULL,
TYPE varchar NOT NULL,
COLLECTION_ID varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (COLLECTION_ID) REFERENCES COLLECTION (ID)
);
CREATE TABLE THUMBNAIL_READLIST
(
ID varchar NOT NULL PRIMARY KEY,
SELECTED boolean NOT NULL DEFAULT false,
THUMBNAIL bytea NOT NULL,
TYPE varchar NOT NULL,
READLIST_ID varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (READLIST_ID) REFERENCES READLIST (ID)
);

View file

@ -1,10 +0,0 @@
CREATE TABLE BOOK_METADATA_LINK
(
LABEL varchar NOT NULL,
URL varchar NOT NULL,
BOOK_ID varchar NOT NULL,
FOREIGN KEY (BOOK_ID) REFERENCES BOOK (ID)
);
alter table book_metadata
add column LINKS_LOCK boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
ALTER TABLE MEDIA_PAGE
ADD COLUMN FILE_HASH varchar NOT NULL DEFAULT '';

View file

@ -1,6 +0,0 @@
alter table library
add column HASH_FILES boolean NOT NULL DEFAULT ${library-file-hashing};
alter table library
add column HASH_PAGES boolean NOT NULL DEFAULT false;
alter table library
add column ANALYZE_DIMENSIONS boolean NOT NULL DEFAULT true;

View file

@ -1,2 +0,0 @@
alter table media_page
add column FILE_SIZE bigint NULL;

View file

@ -1,30 +0,0 @@
CREATE TABLE PAGE_HASH
(
HASH varchar NOT NULL,
MEDIA_TYPE varchar NOT NULL,
SIZE bigint NULL,
ACTION varchar NOT NULL,
DELETE_COUNT int NOT NULL DEFAULT false,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (HASH, MEDIA_TYPE, SIZE)
);
CREATE TABLE PAGE_HASH_THUMBNAIL
(
HASH varchar NOT NULL,
MEDIA_TYPE varchar NOT NULL,
SIZE bigint NULL,
THUMBNAIL bytea NOT NULL,
PRIMARY KEY (HASH, MEDIA_TYPE, SIZE)
);
UPDATE MEDIA_PAGE
SET FILE_HASH = ''
WHERE BOOK_ID IN (
SELECT DISTINCT m.BOOK_ID
FROM MEDIA m
LEFT JOIN MEDIA_PAGE MP on m.BOOK_ID = MP.BOOK_ID
WHERE mp.FILE_HASH <> ''
AND m.MEDIA_TYPE <> 'application/zip'
);

View file

@ -1,8 +0,0 @@
UPDATE MEDIA
SET STATUS = 'OUTDATED'
WHERE BOOK_ID IN (
SELECT M.BOOK_ID
FROM MEDIA M
LEFT JOIN MEDIA_PAGE MP on M.BOOK_ID = MP.BOOK_ID
GROUP BY M.BOOK_ID, M.PAGE_COUNT
HAVING M.PAGE_COUNT <> count(MP.BOOK_ID));

View file

@ -1,17 +0,0 @@
CREATE TABLE HISTORICAL_EVENT
(
ID varchar PRIMARY KEY,
TYPE varchar NOT NULL,
BOOK_ID varchar NULL,
SERIES_ID varchar NULL,
TIMESTAMP timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE HISTORICAL_EVENT_PROPERTIES
(
ID varchar NOT NULL,
KEY varchar NOT NULL,
VALUE varchar NOT NULL,
PRIMARY KEY (ID, KEY),
FOREIGN KEY (ID) REFERENCES HISTORICAL_EVENT (ID)
);

View file

@ -1,9 +0,0 @@
CREATE TABLE SERIES_METADATA_SHARING
(
LABEL varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
alter table SERIES_METADATA
add column SHARING_LABELS_LOCK boolean NOT NULL DEFAULT false;

View file

@ -1,13 +0,0 @@
CREATE TABLE USER_SHARING
(
LABEL varchar NOT NULL,
ALLOW boolean NOT NULL,
USER_ID varchar NOT NULL,
PRIMARY KEY (LABEL, ALLOW, USER_ID),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
ALTER TABLE "USER"
add column AGE_RESTRICTION integer NULL;
ALTER TABLE "USER"
add column AGE_RESTRICTION_ALLOW_ONLY boolean NULL;

View file

@ -1,31 +0,0 @@
-- missing foreign key indices
create index if not exists idx__book_metadata_link__book_id
on BOOK_METADATA_LINK (BOOK_ID);
create index if not exists idx__series_metadata_sharing__series_id
on SERIES_METADATA_SHARING (SERIES_ID);
create index if not exists idx__book_metadata_aggregation_tag__series_id
on BOOK_METADATA_AGGREGATION_TAG (SERIES_ID);
create index if not exists idx__thumbnail_collection__collection_id
on THUMBNAIL_COLLECTION (COLLECTION_ID);
create index if not exists idx__thumbnail_readlist__readlist_id
on THUMBNAIL_READLIST (READLIST_ID);
create index if not exists idx__thumbnail_series__series_id
on THUMBNAIL_SERIES (SERIES_ID);
create index if not exists idx__authentication_activity__user_id
on AUTHENTICATION_ACTIVITY (USER_ID);
-- if you sort by it, index it
create index if not exists idx__book_metadata__number_sort
on BOOK_METADATA (NUMBER_SORT);
create index if not exists idx__series__last_modified_date
on SERIES (LAST_MODIFIED_DATE);
create index if not exists idx__series__created_date
on SERIES (CREATED_DATE);
create index if not exists idx__book_metadata__release_date
on BOOK_METADATA (RELEASE_DATE);
create index if not exists idx__book__created_date
on BOOK (CREATED_DATE);
create index if not exists idx__read_progress__last_modified_date
on READ_PROGRESS (LAST_MODIFIED_DATE);
create index if not exists idx__media__status
on MEDIA (STATUS);

View file

@ -1,2 +0,0 @@
ALTER TABLE LIBRARY
add column IMPORT_COMICINFO_SERIES_APPEND_VOLUME boolean NOT NULL DEFAULT true;

View file

@ -1,13 +0,0 @@
CREATE TABLE SERIES_METADATA_LINK
(
LABEL varchar NOT NULL,
URL varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
alter table series_metadata
add column LINKS_LOCK boolean NOT NULL DEFAULT false;
create index idx__series_metadata_link__series_id
on SERIES_METADATA_LINK (SERIES_ID);

View file

@ -1,13 +0,0 @@
CREATE TABLE SERIES_METADATA_ALTERNATE_TITLE
(
LABEL varchar NOT NULL,
TITLE varchar NOT NULL,
SERIES_ID varchar NOT NULL,
FOREIGN KEY (SERIES_ID) REFERENCES SERIES (ID)
);
alter table series_metadata
add column ALTERNATE_TITLES_LOCK boolean NOT NULL DEFAULT false;
create index idx__series_metadata_alternate_title__series_id
on SERIES_METADATA_ALTERNATE_TITLE (SERIES_ID);

View file

@ -1,2 +0,0 @@
alter table READLIST
add column ORDERED boolean NOT NULL DEFAULT true;

View file

@ -1,2 +0,0 @@
create index if not exists idx__series_metadata__title
on SERIES_METADATA (TITLE);

View file

@ -1,4 +0,0 @@
delete from PAGE_HASH;
delete from PAGE_HASH_THUMBNAIL;
update BOOK set FILE_HASH = '';
update MEDIA_PAGE set FILE_HASH = '';

View file

@ -1,8 +0,0 @@
update media
set STATUS = 'OUTDATED'
WHERE BOOK_ID in
(select distinct M.BOOK_ID
from MEDIA_PAGE P
inner join MEDIA M on P.BOOK_ID = M.BOOK_ID
where M.MEDIA_TYPE in ('application/zip', 'application/x-rar-compressed; version=4')
and P.FILE_SIZE is null);

View file

@ -1,33 +0,0 @@
ALTER TABLE PAGE_HASH
RENAME TO _PAGE_HASH_OLD;
CREATE TABLE PAGE_HASH
(
HASH varchar NOT NULL PRIMARY KEY,
SIZE bigint NULL,
ACTION varchar NOT NULL,
DELETE_COUNT int NOT NULL DEFAULT false,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO PAGE_HASH(HASH, ACTION, SIZE, DELETE_COUNT, CREATED_DATE, LAST_MODIFIED_DATE)
SELECT HASH, ACTION, SIZE, DELETE_COUNT, CREATED_DATE, LAST_MODIFIED_DATE
FROM _PAGE_HASH_OLD;
DROP TABLE _PAGE_HASH_OLD;
ALTER TABLE PAGE_HASH_THUMBNAIL
RENAME TO _PAGE_HASH_THUMBNAIL_OLD;
CREATE TABLE PAGE_HASH_THUMBNAIL
(
HASH varchar NOT NULL PRIMARY KEY,
THUMBNAIL bytea NOT NULL
);
INSERT INTO PAGE_HASH_THUMBNAIL(HASH, THUMBNAIL)
SELECT HASH, THUMBNAIL
FROM _PAGE_HASH_THUMBNAIL_OLD;
DROP TABLE _PAGE_HASH_THUMBNAIL_OLD;

View file

@ -1,2 +0,0 @@
ALTER TABLE LIBRARY
RENAME COLUMN SCAN_DEEP to _UNUSED;

View file

@ -1,7 +0,0 @@
create table ANNOUNCEMENTS_READ
(
USER_ID varchar NOT NULL,
ANNOUNCEMENT_ID varchar NOT NULL,
PRIMARY KEY (USER_ID, ANNOUNCEMENT_ID),
FOREIGN KEY (USER_ID) references "USER" (ID)
);

View file

@ -1,8 +0,0 @@
alter table BOOK
add column oneshot boolean NOT NULL DEFAULT false;
alter table SERIES
add column oneshot boolean NOT NULL DEFAULT false;
ALTER TABLE LIBRARY
add column ONESHOTS_DIRECTORY varchar NULL DEFAULT NULL;

View file

@ -1,12 +0,0 @@
ALTER TABLE LIBRARY
RENAME COLUMN _UNUSED to SCAN_STARTUP;
UPDATE LIBRARY
SET SCAN_STARTUP = ${library-scan-startup};
ALTER TABLE LIBRARY
add column SCAN_CBX boolean NOT NULL DEFAULT true;
ALTER TABLE LIBRARY
add column SCAN_PDF boolean NOT NULL DEFAULT true;
ALTER TABLE LIBRARY
add column SCAN_EPUB boolean NOT NULL DEFAULT true;
ALTER TABLE LIBRARY
add column SCAN_INTERVAL varchar NOT NULL DEFAULT 'EVERY_6H';

View file

@ -1,17 +0,0 @@
CREATE TABLE LIBRARY_EXCLUSIONS
(
LIBRARY_ID varchar NOT NULL,
EXCLUSION varchar NOT NULL,
PRIMARY KEY (LIBRARY_ID, EXCLUSION),
FOREIGN KEY (LIBRARY_ID) REFERENCES LIBRARY (ID)
);
CREATE INDEX idx__library_exclusions__library_id on LIBRARY_EXCLUSIONS (LIBRARY_ID);
INSERT INTO LIBRARY_EXCLUSIONS
WITH cte_exclusions(exclude) AS (VALUES ('#recycle'),
('@eaDir'),
('@Recycle'))
SELECT LIBRARY.ID, cte_exclusions.exclude
FROM LIBRARY
cross join cte_exclusions;

View file

@ -1,14 +0,0 @@
CREATE TABLE SERVER_SETTINGS
(
KEY varchar NOT NULL PRIMARY KEY,
VALUE varchar NULL
);
INSERT INTO SERVER_SETTINGS
VALUES ('DELETE_EMPTY_COLLECTIONS', ${delete-empty-collections});
INSERT INTO SERVER_SETTINGS
VALUES ('DELETE_EMPTY_READLISTS', ${delete-empty-read-lists});
INSERT INTO SERVER_SETTINGS
VALUES ('REMEMBER_ME_KEY', md5(random()::text));
INSERT INTO SERVER_SETTINGS
VALUES ('REMEMBER_ME_DURATION', 365);

View file

@ -1,36 +0,0 @@
ALTER TABLE main.THUMBNAIL_BOOK
add column WIDTH int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_BOOK
add column HEIGHT int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_BOOK
add column MEDIA_TYPE varchar NOT NULL default '';
ALTER TABLE main.THUMBNAIL_BOOK
add column FILE_SIZE bigint NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_SERIES
add column WIDTH int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_SERIES
add column HEIGHT int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_SERIES
add column MEDIA_TYPE varchar NOT NULL default '';
ALTER TABLE main.THUMBNAIL_SERIES
add column FILE_SIZE bigint NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_COLLECTION
add column WIDTH int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_COLLECTION
add column HEIGHT int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_COLLECTION
add column MEDIA_TYPE varchar NOT NULL default '';
ALTER TABLE main.THUMBNAIL_COLLECTION
add column FILE_SIZE bigint NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_READLIST
add column WIDTH int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_READLIST
add column HEIGHT int NOT NULL DEFAULT false;
ALTER TABLE main.THUMBNAIL_READLIST
add column MEDIA_TYPE varchar NOT NULL default '';
ALTER TABLE main.THUMBNAIL_READLIST
add column FILE_SIZE bigint NOT NULL DEFAULT false;

View file

@ -1,6 +0,0 @@
create index idx__thumbnail_book__width
on THUMBNAIL_BOOK (WIDTH);
create index idx__thumbnail_book__height
on THUMBNAIL_BOOK (HEIGHT);
create index idx__thumbnail_book__file_size
on THUMBNAIL_BOOK (FILE_SIZE);

View file

@ -1,4 +0,0 @@
update media
set STATUS = 'OUTDATED'
where MEDIA_TYPE = 'application/pdf'
and STATUS = 'READY';

View file

@ -1,16 +0,0 @@
alter table MEDIA_FILE
add column MEDIA_TYPE varchar NULL;
alter table MEDIA_FILE
add column SUB_TYPE varchar NULL;
alter table MEDIA_FILE
add column FILE_SIZE bigint NULL;
alter table MEDIA
add column EXTENSION_CLASS varchar NULL;
alter table MEDIA
add column EXTENSION_VALUE varchar NULL;
update media
set STATUS = 'OUTDATED'
where MEDIA_TYPE = 'application/epub+zip'
and STATUS = 'READY';

View file

@ -1,13 +0,0 @@
update MEDIA
set EXTENSION_VALUE = null;
update media
set STATUS = 'OUTDATED'
where MEDIA_TYPE = 'application/epub+zip'
and STATUS = 'READY';
ALTER TABLE MEDIA
RENAME COLUMN EXTENSION_VALUE to _UNUSED;
alter table MEDIA
add column EXTENSION_VALUE_BLOB bytea NULL;

View file

@ -1,6 +0,0 @@
ALTER TABLE READ_PROGRESS
ADD COLUMN device_id varchar default '';
ALTER TABLE READ_PROGRESS
ADD COLUMN device_name varchar default '';
ALTER TABLE READ_PROGRESS
ADD COLUMN locator bytea null;

View file

@ -1,4 +0,0 @@
delete
from THUMBNAIL_BOOK
where TYPE = 'GENERATED'
and THUMBNAIL is null;

View file

@ -1,2 +0,0 @@
alter table MEDIA
add column EPUB_DIVINA_COMPATIBLE boolean NOT NULL DEFAULT false;

View file

@ -1,9 +0,0 @@
update media
set STATUS = 'OUTDATED'
where MEDIA_TYPE = 'application/epub+zip';
update media
set STATUS = 'OUTDATED'
where BOOK_ID in (select ID
from BOOK
where URL like '%.epub' collate NOCASE);

View file

@ -1,18 +0,0 @@
CREATE TABLE USER_API_KEY
(
ID varchar NOT NULL PRIMARY KEY,
USER_ID varchar NOT NULL,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
LAST_MODIFIED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
API_KEY varchar NOT NULL UNIQUE,
COMMENT varchar NOT NULL,
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
create index if not exists idx__user_api_key__user_id
on USER_API_KEY (USER_ID);
ALTER TABLE AUTHENTICATION_ACTIVITY
ADD COLUMN API_KEY_ID varchar NULL DEFAULT NULL;
ALTER TABLE AUTHENTICATION_ACTIVITY
ADD COLUMN API_KEY_COMMENT varchar NULL DEFAULT NULL;

View file

@ -1,41 +0,0 @@
CREATE TABLE SYNC_POINT
(
ID varchar NOT NULL PRIMARY KEY,
CREATED_DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
USER_ID varchar NOT NULL,
API_KEY_ID varchar NULL,
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
create index if not exists idx__sync_point__user_id
on SYNC_POINT (USER_ID);
CREATE TABLE SYNC_POINT_BOOK_REMOVED_SYNCED
(
SYNC_POINT_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
PRIMARY KEY (SYNC_POINT_ID, BOOK_ID),
FOREIGN KEY (SYNC_POINT_ID) REFERENCES SYNC_POINT (ID)
);
create index if not exists idx__sync_point_book_removed_status__sync_point_id
on SYNC_POINT_BOOK_REMOVED_SYNCED (SYNC_POINT_ID);
CREATE TABLE SYNC_POINT_BOOK
(
SYNC_POINT_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
BOOK_CREATED_DATE timestamp NOT NULL,
BOOK_LAST_MODIFIED_DATE timestamp NOT NULL,
BOOK_FILE_LAST_MODIFIED timestamp NOT NULL,
BOOK_FILE_SIZE bigint NOT NULL,
BOOK_FILE_HASH varchar NOT NULL,
BOOK_METADATA_LAST_MODIFIED_DATE timestamp NOT NULL,
BOOK_READ_PROGRESS_LAST_MODIFIED_DATE timestamp NULL,
SYNCED boolean NOT NULL default false,
PRIMARY KEY (SYNC_POINT_ID, BOOK_ID),
FOREIGN KEY (SYNC_POINT_ID) REFERENCES SYNC_POINT (ID)
);
create index if not exists idx__sync_point_book__sync_point_id
on SYNC_POINT_BOOK (SYNC_POINT_ID);

View file

@ -1,6 +0,0 @@
alter table "USER"
add column ROLE_KOBO_SYNC boolean NOT NULL DEFAULT false;
update "USER"
set ROLE_KOBO_SYNC = true
where ROLE_ADMIN = true;

View file

@ -1,16 +0,0 @@
alter table READ_PROGRESS_SERIES
add MOST_RECENT_READ_DATE timestamp NULL;
alter table READ_PROGRESS_SERIES
add LAST_MODIFIED_DATE timestamp NULL;
update READ_PROGRESS_SERIES
set MOST_RECENT_READ_DATE = (select max(r.READ_DATE)
from READ_PROGRESS r
inner join BOOK b on r.BOOK_ID = b.ID
where b.SERIES_ID = READ_PROGRESS_SERIES.SERIES_ID);
update READ_PROGRESS_SERIES
set LAST_MODIFIED_DATE = (select max(r.LAST_MODIFIED_DATE)
from READ_PROGRESS r
inner join BOOK b on r.BOOK_ID = b.ID
where b.SERIES_ID = READ_PROGRESS_SERIES.SERIES_ID);

View file

@ -1,34 +0,0 @@
CREATE TABLE SYNC_POINT_READLIST
(
SYNC_POINT_ID varchar NOT NULL,
READLIST_ID varchar NOT NULL,
READLIST_NAME varchar NOT NULL,
READLIST_CREATED_DATE timestamp NOT NULL,
READLIST_LAST_MODIFIED_DATE timestamp NOT NULL,
SYNCED boolean NOT NULL default false,
PRIMARY KEY (SYNC_POINT_ID, READLIST_ID),
FOREIGN KEY (SYNC_POINT_ID) REFERENCES SYNC_POINT (ID)
);
create index if not exists idx__sync_point_readlist__sync_point_id
on SYNC_POINT_READLIST (SYNC_POINT_ID);
CREATE TABLE SYNC_POINT_READLIST_BOOK
(
SYNC_POINT_ID varchar NOT NULL,
READLIST_ID varchar NOT NULL,
BOOK_ID varchar NOT NULL,
PRIMARY KEY (SYNC_POINT_ID, READLIST_ID, BOOK_ID),
FOREIGN KEY (SYNC_POINT_ID) REFERENCES SYNC_POINT (ID)
);
create index if not exists idx__sync_point_readlist_book__sync_point_id_readlist_id
on SYNC_POINT_READLIST_BOOK (SYNC_POINT_ID, READLIST_ID);
CREATE TABLE SYNC_POINT_READLIST_REMOVED_SYNCED
(
SYNC_POINT_ID varchar NOT NULL,
READLIST_ID varchar NOT NULL,
PRIMARY KEY (SYNC_POINT_ID, READLIST_ID),
FOREIGN KEY (SYNC_POINT_ID) REFERENCES SYNC_POINT (ID)
);

View file

@ -1,2 +0,0 @@
alter table MEDIA
add column EPUB_IS_KEPUB boolean NOT NULL DEFAULT false;

View file

@ -1,2 +0,0 @@
ALTER TABLE main.SYNC_POINT_BOOK
ADD COLUMN BOOK_THUMBNAIL_ID varchar NULL;

View file

@ -1,65 +0,0 @@
CREATE TABLE USER_ROLE
(
USER_ID varchar NOT NULL,
ROLE varchar NOT NULL,
PRIMARY KEY (USER_ID, ROLE),
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID)
);
insert into USER_ROLE
select id, 'ADMIN'
from "USER"
where ROLE_ADMIN = true;
insert into USER_ROLE
select id, 'KOREADER_SYNC'
from "USER"
where ROLE_ADMIN = true;
insert into USER_ROLE
select id, 'FILE_DOWNLOAD'
from "USER"
where ROLE_FILE_DOWNLOAD = true;
insert into USER_ROLE
select id, 'PAGE_STREAMING'
from "USER"
where ROLE_PAGE_STREAMING = true;
insert into USER_ROLE
select id, 'KOBO_SYNC'
from "USER"
where ROLE_KOBO_SYNC = true;
-- Remove columns ROLE_ADMIN, ROLE_FILE_DOWNLOAD, ROLE_PAGE_STREAMING, ROLE_KOBO_SYNC from "USER"
create table USER_dg_tmp
(
ID varchar not null
primary key,
CREATED_DATE timestamp default CURRENT_TIMESTAMP not null,
LAST_MODIFIED_DATE timestamp default CURRENT_TIMESTAMP not null,
EMAIL varchar not null
unique,
PASSWORD varchar not null,
SHARED_ALL_LIBRARIES boolean DEFAULT true not null,
AGE_RESTRICTION integer,
AGE_RESTRICTION_ALLOW_ONLY boolean
);
insert into USER_dg_tmp(ID, CREATED_DATE, LAST_MODIFIED_DATE, EMAIL, PASSWORD, SHARED_ALL_LIBRARIES, AGE_RESTRICTION,
AGE_RESTRICTION_ALLOW_ONLY)
select ID,
CREATED_DATE,
LAST_MODIFIED_DATE,
EMAIL,
PASSWORD,
SHARED_ALL_LIBRARIES,
AGE_RESTRICTION,
AGE_RESTRICTION_ALLOW_ONLY
from "USER";
drop table "USER" CASCADE;
alter table USER_dg_tmp
rename to "USER";

View file

@ -1,6 +0,0 @@
ALTER TABLE LIBRARY
add column HASH_KOREADER boolean NOT NULL DEFAULT false;
ALTER TABLE BOOK
ADD COLUMN FILE_HASH_KOREADER varchar NOT NULL DEFAULT '';

View file

@ -1,15 +0,0 @@
CREATE TABLE CLIENT_SETTINGS_GLOBAL
(
KEY varchar NOT NULL PRIMARY KEY,
VALUE varchar NOT NULL,
ALLOW_UNAUTHORIZED boolean NOT NULL DEFAULT false
);
CREATE TABLE CLIENT_SETTINGS_USER
(
USER_ID varchar NOT NULL,
KEY varchar NOT NULL,
VALUE varchar NOT NULL,
FOREIGN KEY (USER_ID) REFERENCES "USER" (ID),
PRIMARY KEY (KEY, USER_ID)
);

View file

@ -1 +0,0 @@
DROP TABLE IF EXISTS TEMP_STRING_LIST;

View file

@ -1,27 +1,36 @@
#!/bin/bash
# Script to run Komga locally with PostgreSQL
set -e
# Configuration
COMPOSE_FILE="docker-compose.local.yml"
DB_PASSWORD="komga123"
echo "Starting PostgreSQL container..."
docker-compose up -d postgres
docker compose -f "$COMPOSE_FILE" up -d postgres
echo "Waiting for PostgreSQL to be ready..."
sleep 5
until docker exec komga-postgres pg_isready -U komga -d komga; do
sleep 1
done
echo "Building Komga..."
./gradlew :komga:build -x test
echo "Manually applying the consolidated PostgreSQL schema..."
# We apply the big script manually to the DB
docker exec -i komga-postgres psql -U komga -d komga < komga/src/flyway/resources/db/migration/postgresql/V001__initial_migration.sql
echo "Running Komga with PostgreSQL..."
SPRING_PROFILES_ACTIVE=docker \
KOMGA_DATABASE_TYPE=postgresql \
KOMGA_DATABASE_URL="jdbc:postgresql://localhost:5433/komga?sslmode=disable&socketTimeout=10" \
KOMGA_DATABASE_USERNAME=komga \
KOMGA_DATABASE_PASSWORD=komga123 \
KOMGA_CONFIG_DIR="$HOME/.komga-postgres" \
./gradlew :komga:bootRun
# Note: Use KOMGA_DATABASE_URL and other matching properties
export KOMGA_DATABASE_DRIVER_CLASS_NAME=org.postgresql.Driver
export KOMGA_DATABASE_URL="jdbc:postgresql://localhost:5433/komga?user=komga&password=$DB_PASSWORD"
export KOMGA_DATABASE_USERNAME=komga
export KOMGA_DATABASE_PASSWORD=$DB_PASSWORD
export KOMGA_DATABASE_TYPE=postgresql
export KOMGA_DATABASE_POOL_SIZE=10
export KOMGA_DATABASE_MAX_POOL_SIZE=10
export SPRING_FLYWAY_BASELINE_ON_MIGRATE=true
export SPRING_FLYWAY_BASELINE_VERSION=20250730173126
export KOMGA_CONFIG_DIR="$HOME/.komga-postgres"
./gradlew clean :komga:bootRun
echo "Komga is running at http://localhost:25600"
echo "PostgreSQL is running at localhost:5433"
echo "To stop: docker-compose down"
echo "To stop: docker compose -f $COMPOSE_FILE stop postgres"