From 27318506d05a1ce0d7e7c8b891a23ab558b512a5 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Thu, 27 Sep 2012 17:41:29 +0000 Subject: [PATCH] Fix num_rows() method --- classes/db_pdo.php | 20 +++++++++++++++++--- classes/query_builder.php | 8 ++++++-- tests/core/db_qb_test.php | 12 ++++++++++++ tests/db_files/FB_TEST_DB.FDB | Bin 802816 -> 802816 bytes 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/classes/db_pdo.php b/classes/db_pdo.php index c0c1358..491ae32 100644 --- a/classes/db_pdo.php +++ b/classes/db_pdo.php @@ -51,6 +51,13 @@ abstract class DB_PDO extends PDO { */ public $util; + /** + * Last query executed + * + * @var string + */ + public $last_query; + /** * PDO constructor wrapper * @@ -443,9 +450,16 @@ abstract class DB_PDO extends PDO { */ public function num_rows() { - return isset($this->statement) && is_object($this->statement) - ? $this->statement->rowCount() - : FALSE; + $regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i'; + $output = array(); + + if (preg_match($regex, $this->last_query, $output) > 0) + { + $stmt = $this->query("SELECT COUNT(*) FROM {$output[1]}", PDO::FETCH_NUM); + return $stmt->fetchColumn(); + } + + return FALSE; } // ------------------------------------------------------------------------- diff --git a/classes/query_builder.php b/classes/query_builder.php index 68f8405..80550a7 100644 --- a/classes/query_builder.php +++ b/classes/query_builder.php @@ -1511,7 +1511,7 @@ class Query_Builder { // Set the where string if ( ! empty($this->query_map)) { - foreach($this->query_map as &$q) + foreach($this->query_map as $q) { $sql .= $q['conjunction'] . $q['string']; } @@ -1524,7 +1524,7 @@ class Query_Builder { // Set the where string if ( ! empty($this->query_map)) { - foreach($this->query_map as &$q) + foreach($this->query_map as $q) { $sql .= $q['conjunction'] . $q['string']; } @@ -1533,8 +1533,12 @@ class Query_Builder { break; } + // Add the query to the list of executed queries $this->queries[] = $sql; + // Set the last query to get rowcounts properly + $this->db->last_query = $sql; + // echo $sql . '
'; return $sql; diff --git a/tests/core/db_qb_test.php b/tests/core/db_qb_test.php index e0b539b..c6db784 100644 --- a/tests/core/db_qb_test.php +++ b/tests/core/db_qb_test.php @@ -33,6 +33,18 @@ abstract class QBTest extends UnitTestCase { // -------------------------------------------------------------------------- + public function TestGetWNumRows() + { + if (empty($this->db)) return; + + $query = $this->db->get('create_test'); + $numrows = count($query->fetchAll(PDO::FETCH_NUM)); + + $this->assertEqual($this->db->num_rows(), $numrows); + } + + // -------------------------------------------------------------------------- + public function TestGetLimit() { if (empty($this->db)) return; diff --git a/tests/db_files/FB_TEST_DB.FDB b/tests/db_files/FB_TEST_DB.FDB index a8d6c35bcea61b8cfd2b2e9524fea39070ed0135..761b13d2aba7cee15a748ab762e7ef3b6717c3a3 100644 GIT binary patch delta 1707 zcmah}O=uHA6n?YW-TX}2PE&)mAf(O4)`uPf_rCe&doxom=gQ^W zB!ko0*$lLr;N_5ys23JM4?X}Id-w(5(y8^qSI4{n0UG}1T)^-xtd;(`7hSi6BbXyJ zM}!=qJHl{;>4>l+B94fzikL36BUZ&s#p2O>VC?-`bW z&*lK^nJLJc9dO$mf-y4#KaCW8GzQ?Ak%qD{1TW1rr11LIPGG=Ty&){Qy1`S+-3>J@^$`#NX}}ozulk~09KLBUU1P2{ z6i1C%z|b)^{|<~9OzCU@jrk3uF{s`kF8^6$Fv>`YYD_+<^5ke7lZv()G$;`pB^k|r zzEHBy29xE~S3a&KEZJA%$1fWVm@iNkHO*zvTm}s>GT9pB^2!7fP3#JX{=$^ON~Mvw zB`0eSk`V|@sF4HrqCM|HGn(OxXbPa8b4%!4Als$w{)@T*#gpy6IsgKQYHud2~D zF1M;a7xCeHc>TO<4DFk}#S|*lP!ydNe5Fzoxd>4l*^_#&wvfEe=%VncCBq_%Blf z$)2g*zNw~fYFCizFjI-8d2irK6b_SViwjE%d#1NcC5wY5yQbrj(wZjAr?^S3M;cHX zY57hkf4)G8!Q%qH2sNp~YEp&OqzbD^f6M6~d}4eLi`?2E01B%#g#~HH+pg}%yEJ$% z>T>NHpJH{H+~O11U8r%3?uJ49e}9voXS+@=)iqO>3)}pSoT>3%`MS#U UOq2EwUy-|8yti_u#@}E319|lE{Qv*} delta 1008 zcmZ9KO=uHQ5Xa|jlD5focOSHeMntmRrfDyd9z>LalHSBm5WPu|c+g9Q=5A2gi&gOA zJJ^$F5kH_gsXbWeO+k=Qf+Qg{p-G!d&|Ct}+s&AeUEaR^WhV3g&+ID{Rtklcs{+oY zFC<}jNi2j0r1!21@Rt^VAztqT+&ud|^&uW4NHFNm`XK1pbw4@TkM?8fN#RMulOa!r zJsI)jgeNCGIpxXdwv2_P(Q}IviP&_s7+;PxCSGPIy>x6ljp6r?eqvCYpSQ#eJT;S0 zu@kUEYs;R8yuAdM?If()Cd?6cEf;>!+ObU7qJ5M0oV5fO>3z-$n#-FeyfqiOEC|u- z!?b`YxVz3j3XsJo6*R-*Slwu$BWBgt4mz1O_5X#E3=kmbotX$kB>bPH=G?|^bC3_3 zNvG+mI}J>zUsXJ95WH*PNi|=?nOUn(DLReU8EC329Zac*HC)iSFAngMI8@>Y9i!J* z`4%QJTtBSq(_fiGW9<7SKlL#`^?{#1E%HO)`^mI%QPj1#BP{i-jmtVj@~(v&E;c}%=KDo)^w-#$cBU29`pl!HN-!5}E^58{5E2Ju^;jkOFH^oL9a znAs3>a3}