Programmer avec SPIP 2.1
Documentation technique sur SPIP 2.1

> > > > sql_alter

sql_alter

La fonction sql_alter() permet d’envoyer une requête de type ALTER au serveur de base de données pour modifier la structure de la base.

La fonction a 3 paramètres :

  1. $q est la requête (sans le terme "ALTER") a effectuer
  2. $serveur,
  3. $option

Note : Cette fonction prenant directement une requête au format SQL, il est prudent de bien respecter les standards SQL. Il est possible que pour des prochaines versions de SPIP, le paramètre $q accepte un tableau plus structuré en entrée pour faciliter les différents portages.

La fonction s’utilise comme suit :

  1. sql_alter("TABLE table ADD COLUMN colonne INT");
  2. sql_alter("TABLE table ADD colonne INT"); // COLUMN est optionnel
  3. sql_alter("TABLE table CHANGE colonne colonne INT DEFAUT '0'");
  4. sql_alter("TABLE table ADD INDEX colonne (colonne)");
  5. sql_alter("TABLE table DROP INDEX colonne");
  6. sql_alter("TABLE table DROP COLUMN colonne");
  7. sql_alter("TABLE table DROP colonne"); // COLUMN est optionnel
  8. sql_alter("TABLE spip_tradlang RENAME spip_tradlangs");
  9. // possibilite de passer plusieurs actions, mais attention aux portages :
  10. sql_alter("TABLE table DROP colonneA, DROP colonneB");

Télécharger

La fonction sql_alter() sert particulièrement lors de la phase de mise à jour de plugins dans les fonctions {nom}_upgrade() des différents plugins.

Exemple

Ajouter une colonne « composition » sur la table spip_articles (plugin « Composition ») :

  1. sql_alter("TABLE spip_articles ADD composition varchar(255) DEFAULT '' NOT NULL");

Ajouter une colonne « css » sur la table « spip_menus » (plugin « Menus ») :

  1. sql_alter("TABLE spip_menus ADD COLUMN css tinytext DEFAULT '' NOT NULL");

Le plugin « TradRub » dans sa procédure d’installation ajoute une colonne « id_trad » sur la table spip_rubriques en utilisant la fonction maj_tables() prévue, puis ajoute un index sur cette même colonne avec sql_alter() :

  1. function tradrub_upgrade($nom_meta_base_version, $version_cible){
  2. $current_version = 0.0;
  3.  
  4. if ( (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
  5. || (($current_version = $GLOBALS['meta'][$nom_meta_base_version]) != $version_cible))
  6. {
  7. include_spip('base/tradrub');
  8. if ($current_version==0.0){
  9. include_spip('base/create');
  10. maj_tables('spip_rubriques');
  11. // index sur le nouveau champ
  12. sql_alter("TABLE spip_rubriques ADD INDEX (id_trad)");
  13. ecrire_meta($nom_meta_base_version, $current_version=$version_cible, 'non');
  14. }
  15. }
  16. }

Télécharger