BEGIN;


DROP VIEW IF EXISTS bpp_wydawnictwo_ciagle_view CASCADE;

CREATE VIEW bpp_wydawnictwo_ciagle_view AS
SELECT ARRAY [
           (SELECT id
            FROM django_content_type
            WHERE django_content_type.app_label = 'bpp'
              AND django_content_type.model = 'wydawnictwo_ciagle'),
           bpp_wydawnictwo_ciagle.id
           ] :: INTEGER[2] AS id,

       tytul_oryginalny,
       tytul,
       search_index,

       rok,

       jezyk_id,
       typ_kbn_id,

       charakter_formalny_id,

       zrodlo_id,

       NULL :: INTEGER     AS wydawnictwo_nadrzedne_id,

       NULL :: TEXT        AS wydawnictwo,

       informacje,
       szczegoly,
       uwagi,

       impact_factor,
       punkty_kbn,
       index_copernicus,
       punktacja_wewnetrzna,
       punktacja_snip,

       kc_impact_factor,
       kc_punkty_kbn,
       kc_index_copernicus,

       adnotacje,

       utworzono,
       ostatnio_zmieniony,
       ostatnio_zmieniony_dla_pbn,

       tytul_oryginalny_sort,
       opis_bibliograficzny_cache,
       opis_bibliograficzny_autorzy_cache,
       opis_bibliograficzny_zapisani_autorzy_cache,
       slug,

       recenzowana,

       liczba_znakow_wydawniczych,

       www,
       dostep_dnia,
       public_www,
       public_dostep_dnia,

       openaccess_czas_publikacji_id,
       openaccess_licencja_id,
       openaccess_tryb_dostepu_id,
       openaccess_wersja_tekstu_id,
       openaccess_ilosc_miesiecy,

       konferencja_id,

       COUNT(autor_id)     AS liczba_autorow,

       liczba_cytowan,

       status_korekty_id,

       doi,

       pbn_uid_id

FROM bpp_wydawnictwo_ciagle

         LEFT JOIN
     bpp_wydawnictwo_ciagle_autor
     ON bpp_wydawnictwo_ciagle.id = bpp_wydawnictwo_ciagle_autor.rekord_id

GROUP BY bpp_wydawnictwo_ciagle.id;


DROP VIEW IF EXISTS bpp_wydawnictwo_zwarte_view CASCADE;


CREATE VIEW bpp_wydawnictwo_zwarte_view AS
SELECT ARRAY [
           (SELECT id
            FROM django_content_type
            WHERE django_content_type.app_label = 'bpp'
              AND django_content_type.model = 'wydawnictwo_zwarte'),
           bpp_wydawnictwo_zwarte.id
           ] :: INTEGER[2] AS   id,


       tytul_oryginalny,
       tytul,
       search_index,

       rok,

       jezyk_id,
       typ_kbn_id,

       charakter_formalny_id,

       NULL :: INTEGER     AS   zrodlo_id,

       wydawnictwo_nadrzedne_id wydawnictwo_nadrzedne_id,

       wydawca_opis        AS   wydawnictwo,

       informacje,
       szczegoly,
       uwagi,

       impact_factor,
       punkty_kbn,
       index_copernicus,
       punktacja_wewnetrzna,
       punktacja_snip,

       kc_impact_factor,
       kc_punkty_kbn,
       kc_index_copernicus,

       adnotacje,

       utworzono,
       ostatnio_zmieniony,
       ostatnio_zmieniony_dla_pbn,

       tytul_oryginalny_sort,
       opis_bibliograficzny_cache,
       opis_bibliograficzny_autorzy_cache,
       opis_bibliograficzny_zapisani_autorzy_cache,
       slug,

       recenzowana,

       liczba_znakow_wydawniczych,

       www,
       dostep_dnia,
       public_www,
       public_dostep_dnia,

       openaccess_czas_publikacji_id,
       openaccess_licencja_id,
       openaccess_tryb_dostepu_id,
       openaccess_wersja_tekstu_id,
       openaccess_ilosc_miesiecy,

       konferencja_id,

       COUNT(autor_id)     AS   liczba_autorow,

       liczba_cytowan,

       status_korekty_id,

       doi,

       pbn_uid_id

FROM bpp_wydawnictwo_zwarte

         LEFT JOIN
     bpp_wydawnictwo_zwarte_autor
     ON bpp_wydawnictwo_zwarte.id = bpp_wydawnictwo_zwarte_autor.rekord_id

GROUP BY bpp_wydawnictwo_zwarte.id;


DROP VIEW IF EXISTS bpp_patent_view CASCADE;

CREATE VIEW bpp_patent_view AS
SELECT ARRAY [
           (SELECT id
            FROM django_content_type
            WHERE django_content_type.app_label = 'bpp'
              AND django_content_type.model = 'patent'),
           bpp_patent.id
           ] :: INTEGER[2]                          AS id,


       tytul_oryginalny,
       NULL :: TEXT                                 AS tytul,
       search_index,

       rok,

       (SELECT id
        FROM bpp_jezyk
        WHERE bpp_jezyk.skrot = 'pol.')             AS jezyk_id,

       (SELECT id
        FROM bpp_typ_kbn
        WHERE bpp_typ_kbn.skrot = 'PO')             AS typ_kbn_id,

       (SELECT id
        FROM bpp_charakter_formalny
        WHERE bpp_charakter_formalny.skrot = 'PAT') AS charakter_formalny_id,

       NULL :: INTEGER                              AS zrodlo_id,

       NULL :: INTEGER                              AS wydawnictwo_nadrzedne_id,

       NULL :: TEXT                                 AS wydawnictwo,

       informacje,
       szczegoly,
       uwagi,

       impact_factor,
       punkty_kbn,
       index_copernicus,
       punktacja_wewnetrzna,
       punktacja_snip,

       kc_impact_factor,
       kc_punkty_kbn,
       kc_index_copernicus,

       adnotacje,

       utworzono,
       ostatnio_zmieniony,
       NULL :: DATE                                 AS ostatnio_zmieniony_dla_pbn,

       tytul_oryginalny_sort,
       opis_bibliograficzny_cache,
       opis_bibliograficzny_autorzy_cache,
       opis_bibliograficzny_zapisani_autorzy_cache,
       slug,

       recenzowana,

       '0' :: INTEGER                               AS liczba_znakow_wydawniczych,

       www,
       dostep_dnia,
       public_www,
       public_dostep_dnia,

       NULL :: INTEGER                              AS openaccess_czas_publikacji_id,
       NULL :: INTEGER                              AS openaccess_licencja_id,
       NULL :: INTEGER                              AS openaccess_tryb_dostepu_id,
       NULL :: INTEGER                              AS openaccess_wersja_tekstu_id,
       NULL :: INTEGER                              AS openaccess_ilosc_miesiecy,

       NULL :: INTEGER                              AS konferencja_id,


       COUNT(autor_id)                              AS liczba_autorow,

       NULL :: INTEGER                              AS liczba_cytowan,

       status_korekty_id,

       NULL::TEXT as doi,

       NULL::Text as pbn_uid_id

FROM bpp_patent

         LEFT JOIN
     bpp_patent_autor
     ON bpp_patent.id = bpp_patent_autor.rekord_id

GROUP BY bpp_patent.id;


DROP VIEW IF EXISTS bpp_praca_doktorska_view CASCADE;

CREATE VIEW bpp_praca_doktorska_view AS
SELECT ARRAY [
           (SELECT id
            FROM django_content_type
            WHERE django_content_type.app_label = 'bpp'
              AND django_content_type.model = 'praca_doktorska'),
           bpp_praca_doktorska.id
           ] :: INTEGER[2]                        AS id,

       tytul_oryginalny,
       tytul,
       search_index,

       rok,

       jezyk_id,
       typ_kbn_id,

       (SELECT id
        FROM bpp_charakter_formalny
        WHERE bpp_charakter_formalny.skrot = 'D') AS charakter_formalny_id,

       NULL :: INTEGER                            AS zrodlo_id,
       NULL :: INTEGER                            AS wydawnictwo_nadrzedne_id,

       wydawca_opis                               AS wydawnictwo,

       informacje,
       szczegoly,
       uwagi,

       impact_factor,
       punkty_kbn,
       index_copernicus,
       punktacja_wewnetrzna,
       punktacja_snip,

       kc_impact_factor,
       kc_punkty_kbn,
       kc_index_copernicus,

       adnotacje,

       utworzono,
       ostatnio_zmieniony,
       NULL :: DATE                               AS ostatnio_zmieniony_dla_pbn,

       tytul_oryginalny_sort,
       opis_bibliograficzny_cache,
       opis_bibliograficzny_autorzy_cache,
       opis_bibliograficzny_zapisani_autorzy_cache,
       slug,

       recenzowana,

       '0' :: INTEGER                             AS liczba_znakow_wydawniczych,

       www,
       dostep_dnia,
       public_www,
       public_dostep_dnia,

       NULL :: INTEGER                            AS openaccess_czas_publikacji_id,
       NULL :: INTEGER                            AS openaccess_licencja_id,
       NULL :: INTEGER                            AS openaccess_tryb_dostepu_id,
       NULL :: INTEGER                            AS openaccess_wersja_tekstu_id,
       NULL :: INTEGER                            AS openaccess_ilosc_miesiecy,

       NULL :: INTEGER                            AS konferencja_id,
       '1' :: INTEGER                             AS liczba_autorow,

       liczba_cytowan,

       status_korekty_id,

       doi,

       pbn_uid_id


FROM bpp_praca_doktorska;


DROP VIEW IF EXISTS bpp_praca_habilitacyjna_view CASCADE;

CREATE VIEW bpp_praca_habilitacyjna_view AS
SELECT ARRAY [
           (SELECT id
            FROM django_content_type
            WHERE django_content_type.app_label = 'bpp'
              AND django_content_type.model = 'praca_habilitacyjna'),
           bpp_praca_habilitacyjna.id
           ] :: INTEGER[2]                        AS id,

       tytul_oryginalny,
       tytul,
       search_index,

       rok,

       jezyk_id,
       typ_kbn_id,

       (SELECT id
        FROM bpp_charakter_formalny
        WHERE bpp_charakter_formalny.skrot = 'H') AS charakter_formalny_id,

       NULL :: INTEGER                            AS zrodlo_id,
       NULL :: INTEGER                            AS wydawnictwo_nadrzedne_id,

       wydawca_opis                               AS wydawnictwo,

       informacje,
       szczegoly,
       uwagi,

       impact_factor,
       punkty_kbn,
       index_copernicus,
       punktacja_wewnetrzna,
       punktacja_snip,

       kc_impact_factor,
       kc_punkty_kbn,
       kc_index_copernicus,

       adnotacje,

       utworzono,
       ostatnio_zmieniony,
       NULL :: DATE                               AS ostatnio_zmieniony_dla_pbn,

       tytul_oryginalny_sort,
       opis_bibliograficzny_cache,
       opis_bibliograficzny_autorzy_cache,
       opis_bibliograficzny_zapisani_autorzy_cache,
       slug,

       recenzowana,

       '0' :: INTEGER                             AS liczba_znakow_wydawniczych,

       www,
       dostep_dnia,
       public_www,
       public_dostep_dnia,

       NULL :: INTEGER                            AS openaccess_czas_publikacji_id,
       NULL :: INTEGER                            AS openaccess_licencja_id,
       NULL :: INTEGER                            AS openaccess_tryb_dostepu_id,
       NULL :: INTEGER                            AS openaccess_wersja_tekstu_id,
       NULL :: INTEGER                            AS openaccess_ilosc_miesiecy,

       NULL :: INTEGER                            AS konferencja_id,

       '1' :: INTEGER                             AS liczba_autorow,

       liczba_cytowan,

       status_korekty_id,

       doi,

       pbn_uid_id


FROM bpp_praca_habilitacyjna;


DROP VIEW IF EXISTS bpp_rekord CASCADE;

CREATE VIEW bpp_rekord AS
SELECT *
FROM bpp_wydawnictwo_ciagle_view
UNION ALL
SELECT *
FROM bpp_wydawnictwo_zwarte_view
UNION ALL
SELECT *
FROM bpp_patent_view
UNION ALL
SELECT *
FROM bpp_praca_doktorska_view
UNION ALL
SELECT *
FROM bpp_praca_habilitacyjna_view;


DROP TABLE IF EXISTS bpp_rekord_mat CASCADE;

CREATE TABLE bpp_rekord_mat AS
SELECT *
FROM bpp_rekord;


CREATE UNIQUE INDEX bpp_rekord_mat_fake_id_idx
    ON bpp_rekord_mat (id);

CREATE INDEX bpp_rekord_mat_tytul_oryginalny_idx
    ON bpp_rekord_mat (tytul_oryginalny);
CREATE INDEX bpp_rekord_mat_search_index_idx
    ON bpp_rekord_mat USING GIST (search_index);
CREATE INDEX bpp_rekord_mat_1
    ON bpp_rekord_mat (jezyk_id);
CREATE INDEX bpp_rekord_mat_2
    ON bpp_rekord_mat (typ_kbn_id);
CREATE INDEX bpp_rekord_mat_3
    ON bpp_rekord_mat (charakter_formalny_id);
CREATE INDEX bpp_rekord_mat_4
    ON bpp_rekord_mat (zrodlo_id);
CREATE INDEX bpp_rekord_mat_5
    ON bpp_rekord_mat (wydawnictwo);
CREATE INDEX bpp_rekord_mat_7
    ON bpp_rekord_mat (impact_factor);
CREATE INDEX bpp_rekord_mat_8
    ON bpp_rekord_mat (punkty_kbn);
CREATE INDEX bpp_rekord_mat_9
    ON bpp_rekord_mat (index_copernicus);
CREATE INDEX bpp_rekord_mat_a
    ON bpp_rekord_mat (punktacja_wewnetrzna);
CREATE INDEX bpp_rekord_mat_punktacja_snip
    ON bpp_rekord_mat (punktacja_snip);
CREATE INDEX bpp_rekord_mat_b
    ON bpp_rekord_mat (kc_impact_factor);
CREATE INDEX bpp_rekord_mat_c
    ON bpp_rekord_mat (kc_punkty_kbn);
CREATE INDEX bpp_rekord_mat_d
    ON bpp_rekord_mat (kc_index_copernicus);
CREATE INDEX bpp_rekord_mat_e
    ON bpp_rekord_mat (uwagi);
CREATE INDEX bpp_rekord_mat_f
    ON bpp_rekord_mat (adnotacje);
CREATE INDEX bpp_rekord_mat_g
    ON bpp_rekord_mat (utworzono);
CREATE INDEX bpp_rekord_mat_h
    ON bpp_rekord_mat (ostatnio_zmieniony);
CREATE INDEX bpp_rekord_mat_i
    ON bpp_rekord_mat (rok);
CREATE INDEX bpp_rekord_mat_k
    ON bpp_rekord_mat (recenzowana);
CREATE INDEX bpp_rekord_mat_l
    ON bpp_rekord_mat (openaccess_czas_publikacji_id);
CREATE INDEX bpp_rekord_mat_m
    ON bpp_rekord_mat (openaccess_licencja_id);
CREATE INDEX bpp_rekord_mat_n
    ON bpp_rekord_mat (openaccess_tryb_dostepu_id);
CREATE INDEX bpp_rekord_mat_o
    ON bpp_rekord_mat (openaccess_wersja_tekstu_id);
CREATE INDEX bpp_rekord_mat_p
    ON bpp_rekord_mat (liczba_cytowan);
CREATE INDEX bpp_rekord_mat_q
    ON bpp_rekord_mat (dostep_dnia);
CREATE INDEX bpp_rekord_mat_r
    ON bpp_rekord_mat (status_korekty_id);
CREATE INDEX bpp_rekord_mat_doi ON bpp_rekord_mat(doi);
CREATE INDEX bpp_rekord_mat_doi_iexact ON bpp_rekord_mat(upper(doi));
CREATE INDEX bpp_rekord_mat_pbn_uid_id ON bpp_rekord_mat(pbn_uid_id);

ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT zrodlo_id_fk FOREIGN KEY (zrodlo_id) REFERENCES bpp_zrodlo (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT charakter_formalny_id_fk FOREIGN KEY (charakter_formalny_id) REFERENCES bpp_charakter_formalny (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT jezyk_id_fk FOREIGN KEY (jezyk_id) REFERENCES bpp_jezyk (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT typ_kbn_id_fk FOREIGN KEY (typ_kbn_id) REFERENCES bpp_typ_kbn (id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;


ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT openaccess_wersja_tekstu_fk
        FOREIGN KEY (openaccess_wersja_tekstu_id)
            REFERENCES bpp_wersja_tekstu_openaccess (id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
            DEFERRABLE INITIALLY DEFERRED;

ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT openaccess_licencja_fk
        FOREIGN KEY (openaccess_licencja_id)
            REFERENCES bpp_licencja_openaccess (id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
            DEFERRABLE INITIALLY DEFERRED;

ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT openaccess_czas_publikacji_fk
        FOREIGN KEY (openaccess_czas_publikacji_id)
            REFERENCES bpp_czas_udostepnienia_openaccess (id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
            DEFERRABLE INITIALLY DEFERRED;

ALTER TABLE bpp_rekord_mat
    ADD CONSTRAINT konferencja_id_fk
        FOREIGN KEY (konferencja_id)
            REFERENCES bpp_konferencja (id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
            DEFERRABLE INITIALLY DEFERRED;

CREATE OR REPLACE RULE django_get_off_bpp_rekord_view_1 AS ON DELETE TO bpp_rekord DO INSTEAD NOTHING;
CREATE OR REPLACE RULE django_get_off_bpp_rekord_view_2 AS ON UPDATE TO bpp_rekord DO INSTEAD NOTHING;



CREATE OR REPLACE VIEW bpp_slowa_kluczowe_view AS
SELECT ARRAY [
           content_type_id, object_id, tag_id
           ] :: INTEGER[3] AS id,


       ARRAY [
           content_type_id, object_id
           ] :: INTEGER[2] AS rekord_id,
       ARRAY [
           content_type_id, object_id
           ] :: INTEGER[2] AS content_object,


       tag_id
FROM taggit_taggeditem;

COMMIT;
