Commit b5343b93 authored by catch's avatar catch
Browse files

Issue #3120892 by Kumar Kundan, ravi.shankar, julienjoye, daffie: Replicate SQL LEAST() in SQLite

parent e3371760
......@@ -133,6 +133,7 @@ public static function open(array &$connection_options = []) {
// Create functions needed by SQLite.
$pdo->sqliteCreateFunction('if', [__CLASS__, 'sqlFunctionIf']);
$pdo->sqliteCreateFunction('greatest', [__CLASS__, 'sqlFunctionGreatest']);
$pdo->sqliteCreateFunction('least', [__CLASS__, 'sqlFunctionLeast']);
$pdo->sqliteCreateFunction('pow', 'pow', 2);
$pdo->sqliteCreateFunction('exp', 'exp', 1);
$pdo->sqliteCreateFunction('length', 'strlen', 1);
......@@ -239,6 +240,16 @@ public static function sqlFunctionGreatest() {
}
}
/**
* SQLite compatibility implementation for the LEAST() SQL function.
*/
public static function sqlFunctionLeast() {
// Remove all NULL, FALSE and empty strings values but leaves 0 (zero) values.
$values = array_filter(func_get_args(), 'strlen');
return count($values) < 1 ? NULL : min($values);
}
/**
* SQLite compatibility implementation for the CONCAT() SQL function.
*/
......
<?php
namespace Drupal\KernelTests\Core\Database;
/**
* Tests the SQL LEAST operator.
*
* @group Database
*/
class SelectLeastTest extends DatabaseTestBase {
/**
* Tests the SQL LEAST operator.
*
* @dataProvider selectLeastProvider
*/
public function testSelectLeast($values, $expected) {
$least = $this->connection->query("SELECT LEAST(:values[])", [':values[]' => $values])->fetchField();
$this->assertEquals($expected, $least);
}
public function selectLeastProvider() {
return [
[[1, 2, 3, 4, 5, 6], 1],
[['A', 'B', 'C', 'NULL', 'F'], 'A'],
[['NULL', 'NULL'], 'NULL'],
[['TRUE', 'FALSE'], 'FALSE'],
[['A', 'B', 'C', 'NULL'], 'A'],
];
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment