diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php index d88299724658adf191efcde8cee3a4233bad1041..5a4e2f3f52f3172fdb3d5107de8459f62b371647 100644 --- a/ecrire/base/upgrade.php +++ b/ecrire/base/upgrade.php @@ -59,7 +59,7 @@ function maj_base($version_cible = 0) { return; } if (!upgrade_test()) return; - + $cible = ($version_cible ? $version_cible : $spip_version); if ($version_installee <= 1.926) { @@ -168,6 +168,10 @@ function upgrade_test() { sql_alter("TABLE spip_test ADD b INT"); sql_insertq('spip_test', array('b' => 1), array('b' => 'int')); $result = sql_select('b', "spip_test"); + // ne pas garder le resultat de la requete sinon sqlite3 + // ne peut pas supprimer la table spip_test lors du sql_alter qui suit + // car cette table serait alors 'verouillee' + $result = $result?true:false; sql_alter("TABLE spip_test DROP b"); return $result; } diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php index 3aef4f6e7efca6d6a12dd92f8c4373d3673ea916..0a8fa5b113700b61b7043fc55b0ee0177396b8aa 100644 --- a/ecrire/req/sqlite_generique.php +++ b/ecrire/req/sqlite_generique.php @@ -136,7 +136,7 @@ function spip_sqlite_alter($query, $serveur=''){ $requete = new sqlite_traiter_requete("ALTER $query", $serveur); $requete->traduire_requete(); // mysql -> sqlite $query = $requete->query; - + /* * la il faut faire les transformations * si ALTER TABLE x (DROP|CHANGE) y @@ -172,8 +172,8 @@ function spip_sqlite_alter($query, $serveur=''){ $colonne_origine = $matches[2]; $colonne_destination = ''; $def = $matches[3]; + - switch($cle){ // allez, on simule, on simule ! case 'DROP': @@ -330,6 +330,14 @@ function spip_sqlite_delete($table, $where='', $serveur='') { function spip_sqlite_drop_table($table, $exist='', $serveur='') { if ($exist) $exist =" IF EXISTS"; + + /* simuler le IF EXISTS - version 2 */ + if ($exist && _sqlite_is_version(2, '', $serveur)){ + $a = spip_sqlite_showtable($table, $serveur); + if (!$a) return true; + $exist = ''; + } + return spip_sqlite_query("DROP TABLE$exist $table", $serveur); } @@ -646,7 +654,7 @@ function spip_sqlite_showtable($nom_table, $serveur=''){ if (!$a) return ""; if (!($a = spip_sqlite_fetch($a, null, $serveur))) return ""; $a = array_shift($a); - if (!preg_match("/^[^(),]*\((([^()]*\([^()]*\)[^()]*)*)\)[^()]*$/", $a, $r)) + if (!preg_match("/^[^(),]*\((([^()]*(\([^()]*\))?[^()]*)*)\)[^()]*$/", $a, $r)) return ""; else { $dec = $r[1];