|
8 | 8 | use PHPUnit\Framework\Attributes\DataProviderExternal; |
9 | 9 | use Yiisoft\Db\Constant\DataType; |
10 | 10 | use Yiisoft\Db\Exception\NotSupportedException; |
| 11 | +use Yiisoft\Db\Expression\ArrayExpression; |
11 | 12 | use Yiisoft\Db\Expression\CaseExpression; |
12 | 13 | use Yiisoft\Db\Expression\Expression; |
13 | 14 | use Yiisoft\Db\Expression\ExpressionInterface; |
| 15 | +use Yiisoft\Db\Expression\Function\ArrayMerge; |
14 | 16 | use Yiisoft\Db\Expression\Param; |
15 | 17 | use Yiisoft\Db\Query\Query; |
16 | 18 | use Yiisoft\Db\Query\QueryInterface; |
|
19 | 21 | use Yiisoft\Db\Sqlite\Tests\Provider\QueryBuilderProvider; |
20 | 22 | use Yiisoft\Db\Sqlite\Tests\Support\TestTrait; |
21 | 23 | use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest; |
| 24 | +use Yiisoft\Db\Tests\Support\Assert; |
22 | 25 |
|
23 | 26 | /** |
24 | 27 | * @group sqlite |
@@ -746,4 +749,41 @@ public function testMultiOperandFunctionBuilderWithoutOperands(string $class): v |
746 | 749 | { |
747 | 750 | parent::testMultiOperandFunctionBuilderWithoutOperands($class); |
748 | 751 | } |
| 752 | + |
| 753 | + public function testArrayMergeWithOrdering(): void |
| 754 | + { |
| 755 | + $db = $this->getConnection(); |
| 756 | + $qb = $db->getQueryBuilder(); |
| 757 | + |
| 758 | + $stringParam = new Param('[4,3,5]', DataType::STRING); |
| 759 | + $arrayMerge = (new ArrayMerge( |
| 760 | + "'[2,1,3]'", |
| 761 | + [6, 5, 7], |
| 762 | + $stringParam, |
| 763 | + self::getDb()->select(new ArrayExpression([10, 9])), |
| 764 | + ))->ordered(); |
| 765 | + $params = []; |
| 766 | + |
| 767 | + $this->assertSame( |
| 768 | + '(SELECT json_group_array(value) AS value FROM (' |
| 769 | + . "SELECT value FROM json_each('[2,1,3]')" |
| 770 | + . ' UNION SELECT value FROM json_each(:qp0)' |
| 771 | + . ' UNION SELECT value FROM json_each(:qp1)' |
| 772 | + . ' UNION SELECT value FROM json_each((SELECT :qp2))' |
| 773 | + . ' ORDER BY value))', |
| 774 | + $qb->buildExpression($arrayMerge, $params) |
| 775 | + ); |
| 776 | + Assert::arraysEquals( |
| 777 | + [ |
| 778 | + ':qp0' => new Param('[6,5,7]', DataType::STRING), |
| 779 | + ':qp1' => $stringParam, |
| 780 | + ':qp2' => new Param('[10,9]', DataType::STRING), |
| 781 | + ], |
| 782 | + $params, |
| 783 | + ); |
| 784 | + |
| 785 | + $result = $db->select($arrayMerge)->scalar(); |
| 786 | + |
| 787 | + $this->assertEquals('[1,2,3,4,5,6,7,9,10]', $result); |
| 788 | + } |
749 | 789 | } |
0 commit comments