MDL-21437 data - fixed the sort by fuctionality to be cross-db for all fields
authorEloy Lafuente <stronk7@moodle.org>
Wed, 17 Nov 2010 21:18:53 +0000 (21:18 +0000)
committerEloy Lafuente <stronk7@moodle.org>
Wed, 17 Nov 2010 21:18:53 +0000 (21:18 +0000)
mod/data/field/latlong/field.class.php
mod/data/field/number/field.class.php
mod/data/view.php

index 83dd50c..794f3d0 100755 (executable)
@@ -204,17 +204,7 @@ class data_field_latlong extends data_field_base {
 
     function get_sort_sql($fieldname) {
         global $DB;
-        switch ($DB->get_db_family()) {
-            case 'mysql':
-                // string in an arithmetic operation is converted to a floating-point number
-                return '('.$fieldname.'+0.0)';
-            case 'postgres':
-                //cast is for PG
-                return 'CAST('.$fieldname.' AS REAL)';
-            default:
-                //Return just the fieldname. TODO: Look behaviour under MSSQL and Oracle
-                return $fieldname;
-        }
+        return $DB->sql_cast_char2real($fieldname, true);
     }
 
     function export_text_value($record) {
index 97f6510..9c5d17f 100755 (executable)
@@ -90,17 +90,7 @@ class data_field_number extends data_field_base {
 
     function get_sort_sql($fieldname) {
         global $DB;
-        switch ($DB->get_db_family()) {
-            case 'mysql':
-                // string in an arithmetic operation is converted to a floating-point number
-                return '('.$fieldname.'+0.0)';
-            case 'postgres':
-                // cast for PG
-                return 'CAST('.$fieldname.' AS REAL)';
-            default:
-                // the rest, just the field name. TODO: Analyse behaviour under MSSQL and Oracle
-                return $fieldname;
-        }
+        return $DB->sql_cast_char2real($fieldname, true);
     }
 
 }
index 1964ec7..8498aad 100755 (executable)
@@ -520,10 +520,10 @@ if ($showactivity) {
 
         } else {
 
-            $sortcontent = $sortfield->get_sort_field();
-            $sortcontentfull = $sortfield->get_sort_sql('c.'.$sortcontent);
+            $sortcontent = $DB->sql_compare_text('c.' . $sortfield->get_sort_field());
+            $sortcontentfull = $sortfield->get_sort_sql($sortcontent);
 
-            $what = ' DISTINCT r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname, '.$DB->sql_compare_text($sortcontentfull).' AS _order ';
+            $what = ' DISTINCT r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname, ' . $sortcontentfull . ' AS _order ';
             $count = ' COUNT(DISTINCT c.recordid) ';
             $tables = '{data_content} c, {data_records} r, {data_content} cs, {user} u ';
             $where =  'WHERE c.recordid = r.id