Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 24 additions & 19 deletions tests/Provider/QueryBuilderProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -510,19 +510,19 @@ public static function multiOperandFunctionBuilder(): array
{
$data = parent::multiOperandFunctionBuilder();

$data['Greatest with 4 operands'][2] = 'GREATEST(1, 1.5, 1 + 2, (SELECT 10 FROM DUAL))';
$data['Least with 4 operands'][2] = 'LEAST(1, 1.5, 1 + 2, (SELECT 10 FROM DUAL))';
$data['Greatest with 4 operands'][2] = 'GREATEST(1, 1.5, (1 + 2), (SELECT 10 FROM DUAL))';
$data['Least with 4 operands'][2] = 'LEAST(1, 1.5, (1 + 2), (SELECT 10 FROM DUAL))';
$data['Longest with 2 operands'][2] = <<<SQL
(SELECT value FROM (SELECT 'short' AS value FROM DUAL UNION SELECT :qp0 AS value FROM DUAL) ORDER BY LENGTH(value) DESC FETCH FIRST 1 ROWS ONLY)
(SELECT value FROM (SELECT :qp0 AS value FROM DUAL UNION SELECT :qp1 AS value FROM DUAL) ORDER BY LENGTH(value) DESC FETCH FIRST 1 ROWS ONLY)
SQL;
$data['Longest with 3 operands'][2] = <<<SQL
(SELECT value FROM (SELECT 'short' AS value FROM DUAL UNION SELECT (SELECT 'longest' FROM DUAL) AS value FROM DUAL UNION SELECT :qp0 AS value FROM DUAL) ORDER BY LENGTH(value) DESC FETCH FIRST 1 ROWS ONLY)
(SELECT value FROM (SELECT :qp0 AS value FROM DUAL UNION SELECT (SELECT 'longest' FROM DUAL) AS value FROM DUAL UNION SELECT :qp1 AS value FROM DUAL) ORDER BY LENGTH(value) DESC FETCH FIRST 1 ROWS ONLY)
SQL;
$data['Shortest with 2 operands'][2] = <<<SQL
(SELECT value FROM (SELECT 'short' AS value FROM DUAL UNION SELECT :qp0 AS value FROM DUAL) ORDER BY LENGTH(value) ASC FETCH FIRST 1 ROWS ONLY)
(SELECT value FROM (SELECT :qp0 AS value FROM DUAL UNION SELECT :qp1 AS value FROM DUAL) ORDER BY LENGTH(value) ASC FETCH FIRST 1 ROWS ONLY)
SQL;
$data['Shortest with 3 operands'][2] = <<<SQL
(SELECT value FROM (SELECT 'short' AS value FROM DUAL UNION SELECT (SELECT 'longest' FROM DUAL) AS value FROM DUAL UNION SELECT :qp0 AS value FROM DUAL) ORDER BY LENGTH(value) ASC FETCH FIRST 1 ROWS ONLY)
(SELECT value FROM (SELECT :qp0 AS value FROM DUAL UNION SELECT (SELECT 'longest' FROM DUAL) AS value FROM DUAL UNION SELECT :qp1 AS value FROM DUAL) ORDER BY LENGTH(value) ASC FETCH FIRST 1 ROWS ONLY)
SQL;

$stringParam = new Param('[3,4,5]', DataType::STRING);
Expand All @@ -531,33 +531,38 @@ public static function multiOperandFunctionBuilder(): array
...$data,
'ArrayMerge with 1 operand' => [
ArrayMerge::class,
["'[1,2,3]'"],
"('[1,2,3]')",
[[1, 2, 3]],
'(:qp0)',
[1, 2, 3],
[':qp0' => new Param('[1,2,3]', DataType::STRING)],
],
'ArrayMerge with 2 operands' => [
ArrayMerge::class,
["'[1,2,3]'", $stringParam],
[[1, 2, 3], $stringParam],
'(SELECT JSON_ARRAYAGG(value) AS value FROM ('
. "SELECT value FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value PATH '$'))))",
. "SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp1, '$[*]' COLUMNS(value PATH '$'))))",
[1, 2, 3, 4, 5],
[':qp0' => $stringParam],
[
':qp0' => new Param('[1,2,3]', DataType::STRING),
':qp1' => $stringParam,
],
],
'ArrayMerge with 4 operands' => [
ArrayMerge::class,
["'[1,2,3]'", [5, 6, 7], $stringParam, self::getDb()->select(new ArrayValue([9, 10]))],
[[1, 2, 3], new ArrayValue([5, 6, 7]), $stringParam, self::getDb()->select(new ArrayValue([9, 10]))],
'(SELECT JSON_ARRAYAGG(value) AS value FROM ('
. "SELECT value FROM JSON_TABLE('[1,2,3]', '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value PATH '$'))"
. "SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp1, '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE((SELECT :qp2 FROM DUAL), '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp2, '$[*]' COLUMNS(value PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE((SELECT :qp3 FROM DUAL), '$[*]' COLUMNS(value PATH '$'))"
. '))',
[1, 2, 3, 4, 5, 6, 7, 9, 10],
[
':qp0' => new Param('[5,6,7]', DataType::STRING),
':qp1' => $stringParam,
':qp2' => new Param('[9,10]', DataType::STRING),
':qp0' => new Param('[1,2,3]', DataType::STRING),
':qp1' => new Param('[5,6,7]', DataType::STRING),
':qp2' => $stringParam,
':qp3' => new Param('[9,10]', DataType::STRING),
],
],
];
Expand Down
17 changes: 9 additions & 8 deletions tests/QueryBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -634,27 +634,28 @@ public function testArrayMergeWithTypeWithOrdering(

$stringParam = new Param('[4,3,5]', DataType::STRING);
$arrayMerge = (new ArrayMerge(
"'[2,1,3]'",
[6, 5, 7],
[2, 1, 3],
new ArrayValue([6, 5, 7]),
$stringParam,
self::getDb()->select(new ArrayValue([10, 9])),
))->type($type)->ordered();
$params = [];

$this->assertSame(
'(SELECT JSON_ARRAYAGG(value ORDER BY value) AS value FROM ('
. "SELECT value FROM JSON_TABLE('[2,1,3]', '$[*]' COLUMNS(value $operandType PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value $operandType PATH '$'))"
. "SELECT value FROM JSON_TABLE(:qp0, '$[*]' COLUMNS(value $operandType PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp1, '$[*]' COLUMNS(value $operandType PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE((SELECT :qp2 FROM DUAL), '$[*]' COLUMNS(value $operandType PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE(:qp2, '$[*]' COLUMNS(value $operandType PATH '$'))"
. " UNION SELECT value FROM JSON_TABLE((SELECT :qp3 FROM DUAL), '$[*]' COLUMNS(value $operandType PATH '$'))"
. '))',
$qb->buildExpression($arrayMerge, $params)
);
Assert::arraysEquals(
[
':qp0' => new Param('[6,5,7]', DataType::STRING),
':qp1' => $stringParam,
':qp2' => new Param('[10,9]', DataType::STRING),
':qp0' => new Param('[2,1,3]', DataType::STRING),
':qp1' => new Param('[6,5,7]', DataType::STRING),
':qp2' => $stringParam,
':qp3' => new Param('[10,9]', DataType::STRING),
],
$params,
);
Expand Down