Jelajahi Sumber

Allow setting fallback text outside of library

Pi 1 tahun lalu
induk
melakukan
3a40313d9f
1 mengubah file dengan 25 tambahan dan 11 penghapusan
  1. 25 11
      create-views.sql

+ 25 - 11
create-views.sql

@@ -1,3 +1,23 @@
+CREATE OR REPLACE FUNCTION public.getfallbacktext(p_translation character varying, p_fallback character varying, p_reference text) RETURNS TABLE(translation character varying, text character varying)
+    LANGUAGE SQL
+    AS $$
+SELECT translation, text FROM (SELECT
+    0 AS ordinal,
+    p_translation AS translation,
+    gettext(p_translation, p_reference) AS text
+UNION SELECT
+    1 AS ordinal,
+    p_fallback AS translation,
+    gettext(p_fallback, p_reference) AS text
+UNION SELECT
+    3 AS ordinal,
+    getdefaulttranslation() AS translation,
+    getdefaulttext(p_reference) AS text
+) AS subq
+WHERE text IS NOT NULL
+ORDER BY ordinal ASC LIMIT 1;
+$$;
+
 --
 -- Name: getrandomsample(text, bigint); Type: FUNCTION; Schema: public; Owner: pgdb
 --
@@ -116,17 +136,11 @@ ALTER TABLE public.pg_random_view OWNER TO pgdb;
 
 -- DROP VIEW IF EXISTS public.pg_random_view_default_if_null CASCADE;
 CREATE OR REPLACE VIEW public.pg_random_view_default_if_null AS
- SELECT subq.category,
-        CASE
-            WHEN (subq.txt IS NULL) THEN public.getdefaulttranslation()
-            ELSE subq.translation
-        END AS translation,
-    subq.reference,
-        CASE
-            WHEN (subq.txt IS NULL) THEN public.getdefaulttext((subq.reference)::character varying)
-            ELSE subq.txt
-        END AS txt
-   FROM public.pg_random_view subq;
+ SELECT category, (rec).translation, reference, (rec).text AS txt FROM (
+        SELECT subq.category,
+	    subq.reference,
+            public.getfallbacktext(subq.translation, getdefaulttranslation(), subq.reference) AS rec
+        FROM public.pg_random_view subq) AS q;
 
 ALTER TABLE public.pg_random_view_default_if_null OWNER TO pgdb;