MDL-25276 dml - fix/implement sql_cast2int/real() across the 5 drivers. Tests passing.
authorEloy Lafuente <stronk7@moodle.org>
Thu, 18 Nov 2010 01:27:49 +0000 (01:27 +0000)
committerEloy Lafuente <stronk7@moodle.org>
Thu, 18 Nov 2010 01:27:49 +0000 (01:27 +0000)
lib/dml/mssql_native_moodle_database.php
lib/dml/mysqli_native_moodle_database.php
lib/dml/oci_native_moodle_database.php
lib/dml/sqlsrv_native_moodle_database.php

index 884b368..edd66f1 100644 (file)
@@ -1052,7 +1052,19 @@ class mssql_native_moodle_database extends moodle_database {
 /// SQL helper functions
 
     public function sql_cast_char2int($fieldname, $text=false) {
 /// SQL helper functions
 
     public function sql_cast_char2int($fieldname, $text=false) {
-        return ' CAST(' . $fieldname . ' AS INT) ';
+        if (!$text) {
+            return ' CAST(' . $fieldname . ' AS INT) ';
+        } else {
+            return ' CAST(' . $this->sql_compare_text($fieldname) . ' AS INT) ';
+        }
+    }
+
+    public function sql_cast_char2real($fieldname, $text=false) {
+        if (!$text) {
+            return ' CAST(' . $fieldname . ' AS REAL) ';
+        } else {
+            return ' CAST(' . $this->sql_compare_text($fieldname) . ' AS REAL) ';
+        }
     }
 
     public function sql_ceil($fieldname) {
     }
 
     public function sql_ceil($fieldname) {
index 3309002..51f2d3d 100644 (file)
@@ -1052,6 +1052,10 @@ class mysqli_native_moodle_database extends moodle_database {
         return ' CAST(' . $fieldname . ' AS SIGNED) ';
     }
 
         return ' CAST(' . $fieldname . ' AS SIGNED) ';
     }
 
+    public function sql_cast_char2real($fieldname, $text=false) {
+        return ' CAST(' . $fieldname . ' AS DECIMAL) ';
+    }
+
     /**
      * Returns 'LIKE' part of a query.
      *
     /**
      * Returns 'LIKE' part of a query.
      *
index a3cd061..7da5810 100644 (file)
@@ -1447,6 +1447,14 @@ class oci_native_moodle_database extends moodle_database {
         }
     }
 
         }
     }
 
+    public function sql_cast_char2real($fieldname, $text=false) {
+        if (!$text) {
+            return ' CAST(' . $fieldname . ' AS FLOAT) ';
+        } else {
+            return ' CAST(' . $this->sql_compare_text($fieldname) . ' AS FLOAT) ';
+        }
+    }
+
     /**
      * Returns 'LIKE' part of a query.
      *
     /**
      * Returns 'LIKE' part of a query.
      *
index 673bc0d..15b3a83 100644 (file)
@@ -1152,7 +1152,19 @@ class sqlsrv_native_moodle_database extends moodle_database {
     /// SQL helper functions
 
     public function sql_cast_char2int($fieldname, $text = false) {
     /// SQL helper functions
 
     public function sql_cast_char2int($fieldname, $text = false) {
-        return ' CAST('.$fieldname.' AS INT) ';
+        if (!$text) {
+            return ' CAST(' . $fieldname . ' AS INT) ';
+        } else {
+            return ' CAST(' . $this->sql_compare_text($fieldname) . ' AS INT) ';
+        }
+    }
+
+    public function sql_cast_char2real($fieldname, $text=false) {
+        if (!$text) {
+            return ' CAST(' . $fieldname . ' AS REAL) ';
+        } else {
+            return ' CAST(' . $this->sql_compare_text($fieldname) . ' AS REAL) ';
+        }
     }
 
     public function sql_ceil($fieldname) {
     }
 
     public function sql_ceil($fieldname) {