Valider 619a9e5b rédigé par esj's avatar esj
Parcourir les fichiers

Suite de [10189]: id_version était déclaré Unsigned mais MySQL a ramené le...

Suite de [10189]: id_version était déclaré Unsigned mais MySQL a ramené le négatif à 0 sans rien dire. On passe à bigint pour être certain de ne pas avoir de troncature vu la maniere dont le numero negatif est produit. Par ailleurs, on retire les entrées inachevées.
parent b2e4a117
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -178,7 +178,7 @@ $spip_meta_key = array(

$spip_versions = array (
		"id_article"	=> "bigint(21) NOT NULL",
		"id_version"	=> "int unsigned DEFAULT '0' NOT NULL",
		"id_version"	=> "bigint(21) DEFAULT 0 NOT NULL",
		"date"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
		"id_auteur"	=> "VARCHAR(23) DEFAULT '' NOT NULL", # stocke aussi IP(v6)
		"titre_version"	=> "text DEFAULT '' NOT NULL",
+20 −16
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -401,8 +401,6 @@ function supprimer_versions($id_article, $version_min, $version_max) {
//
// http://doc.spip.org/@ajouter_version
function ajouter_version($id_article, $champs, $titre_version = "", $id_auteur) {
	list($ms, $sec) = explode(' ', microtime());
	$date = $sec . substr($ms,1);
	$paras = $paras_old = $paras_champ = $fragments = array();

	// Attention a une edition anonyme (type wiki): id_auteur n'est pas
@@ -411,16 +409,24 @@ function ajouter_version($id_article, $champs, $titre_version = "", $id_auteur)
	$str_auteur = intval($id_auteur) ? intval($id_auteur) : $GLOBALS['ip'];
	$permanent = empty($titre_version) ? 'non' : 'oui';

	$valeurs = array('id_article' => $id_article,
			 'id_version' => (0 - ($sec + substr($ms,2))),
			 'date' => 'NOW()',
			 'id_auteur' => $str_auteur, //  varchar ici!
			 'titre_version' => $date);
	// Detruire les tentatives d'archivages non abouties en 1 heure

	sql_delete('spip_versions', "id_article=$id_article AND id_version <= 0 AND date < DATE_SUB(NOW(), INTERVAL 1 HOUR)");

        // Signaler qu'on opere en mettant un numero de version négatif
        // distinctif (pour eviter la violation d'unicite)
        // et un titre contenant en fait le moment de l'insertion
	
	list($ms, $sec) = explode(' ', microtime());
	$date = $sec . substr($ms,1);
	$datediff = ($sec - mktime(0,0,0,9,1,2007)) * 100000000 + substr($ms,2);

	$valeurs = array('id_article' => $id_article,
			 'id_version' => (0 - $datediff),
			 'date' => 'NOW()',
			 'id_auteur' => $str_auteur, //  varchar ici!
			 'titre_version' => $date);
			 
	sql_insertq('spip_versions',  $valeurs);

	// Eviter les validations entremelees en s'endormant s'il existe
@@ -435,7 +441,7 @@ function ajouter_version($id_article, $champs, $titre_version = "", $id_auteur)
# 	  sleep(15);
	$delai = $sec-30;
	while (sql_countsel('spip_versions', "id_article=$id_article AND id_version < 0 AND 0.0+titre_version < $date AND 0.0+titre_version > $delai")) {
	  spip_log("version $id_article:insertion < $date et > $delai");
		spip_log("version $id_article :insertion en cours avant $date ($delai)");
		sleep(1);
		$delai++;
	}
@@ -449,24 +455,22 @@ function ajouter_version($id_article, $champs, $titre_version = "", $id_auteur)
	$onlylock = '';

	if ($row = sql_fetch($result)) {
	  spip_log($row['permanent'] . $row['id_auteur']. ' ' . strtotime($row['date']) . ' ' . (time()-3600));
		$id_version = $row['id_version'];
		$paras_old = recuperer_fragments($id_article, $id_version);
		$champs_old = $row['champs'];
		if ($row['id_auteur']!= $str_auteur
		OR $row['permanent']=='oui'
		OR strtotime($row['date']) < (time()-3600))
		OR strtotime($row['date']) < (time()-3600)) {
			$id_version++;

	  // version precedente recente, on va la mettre a jour 
	  // avec les nouveaux arrivants si presents
		else {
		} else {
		  $champs = reconstuire_version(unserialize($champs_old), $paras_old, $champs);
		  $onlylock = 're';
		}
	} else $id_version = 1;

	spip_log("$id_version row $onlylock " . join(',', $row));
	$next = !$next ? 1 : ($next['id_fragment'] + 1);

	// Generer les nouveaux fragments
@@ -506,9 +510,9 @@ function ajouter_version($id_article, $champs, $titre_version = "", $id_auteur)
	// la detruire apres mise a jour de l'ancienne entree,
	// sinon la mise a jour efface en fait le verrou.

	if (!$onlylock)
	if (!$onlylock) {
		spip_query("UPDATE spip_versions SET id_version=$id_version, date=NOW(), champs=" . _q(serialize($codes)) . ", permanent='$permanent', titre_version=" . _q($titre_version) . " WHERE id_article=$id_article AND id_version < 0 AND titre_version='$date'");
	else {
	} else {
		spip_query("UPDATE spip_versions SET date=NOW(), champs=" . _q(serialize($codes)) . ", permanent='$permanent', titre_version=" . _q($titre_version) . " WHERE id_article=$id_article AND id_version=$id_version");

		spip_query("DELETE FROM spip_versions WHERE id_article=$id_article AND id_version < 0 AND titre_version ='$date'");
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -307,7 +307,7 @@ $liste_des_statuts = array(
// (utilise pour les modifs de la base de donnees)

// version de la base
$spip_version = 1.947;
$spip_version = 1.948;

// version de spip en chaine
// et en numerique a incrementer sur les evolutions qui cassent la compatibilite descendante
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -84,7 +84,7 @@ function install_bases(){
		$GLOBALS['connexions'][$server_db]['db'] = $sel_db;

		// mettre les nouvelles install en utf-8 si mysql le supporte
		include_spip('base/abstract_sql');

		if (($server_db == 'mysql') 
		AND ($charset = spip_sql_character_set('utf-8', true))
		AND ($res = $fquery("SHOW CHARACTER SET LIKE "._q($charset['charset']), $server_db))
+11 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -458,6 +458,10 @@ function maj_v019_dist($version_installee, $version_cible)
	  maj_v019_47();
	  maj_version('1.947');
	}
	if (upgrade_vers(1.948, $version_installee, $version_cible)) {
	  maj_v019_48();
	  maj_version('1.948');
	}
}

function maj_v019_45()
@@ -582,4 +586,11 @@ function maj_v019_47()
	sql_alter("TABLE spip_articles DROP INDEX date_modif");
	sql_alter("TABLE spip_auteurs  DROP INDEX lang");
}

// http://trac.rezo.net/trac/spip/changeset/10194
// Gestion du verrou SQL par PHP
function maj_v019_48()
{
	sql_alter("TABLE spip_versions CHANGE id_version bigint(21) DEFAULT 0 NOT NULL");
}
?>