From d3539cd5b5abec3df4888173ae07a73452f8f888 Mon Sep 17 00:00:00 2001 From: Nick Liu <deltik@gmx.com> Date: Fri, 20 Mar 2020 18:52:35 -0500 Subject: [PATCH] CoreImage: Table for versions, slight space savings --- .github/workflows/build-release/CoreImage.php | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-release/CoreImage.php b/.github/workflows/build-release/CoreImage.php index 91dddd408..2d9c9c7ac 100644 --- a/.github/workflows/build-release/CoreImage.php +++ b/.github/workflows/build-release/CoreImage.php @@ -24,11 +24,23 @@ class CoreImage $this->db->exec(' CREATE TABLE IF NOT EXISTS file_hashes ( path TEXT, - release_version TEXT, + release_version INTEGER, hash TEXT'/*.', UNIQUE(path, hash) ON CONFLICT IGNORE'*/ . ' ); '); + $this->db->exec(' + CREATE TABLE IF NOT EXISTS versions ( + version_id INTEGER PRIMARY KEY, + version_string TEXT, + UNIQUE(version_string) ON CONFLICT IGNORE + ); + '); + # Retrieval: + # SELECT file_hashes.path, versions.version_string, file_hashes.hash + # FROM file_hashes + # LEFT JOIN versions ON versions.version_id = file_hashes.release_version + # ORDER BY path ASC; $this->create_image($exportFolder, $tempFolder, $currentVersion); } @@ -70,6 +82,8 @@ class CoreImage $insert_statement = $this->insert_statement($relativePath, $currentVersion, $checksum); $this->db->beginTransaction(); + $this->insert_version($currentVersion); + /** * @var $file DirectoryIterator */ @@ -132,6 +146,7 @@ class CoreImage $this->db->beginTransaction(); foreach ($tags as $tag => $version) { + $this->insert_version($version); OsHelper::runValidated( 'git --no-pager diff --no-renames --name-only --diff-filter D ' . escapeshellarg($tag), $stdout @@ -165,11 +180,23 @@ class CoreImage $releaseVersion = $releaseVersion ?: null; $checksum = $checksum ?: null; $insert_statement = $this->db->prepare( - "INSERT INTO file_hashes (path, release_version, hash) VALUES (:path, :release_version, :hash)" + "INSERT INTO file_hashes ( + path, release_version, hash + ) VALUES ( + :path, (SELECT version_id FROM versions WHERE version_string = :release_version), :hash + )" ); $insert_statement->bindParam(":path", $relativePath); $insert_statement->bindParam(":release_version", $releaseVersion); $insert_statement->bindParam(":hash", $checksum); return $insert_statement; } + + private function insert_version($releaseVersion) + { + $statement = $this->db->prepare( + "INSERT INTO versions (version_id, version_string) VALUES (NULL, ?)" + ); + $statement->execute([$releaseVersion]); + } } \ No newline at end of file