diff options
-rw-r--r-- | includes/database/database.inc | 2 | ||||
-rw-r--r-- | includes/database/mysql/database.inc | 5 | ||||
-rw-r--r-- | includes/database/pgsql/database.inc | 5 | ||||
-rw-r--r-- | modules/simpletest/tests/database_test.test | 38 |
4 files changed, 41 insertions, 9 deletions
diff --git a/includes/database/database.inc b/includes/database/database.inc index 2bc67621f..f6f0659c7 100644 --- a/includes/database/database.inc +++ b/includes/database/database.inc @@ -683,7 +683,7 @@ abstract class DatabaseConnection extends PDO { * A database query result resource, or NULL if the query was not executed * correctly. */ - abstract public function queryRange($query, Array $args, $from, $count, Array $options); + abstract public function queryRange($query, Array $args, $from, $count, Array $options = array()); /** * Runs a SELECT query and stores its results in a temporary table. diff --git a/includes/database/mysql/database.inc b/includes/database/mysql/database.inc index 24b28db00..60191db0a 100644 --- a/includes/database/mysql/database.inc +++ b/includes/database/mysql/database.inc @@ -39,10 +39,7 @@ class DatabaseConnection_mysql extends DatabaseConnection { $this->exec('SET sql_mode=STRICT_ALL_TABLES'); } - public function queryRange($query, Array $args, $from, $count, Array $options) { - // Backward compatibility hack, temporary. - $query = str_replace(array('%d' , '%f' , '%b' , "'%s'"), '?', $query); - + public function queryRange($query, Array $args, $from, $count, Array $options = array()) { return $this->query($query . ' LIMIT ' . $from . ', ' . $count, $args, $options); } diff --git a/includes/database/pgsql/database.inc b/includes/database/pgsql/database.inc index 6a65c2cfb..6393eaebe 100644 --- a/includes/database/pgsql/database.inc +++ b/includes/database/pgsql/database.inc @@ -75,10 +75,7 @@ class DatabaseConnection_pgsql extends DatabaseConnection { } } - public function queryRange($query, Array $args, $from, $count, Array $options) { - // Backward compatibility hack, temporary. - $query = str_replace(array('%d' , '%f' , '%b' , "'%s'"), '?', $query); - + public function queryRange($query, Array $args, $from, $count, Array $options = array()) { return $this->query($query . ' LIMIT ' . $count . ' OFFSET ' . $from, $args, $options); } diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test index 0aaf88ef4..e99a8c1b1 100644 --- a/modules/simpletest/tests/database_test.test +++ b/modules/simpletest/tests/database_test.test @@ -1925,6 +1925,44 @@ class DatabaseLoggingTestCase extends DatabaseTestCase { } /** + * Range query tests. + */ +class DatabaseRangeQueryTestCase extends DrupalWebTestCase { + + /** + * Define metadata for this test subclass. + */ + function getInfo() { + return array( + 'name' => t('Range query test'), + 'description' => t('Test the Range query functionality.'), + 'group' => t('Database'), + ); + } + + /** + * Implementation of setUp(). + */ + function setUp() { + parent::setUp('database_test'); + } + + /** + * Confirm that range query work and return correct result. + */ + function testRangeQuery() { + // Test if return correct number of rows. + $range_rows = db_query_range("SELECT name FROM {system} ORDER BY name", array(), 2, 3)->fetchAll(); + $this->assertEqual(count($range_rows), 3, t('Range query work and return correct number of rows.')); + + // Test if return target data. + $raw_rows = db_query("SELECT name FROM {system} ORDER BY name")->fetchAll(); + $raw_rows = array_slice($raw_rows, 2, 3); + $this->assertEqual($range_rows, $raw_rows, t('Range query work and return target data.')); + } +} + +/** * Temporary query tests. */ class DatabaseTemporaryQueryTestCase extends DrupalWebTestCase { |