Fix #14951 - Moving Columns with DEFAULT NULL doesn't work on MariaDB 10.2+

Ref: 98a7479174
Signed-off-by: William Desportes <williamdes@wdes.fr>
This commit is contained in:
William Desportes 2019-11-09 22:46:35 +01:00
parent e9ad2bc153
commit 8aad190ae0
No known key found for this signature in database
GPG Key ID: 90A0EF1B8251A889
2 changed files with 7 additions and 3 deletions

View File

@ -404,6 +404,9 @@ class TableStructureController extends TableController
$column_names = array_keys($columns);
$changes = array();
// @see https://mariadb.com/kb/en/library/changes-improvements-in-mariadb-102/#information-schema
$usesLiteralNull = $this->dbi->isMariaDB() && $this->dbi->getVersion() >= 100200;
$defaultNullValue = $usesLiteralNull ? 'NULL' : null;
// move columns from first to last
for ($i = 0, $l = count($_POST['move_columns']); $i < $l; $i++) {
$column = $_POST['move_columns'][$i];
@ -426,7 +429,8 @@ class TableStructureController extends TableController
&& ($data['Default'] == 'CURRENT_TIMESTAMP'
|| $data['Default'] == 'current_timestamp()');
if ($data['Null'] === 'YES' && $data['Default'] === null) {
// @see https://mariadb.com/kb/en/library/information-schema-columns-table/#examples
if ($data['Null'] === 'YES' && in_array($$data['Default'], [$defaultNullValue, null])) {
$default_type = 'NULL';
} elseif ($current_timestamp) {
$default_type = 'CURRENT_TIMESTAMP';
@ -454,7 +458,7 @@ class TableStructureController extends TableController
$extracted_columnspec['spec_in_brackets'],
$extracted_columnspec['attribute'],
isset($data['Collation']) ? $data['Collation'] : '',
$data['Null'] === 'YES' ? 'NULL' : 'NOT NULL',
$data['Null'] === 'YES' ? 'YES' : 'NO',
$default_type,
$current_timestamp ? '' : $data['Default'],
isset($data['Extra']) && $data['Extra'] !== '' ? $data['Extra']

View File

@ -93,7 +93,7 @@ class CreateAddField
: '',
isset($_POST['field_null'][$i])
? $_POST['field_null'][$i]
: 'NOT NULL',
: 'NO',
$_POST['field_default_type'][$i],
$_POST['field_default_value'][$i],
isset($_POST['field_extra'][$i])