Merge pull request #19347 from kamil-tekiela/Default-values-in-insert
Handle default values during insert
This commit is contained in:
commit
8b690ae0d6
@ -104,6 +104,7 @@ final class ReplaceController implements InvocableController
|
||||
$valueSets = [];
|
||||
|
||||
$mimeMap = $this->transformations->getMime(Current::$database, Current::$table) ?? [];
|
||||
$columnsDefaultValues = $this->insertEdit->getColumnDefaultValues(Current::$database, Current::$table);
|
||||
|
||||
$queryFields = [];
|
||||
$insertErrors = [];
|
||||
@ -211,7 +212,12 @@ final class ReplaceController implements InvocableController
|
||||
|
||||
if (! isset($multiEditVirtual[$key])) {
|
||||
if ($isInsert) {
|
||||
$queryPart = $this->insertEdit->getQueryValueForInsert($editField, $usingKey, $whereClause);
|
||||
if ($editField->value === $columnsDefaultValues[$columnName]) {
|
||||
$queryPart = $editField->value;
|
||||
} else {
|
||||
$queryPart = $this->insertEdit->getQueryValueForInsert($editField, $usingKey, $whereClause);
|
||||
}
|
||||
|
||||
if ($queryPart !== '' && $valueSets === []) {
|
||||
// first inserted row so prepare the list of fields
|
||||
$queryFields[] = Util::backquote($editField->columnName);
|
||||
|
||||
@ -1131,6 +1131,8 @@ class InsertEdit
|
||||
|
||||
/**
|
||||
* Get value part if a function was specified
|
||||
*
|
||||
* @psalm-return non-empty-string
|
||||
*/
|
||||
private function formatAsSqlFunction(
|
||||
EditField $editField,
|
||||
@ -1931,6 +1933,16 @@ class InsertEdit
|
||||
. '<div class="clearfloat"></div>';
|
||||
}
|
||||
|
||||
/** @return array<string|null> */
|
||||
public function getColumnDefaultValues(string $database, string $table): array
|
||||
{
|
||||
$sql = 'SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '
|
||||
. $this->dbi->quoteString($table)
|
||||
. ' AND TABLE_SCHEMA = ' . $this->dbi->quoteString($database);
|
||||
|
||||
return $this->dbi->query($sql)->fetchAllKeyPair();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns list of function names that accept WKB as text
|
||||
*
|
||||
|
||||
@ -132,6 +132,11 @@ class ReplaceControllerTest extends AbstractTestCase
|
||||
$GLOBALS['goto'] = 'index.php?route=/sql';
|
||||
$dummyDbi->addSelectDb('my_db');
|
||||
$dummyDbi->addSelectDb('my_db');
|
||||
$dummyDbi->addResult(
|
||||
'SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS '
|
||||
. "WHERE TABLE_NAME = 'test_tbl' AND TABLE_SCHEMA = 'my_db'",
|
||||
[],
|
||||
);
|
||||
$replaceController($request);
|
||||
$output = $response->getHTMLResult();
|
||||
$this->dummyDbi->assertAllSelectsConsumed();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user