? sites/default/modules
? sites/default/settings.php
Index: includes/database/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/database.inc,v
retrieving revision 1.17
diff -u -p -r1.17 database.inc
--- includes/database/database.inc	30 Oct 2008 08:57:50 -0000	1.17
+++ includes/database/database.inc	31 Oct 2008 09:08:13 -0000
@@ -614,7 +614,7 @@ abstract class DatabaseConnection extend
    *   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.
Index: includes/database/mysql/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/mysql/database.inc,v
retrieving revision 1.4
diff -u -p -r1.4 database.inc
--- includes/database/mysql/database.inc	25 Oct 2008 02:03:55 -0000	1.4
+++ includes/database/mysql/database.inc	31 Oct 2008 09:08:13 -0000
@@ -39,10 +39,7 @@ class DatabaseConnection_mysql extends D
     $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);
   }
 
Index: includes/database/pgsql/database.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/pgsql/database.inc,v
retrieving revision 1.4
diff -u -p -r1.4 database.inc
--- includes/database/pgsql/database.inc	25 Oct 2008 02:12:35 -0000	1.4
+++ includes/database/pgsql/database.inc	31 Oct 2008 09:08:13 -0000
@@ -75,10 +75,7 @@ class DatabaseConnection_pgsql extends D
     }
   }
 
-  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);
   }
 
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.13
diff -u -p -r1.13 database_test.test
--- modules/simpletest/tests/database_test.test	25 Oct 2008 04:26:30 -0000	1.13
+++ modules/simpletest/tests/database_test.test	31 Oct 2008 09:08:13 -0000
@@ -1884,3 +1884,41 @@ class DatabaseLoggingTestCase extends Da
     }
   }
 }
+
+/**
+ * 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.'));
+  }
+}
