Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 823 | Rev 829 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 823 Rev 828
1
# Ce Makefile effectue les substitutions de nom de base de données
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
2
# nécessaire au préalable de l'application des scripts SQL
3
 
3
 
4
# Cela est d'un part moins complexe:
4
# Cela est d'un part moins complexe:
5
# - qu'un script PHP (interpréteur, getopt, framework, ...)
5
# - qu'un script PHP (interpréteur, getopt, framework, ...)
6
# - qu'un shell-script (lancement avec make)
6
# - qu'un shell-script (lancement avec make)
7
# et d'autre part plus maintenable qu'un shell-script car
7
# et d'autre part plus maintenable qu'un shell-script car
8
# le versionnage des fichiers (inc ".current") permet certaines facilités.
8
# le versionnage des fichiers (inc ".current") permet certaines facilités.
9
 
9
 
10
 
10
 
11
# TODO:
11
# TODO:
12
# idéalement, ce Makefile devrait permettre une bonne gestion du jeu de dépendances
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
13
# entre les scripts, seulement le lancement d'un script pouvant nécessiter un login/mdp
14
# il est difficile de vouloir rester "simple".
14
# il est difficile de vouloir rester "simple".
15
# Ce serait cependant la meilleure manière de procéder, ainsi "maj2" ne serait lancé qu'en
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.
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
17
# cf target "maj1" ci-dessous
18
 
18
 
19
 
19
 
20
# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (juillet/août 2013)
20
# à l'aide de, note certains de ces fichiers n'ont pas cours dans le cadre de la maj1 (juillet/août 2013)
21
# echo $(egrep -l 'BASE(SOURCE|EDIT|ANNUAIRE)' *.sql)
21
# echo $(egrep -l 'BASE(SOURCE|EDIT|ANNUAIRE)' *.sql)
22
fichiers = cel_references.sql dedup-ordre-201307.sql fix-utilisateur-32.sql maj-cleanup-201307.sql maj-nom-ret.sql \
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 \
23
		   maj-referentiel-201307.sql maj-referentiel-und-201307.sql maj-struct-201307.sql redempteur.sql \
24
		   referonosaure.sql \
24
		   referonosaure.sql \
25
		   .current
25
		   .current
26
 
26
 
27
# la base de données à modifier
27
# la base de données à modifier
28
alterdb ?= tb_cel_test
28
alterdb ?= tb_cel_test
29
 
29
 
30
# pour bdtfxa, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule;
30
# pour bdtfxa, bdtxa, isfan, nvjfl, nva, baseflor, ... lecture seule;
31
# utilisée pour actualiser les enregistrements de cel_obs dans referonosaure.sql
31
# utilisée pour actualiser les enregistrements de cel_obs dans referonosaure.sql
32
sourcedb ?= tb_eflore
32
sourcedb ?= tb_eflore
33
 
33
 
34
# pour annuaire_tela, lecture seule;
34
# pour annuaire_tela, lecture seule;
35
# utilisée pour initialiser cel_utilisateurs dans maj-struct-201307.sql
35
# utilisée pour initialiser cel_utilisateurs dans maj-struct-201307.sql
36
annuairedb ?= tela_prod_v4
36
annuairedb ?= tela_prod_v4
-
 
37
 
-
 
38
bdtfx ?= 1_01
-
 
39
bdtxa ?= 1_00
-
 
40
bdtfx_table = bdtfx_v$(bdtfx)
-
 
41
bdtxa_table = bdtfx_v$(bdtxa)
37
 
42
 
38
# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table)
43
# macro utilisable pour les targets nécessitant de tester la présence d'un couple (base,table)
39
# exemples:
44
# exemples:
40
# * $(call is_table,tb_eflore,bdtfx_v1_01)
45
# * $(call is_table,tb_eflore,bdtfx_v1_01)
41
# * $(call is_table,$(annuairedb),annuaire_tela)
46
# * $(call is_table,$(annuairedb),annuaire_tela)
42
# argument 1: base de données
47
# argument 1: base de données
43
# argument 2: table
48
# argument 2: table
44
is_table = @$(shell mysql -N $(1) <<<"DESC $(2)" &> /dev/null && echo true || echo false)
49
is_table = @$(shell mysql -N $(1) <<<"DESC $(2)" &> /dev/null && echo true || echo false)
45
 
50
 
46
 
51
 
47
# génère les fichiers avec les bases de données souhaitées
52
# génère les fichiers avec les bases de données souhaitées
48
compile: reset
53
compile: reset
49
	@sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g'  \
54
	@sed -i -e 's/`BASEEDIT`/`$(alterdb)`/g'  \
50
		   -e 's/`BASEANNUAIRE`/`$(annuairedb)`/g'  \
55
		   -e 's/`BASEANNUAIRE`/`$(annuairedb)`/g'  \
51
		   -e 's/`BASESOURCE`/`$(sourcedb)`/g'  \
56
		   -e 's/`BASESOURCE`/`$(sourcedb)`/g'  \
-
 
57
		   -e 's/`TABLEBDTFX`/`$(bdtfx_table)`/g'  \
-
 
58
		   -e 's/`TABLEBDTXA`/`$(bdtxa_table)`/g'  \
52
		   $(fichiers)
59
		   $(fichiers)
53
	@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" \
60
	@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" \
54
			`grep ^BASEEDIT .current|cut -d '\`' -f2` \
61
			`grep ^BASEEDIT .current|cut -d '\`' -f2` \
55
			`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \
62
			`grep ^BASEANNUAIRE .current|cut -d '\`' -f2` \
56
			`grep ^BASESOURCE .current|cut -d '\`' -f2`
63
			`grep ^BASESOURCE .current|cut -d '\`' -f2` \
-
 
64
			`grep ^TABLE_BDTFX .current|cut -d '=' -f2` \
-
 
65
			`grep ^TABLE_BDTXA .current|cut -d '=' -f2`
57
	@read
66
	@read
58
 
67
 
59
reset:
68
reset:
60
	@svn revert $(fichiers) &> /dev/null
69
	@svn revert $(fichiers) &> /dev/null
61
 
70
 
62
 
71
 
63
help:
72
help:
64
	@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>]"
73
	@echo "make [alterdb=<tb_cel_test>] [sourcedb=<tb_eflore>] [annuairedb=<tela_prod_v4>] [bdtfx=<1_01>] [bdtxa=<1_00>]"
65
 
74
 
66
 
75
 
67
# mise à jour de juillet/août 2013
76
# mise à jour de juillet/août 2013
68
# spécifier dans les targets l'ordre (cf A_LIRE.txt)
77
# spécifier dans les targets l'ordre (cf A_LIRE.txt)
69
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307
78
maj1: compile cel_references maj-struct-201307 maj-cleanup-201307 fix-utilisateur-32 dedup-ordre-201307
70
#	@echo 'cat cel_references.sql maj-struct-201307.sql maj-cleanup-201307.sql fix-utilisateur-32.sql dedup-ordre-201307.sql|mysql $(alterdb)'
79
#	@echo 'cat cel_references.sql maj-struct-201307.sql maj-cleanup-201307.sql fix-utilisateur-32.sql dedup-ordre-201307.sql|mysql $(alterdb)'
71
	@echo done
80
	@echo done
72
 
81
 
73
 
82
 
74
 
83
 
75
cel_references:
84
cel_references:
76
	$(call is_table,$(sourcedb),bdtfx_v1_01)
85
	$(call is_table,$(sourcedb),bdtfx_v1_01)
77
	$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sql
86
	$(call is_table,$(alterdb),cel_references) || mysql < cel_references.sql
78
 
87
 
79
maj-struct-201307:
88
maj-struct-201307:
80
	$(call is_table,$(annuairedb),annuaire_tela)
89
	$(call is_table,$(annuairedb),annuaire_tela)
81
	@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sql
90
	@mysql -N $(alterdb) <<<"DESC cel_obs nom_sel"|grep -q 601 || mysql < maj-struct-201307.sql
82
 
91
 
83
maj-cleanup-201307:
92
maj-cleanup-201307:
84
	@ ! 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
93
	@ ! 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
85
 
94
 
86
fix-utilisateur-32:
95
fix-utilisateur-32:
87
	@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sql
96
	@mysql -N $(alterdb) <<<"DESC cel_obs ce_utilisateur"|grep -q 255 || mysql < fix-utilisateur-32.sql
88
 
97
 
89
dedup-ordre-201307:
98
dedup-ordre-201307:
90
#@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
99
#@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
91
	@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || mysql < dedup-ordre-201307.sql
100
	@mysql -N $(alterdb) <<<"SHOW INDEX FROM cel_obs"|grep -q couple_user_ordre || mysql < dedup-ordre-201307.sql
92
 
101
 
93
 
102
 
94
# pour une prochaine maj
103
# pour une prochaine maj
95
maj-nom-ret:
104
maj-nom-ret:
96
	@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
105
	@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