From cb68192004636e59dc6602b2e2b261aa54d84599 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 11 Oct 2022 21:55:30 +0200
Subject: [PATCH] RUST-DB: Add some ISO 639-1 languages, handle the case where
 the passed language is not an ISO 639-1 language for legacy

---
 .../2022-09-30-204512_initial/up.sql          | 46 +++++++++++++++++--
 src/rust/liblektor-rs/src/database/schema.rs  | 18 ++++----
 2 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/src/rust/liblektor-rs/migrations/2022-09-30-204512_initial/up.sql b/src/rust/liblektor-rs/migrations/2022-09-30-204512_initial/up.sql
index 8b01a905..005e63bf 100644
--- a/src/rust/liblektor-rs/migrations/2022-09-30-204512_initial/up.sql
+++ b/src/rust/liblektor-rs/migrations/2022-09-30-204512_initial/up.sql
@@ -23,7 +23,7 @@ CREATE TABLE kara
   , song_type   TEXT    NOT NULL
   , song_origin TEXT    NOT NULL
   , source_name TEXT    NOT NULL
-  , language    TEXT    NOT NULL REFERENCES ISO_639_1(code)
+  , language    TEXT    NOT NULL REFERENCES iso_639_1(code)
   , kara_hash   TEXT    NOT NULL -- TEXT ABOVE + HASH OF FILE IN FS
   );
 
@@ -58,7 +58,43 @@ CREATE TABLE history
 
 -- The list of ISO 639-1 languages with their associated codes.
 -- Should add an entry in the api to query available languages.
-CREATE TABLE ISO_639_1
-  ( code    TEXT NOT NULL PRIMARY KEY
-  , name_en TEXT NOT NULL UNIQUE
-  );
\ No newline at end of file
+CREATE TABLE iso_639_1
+  ( code     TEXT    NOT NULL PRIMARY KEY
+  , name_en  TEXT    NOT NULL UNIQUE
+  , is_iso   BOOLEAN NOT NULL DEFAULT false
+  , is_macro BOOLEAN NOT NULL DEFAULT false
+  );
+
+-- As defined in ISO 639-1:
+-- https://archive.wikiwix.com/cache/index2.php?url=http%3A%2F%2Fwww.sil.org%2Fiso639-3%2Fcodes.asp%3Forder%3D639_1%26letter%3D%2525#federation=archive.wikiwix.com&tab=url
+INSERT OR REPLACE INTO iso_639_1 (is_macro, is_iso, code, name_en) VALUES
+  ( true,  true, "ar", "Arabic"         ),
+  ( false, true, "br", "Breton"         ),
+  ( false, true, "ca", "Catalan"        ),
+  ( false, true, "de", "German"         ),
+  ( false, true, "el", "Greek"          ),
+  ( false, true, "en", "English"        ),
+  ( false, true, "eo", "Esperanto"      ),
+  ( false, true, "es", "Spanish"        ),
+  ( false, true, "eu", "Basque"         ),
+  ( true,  true, "fa", "Persian"        ),
+  ( false, true, "fr", "French"         ),
+  ( false, true, "he", "Hebrew"         ),
+  ( true,  true, "ie", "Interlingue"    ),
+  ( false, true, "it", "Italian"        ),
+  ( false, true, "ja", "Japanese"       ),
+  ( false, true, "ko", "Korean"         ),
+  ( false, true, "la", "Latin"          ),
+  ( false, true, "nl", "Dutch"          ),
+  ( false, true, "no", "Norwegian"      ),
+  ( false, true, "oc", "Occitan"        ),
+  ( false, true, "pl", "Polish"         ),
+  ( false, true, "pt", "Portuguese"     ),
+  ( false, true, "ru", "Russian"        ),
+  ( false, true, "sv", "Swedish"        ),
+  ( false, true, "vi", "Vietnamese"     ),
+  ( false, true, "zh", "Chinese"        ),
+  ( false, true, "zu", "Zulu"           ),
+  -- ...
+  ( true,  false, "fiction", "Fictional" ),
+  ( true,  false, "autre",   "Joker"     );
diff --git a/src/rust/liblektor-rs/src/database/schema.rs b/src/rust/liblektor-rs/src/database/schema.rs
index dc22363e..78d43865 100644
--- a/src/rust/liblektor-rs/src/database/schema.rs
+++ b/src/rust/liblektor-rs/src/database/schema.rs
@@ -1,16 +1,18 @@
 // @generated automatically by Diesel CLI.
 
 diesel::table! {
-    ISO_639_1 (code) {
-        code -> Text,
-        name_en -> Text,
+    history (epoch) {
+        id -> Integer,
+        epoch -> Integer,
     }
 }
 
 diesel::table! {
-    history (epoch) {
-        id -> Integer,
-        epoch -> Integer,
+    iso_639_1 (code) {
+        code -> Text,
+        name_en -> Text,
+        is_iso -> Bool,
+        is_macro -> Bool,
     }
 }
 
@@ -65,7 +67,7 @@ diesel::table! {
 }
 
 diesel::joinable!(history -> kara (id));
-diesel::joinable!(kara -> ISO_639_1 (language));
+diesel::joinable!(kara -> iso_639_1 (language));
 diesel::joinable!(kara_makers -> kara (id));
 diesel::joinable!(kara_tags -> kara (kara_id));
 diesel::joinable!(kara_tags -> tag (tag_id));
@@ -73,8 +75,8 @@ diesel::joinable!(repo_kara -> kara (local_kara_id));
 diesel::joinable!(repo_kara -> repo (repo_id));
 
 diesel::allow_tables_to_appear_in_same_query!(
-    ISO_639_1,
     history,
+    iso_639_1,
     kara,
     kara_makers,
     kara_tags,
-- 
GitLab