-- petits tests préalables
select *
from 'pypi_issues.03.json';
select unnest(labels)
from 'pypi_issues.03.json';
-- Recréer un document json par élément dans le json de départ
-- Si on veut refaire une liste pour avoir un seul gros doc json
-- il suffit de mettre le to_json à l'intérieur d'un json_group_array
with labels as (
    select id,
        unnest(labels) as l
    from 'pypi_issues.03.json'
),
lbls_tr as (
    select id,
        array_agg({ id: l.id, name: l.name }) as lbls
    from labels
    group by id
)
select to_json(
        { id: j.id,
        number: number,
        state: state,
        user: { login: user.login,
        id: user.id },
        labels: lbls,
        created_at: created_at,
        closed_at: closed_at }
    ) as tr
from 'pypi_issues.03.json' j
    join lbls_tr on j.id = lbls_tr.id;
-- Peut-être plus intéressant si on veut travailler en vue de faire des stats: convertir le contenu en tables relationnelles
-- DuckDB possède un type list (~= array en postgres) et un struct et va mapper directement les structures json sur ces types lors de la lecture du fichier.
-- Pour les structures imbriquées comme user, on accède facilement au valeurs avec le '.'
-- Pour les listes selon l'usage, il peut être intéressant de créer une ligne pour chaque élément du tableau (cf table labels)
-- 
-- Une table pour les issues 
drop table if exists issues;
create table issues as
select *
from 'pypi_issues.03.json';
-- Récupérer la liste des logins (accès à la structure dans le champ user)
select distinct i.user.login as login
from issues i;
-- Une table labels qui associe chaque label l'id de l'issue concernée
-- Remarque: les labels sont déjà dans la table issues, mais dans un tableau
-- la table ci-dessous permet de travailler directement sur les issues
drop table if exists labels;
create table labels as
select id as issue_id,
    label.*
from (
        select id,
            unnest(labels) as label
        from issues
    ) sl;