// ajouter un debug utile dans log/mysql-slow.log ?
$debug = '';
if (defined('_DEBUG_SLOW_QUERIES') AND _DEBUG_SLOW_QUERIES){
- if($GLOBALS['debug']['aucasou']){
+ if(isset($GLOBALS['debug']['aucasou'])){
list(,$id,, $infos) = $GLOBALS['debug']['aucasou'];
$debug .= " BOUCLE$id @ ".$infos[0] ." | ";
}
return;
$res = spip_mysql_query("SELECT version() as v");
- if ($row = mysql_fetch_array($res)
- && (version_compare($row['v'],'5.0','>=')))
- spip_mysql_query("SET sql_mode=''");
+ if (($row = mysql_fetch_array($res)) && (version_compare($row['v'],'5.0','>='))) {
+ spip_mysql_query("SET sql_mode=''", $serveur);
+ }
foreach($cles as $k => $v) {
$keys .= "$s\n\t\t$k ($v)";
return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
}
+define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
// Recupere la definition d'une table ou d'une vue MySQL
// colonnes, indexes, etc.
// au meme format que la definition des tables de SPIP
if (!$requeter) return $s;
list(,$a) = mysql_fetch_array($s ,MYSQL_NUM);
- if (preg_match("/^[^(),]*\((([^()]*\([^()]*\)[^()]*)*)\)[^()]*$/", $a, $r)){
+ if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)){
$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];
}
}
$keys = array();
- 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 = strtolower(str_replace("`", '', $r[2]));
if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;