27,7 → 27,7 |
# la base de données à modifier |
alterdb ?= tb_cel_test |
|
# pour bdtfxa, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule; |
# pour bdtfx, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule; |
# utilisée pour actualiser les enregistrements de cel_obs dans referonosaure.sql |
sourcedb ?= tb_eflore |
|
38,7 → 38,7 |
bdtfx ?= 1_01 |
bdtxa ?= 1_00 |
bdtfx_table = bdtfx_v$(bdtfx) |
bdtxa_table = bdtfx_v$(bdtxa) |
bdtxa_table = bdtxa_v$(bdtxa) |
|
# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table) |
# exemples: |
46,8 → 46,15 |
# * $(call is_table,$(annuairedb),annuaire_tela) |
# argument 1: base de données |
# argument 2: table |
is_table = @$(shell mysql -N $(1) <<<"DESC $(2)" &> /dev/null && echo true || echo false) |
is_table = @mysql -N $(1) <<<"DESC $(2)" &> /dev/null |
|
# macro utilisable pour effectuer des substitutions: |
do_subst = sed -e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
-e 's/`BASEANNUAIRE`/`$(annuairedb)`/g' \ |
-e 's/`BASESOURCE`/`$(sourcedb)`/g' \ |
-e 's/TABLEBDTFX/`$(bdtfx_table)`/g' \ |
-e 's/TABLEBDTXA/`$(bdtxa_table)`/g' \ |
$(1) |
|
# génère les fichiers avec les bases de données souhaitées |
compile: reset |
54,10 → 61,10 |
@sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g' \ |
-e 's/`BASEANNUAIRE`/`$(annuairedb)`/g' \ |
-e 's/`BASESOURCE`/`$(sourcedb)`/g' \ |
-e 's/`TABLEBDTFX`/`$(bdtfx_table)`/g' \ |
-e 's/`TABLEBDTXA`/`$(bdtxa_table)`/g' \ |
-e 's/TABLEBDTFX/`$(bdtfx_table)`/g' \ |
-e 's/TABLEBDTXA/`$(bdtxa_table)`/g' \ |
$(fichiers) |
@printf "Attention: les changements s'appliqueront sur la base \"%s\"\nLes sources utilisées seront: annuaire=\"%s\" , sources=\"%s\"\n(Ctrl+C pour interrompre, Enter pour continuer)\n" \ |
@printf "Attention: les changements s'appliqueront sur la base \"%s\"\nLes sources utilisées seront: annuaire=\"%s\" , sources=\"%s\" (%s,%s)\n(Ctrl+C pour interrompre, Enter pour continuer)\n" \ |
`grep ^BASEEDIT .current|cut -d '\`' -f2` \ |
`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \ |
`grep ^BASESOURCE .current|cut -d '\`' -f2` \ |
66,40 → 73,81 |
@read |
|
reset: |
@svn revert $(fichiers) &> /dev/null |
svn revert -q $(fichiers) |
|
# supprime les fichiers "compilés" (concaténation de plusieurs scripts SQL substitués) |
clean: |
rm -f *.comp.sql |
|
help: |
@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>] [bdtfx=<1_01>] [bdtxa=<1_00>]" |
|
|
### mises à jour |
|
# mise à jour de juillet/août 2013 |
# spécifier dans les targets l'ordre (cf A_LIRE.txt) |
# attention, si un prérequis ne génère pas de SQL, cela n'empêchera pas le fichier |
# final de maj d'être généré (bien, |
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307 |
# @echo 'cat cel_references.sql maj-struct-201307.sql maj-cleanup-201307.sql fix-utilisateur-32.sql dedup-ordre-201307.sql|mysql $(alterdb)' |
@echo done |
|
o_maj1: fichiers_generes = $(addsuffix .comp.sql,$(filter-out clean,$?)) |
o_maj1: clean o_cel_references o_maj-struct-201307 o_maj-cleanup-201307 o_fix-utilisateur-32 o_dedup-ordre-201307 |
cat $(fichiers_generes) > maj1.comp.sql |
@echo done |
|
### fin: mises à jour |
|
|
### tools |
|
check_cel_obs: |
$(call is_table,$(alterdb),cel_obs) |
|
### fin: tools |
|
|
### mises à jour individuelles (scripts) |
### pour chacun d'entre-eux, deux versions existent, |
### 1) L'un compile (après substitution des noms dans le fichier SQL original) |
### et pipe vers mysql directement, ce qui suppose aussi un .my.cnf ou autre |
### 2) L'autre (préfixé par o_), renvoie le fichier substitué en sortie standard |
### et le target principal s'occupe de concaténer et de créer un fichier de destination |
### Cette méthode est de loin préférable |
cel_references: |
$(call is_table,$(sourcedb),bdtfx_v1_01) |
$(call is_table,$(sourcedb),$(bdtfx_table)) |
$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sql |
o_cel_references: |
$(call is_table,$(sourcedb),$(bdtfx_table)) |
$(call is_table,$(alterdb),cel_references) || $(call do_subst,cel_references.sql) > $@.comp.sql |
|
maj-struct-201307: |
maj-struct-201307: check_cel_obs |
$(call is_table,$(annuairedb),annuaire_tela) |
@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sql |
o_maj-struct-201307: check_cel_obs |
$(call is_table,$(annuairedb),annuaire_tela) |
@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || $(call do_subst,maj-struct-201307.sql) > $@.comp.sql |
|
maj-cleanup-201307: |
maj-cleanup-201307: check_cel_obs |
@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE date_observation = '0000-00-00 00:00:00' LIMIT 1"|grep -q 1 || mysql < maj-cleanup-201307.sql |
o_maj-cleanup-201307: |
@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE date_observation = '0000-00-00 00:00:00' LIMIT 1"|grep -q 1 || $(call do_subst,maj-cleanup-201307.sql) > $@.comp.sql |
|
fix-utilisateur-32: |
fix-utilisateur-32: check_cel_obs |
@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sql |
o_fix-utilisateur-32: check_cel_obs |
@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || $(call do_subst,fix-utilisateur-32.sql) > $@.comp.sql |
|
dedup-ordre-201307: |
dedup-ordre-201307: check_cel_obs |
#@mysql -N $(alterdb) <<<'SELECT distinct ce_utilisateur FROM `cel_obs` GROUP BY ce_utilisateur, ordre HAVING COUNT(*) > 1'|grep -q . || mysql < dedup-ordre-201307.sql |
@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || mysql < dedup-ordre-201307.sql |
o_dedup-ordre-201307: check_cel_obs |
@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || $(call do_subst,dedup-ordre-201307.sql) > $@.comp.sql |
|
|
|
|
# pour une prochaine maj |
maj-nom-ret: |
@mysql -N <<<'SELECT count(1) FROM `$(alterdb)`.`cel_obs` c LEFT JOIN `$(sourcedb)`.`bdtfx_v1_01` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0 AND c.nom_ret != "" AND id_observation NOT IN ( SELECT id_observation FROM `$(alterdb)`.`cel_obs` c, `$(sourcedb)`.`bdtfx_v1_01` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 );'|grep -q 0 |
@mysql -N <<<'SELECT count(1) FROM `$(alterdb)`.`cel_obs` c LEFT JOIN `$(sourcedb)`.`$(bdtfx_table)` b on (c.nom_ret = b.nom_sci) WHERE nom_ret_nn = 0 AND c.nom_ret != "" AND id_observation NOT IN ( SELECT id_observation FROM `$(alterdb)`.`cel_obs` c, `$(sourcedb)`.`$(bdtfx_table)` b WHERE c.nom_ret = b.nom_sci AND c.nom_ret_nn = 0 );'|grep -q 0 |