Valider 053b0078 rédigé par esj's avatar esj
Parcourir les fichiers

#209 et multi-base: l'instruction Alter ne fonctionne pas sur les index en PG,...

#209 et multi-base: l'instruction Alter ne fonctionne pas sur les index en PG, il ne faut donc plus utiliser directement 
	'''spip_query("ALTER TABLE'''...
mais:
	'''sql_alter("TABLE'''...

afin que PG puisse exécuter les mises à jour. 

En conséquence, comme dans [10131] et [10146] on rallonge la liste des fonctions d'abstraction de [10113]: 
{{{
	'alter' => fonction d'abstraction de l'altération de la base de données
}}}

Modification rétroactive des deux dernières MAJ de la base pour que les installations en PG puissent les réaliser (il y en a déjà plein je suis sûr...) et pour servir d'exemple.
parent 6ead568c
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -67,6 +67,11 @@ function sql_select (
		  $table, $id, $serveur);
}

function sql_alter($q, $serveur='') {
	$f = sql_serveur('alter', $serveur);
	return $f($q, $serveur);
}

// http://doc.spip.org/@sql_fetch
function sql_fetch($res, $serveur='') {
	$f = sql_serveur('fetch', $serveur);
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -36,6 +36,7 @@ function base_db_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
		'db' => $db,
		'prefixe' => $prefixe ? $prefixe : $db,
		'link' => $GLOBALS['mysql_rappel_connexion'] ? $link : false,
		'alter' => 'spip_mysql_alter',
		'count' => 'spip_mysql_count',
		'countsel' => 'spip_mysql_countsel',
		'create' => 'spip_mysql_create',
@@ -92,6 +93,9 @@ function spip_mysql_query($query, $serveur='') {
	return $t ? trace_query_end($query, $t, $r, $e) : $r;
}

function spip_mysql_alter($query, $serveur=''){
	return mysql_query("ALTER ".$query); # i.e. que PG se debrouille
}

// fonction appelant la precedente
// c'est une instance de sql_select, voir ses specs dans abstract.php
+16 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -28,6 +28,7 @@ function base_db_pg_dist($addr, $port, $login, $pass, $db='', $prefixe='') {
		'link' => $link,
		'db' => $db,
		'prefixe' => $prefixe ? $prefixe : $db,
		'alter' => 'spip_pg_alter',
		'count' => 'spip_pg_count',
		'countsel' => 'spip_pg_countsel',
		'create' => 'spip_pg_create',
@@ -88,6 +89,21 @@ function spip_pg_query($query, $serveur='')
	return spip_pg_trace_query($query, $serveur);
}

// Alter en PG ne traite pas les index
// http://doc.spip.org/@spip_pg_selectdb
function spip_pg_alter($query, $serveur='') {

	if (!preg_match('/^\s*TABLE\s+(\w+)\s+(ADD|DROP)\s+(UNIQUE\s*|\s+)(INDEX|\w*\s*KEY)\s*(\w+)(.*)$/', $query, $r))
		return spip_pg_query("ALTER $query", $serveur);

	if ($r[2]=='DROP')
		return spip_pg_query("DROP INDEX " . $r[1] .'_' . $r[6], $serveur);
	else {
		$q = "CREATE INDEX " . $r[3] . $r[5] . ' ON ' . $r[1] . $r[6];
		return spip_pg_query($q,  $serveur);
	}
}

//  Qu'une seule base pour le moment

// http://doc.spip.org/@spip_pg_selectdb
+11 −11
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -565,21 +565,21 @@ function maj_v019_45()
// http://trac.rezo.net/trac/spip/changeset/10150
function maj_v019_46()
{
	spip_query("ALTER TABLE spip_forum DROP INDEX id_parent");
	spip_query("ALTER TABLE spip_forum DROP INDEX id_article");
	spip_query("ALTER TABLE spip_forum DROP INDEX id_breve");
	spip_query("ALTER TABLE spip_forum DROP INDEX id_syndic");
	spip_query("ALTER TABLE spip_forum DROP INDEX id_rubrique");
	spip_query("ALTER TABLE spip_forum DROP INDEX date_thread");
	spip_query("ALTER TABLE spip_forum DROP INDEX statut");
	spip_query("ALTER TABLE spip_forum ADD INDEX optimal (statut,id_parent,id_article,date_heure,id_breve,id_syndic,id_rubrique)");
	sql_alter("TABLE spip_forum DROP INDEX id_parent");
	sql_alter("TABLE spip_forum DROP INDEX id_article");
	sql_alter("TABLE spip_forum DROP INDEX id_breve");
	sql_alter("TABLE spip_forum DROP INDEX id_syndic");
	sql_alter("TABLE spip_forum DROP INDEX id_rubrique");
	sql_alter("TABLE spip_forum DROP INDEX date_thread");
	sql_alter("TABLE spip_forum DROP INDEX statut");
	sql_alter("TABLE spip_forum ADD INDEX optimal (statut,id_parent,id_article,date_heure,id_breve,id_syndic,id_rubrique)");
}

// http://trac.rezo.net/trac/spip/changeset/10151
function maj_v019_47()
{
	spip_query("ALTER TABLE spip_articles DROP INDEX url_site");
	spip_query("ALTER TABLE spip_articles DROP INDEX date_modif");
	spip_query("ALTER TABLE spip_auteurs  DROP INDEX lang");
	sql_alter("TABLE spip_articles DROP INDEX url_site");
	sql_alter("TABLE spip_articles DROP INDEX date_modif");
	sql_alter("TABLE spip_auteurs  DROP INDEX lang");
}
?>