@@ -566,27 +566,27 @@ private function filterToWhereClause(Filter $filter, $argsCount = 0): array
566
566
return $ this ->makeInClause ('id ' , $ filter ->valList (), $ argsCount );
567
567
case DocumentStore \Filter \AnyOfFilter::class:
568
568
/** @var DocumentStore\Filter\AnyOfFilter $filter */
569
- return $ this ->makeInClause ($ this ->propToJsonPath ($ filter ->prop ()), $ filter ->valList (), $ argsCount , true );
569
+ return $ this ->makeInClause ($ this ->propToJsonPath ($ filter ->prop ()), $ filter ->valList (), $ argsCount , $ this -> shouldJsonEncodeVal ( $ filter -> prop ()) );
570
570
case DocumentStore \Filter \EqFilter::class:
571
571
/** @var DocumentStore\Filter\EqFilter $filter */
572
572
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
573
- return ["$ prop = :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
573
+ return ["$ prop = :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
574
574
case DocumentStore \Filter \GtFilter::class:
575
575
/** @var DocumentStore\Filter\GtFilter $filter */
576
576
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
577
- return ["$ prop > :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
577
+ return ["$ prop > :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
578
578
case DocumentStore \Filter \GteFilter::class:
579
579
/** @var DocumentStore\Filter\GteFilter $filter */
580
580
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
581
- return ["$ prop >= :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
581
+ return ["$ prop >= :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
582
582
case DocumentStore \Filter \LtFilter::class:
583
583
/** @var DocumentStore\Filter\LtFilter $filter */
584
584
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
585
- return ["$ prop < :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
585
+ return ["$ prop < :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
586
586
case DocumentStore \Filter \LteFilter::class:
587
587
/** @var DocumentStore\Filter\LteFilter $filter */
588
588
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
589
- return ["$ prop <= :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
589
+ return ["$ prop <= :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
590
590
case DocumentStore \Filter \LikeFilter::class:
591
591
/** @var DocumentStore\Filter\LikeFilter $filter */
592
592
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
@@ -614,7 +614,7 @@ private function filterToWhereClause(Filter $filter, $argsCount = 0): array
614
614
case DocumentStore \Filter \InArrayFilter::class:
615
615
/** @var DocumentStore\Filter\InArrayFilter $filter */
616
616
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
617
- return ["$ prop @> :a $ argsCount " , ["a $ argsCount " => json_encode ($ filter ->val ())], ++$ argsCount ];
617
+ return ["$ prop @> :a $ argsCount " , ["a $ argsCount " => $ this -> prepareVal ($ filter ->val (), $ filter -> prop ())], ++$ argsCount ];
618
618
case DocumentStore \Filter \ExistsFilter::class:
619
619
/** @var DocumentStore\Filter\ExistsFilter $filter */
620
620
$ prop = $ this ->propToJsonPath ($ filter ->prop ());
@@ -708,6 +708,24 @@ private function indexToSqlCmd(Index $index, string $collectionName): string
708
708
return $ cmd ;
709
709
}
710
710
711
+ private function prepareVal ($ value , string $ prop )
712
+ {
713
+ if (!$ this ->shouldJsonEncodeVal ($ prop )) {
714
+ return $ value ;
715
+ }
716
+
717
+ return \json_encode ($ value );
718
+ }
719
+
720
+ private function shouldJsonEncodeVal (string $ prop ): bool
721
+ {
722
+ if ($ this ->useMetadataColumns && strpos ($ prop , 'metadata. ' ) === 0 ) {
723
+ return false ;
724
+ }
725
+
726
+ return true ;
727
+ }
728
+
711
729
private function getIndexName (Index $ index ): ?string
712
730
{
713
731
if (method_exists ($ index , 'name ' )) {
0 commit comments