Merge pull request #19347 from kamil-tekiela/Default-values-in-insert

Handle default values during insert
This commit is contained in:
Maurício Meneghini Fauth 2024-10-31 18:29:06 -03:00 committed by GitHub
commit 8b690ae0d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 1 deletions

View File

@ -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);

View File

@ -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
*

View File

@ -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();