Line 1... |
Line 1... |
1 |
/*
|
1 |
/*
|
- |
|
2 |
|
2 |
Objectif: prendre les observations dont nom_sel_nn est défini
|
3 |
Objectif: prendre les observations dont nom_sel_nn est défini
|
3 |
(et donc dans laquelles les informations générées sont correctes)
|
4 |
(et donc dans laquelles les informations générées sont correctes)
|
4 |
et mettre à jour ces dernières à partir de la dernière version du référentiel
|
5 |
et mettre à jour ces dernières à partir de la dernière version du référentiel
|
5 |
(bdtfx, bdtxa et isfan).
|
6 |
(bdtfx, bdtxa et isfan).
|
6 |
|
7 |
|
7 |
Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille
|
8 |
Pour éviter un maximum de faux-positifs, nous vérifions aussi que la famille
|
8 |
est conservée (même dans certains cas celle-ci a légitimement changé) et que
|
9 |
est conservée (même dans certains cas celle-ci a légitimement changé) et que
|
9 |
la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci
|
10 |
la première partie du nom_sel correspond toujours à la première partie du nouveau nom_sci
|
10 |
qui serait attribué.
|
11 |
qui serait attribué.
|
Line 11... |
Line 12... |
11 |
|
12 |
|
12 |
-- la requête --
|
13 |
-- la requête --
|
13 |
-- SELECT id_observation, b.num_nom, CONCAT(b.nom_sci, ' ', b.auteur), b.num_taxonomique, b.famille
|
14 |
-- SELECT id_observation, b.num_nom, CONCAT(b.nom_sci, ' ', b.auteur), b.num_taxonomique, b.famille
|
14 |
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille
|
15 |
SELECT id_observation, nom_ret, nom_ret_nn, nt, c.famille
|
Line 19... |
Line 20... |
19 |
AND nom_sel_nn = num_nom
|
20 |
AND nom_sel_nn = num_nom
|
20 |
)
|
21 |
)
|
21 |
ORDER BY id_observation asc;
|
22 |
ORDER BY id_observation asc;
|
Line 22... |
Line 23... |
22 |
|
23 |
|
23 |
|
24 |
|
24 |
Cependant le nom_sel_nn n'est pas directement le num_num du taxon dont le nom est
|
25 |
Cependant le nom_ret_nn n'est pas directement le num_num du taxon dont le nom est
|
25 |
retenu. Pour cela, une jointure en bdtfx sur num_nom_retenu est nécessaire et c'est
|
26 |
retenu. Pour cela, une jointure en bdtfx sur num_nom_retenu est nécessaire et c'est
|
- |
|
27 |
ce dernier taxon dont le num_nom est utilisé pour nom_ret_nn.
|
- |
|
28 |
Cependant il peut aussi être vide (si aucun nom_retenu "officiel" n'existe).
|
- |
|
29 |
|
- |
|
30 |
Attention, les nom_sel_nn = 0 doivent avoir disparus de cel_obs *AU PRÉALABLE* car le test
|
- |
|
31 |
n'est pas effectué.
|
- |
|
32 |
cf: maj-cleanup-201307.sql
|
- |
|
33 |
|
- |
|
34 |
Ici, contrairement à referonosaure_fromNomRet.sql, nous partons du nom_sel en admettant qu'il est
|
- |
|
35 |
toujours correct et c'est donc sur ce champ que s'effectue la jointure.
|
- |
|
36 |
Quelques exceptions notables existent cependant:
|
- |
|
37 |
- certaines observations issues de sauvages sont corrompues, leur nom_sel_nn n'est donc PAS fiable
|
- |
|
38 |
- il a été remarqué des observations pour lesquelles le nom_sel_nn était corrompu, impliquant une changement
|
Line 26... |
Line 39... |
26 |
ce dernier taxon dont le num_nom est utilisé pour nom_ret_nn.
|
39 |
de nom de famille incohérent. Pour se prémunir de cela, la famille doit être identique ou presque.
|
27 |
Cependant il peut aussi être vide (si aucun nom_retenu "officiel" n'existe).
|
- |
|
28 |
|
40 |
- enfin, la première partie du nom_sel doit matcher exactement la première partie du nom_sci
|
Line 29... |
Line 41... |
29 |
Attention, les nom_sel_nn = 0 doivent avoir disparus de cel_obs *AU PRÉALABLE*
|
41 |
|
30 |
cf: maj-cleanup-201307.sql
|
- |
|
31 |
*/
|
- |
|
32 |
|
- |
|
33 |
|
- |
|
34 |
|
- |
|
35 |
/* test:
|
- |
|
36 |
SELECT c.nom_ret_nn, c.nom_ret, b.nom_sci, b.auteur, c.famille, b.famille, c.nt, b.num_taxonomique
|
- |
|
37 |
FROM cel_obs c, tb_eflore.bdtfx_v1_01 b
|
- |
|
38 |
WHERE (
|
- |
|
39 |
nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
|
- |
|
40 |
AND nom_referentiel = 'bdtfx'
|
- |
|
41 |
AND nom_ret_nn = num_nom
|
- |
|
42 |
AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
|
- |
|
43 |
AND (c.famille != b.famille OR c.nom_ret != CONCAT(b.nom_sci, ' ', b.auteur) OR c.nt != b.num_taxonomique)
|
- |
|
44 |
);
|
- |
|
45 |
= 2 taxons: 75134 et 75468 (changement de nt)
|
- |
|
46 |
*/
|
- |
|
47 |
|
- |
|
48 |
-- l'update BDTFX avec nom_sel_nn et nom_ret_nn corrects
|
- |
|
49 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b SET
|
- |
|
50 |
c.nom_ret = CONCAT(b.nom_sci, ' ', b.auteur),
|
- |
|
51 |
c.nt = b.num_taxonomique,
|
- |
|
52 |
c.famille = b.famille
|
- |
|
53 |
WHERE (
|
- |
|
54 |
nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
|
- |
|
55 |
AND nom_referentiel = 'bdtfx'
|
- |
|
56 |
AND nom_ret_nn = num_nom
|
- |
|
57 |
AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%') -- TODO: bug transferts multiples + mobile.js
|
- |
|
58 |
AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
|
42 |
Consulter referonosaure_fromNomRet.sql pour des informations complémentaires.
|
59 |
);
|
43 |
*/
|
60 |
-- 25584
|
44 |
|
61 |
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_ret_nn + nom_sel_nn";
|
45 |
|
62 |
|
46 |
|
Line 76... |
Line 60... |
76 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b, `BASESOURCE`.`TABLEBDTFX` b_nom_ret SET
|
60 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTFX` b, `BASESOURCE`.`TABLEBDTFX` b_nom_ret SET
|
77 |
c.nom_ret = CONCAT(b_nom_ret.nom_sci, ' ', b_nom_ret.auteur),
|
61 |
c.nom_ret = CONCAT(b_nom_ret.nom_sci, ' ', b_nom_ret.auteur),
|
78 |
c.nom_ret_nn = b_nom_ret.num_nom,
|
62 |
c.nom_ret_nn = b_nom_ret.num_nom,
|
79 |
c.nt = b.num_taxonomique,
|
63 |
c.nt = b.num_taxonomique,
|
80 |
c.famille = b.famille,
|
64 |
c.famille = b.famille,
|
81 |
c.date_modification = NOW
|
65 |
c.date_modification = NOW() -- a supprimer pour estimer le nombre de changements réel
|
82 |
WHERE (
|
66 |
WHERE (
|
83 |
b_nom_ret.num_nom = b.num_nom_retenu
|
67 |
b_nom_ret.num_nom = b.num_nom_retenu
|
84 |
AND nom_sel_nn IS NOT NULL
|
68 |
AND nom_sel_nn IS NOT NULL
|
85 |
AND nom_referentiel = 'bdtfx'
|
69 |
AND nom_referentiel = 'bdtfx'
|
86 |
AND nom_sel_nn = b.num_nom
|
70 |
AND nom_sel_nn = b.num_nom
|
- |
|
71 |
-- TODO: bug transferts multiples + mobile.js
|
- |
|
72 |
-- Note: SELECT IF(NULL NOT LIKE "%blah%", 1, 0) : 0
|
87 |
AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%') -- TODO: bug transferts multiples + mobile.js
|
73 |
AND (c.mots_cles_texte IS NULL OR c.mots_cles_texte NOT LIKE '%WidgetFlorileges Sauvages%')
|
88 |
AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL)
|
74 |
AND (LOWER(c.famille) = LOWER(b.famille) OR c.famille IS NULL OR c.famille = 'Famille inconnue')
|
89 |
AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
|
75 |
AND SUBSTRING_INDEX(c.nom_sel, ' ', 1) = SUBSTRING_INDEX(b.nom_sci, ' ', 1)
|
90 |
);
|
76 |
);
|
91 |
-- 26369 avec indirection num_nom_retenu
|
77 |
-- 42315 avec indirection num_nom_retenu
|
92 |
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
|
78 |
SELECT ROW_COUNT() AS "BDTFX upd après correction sur nom_sel_nn";
|
Line 93... |
Line -... |
93 |
|
- |
|
94 |
|
- |
|
95 |
|
- |
|
96 |
|
- |
|
97 |
|
- |
|
98 |
|
- |
|
99 |
|
- |
|
100 |
|
- |
|
101 |
-- l'update BDTXA avec nom_sel_nn et nom_ret_nn corrects
|
- |
|
102 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a SET
|
- |
|
103 |
c.nom_ret = CONCAT(a.nom_sci, ' ', a.auteur),
|
- |
|
104 |
c.nt = a.num_tax,
|
- |
|
105 |
c.famille = a.famille
|
- |
|
106 |
WHERE (
|
- |
|
107 |
nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
|
- |
|
108 |
AND nom_referentiel = 'bdtxa'
|
- |
|
109 |
AND nom_ret_nn = num_nom
|
- |
|
110 |
AND (LOWER(c.famille) = LOWER(a.famille) OR c.famille IS NULL)
|
- |
|
111 |
);
|
- |
|
112 |
-- 2
|
- |
|
113 |
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_ret_nn + nom_sel_nn";
|
79 |
|
114 |
|
80 |
|
115 |
-- l'update BDTXA avec nom_sel_nn seul
|
81 |
-- l'update BDTXA avec nom_sel_nn seul
|
116 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a, `BASESOURCE`.`TABLEBDTXA` a_nom_ret SET
|
82 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEBDTXA` a, `BASESOURCE`.`TABLEBDTXA` a_nom_ret SET
|
117 |
c.nom_ret = CONCAT(a_nom_ret.nom_sci, ' ', a_nom_ret.auteur),
|
83 |
c.nom_ret = CONCAT(a_nom_ret.nom_sci, ' ', a_nom_ret.auteur),
|
118 |
c.nom_ret_nn = a_nom_ret.num_nom,
|
84 |
c.nom_ret_nn = a_nom_ret.num_nom,
|
119 |
c.nt = a.num_tax,
|
85 |
c.nt = a.num_tax,
|
120 |
c.famille = a.famille,
|
86 |
c.famille = a.famille,
|
121 |
c.date_modification = NOW
|
87 |
c.date_modification = NOW()
|
122 |
WHERE (
|
88 |
WHERE (
|
123 |
a_nom_ret.num_nom = a.num_nom_retenu
|
89 |
a_nom_ret.num_nom = a.num_nom_retenu
|
124 |
AND nom_sel_nn IS NOT NULL
|
90 |
AND nom_sel_nn IS NOT NULL
|
Line 130... |
Line 96... |
130 |
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
|
96 |
-- 49 avec les restrictions sur famille et SUBSTRING_INDEX()
|
131 |
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
|
97 |
-- 48 sans les restrictions sur famille et SUBSTRING_INDEX()
|
132 |
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
|
98 |
SELECT ROW_COUNT() AS "BDTXA upd après correction sur nom_sel_nn";
|
Line 133... |
Line -... |
133 |
|
- |
|
134 |
|
- |
|
135 |
|
- |
|
136 |
|
- |
|
137 |
|
- |
|
138 |
|
- |
|
139 |
|
- |
|
140 |
-- l'update ISFAN avec nom_sel_nn et nom_ret_nn corrects --
|
- |
|
141 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i SET
|
- |
|
142 |
c.nom_ret = CONCAT(i.nom_sci, ' ', i.auteur),
|
- |
|
143 |
c.nt = i.num_taxonomique,
|
- |
|
144 |
c.famille = i.famille
|
- |
|
145 |
WHERE (
|
- |
|
146 |
nom_sel_nn IS NOT NULL AND nom_ret_nn IS NOT NULL AND nom_ret_nn != 0
|
- |
|
147 |
AND nom_referentiel = 'isfan'
|
- |
|
148 |
AND nom_ret_nn = num_nom
|
- |
|
149 |
AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
|
- |
|
150 |
);
|
- |
|
151 |
-- 2 ou 0
|
- |
|
152 |
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_ret_nn + nom_sel_nn";
|
99 |
|
153 |
|
100 |
|
154 |
-- l'update ISFAN avec nom_sel_nn seul
|
101 |
-- l'update ISFAN avec nom_sel_nn seul
|
155 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i, `BASESOURCE`.`TABLEISFAN` i_nom_ret SET
|
102 |
UPDATE `BASEEDIT`.`cel_obs` c, `BASESOURCE`.`TABLEISFAN` i, `BASESOURCE`.`TABLEISFAN` i_nom_ret SET
|
156 |
c.nom_ret = CONCAT(i_nom_ret.nom_sci, ' ', i_nom_ret.auteur),
|
103 |
c.nom_ret = CONCAT(i_nom_ret.nom_sci, ' ', i_nom_ret.auteur),
|
157 |
c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
|
104 |
c.nom_ret_nn = IF(i_nom_ret.num_nom=0,NULL,i_nom_ret.num_nom),
|
158 |
c.nt = i.num_taxonomique,
|
105 |
c.nt = i.num_taxonomique,
|
159 |
c.famille = i.famille,
|
106 |
c.famille = i.famille,
|
160 |
c.date_modification = NOW
|
107 |
c.date_modification = NOW()
|
161 |
WHERE (
|
108 |
WHERE (
|
162 |
i_nom_ret.num_nom = i.num_nom_retenu
|
109 |
i_nom_ret.num_nom = i.num_nom_retenu
|
163 |
AND nom_sel_nn IS NOT NULL
|
110 |
AND nom_sel_nn IS NOT NULL
|
164 |
AND nom_referentiel = 'isfan'
|
111 |
AND nom_referentiel = 'isfan'
|
165 |
AND nom_sel_nn = i.num_nom
|
112 |
AND nom_sel_nn = i.num_nom
|
166 |
AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
|
113 |
AND (LOWER(c.famille) = LOWER(i.famille) OR c.famille IS NULL)
|
167 |
);
|
114 |
);
|
168 |
-- 0
|
- |
|
169 |
SELECT ROW_COUNT() AS "ISFAN upd après correction sur nom_sel_nn";
|
- |
|
170 |
|
- |
|
171 |
/*
|
- |
|
172 |
Pour observer les différences:
|
- |
|
173 |
wdiff -w '$(tput bold;tput setaf 1)' -x '$(tput sgr0)' -y '$(tput bold;tput setaf 2)' -z '$(tput sgr0)' pre.log post.log | \
|
- |
|
174 |
ansi2html.sh --palette=solarized | \
|
- |
|
175 |
sed '/^[0-9]/{/span/!d}' > diff.html
|
- |
|
176 |
|
- |
|
177 |
# extract les familles ayant changé: sed '/^[0-9]/{/<\/span>$/!d}'
|
- |
|
178 |
# lowercase toutes les familles: awk '{ NF=tolower($NF); print }'
|
- |
|
179 |
|
- |
|
180 |
|
- |
|
181 |
# filtre sed: changements de famille "normaux"
|
- |
|
182 |
/aceraceae.*sapindaceae/d
|
- |
|
183 |
/scrophulariaceae.*plantaginaceae/d
|
- |
|
184 |
/globulariaceae.*plantaginaceae/d
|
- |
|
185 |
/Famille inconnue.*null/d
|
- |
|
186 |
|
- |
|
187 |
# changement "anormaux"
|
- |
|
188 |
/rosaceae.*caprifoliaceae/d
|
- |
|