Bonjour à tous,

Je suis en cours de création d'une application modulaire (à titre perso) qui n'aurait pas seule vocation à être un CMS, mais aussi intranet ou site internet.

En cours de réalisation du noyau, je suis cette semaine sur la partie installation de l'application et en particulier la création de la base de données ou altération pour les futures versions.

Désirant que l'application puisse être installé au choix sur l'une ou l'autre des systèmes de base de données (MySql, SQLServer, Oracle SE ...) , j'ai repris le concept de DRUPAL ou les requêtes SQL (Create ou Alter Table) sont écrites dans le code dans un pseudo langage.

Personnellement mon pseudo langage est du XML hiérarchisé reprend la syntaxe du SQL2 selon une DTD (en cours d'évolution) ci-joint :

J'ai rapidement fait une première série de méthode permettant de retranscrire mes schémas (format XML) en requête SQL, et cela fonctionne, mais non satisfait.

Ma question est :
Ne serait-il pas intéressant de créer des Classes au même titre que Zend_Db_Select (générant des SELECT),
- Zend_Db_Create pour la génération de requête CREATE
- Zend_Db_Alter pour la génération de requête ALTER

Cela me permettrait également de ne pas utiliser que le format XML en guise de stockage de paramétrage.

Quand pensez-vous ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT configdata (schemas) >
<!ELEMENT schemas (schema+)>
<!ELEMENT schema (drop | create)?>
 
<!ELEMENT drop EMPTY>
<!ATTLIST drop  name CDATA #REQUIRED
            temporary (true) #IMPLIED 
            if_exists (true) #IMPLIED >
 
<!ELEMENT create (columns?, contraints? , options?)>
<!ATTLIST create
            name CDATA #REQUIRED
            temporary (true) #IMPLIED 
            if_not_exists (true) #IMPLIED > 
 
<!ELEMENT columns (column+)>
 
<!ELEMENT column (type, (primarykey | key)?, auto_increment?, nullable?, default?, comment?)>
<!ATTLIST column
        name CDATA #REQUIRED>
 
<!ELEMENT nullable EMPTY >
<!ATTLIST nullable
        value (NULL | NOT_NULL) #REQUIRED>
 
<!ELEMENT default EMPTY >
<!ATTLIST default 
            value CDATA #REQUIRED>
 
<!ELEMENT primarykey EMPTY>
 
<!ELEMENT auto_increment EMPTY >
 
<!ELEMENT key EMPTY >
 
<!ELEMENT comment EMPTY >
<!ATTLIST comment 
            value CDATA #REQUIRED>
 
<!ELEMENT type ( char | varchar | tinyint | numeric | decimal | integer | smallint | float | real | double )?>
 
<!ELEMENT char EMPTY >
<!ATTLIST char 
            length CDATA  #REQUIRED>
 
<!ELEMENT varchar EMPTY >
<!ATTLIST varchar 
            length CDATA  #REQUIRED>
 
<!ELEMENT numeric EMPTY >
<!ATTLIST numeric
            length CDATA #REQUIRED
            decimals CDATA #REQUIRED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
<!ELEMENT tinyint EMPTY >
<!ATTLIST tinyint
            length CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
<!ELEMENT decimal EMPTY >
<!ATTLIST decimal
            length CDATA #REQUIRED
            decimals CDATA #REQUIRED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
<!ELEMENT integer EMPTY >
<!ATTLIST integer
            length CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
<!ELEMENT smallint EMPTY >
<!ATTLIST smallint
            length CDATA #IMPLIED
            decimals CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
<!ELEMENT float EMPTY >
<!ATTLIST float
            length CDATA #IMPLIED
            decimals CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
 
<!ELEMENT real EMPTY >
<!ATTLIST real
            length CDATA #IMPLIED
            decimals CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >
 
 
<!ELEMENT double EMPTY >
<!ATTLIST double
            length CDATA #IMPLIED
            decimals CDATA #IMPLIED
            unsigned (true) #IMPLIED
            zerofill (true) #IMPLIED
            >            
 
<!ELEMENT contraints EMPTY >
 
<!ELEMENT options (engine , autoincrement)? >
<!ELEMENT engine EMPTY >
<!ATTLIST engine value (BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM) #REQUIRED >
 
<!ELEMENT autoincrement  EMPTY >
<!ATTLIST autoincrement 
            value CDATA #IMPLIED>