Rev 823 | Rev 829 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
# Ce Makefile effectue les substitutions de nom de base de données# nécessaire au préalable de l'application des scripts SQL# Cela est d'un part moins complexe:# - qu'un script PHP (interpréteur, getopt, framework, ...)# - qu'un shell-script (lancement avec make)# et d'autre part plus maintenable qu'un shell-script car# le versionnage des fichiers (inc ".current") permet certaines facilités.# TODO:# idéalement, ce Makefile devrait permettre une bonne gestion du jeu de dépendances# entre les scripts, seulement le lancement d'un script pouvant nécessiter un login/mdp# il est difficile de vouloir rester "simple".# Ce serait cependant la meilleure manière de procéder, ainsi "maj2" ne serait lancé qu'en# cas de succès de "maj1", celui-ci pouvant être détecté comme "déjà exécuté" ou non.# cf target "maj1" ci-dessous# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (juillet/août 2013)# echo $(egrep -l 'BASE(SOURCE|EDIT|ANNUAIRE)' *.sql)fichiers = cel_references.sql dedup-ordre-201307.sql fix-utilisateur-32.sql maj-cleanup-201307.sql maj-nom-ret.sql \maj-referentiel-201307.sql maj-referentiel-und-201307.sql maj-struct-201307.sql redempteur.sql \referonosaure.sql \.current# la base de données à modifieralterdb ?= tb_cel_test# pour bdtfxa, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule;# utilisée pour actualiser les enregistrements de cel_obs dans referonosaure.sqlsourcedb ?= tb_eflore# pour annuaire_tela, lecture seule;# utilisée pour initialiser cel_utilisateurs dans maj-struct-201307.sqlannuairedb ?= tela_prod_v4bdtfx ?= 1_01bdtxa ?= 1_00bdtfx_table = bdtfx_v$(bdtfx)bdtxa_table = bdtfx_v$(bdtxa)# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table)# exemples:# * $(call is_table,tb_eflore,bdtfx_v1_01)# * $(call is_table,$(annuairedb),annuaire_tela)# argument 1: base de données# argument 2: tableis_table = @$(shell mysql -N $(1) <<<"DESC $(2)" &> /dev/null && echo true || echo false)# génère les fichiers avec les bases de données souhaitéescompile: reset@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' \$(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" \`grep ^BASEEDIT .current|cut -d '\`' -f2` \`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \`grep ^BASESOURCE .current|cut -d '\`' -f2` \`grep ^TABLE_BDTFX .current|cut -d '=' -f2` \`grep ^TABLE_BDTXA .current|cut -d '=' -f2`@readreset:@svn revert $(fichiers) &> /dev/nullhelp:@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>] [bdtfx=<1_01>] [bdtxa=<1_00>]"# mise à jour de juillet/août 2013# spécifier dans les targets l'ordre (cf A_LIRE.txt)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 donecel_references:$(call is_table,$(sourcedb),bdtfx_v1_01)$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sqlmaj-struct-201307:$(call is_table,$(annuairedb),annuaire_tela)@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sqlmaj-cleanup-201307:@ ! 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.sqlfix-utilisateur-32:@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sqldedup-ordre-201307:#@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# pour une prochaine majmaj-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