From 9aad56fafe35804a046c0a6a5d5ae3f4c9e8ab18 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Tue, 13 Mar 2012 18:53:32 -0400 Subject: [PATCH] Implemented random ordering for databases that support it --- sys/db/query_builder.php | 10 ++++++++-- tests/databases/firebird-qb.php | 13 +++++++++++++ tests/databases/sqlite-qb.php | 13 +++++++++++++ tests/test_dbs/FB_TEST_DB.FDB | Bin 802816 -> 802816 bytes 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/sys/db/query_builder.php b/sys/db/query_builder.php index 6344024..d0dac3d 100644 --- a/sys/db/query_builder.php +++ b/sys/db/query_builder.php @@ -355,7 +355,11 @@ class Query_Builder { */ public function order_by($field, $type="") { - // @todo Implement Order by Random + // Random case + if (stripos($type, 'rand') !== FALSE) + { + $type = (($rand = $this->sql->random()) !== FALSE ) ? $rand : 'ASC'; + } // Set fields for later manipulation $field = $this->db->quote_ident($field); @@ -370,7 +374,9 @@ class Query_Builder { } // Set the final string - $this->order_string = ' ORDER BY '.implode(',', $order_clauses); + $this->order_string = (empty($rand)) + ? ' ORDER BY '.implode(',', $order_clauses) + : ' ORDER BY'.$rand; return $this; } diff --git a/tests/databases/firebird-qb.php b/tests/databases/firebird-qb.php index 3c361f9..8b6474b 100644 --- a/tests/databases/firebird-qb.php +++ b/tests/databases/firebird-qb.php @@ -120,6 +120,19 @@ class FirebirdQBTest extends UnitTestCase { $this->assertTrue(is_resource($query)); } + function TestOrderByRand() + { + $query = $this->qb->select('id, key as k, val') + ->from('create_test') + ->where('id >', 0) + ->where('id <', 9000) + ->order_by('id', 'rand') + ->limit(5,2) + ->get(); + + $this->assertTrue(is_resource($query)); + } + /*function TestGroupBy() { $query = $this->qb->select('id, key as k, val') diff --git a/tests/databases/sqlite-qb.php b/tests/databases/sqlite-qb.php index 9b85515..7f8fab5 100644 --- a/tests/databases/sqlite-qb.php +++ b/tests/databases/sqlite-qb.php @@ -114,6 +114,19 @@ $this->assertIsA($query, 'PDOStatement'); } + function TestOrderByRandom() + { + $query = $this->qb->select('id, key as k, val') + ->from('create_test') + ->where('id >', 0) + ->where('id <', 9000) + ->order_by('id', 'rand') + ->limit(5,2) + ->get(); + + $this->assertIsA($query, 'PDOStatement'); + } + function TestGroupBy() { $query = $this->qb->select('id, key as k, val') diff --git a/tests/test_dbs/FB_TEST_DB.FDB b/tests/test_dbs/FB_TEST_DB.FDB index f554a51ad4dfa31c3303aa032884c87fdb319543..fbb39cba56151f113a08fbf00adad472f8844b60 100755 GIT binary patch delta 875 zcmah{&1(}u6o0cx%r^VdylkWt5@kPPLQKOZ(kOm_Uc5;mAU%1AAm~9Ft%riAMPyHc z1`l%({1e0vXih3hrSzhB_2Nb7O?vR)!K!a&JGF|?9p1eCy?LL%nKrVB8~0$_%|;gzJ6BCVuU`MegD|6VgT6;%t>@#}(pV1B0qr=sa!DjSYI=a}9VTWr~ zUHK}+1#8xo({+sgNAApD6$lJYE5I%`6{gb)l{MyycB!`%^>V!FH0YhV4xOP4^7E#1 zGio~FKxLSEzkZn`A3pu%NBkCOYj2fD)Jb11GfVB z3iY+Q^4NE*!cf>FJPfylKZ`PK&HMB@VB^j!AsuOD%L{xd{;i@wko*>1j9A!wEibpT z3c%G~CKQBe-;KLR`*H8e0$TJ$9IEc*iv)2%v_>XoHbR&Jpx+{qdLcVT4+3_O-h^z5 zwgOfjcojBNq>oMJ(BB4&@D7bC>}314V3GPP!Gq9`4VFkU8!YR{3ODISl}*t8Bdm_A zwBBS94MSGL75Whhy6%5;00wKirPyFYca0V+Y(iY{X@ebd(SgP5tMN2kmCQ9Q^s*M( z$(VCW2nU0WP=gKg1<4#n??t0^b7l7&z3<7JIl{D8HAm-F&HPYJW=LPYc{MrEOAZ^~ zqXv2|Q{d1{gYBbo#13#1vz4lTtd996s