$type) { if (!isset($sql_desc['field'][$field])) { sql_alter("TABLE $table ADD $field $type" . ($last ? " AFTER $last" : ""), $serveur); } $last = $field; } foreach ($desc['key'] as $key => $type) { // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY" if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["$key $type"])) { sql_alter("TABLE $table ADD $key ($type)", $serveur); } $last = $field; } } } /** * Creer ou mettre à jour un ensemble de tables * en fonction du flag `$up` * * @uses creer_ou_upgrader_table() * * @param array $tables_inc * tables avec autoincrement sur la cle primaire * @param $tables_noinc * tables sans autoincrement sur la cle primaire * @param bool|array $up * upgrader (true) ou creer (false) * si un tableau de table est fournie, seules l'intersection de ces tables * et des $tables_inc / $tables_noinc seront traitees * @param string $serveur * serveur sql * @return void */ function alterer_base($tables_inc, $tables_noinc, $up = false, $serveur = '') { if ($up === false) { $old = false; $up = array(); } else { $old = true; if (!is_array($up)) { $up = array($up); } } foreach ($tables_inc as $k => $v) { if (!$old or in_array($k, $up)) { creer_ou_upgrader_table($k, $v, true, $old, $serveur); } } foreach ($tables_noinc as $k => $v) { if (!$old or in_array($k, $up)) { creer_ou_upgrader_table($k, $v, false, $old, $serveur); } } } /** * Créer une base de données * à partir des tables principales et auxiliaires * * Lorsque de nouvelles tables ont été déclarées, cette fonction crée les tables manquantes. * mais ne crée pas des champs manquant d'une table déjà présente. * Pour cela, c’est `maj_tables()` qu’il faut appeler. * * @api * @see maj_tables() * @uses alterer_base() * * @param string $serveur * @return void */ function creer_base($serveur = '') { // Note: les mises a jour reexecutent ce code pour s'assurer // de la conformite de la base // pas de panique sur "already exists" et "duplicate entry" donc. alterer_base( lister_tables_principales(), lister_tables_auxiliaires(), false, $serveur ); } /** * Mettre à jour une liste de tables * * Fonction facilitatrice utilisée pour les maj de base * dans les plugins. * * Elle permet de créer les champs manquants d'une table déjà présente. * * @api * @see creer_base() * @uses alterer_base() * * @param array $upgrade_tables * @param string $serveur * @return void */ function maj_tables($upgrade_tables = array(), $serveur = '') { alterer_base( lister_tables_principales(), lister_tables_auxiliaires(), $upgrade_tables, $serveur ); }