mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 21:49:15 +01:00
MDL-69973 xmldb: Fix problem with MariaDB >= 10.2.7 metadata defaults
With MariaDB 10.2.7 the driver was incorrectly returning '' (empty string) as default for all the columns having null (meaning, no default). Also, cover the case in unit tests, it seems that we were already testing other defaults but not the null case.
This commit is contained in:
parent
58ba94a729
commit
533c35ff99
@ -886,7 +886,7 @@ class mysqli_native_moodle_database extends moodle_database {
|
||||
$info->type = $rawcolumn->data_type;
|
||||
$info->meta_type = $this->mysqltype2moodletype($rawcolumn->data_type);
|
||||
if ($this->has_breaking_change_quoted_defaults()) {
|
||||
$info->default_value = trim($rawcolumn->column_default, "'");
|
||||
$info->default_value = is_null($rawcolumn->column_default) ? null : trim($rawcolumn->column_default, "'");
|
||||
if ($info->default_value === 'NULL') {
|
||||
$info->default_value = null;
|
||||
}
|
||||
|
@ -722,9 +722,13 @@ EOD;
|
||||
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
|
||||
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, null, null, 'lala');
|
||||
$table->add_field('description', XMLDB_TYPE_TEXT, 'small', null, null, null, null);
|
||||
$table->add_field('oneint', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
|
||||
$table->add_field('oneintnodefault', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null);
|
||||
$table->add_field('enumfield', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, 'test2');
|
||||
$table->add_field('onenum', XMLDB_TYPE_NUMBER, '10,2', null, null, null, 200);
|
||||
$table->add_field('onefloat', XMLDB_TYPE_FLOAT, '10,2', null, null, null, 300);
|
||||
$table->add_field('onenumnodefault', XMLDB_TYPE_NUMBER, '10,2', null, null, null);
|
||||
$table->add_field('onefloat', XMLDB_TYPE_FLOAT, '10,2', null, XMLDB_NOTNULL, null, 300);
|
||||
$table->add_field('onefloatnodefault', XMLDB_TYPE_FLOAT, '10,2', null, XMLDB_NOTNULL, null);
|
||||
$table->add_field('anotherfloat', XMLDB_TYPE_FLOAT, null, null, null, null, 400);
|
||||
$table->add_field('negativedfltint', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '-1');
|
||||
$table->add_field('negativedfltnumber', XMLDB_TYPE_NUMBER, '10', null, XMLDB_NOTNULL, null, '-2');
|
||||
@ -785,6 +789,20 @@ EOD;
|
||||
$this->assertNull($field->default_value);
|
||||
$this->assertFalse($field->not_null);
|
||||
|
||||
$field = $columns['oneint'];
|
||||
$this->assertSame('I', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
$this->assertTrue($field->has_default);
|
||||
$this->assertEquals(0, $field->default_value);
|
||||
$this->assertTrue($field->not_null);
|
||||
|
||||
$field = $columns['oneintnodefault'];
|
||||
$this->assertSame('I', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
$this->assertFalse($field->has_default);
|
||||
$this->assertNull($field->default_value);
|
||||
$this->assertTrue($field->not_null);
|
||||
|
||||
$field = $columns['enumfield'];
|
||||
$this->assertSame('C', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
@ -800,12 +818,28 @@ EOD;
|
||||
$this->assertEquals(200.0, $field->default_value);
|
||||
$this->assertFalse($field->not_null);
|
||||
|
||||
$field = $columns['onenumnodefault'];
|
||||
$this->assertSame('N', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
$this->assertEquals(10, $field->max_length);
|
||||
$this->assertEquals(2, $field->scale);
|
||||
$this->assertFalse($field->has_default);
|
||||
$this->assertNull($field->default_value);
|
||||
$this->assertFalse($field->not_null);
|
||||
|
||||
$field = $columns['onefloat'];
|
||||
$this->assertSame('N', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
$this->assertTrue($field->has_default);
|
||||
$this->assertEquals(300.0, $field->default_value);
|
||||
$this->assertFalse($field->not_null);
|
||||
$this->assertTrue($field->not_null);
|
||||
|
||||
$field = $columns['onefloatnodefault'];
|
||||
$this->assertSame('N', $field->meta_type);
|
||||
$this->assertFalse($field->auto_increment);
|
||||
$this->assertFalse($field->has_default);
|
||||
$this->assertNull($field->default_value);
|
||||
$this->assertTrue($field->not_null);
|
||||
|
||||
$field = $columns['anotherfloat'];
|
||||
$this->assertSame('N', $field->meta_type);
|
||||
|
Loading…
x
Reference in New Issue
Block a user