$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 a jour un ensemble de tables * en fonction du flag $up * * @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); } /** * Creer une base de donnee * a partir des tables principales et auxiliaires * * http://doc.spip.org/@creer_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 a jour une liste de tables, * fonction facilitatrice utilisee pour les maj de base * dans les plugins * * @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); } ?>