Valider 9f3e7702 rédigé par esj's avatar esj
Parcourir les fichiers

#209 Quel laxiste ce MySQL: les champs taille, largeur et hauteur sont...

#209 Quel laxiste ce MySQL: les champs taille, largeur et hauteur sont déclarées NOT NULL mais sans valeur par défaut, et il n'a jamais rien dit lors de toutes les insertions opérées par ajouter_documents qui insérait un minimum, et un UPDATE plus tard pour compléter. Postgres râle et il a raison. Comme cela signifie qu'il y a des BD qui peuvent avoir ces champs à vide, il faut supprimer le NOT NULL dans les déclarations pour qu'une sauvegarde Spip-mysql puisse etre relue par un Spip-pg. Entre [9259] et [9815] elles étaient déclarées comme ça et Mysql5 était d'accord parait-il. 

Et le bouquet: le ENUM est resté à 2 valeurs, alors que maintenant il y en a 3 ("distant") mais il ne dit rien non plus. Pour Postgres, on traduit on varchar, au moins c'est franc.

En revanche j'ai laissé une scorie de test dans [9944], mais heureusement il n'y a pas eu de mise à jour de la base depuis, je récupère le numéro.
parent 76811273
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -441,8 +441,11 @@ function base_maj019_dist($version_installee, $version_cible)
		spip_query("DROP TABLE spip_index_dico");
		maj_version('1.943');
	}
	if (upgrade_vers(1.950, $version_installee, $version_cible)) {
		maj_version('1.950');
	if (upgrade_vers(1.944, $version_installee, $version_cible)) {
		spip_query("ALTER TABLE spip_documents CHANGE taille taille integer");
		spip_query("ALTER TABLE spip_documents CHANGE largeur largeur  integer");
		spip_query("ALTER TABLE spip_documents CHANGE hauteur hauteur integer");
		maj_version('1.944');
	}
}
?>
+4 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -204,10 +204,10 @@ $spip_documents = array(
		"date"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
		"descriptif"	=> "text",
		"fichier"	=> "varchar(255)",
		"taille"	=> "integer NOT NULL",
		"largeur"	=> "integer NOT NULL",
		"hauteur"	=> "integer NOT NULL",
		"mode"	=> "ENUM('vignette', 'document') NOT NULL",
		"taille"	=> "integer",
		"largeur"	=> "integer",
		"hauteur"	=> "integer",
		"mode"	=> "ENUM('vignette', 'document') NOT NULL",//+distant
		"distant"	=> "VARCHAR(3) DEFAULT 'non'",
		"maj"	=> "TIMESTAMP");

+13 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -217,13 +217,23 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
		$id_document = 0;
	}

	$chemin = set_spip_doc($fichier);

	// Installer le document dans la base
	// attention piege semantique : les images s'installent en mode 'vignette'
	// note : la fonction peut "mettre a jour un document" si on lui
	// passe "mode=document" et "id_document=.." (pas utilise)
	if (!$id_document) {
		// par defaut (upload ZIP ou ftp) integrer
		// les images en mode 'vignette' et le reste en mode document
		if (!in_array($mode, array('vignette', 'distant', 'document')))
			if ($type_image AND $type_inclus_image)
				$mode = 'vignette';
			else
				$mode = 'document';

		// Inserer le nouveau doc et recuperer son id_
		$id_document = sql_insert("spip_documents", "(extension, titre, date, distant)", "("._q($ext).", " . _q($titre) . ", NOW(), '$distant')");
		$id_document = sql_insert("spip_documents", "(extension, titre, date, distant, mode, taille, largeur, hauteur, fichier)", "("._q($ext).", " . _q($titre) . ", NOW(), '$distant', '$mode', $taille, $largeur, $hauteur," . _q($chemin) .")");

		if ($id_lien
		AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
@@ -233,18 +243,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
				"($id_document, $id_lien)"
			);
		}
		// par defaut (upload ZIP ou ftp) integrer
		// les images en mode 'vignette' et le reste en mode document
		if (!in_array($mode, array('vignette', 'distant', 'document')))
			if ($type_image AND $type_inclus_image)
				$mode = 'vignette';
			else
				$mode = 'document';
		$update = "mode='$mode', ";
	}

	// Mise a jour des donnees
	spip_query($q = "UPDATE spip_documents SET $update taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier="._q(set_spip_doc($fichier))." WHERE id_document=$id_document");
	} else 	// Mise a jour des descripteurs d'un vieux doc
		spip_query("UPDATE spip_documents SET taille='$taille', largeur='$largeur', hauteur='$hauteur', fichier="._q($chemin) ." WHERE id_document=$id_document");

	if ($id_document_lie) {
		spip_query("UPDATE spip_documents SET id_vignette=$id_document	WHERE id_document=$id_document_lie");
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -305,7 +305,7 @@ $liste_des_statuts = array(
// (utilise pour les modifs de la base de donnees)

// version de la base
$spip_version = 1.943;
$spip_version = 1.944;

// version de spip en chaine
// et en numerique a incrementer sur les evolutions qui cassent la compatibilite descendante