X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Freq%2Fsqlite_generique.php;fp=www%2Fecrire%2Freq%2Fsqlite_generique.php;h=cc5196b37d4ca04a89b5440a003cb5132e9cdf4b;hb=d18fcb8f27a4016e3fa7b50a9b2255d529dca543;hp=25831895c657ec70783f0cf4af85ead0ac956a78;hpb=e847eea4a82a7396dd0abf860f9b30d654f38629;p=ptitvelo%2Fweb%2Fwww.git diff --git a/www/ecrire/req/sqlite_generique.php b/www/ecrire/req/sqlite_generique.php index 2583189..cc5196b 100644 --- a/www/ecrire/req/sqlite_generique.php +++ b/www/ecrire/req/sqlite_generique.php @@ -1209,7 +1209,7 @@ function spip_sqlite_showbase($match, $serveur = '', $requeter = true){ return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match), $serveur, $requeter); } - +define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/'); // http://doc.spip.org/@spip_sqlite_showtable function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true){ $query = @@ -1229,13 +1229,13 @@ function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true){ // c'est une table // il faut parser le create if (!$vue){ - if (!preg_match("/^[^(),]*\((([^()]*(\([^()]*\))?[^()]*)*)\)[^()]*$/", array_shift($a), $r)) + if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)){ return ""; - else { + } else { $desc = $r[1]; // extraction d'une KEY éventuelle en prenant garde de ne pas // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) - if (preg_match("/^(.*?),([^,]*KEY[ (].*)$/s", $desc, $r)){ + if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)){ $namedkeys = $r[2]; $desc = $r[1]; } @@ -1282,8 +1282,8 @@ function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true){ } } // key inclues dans la requete - foreach (preg_split('/\)\s*,?/', $namedkeys) as $v){ - if (preg_match("/^\s*([^(]*)\((.*)$/", $v, $r)){ + foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) { + if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) { $k = str_replace("`", '', trim($r[1])); $t = trim(strtolower(str_replace("`", '', $r[2])), '"'); if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t; @@ -1304,8 +1304,9 @@ function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true){ $keys['KEY '.$key] = $colonnes; } } - // c'est une vue, on liste les champs disponibles simplement - } else { + } + // c'est une vue, on liste les champs disponibles simplement + else { if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)){ // limit 1 $fields = array(); foreach ($res as $c => $v) $fields[$c] = '';