Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 829 | Rev 885 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
821 raphael 1
# Ce Makefile effectue les substitutions de nom de base de données
2
# nécessaire au préalable de l'application des scripts SQL
3
 
4
# Cela est d'un part moins complexe:
5
# - qu'un script PHP (interpréteur, getopt, framework, ...)
6
# - qu'un shell-script (lancement avec make)
7
# et d'autre part plus maintenable qu'un shell-script car
8
# le versionnage des fichiers (inc ".current") permet certaines facilités.
9
 
10
 
11
# TODO:
12
# idéalement, ce Makefile devrait permettre une bonne gestion du jeu de dépendances
13
# entre les scripts, seulement le lancement d'un script pouvant nécessiter un login/mdp
14
# il est difficile de vouloir rester "simple".
822 raphael 15
# Ce serait cependant la meilleure manière de procéder, ainsi "maj2" ne serait lancé qu'en
16
# cas de succès de "maj1", celui-ci pouvant être détecté comme "déjà exécuté" ou non.
17
# cf target "maj1" ci-dessous
821 raphael 18
 
19
 
882 raphael 20
# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (septembre 2013)
816 raphael 21
# echo $(egrep -l 'BASE(SOURCE|EDIT|ANNUAIRE)' *.sql)
823 raphael 22
fichiers = cel_references.sql dedup-ordre-201307.sql fix-utilisateur-32.sql maj-cleanup-201307.sql maj-nom-ret.sql \
23
		   maj-referentiel-201307.sql maj-referentiel-und-201307.sql maj-struct-201307.sql redempteur.sql \
24
		   referonosaure.sql \
25
		   .current
816 raphael 26
 
27
# la base de données à modifier
28
alterdb ?= tb_cel_test
29
 
829 raphael 30
# pour bdtfx, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule;
816 raphael 31
# utilisée pour actualiser les enregistrements de cel_obs dans referonosaure.sql
32
sourcedb ?= tb_eflore
33
 
34
# pour annuaire_tela, lecture seule;
35
# utilisée pour initialiser cel_utilisateurs dans maj-struct-201307.sql
36
annuairedb ?= tela_prod_v4
37
 
828 raphael 38
bdtfx ?= 1_01
39
bdtxa ?= 1_00
882 raphael 40
isfan ?= 2013
828 raphael 41
bdtfx_table = bdtfx_v$(bdtfx)
829 raphael 42
bdtxa_table = bdtxa_v$(bdtxa)
882 raphael 43
isfan_table = isfan_v$(isfan)
828 raphael 44
 
823 raphael 45
# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table)
46
# exemples:
47
# * $(call is_table,tb_eflore,bdtfx_v1_01)
48
# * $(call is_table,$(annuairedb),annuaire_tela)
49
# argument 1: base de données
50
# argument 2: table
829 raphael 51
is_table = @mysql -N $(1) <<<"DESC $(2)" &> /dev/null
822 raphael 52
 
829 raphael 53
# macro utilisable pour effectuer des substitutions:
882 raphael 54
do_subst = sed -e "1i--\n-- fichier d'origine: \"${1}\"\n" \
55
		   -e 's/`BASEEDIT`/`$(alterdb)`/g' \
829 raphael 56
		   -e 's/`BASEANNUAIRE`/`$(annuairedb)`/g' \
57
		   -e 's/`BASESOURCE`/`$(sourcedb)`/g' \
882 raphael 58
		   -e 's/`TABLEBDTFX`/`$(bdtfx_table)`/g' \
59
		   -e 's/`TABLEBDTXA`/`$(bdtxa_table)`/g' \
60
		   -e 's/`TABLEISFAN`/`$(isfan_table)`/g' \
829 raphael 61
		   -e 's/TABLEBDTFX/`$(bdtfx_table)`/g' \
62
		   -e 's/TABLEBDTXA/`$(bdtxa_table)`/g' \
882 raphael 63
		   -e 's/TABLEISFAN/`$(isfan_table)`/g' \
829 raphael 64
		   $(1)
823 raphael 65
 
822 raphael 66
# génère les fichiers avec les bases de données souhaitées
67
compile: reset
821 raphael 68
	@sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g'  \
820 raphael 69
		   -e 's/`BASEANNUAIRE`/`$(annuairedb)`/g'  \
70
		   -e 's/`BASESOURCE`/`$(sourcedb)`/g'  \
829 raphael 71
		   -e 's/TABLEBDTFX/`$(bdtfx_table)`/g'  \
72
		   -e 's/TABLEBDTXA/`$(bdtxa_table)`/g'  \
882 raphael 73
		   -e 's/`TABLEISFAN`/`$(isfan_table)`/g'  \
816 raphael 74
		   $(fichiers)
882 raphael 75
	@printf "Attention: les changements s'appliqueront sur la base \"%s\"\nLes sources utilisées seront: annuaire=\"%s\" ,  sources=\"%s\" (%s,%s,%s)\n(Ctrl+C pour interrompre, Enter pour continuer)\n" \
822 raphael 76
			`grep ^BASEEDIT .current|cut -d '\`' -f2` \
77
			`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \
828 raphael 78
			`grep ^BASESOURCE .current|cut -d '\`' -f2` \
79
			`grep ^TABLE_BDTFX .current|cut -d '=' -f2` \
882 raphael 80
			`grep ^TABLE_BDTXA .current|cut -d '=' -f2` \
81
			`grep ^TABLE_ISFAN .current|cut -d '=' -f2`
822 raphael 82
	@read
820 raphael 83
 
84
reset:
829 raphael 85
	svn revert -q $(fichiers)
820 raphael 86
 
829 raphael 87
# supprime les fichiers "compilés" (concaténation de plusieurs scripts SQL substitués)
88
clean:
89
	rm -f *.comp.sql
823 raphael 90
 
820 raphael 91
help:
828 raphael 92
	@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>] [bdtfx=<1_01>] [bdtxa=<1_00>]"
820 raphael 93
 
821 raphael 94
 
829 raphael 95
### mises à jour
96
 
882 raphael 97
# mise à jour de septembre 2013
822 raphael 98
# spécifier dans les targets l'ordre (cf A_LIRE.txt)
829 raphael 99
# attention, si un prérequis ne génère pas de SQL, cela n'empêchera pas le fichier
100
# final de maj d'être généré (bien,
882 raphael 101
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307 maj-referentiel-201307
822 raphael 102
	@echo done
821 raphael 103
 
829 raphael 104
o_maj1: fichiers_generes = $(addsuffix .comp.sql,$(filter-out clean,$?))
882 raphael 105
o_maj1: clean o_cel_references o_maj-struct-201307 o_maj-cleanup-201307 o_fix-utilisateur-32 o_dedup-ordre-201307 o_maj-referentiel-201307 o_referonosaure
829 raphael 106
	cat $(fichiers_generes) > maj1.comp.sql
107
	@echo done
822 raphael 108
 
829 raphael 109
### fin: mises à jour
822 raphael 110
 
829 raphael 111
 
112
### tools
113
 
114
check_cel_obs:
115
	$(call is_table,$(alterdb),cel_obs)
116
 
117
### fin: tools
118
 
119
 
120
### mises à jour individuelles (scripts)
121
### pour chacun d'entre-eux, deux versions existent,
122
### 1) L'un compile (après substitution des noms dans le fichier SQL original)
123
### et pipe vers mysql directement, ce qui suppose aussi un .my.cnf ou autre
124
### 2) L'autre (préfixé par o_), renvoie le fichier substitué en sortie standard
125
### et le target principal s'occupe de concaténer et de créer un fichier de destination
882 raphael 126
### Cette méthode est de loin préférable et conforme à la philosophie Makefile
821 raphael 127
cel_references:
829 raphael 128
	$(call is_table,$(sourcedb),$(bdtfx_table))
882 raphael 129
	$(call is_table,$(sourcedb),nvjfl_v2007)
130
	$(call is_table,$(sourcedb),nva_index_v2_03)
823 raphael 131
	$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sql
829 raphael 132
o_cel_references:
133
	$(call is_table,$(sourcedb),$(bdtfx_table))
882 raphael 134
	$(call is_table,$(sourcedb),nvjfl_v2007)
135
	$(call is_table,$(sourcedb),nva_index_v2_03)
829 raphael 136
	$(call is_table,$(alterdb),cel_references) || $(call do_subst,cel_references.sql) > $@.comp.sql
822 raphael 137
 
829 raphael 138
maj-struct-201307: check_cel_obs
823 raphael 139
	$(call is_table,$(annuairedb),annuaire_tela)
822 raphael 140
	@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sql
829 raphael 141
o_maj-struct-201307: check_cel_obs
142
	$(call is_table,$(annuairedb),annuaire_tela)
143
	@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || $(call do_subst,maj-struct-201307.sql) > $@.comp.sql
822 raphael 144
 
829 raphael 145
maj-cleanup-201307: check_cel_obs
882 raphael 146
	@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE nom_ret = 'null' LIMIT 1"|grep -q 1 || mysql < maj-cleanup-201307.sql
829 raphael 147
o_maj-cleanup-201307:
882 raphael 148
	@ ! mysql -N $(alterdb) <<<"SELECT 1 FROM cel_obs WHERE nom_ret = 'null' LIMIT 1"|grep -q 1 || $(call do_subst,maj-cleanup-201307.sql) > $@.comp.sql
822 raphael 149
 
829 raphael 150
fix-utilisateur-32: check_cel_obs
822 raphael 151
	@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sql
829 raphael 152
o_fix-utilisateur-32: check_cel_obs
153
	@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || $(call do_subst,fix-utilisateur-32.sql) > $@.comp.sql
822 raphael 154
 
829 raphael 155
dedup-ordre-201307: check_cel_obs
822 raphael 156
#@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
157
	@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || mysql < dedup-ordre-201307.sql
829 raphael 158
o_dedup-ordre-201307: check_cel_obs
159
	@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || $(call do_subst,dedup-ordre-201307.sql) > $@.comp.sql
822 raphael 160
 
882 raphael 161
# maj-referentiel-201307.sql: # pas de test aisé et rapide
162
# doit passer APRÈS o_maj-cleanup-201307 (pas de nom_ret_nn = 0)
163
o_maj-referentiel-201307: check_cel_obs
164
	$(call do_subst,maj-referentiel-201307.sql) > $@.comp.sql
822 raphael 165
 
882 raphael 166
# pas de test aisé non plus pour savoir s'il doit repasser
167
# néanmoins c'est un script sur (peut-être invoqué répétivement)
168
o_referonosaure: check_cel_obs
169
	$(call do_subst,referonosaure.sql) > $@.comp.sql
829 raphael 170
 
171
 
882 raphael 172
 
822 raphael 173
# pour une prochaine maj
821 raphael 174
maj-nom-ret:
829 raphael 175
	@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
882 raphael 176
o_maj-nom-ret:
177
	$(call do_subst,maj-nom-ret.sql) > $@.comp.sql