mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02: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
2 changed files with 37 additions and 3 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue