Valider 0b237520 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Intégration d'un portage SQLite, qui gère les versions 2 et 3 de ce serveur.

Origine des travaux (pour historique) : http://zone.spip.org/trac/spip-zone/browser/_dev_/sqlite/

Introduction d'une constante _DIR_DB qui correspond à l'emplacement des fichiers de base de données sqlite. Par défaut : _DIR_ETC/bases/ soit 'config/bases/'

Au chargement de sqlite, celui ci essaie de charger les modules php sqlite s'ils ne sont pas chargés (cas de Ouvaton notamment). L'installation propose alors le/les choix supplémentaires 'SQLite 2' et/ou 'SQLite 3', selon les versions présentes.

Quelques menus changements sont nécessaires :
- passer $serveur à sql_errno et sql_error
- éviter que menu_rubriques.php génère des IN ( , x , y , z) mais bien IN (0, x ,y ,z); Nota : je me demande si le zero est utile.
- predef_ou_cache() de install.php semble nécessiter des parenthèses supplémentaires sinon ouvaton n'est pas content (?)
- inc/auth.php : l'update sur la table auteur ne peut se faire en sqlite que s'il n'y a pas sur le même $link une ressource en lecture sur la même table. Si $res = $link->query('SELECT spip_auteurs...'); alors il faut faire unset($res); avant un  $link->query('UPDATE spip_auteurs...');
parent e9b7eef7
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -228,13 +228,13 @@ function sql_multi($sel, $lang, $serveur='')
// http://doc.spip.org/@sql_error
function sql_error($query='requete inconnue', $serveur='') {
  	$f = sql_serveur('error', $serveur);
	return $f($query);
	return $f($query, $serveur);
}

// http://doc.spip.org/@sql_errno
function sql_errno($serveur='') {
  	$f = sql_serveur('errno', $serveur);
	return $f();
	return $f($serveur);
}

// http://doc.spip.org/@sql_explain
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -171,11 +171,11 @@ function gen_liste_rubriques() {
		return; // c'etait en cache :-)

	// se restreindre aux rubriques utilisees recemment +secteurs
	$liste="0";
	$liste=array(0); //$liste="0";
	$s = sql_select("id_rubrique", "spip_rubriques", "", "", "id_parent=0 DESC, date DESC", 500);
	while ($t = sql_fetch($s))
		$liste .=",".$t['id_rubrique']; 
	 
		$liste[] = $t['id_rubrique']; //$liste .=",".$t['id_rubrique']; 
	$liste = join(',',$liste);
	$res = sql_select("id_rubrique, titre, id_parent", "spip_rubriques", "id_rubrique IN ($liste)",'', 'id_parent,0+titre,titre');

	// il ne faut pas filtrer le autoriser voir ici car on met le resultat en cache, commun a tout le monde
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -194,6 +194,7 @@ function inc_auth_dist() {
		$connect_quand = strtotime($connect_quand);
	
	if ((time() - $connect_quand)  >= 60) {
		unset($result); // sinon sqlite ne peut pas faire l'update (database table is locked)
		sql_update("spip_auteurs", array("en_ligne" => "NOW()"), "id_auteur=$connect_id_auteur");
	}

+64 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -209,9 +209,18 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
{
	$pg = function_exists('pg_connect');
	$mysql = function_exists('mysql_connect');

	if (!($pg AND $mysql))
		$server_db = $mysql ? 'mysql' : 'pg';
	// demander les version dispo de sqlite
	include_spip("req/sqlite_generique");
	$versions = spip_versions_sqlite();
	$sqlite2 = in_array(2, $versions);
	$sqlite3 = in_array(3, $versions);

	if (($pg + $mysql + $sqlite2 + $sqlite3) == 1){
		if ($mysql) 	$server_db = 'mysql';
		if ($pg) 		$server_db = 'pg';
		if ($sqlite2) 	$server_db = 'sqlite2';
		if ($sqlite3) 	$server_db = 'sqlite3';
	}

	else if ($predef[0]) {
		if (!is_string($predef[0])) {
@@ -221,6 +230,8 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
			$server_db ='';
			$m = strcasecmp($predef[0], 'mysql') ? '' : " selected='selected'";
			$p = strcasecmp($predef[0], 'pg') ? '' : " selected='selected'";
	  		$s2 = strcasecmp($predef[0], 'sqlite2') ? '' : " selected='selected'";
	  		$s3 = strcasecmp($predef[0], 'sqlite3') ? '' : " selected='selected'";
		}
	}

@@ -232,20 +243,43 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
			"</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>")
			:"")
			
	. '<script language="javascript" src=' . find_in_path('javascript/jquery.js') . '></script>'
	. '<script language="javascript">
		$(document).ready(function() {
			$("#sql_serveur_db").change(function(){
				if ($(this).find("option:selected").attr("value").match("sqlite*")){
					$("#install_adresse_base_hebergeur").hide();
					$("#install_login_base_hebergeur").hide();
					$("#install_pass_base_hebergeur").hide();
				} else {
					$("#install_adresse_base_hebergeur").show();
					$("#install_login_base_hebergeur").show();
					$("#install_pass_base_hebergeur").show();					
				}
			});
		});
		</script>'
	
	. ($server_db
		? '<input type="hidden" name="server_db" value="'.$server_db.'" />'
		: ('<fieldset><legend>'
		._L('Indiquer le type de base de donn&eacute;es :')
		. "\n<select name='server_db'>"
		. "\n<select name='server_db' id='sql_serveur_db' >"
		. ($mysql
			? "\n<option value='mysql'$m>"._L('MySQL')."</option>"
			: '')
		. ($pg
			? "\n<option value='pg'$p>"._L('PostGreSQL')."</option>"
			: '')
		. (($sqlite2)
			? "\n<option value='sqlite2'$s2>"._L('SQLite2')."</option>"
			: '')
		. (($sqlite3)
			? "\n<option value='sqlite3'$s3>"._L('SQLite3')."</option>"
			: '')
		   . "\n</select></legend></fieldset>")
	)

	. '<div id="install_adresse_base_hebergeur">'
	. ($predef[1]
	? '<h3>'._T('install_adresse_base_hebergeur').'</h3>'
	: fieldset(_T('entree_base_donnee_1'),
@@ -257,7 +291,9 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
		)
	)
	)
	. '</div>'
	
	. '<div id="install_login_base_hebergeur">'
	. ($predef[2]
	? '<h3>'._T('install_login_base_hebergeur').'</h3>'
	: fieldset(_T('entree_login_connexion_1'),
@@ -269,7 +305,9 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
		)
	)
	)
	. '</div>'
	
	. '<div id="install_pass_base_hebergeur">'
	. ($predef[3]
	? '<h3>'._T('install_pass_base_hebergeur').'</h3>'
	: fieldset(_T('entree_mot_passe_1'),
@@ -281,6 +319,7 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
		)
	)
	)
	. '</div>'
	
	. bouton_suivant()));

@@ -292,20 +331,20 @@ function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
// http://doc.spip.org/@predef_ou_cache
function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
{
	return (defined('_INSTALL_HOST_DB')
	return ((defined('_INSTALL_HOST_DB'))
		? ''
		: "\n<input type='hidden' name='adresse_db'  value=\"".htmlspecialchars($adresse_db)."\" />"
	)
	. (defined('_INSTALL_USER_DB')
	. ((defined('_INSTALL_USER_DB'))
		? ''
		: "\n<input type='hidden' name='login_db' value=\"".htmlspecialchars($login_db)."\" />"
	)
	. (defined('_INSTALL_PASS_DB')
	. ((defined('_INSTALL_PASS_DB'))
		? ''
		: "\n<input type='hidden' name='pass_db' value=\"".htmlspecialchars($pass_db)."\" />"
	)

	. (defined('_INSTALL_SERVER_DB')
	. ((defined('_INSTALL_SERVER_DB'))
		? ''
		: "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars($server_db)."\" />"
	   );
@@ -318,11 +357,18 @@ function install_etape_liste_bases($server_db, $disabled=array())
{
	$result = sql_listdbs($server_db);
	if (!$result) return '';
	$bases = $checked = array();

	while ($row = sql_fetch($result, $server_db)) {
	$bases = $checked = $noms = array();

		$nom = array_shift($row);
	// si sqlite : result est deja un tableau
	if (is_array($result)){
		$noms = $result;
	} else {
		while ($row = sql_fetch($result, $server_db)) {
			$noms[] = array_shift($row);
		}
	}
	foreach ($noms as $nom){
		$id = htmlspecialchars($nom);
		$dis = in_array($nom, $disabled) ? " disabled='disabled'" : '';
		$base = " name=\"choix_db\" value=\""
@@ -342,7 +388,8 @@ function install_etape_liste_bases($server_db, $disabled=array())
			$bases[]= "<input$base />\n$label";
		}
	}
	if (!$bases) return false;

	if (!$bases && !$checked) return false;

	if ($checked) {array_unshift($bases, $checked); $checked = true;}

+10 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -35,7 +35,6 @@ function install_etape_2_dist()
	$chmod = _request('chmod');

	$link = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db);

	$GLOBALS['connexions'][$server_db] = $link;

	$GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']]
@@ -45,14 +44,21 @@ function install_etape_2_dist()

// prenons toutes les dispositions possibles pour que rien ne s'affiche !

	echo "\n<!--\n", join(', ', $link), " $login_db ";
	/*
	 * /!\ sqlite3/PDO : erreur sur join(', ', $link)
	 * L'objet PDO ne peut pas etre transformee en chaine
	 * Un echo $link ne fonctionne pas non plus
	 * Il faut utiliser par exemple print_r($link)
	 */
	//echo "\n<!--\n", join(', ', $link), " $login_db ";
	$db_connect = 0; // revoirfunction_exists($ferrno) ? $ferrno() : 0;
	echo join(', ', $GLOBALS['connexions'][$server_db]);
	echo "\n-->\n";
	//echo join(', ', $GLOBALS['connexions'][$server_db]);
	//echo "\n-->\n";

	if (($db_connect=="0") && $link) {
		echo "<p class='resultat'><b>"._T('info_connexion_ok')."</b></p>\n";
		echo info_etape(_T('menu_aide_installation_choix_base').aide ("install2"));

		spip_connect_db($adresse_db, 0, $login_db, $pass_db, '',$server_db);

		echo "\n", '<!-- ',  sql_version($server_db), ' -->' ;
Chargement en cours