Skip to content
Extraits de code Groupes Projets
Valider 088f09f4 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

- alléger la regexp du showtable (sqlite) pour voir même les tables qui n'ont...

- alléger la regexp du showtable (sqlite) pour voir même les tables qui n'ont qu'un champ avec aucune parenthèse dans la description (cas de la table spip_test (a INT))
- IF EXISTS sur DROP table ne passait pas SQLite2
- Ne pas bloquer la suppression de la table 'spip_test' lors du sql_alter() en sqlite3 en conservant un objet contenant des résultats d'une requete sur cette table.

Avec ça, sqlite passe le test ALTER TABLE sur 'spip_test' dans base/upgrade
parent fd2adda5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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;
}
......
......@@ -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];
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter