From e3359b87df59c493c8aaa16bdb740e1d41e3c9a2 Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Tue, 5 Nov 2013 14:02:31 +0800 Subject: [PATCH] MDL-41586 libraries: Fix scale issues The default value of scale should be null not false in mssql, that is the standard with other DBs 0 is a valid value for scale, don't change it in oracle --- lib/ddl/tests/ddl_test.php | 10 ++++++++++ lib/dml/mssql_native_moodle_database.php | 2 +- lib/dml/oci_native_moodle_database.php | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/ddl/tests/ddl_test.php b/lib/ddl/tests/ddl_test.php index 07a4a3fe1a0..c712880fa2d 100644 --- a/lib/ddl/tests/ddl_test.php +++ b/lib/ddl/tests/ddl_test.php @@ -698,6 +698,16 @@ class core_ddl_testcase extends database_driver_testcase { $this->assertSame('N', $columns['onenumber']->meta_type); $this->assertEquals(2.550, $DB->get_field('test_table1', 'onenumber', array(), IGNORE_MULTIPLE)); // Check default has been applied. + // Add one numeric field with scale of 0 and check it. + $field = new xmldb_field('onenumberwith0scale'); + $field->set_attributes(XMLDB_TYPE_NUMBER, '6,0', null, XMLDB_NOTNULL, null, 2); + $dbman->add_field($table, $field); + $this->assertTrue($dbman->field_exists($table, 'onenumberwith0scale')); + $columns = $DB->get_columns('test_table1'); + $this->assertEquals(6, $columns['onenumberwith0scale']->max_length); + // We can not use assertEquals as that accepts null/false as a valid value. + $this->assertSame('0', strval($columns['onenumberwith0scale']->scale)); + // Add one float field and check it (not official type - must work as number). $field = new xmldb_field('onefloat'); $field->set_attributes(XMLDB_TYPE_FLOAT, '6,3', null, XMLDB_NOTNULL, null, 3.550); diff --git a/lib/dml/mssql_native_moodle_database.php b/lib/dml/mssql_native_moodle_database.php index 2ad78aae77a..ec4e983548b 100644 --- a/lib/dml/mssql_native_moodle_database.php +++ b/lib/dml/mssql_native_moodle_database.php @@ -475,7 +475,7 @@ class mssql_native_moodle_database extends moodle_database { } // Scale - $info->scale = $rawcolumn->scale ? $rawcolumn->scale : false; + $info->scale = $rawcolumn->scale; // Prepare not_null info $info->not_null = $rawcolumn->is_nullable == 'NO' ? true : false; diff --git a/lib/dml/oci_native_moodle_database.php b/lib/dml/oci_native_moodle_database.php index 95985f92e56..502a266b157 100644 --- a/lib/dml/oci_native_moodle_database.php +++ b/lib/dml/oci_native_moodle_database.php @@ -565,7 +565,7 @@ class oci_native_moodle_database extends moodle_database { $info->meta_type = 'I'; $info->unique = null; } - $info->scale = null; + $info->scale = 0; } else { //float