-- cette fonction permet d'enlever aleatoirement 10% des
-- tuples de la table vin afin de rendre la base plus realiste
CREATE OR REPLACE FUNCTION trous_vin() RETURNS bigint as
$$
DECLARE
	vin_total integer;
	echantillon integer;
	v_vin_id integer;
	v_tuples bigint := 0;
	v_annee integer;
BEGIN

  -- on compte le nombre de tuples dans vin
  select count(*) from vin into vin_total;
  raise NOTICE '% vins disponibles', vin_total;

  -- on calcule la taille de l'echantillon a
  -- supprimer de la table vin
  select round(vin_total/10) into echantillon;
  raise NOTICE 'taille de l''echantillon %', echantillon;

  -- on fait une boucle correspondant a 10% des tuples 
  -- de la table vin
  for v_tuples in 1 .. echantillon loop
   
     -- selection d'identifiant, au hasard
     v_vin_id := round(random()*vin_total);
 
     -- si le tuple est deja efface, ce n'est pas grave..

     -- TODO remplacer ce delete par un trigger on delete cascade
     --      voir dans druid le schema???
     delete 
     from stock
     where vin_id = v_vin_id;

     delete
     from vin
     where id = v_vin_id;

     if (((v_tuples%100)=0) or (v_tuples=echantillon)) then
        raise notice 'vin : % sur % echantillon effaces',v_tuples, echantillon;
     end if;

  end loop; --fin boucle v_tuples

  RETURN echantillon;

END;
$$ LANGUAGE plpgsql;
