Création de Zend_Db_Create
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:
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> |