]> git.nbdom.net Git - nb.git/commitdiff
SQL_CALC_FOUND_ROWS
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 27 Oct 2015 17:03:04 +0000 (18:03 +0100)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Tue, 27 Oct 2015 17:03:04 +0000 (18:03 +0100)
lib/css/db.css
lib/php/db.php
lib/php/db/table.php

index 5fdf431417245b6c98e5ea4b1e09c2bcfe4696b3..99ac90ef7c09c58fc07e3df675fdddedb66e207a 100644 (file)
@@ -52,6 +52,10 @@ div.rows .row { text-align: left; }
   text-align: center;
 }
 
+table.rows tr.row {
+  vertical-align: top;
+}
+
 .db div.rows .row *:not([class~=buttons]):hover {
   opacity: 0.7;
 }
index fefcf381352982c00d88fa315ab375a6e915a90b..4d36eb96a98254f457dca919119bdeb7966f39e0 100644 (file)
@@ -8,6 +8,7 @@
 *****************************************************************************/
 require_once(dirname(__FILE__).'/nb.php');
 require_once(dirname(__FILE__).'/db/table.php');
+define('SQL_NAME_FORCE_QUOTE_EXP','^(range)$');
 if (!defined('DB_HTML_FORM_BUTTONS')) define('DB_HTML_FORM_BUTTONS',''
   #.'<input type="button" class="button" value="Add" onclick="this.setAttribute(\'type\',\'submit\');this.setAttribute(\'name\',\'edit\')?1:1"/>'
   #.'<input type="button" class="button" value="Add" onclick="this.setAttribute(\'name\',\'edit\');this.parentElement.submit()?0:0"/>'
@@ -336,7 +337,12 @@ EOF;
   }
 
   function sql_name($value) {
-    if (preg_match('/^\w+$/',$value)) return $value;
+    if (preg_match('/^\w+$/',$value) and
+      (
+        !SQL_NAME_FORCE_QUOTE_EXP or
+        !preg_match('/'.SQL_NAME_FORCE_QUOTE_EXP.'/',$value)
+      )
+    ) return $value;
     if ($this->type == 'mysql') return '`'.$value.'`';
     return '"'.$value.'"';
   }
index 92398ea8f6ee61c638855a3a6fddcddc7f2b7918..686f6a0b4cdf5e747d595f5c69c0937efdacb351 100644 (file)
@@ -566,24 +566,11 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog.
     //
     // Select
     //
-    $sql = "SELECT *" . $this->select_extras();
+    $sql = "SELECT".($this->db->type =='mysql' ? " SQL_CALC_FOUND_ROWS" : "")." *" . $this->select_extras();
     $sql .= " FROM ".$this->sql_name().$this->where_criterias($this->p(),$this->p('op'));
     $this->sql = $sql;
     $this->debug($sql,1);
 
-    //
-    // Tot
-    //
-    $query = $this->db->conn->query("SELECT count(*) FROM ($sql) count",PDO::FETCH_COLUMN,0);
-    if (!$query) {
-      $err = $this->db->conn->errorInfo();
-      $err[] = $sql;
-      err(join(' | ',$err));
-      return $err[0];
-    }
-    $tot = $query->fetch();
-    #if (!$tot) return;
-
     if ($this->p('sort')) $sql .= ' ORDER BY '.$this->p('sort');
 
     if ($this->p('limit')) {
@@ -620,8 +607,26 @@ FROM pg_catalog.pg_attribute a WHERE a.attrelid = (SELECT c.oid FROM pg_catalog.
 
     }
 
-    $opt['count'] = $count;
+    //
+    // Tot
+    //
+    if ($this->db->type =='mysql') {
+      $query = $this->db->conn->query('SELECT FOUND_ROWS()');
+    } else {
+      $query = $this->db->conn->query("SELECT count(*)".preg_replace('/^SELECT .*?FROM/',' FROM',$sql));
+      #$query = $this->db->conn->query("SELECT count(*) FROM ($sql) count");
+    }
+    if (!$query) {
+      $err = $this->db->conn->errorInfo();
+      $err[] = $sql;
+      err(join(' | ',$err));
+      return $err[0];
+    }
+    $tot = $query->fetch(PDO::FETCH_COLUMN);
     $opt['tot'] = $tot;
+    #if (!$tot) return;
+
+    $opt['count'] = $count;
     $opt['limit'] = $limit;
     echo $this->{"rows_end_$format"}($opt);
     if ($opt['is_html']) echo '<div id="nav_bottom" class="nav bottom">'