@@ -566,27 +566,27 @@ private function filterToWhereClause(Filter $filter, $argsCount = 0): array
566566 return $ this ->makeInClause ('id ' , $ filter ->valList (), $ argsCount );
567567 case DocumentStore \Filter \AnyOfFilter::class:
568568 /** @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 ()) );
570570 case DocumentStore \Filter \EqFilter::class:
571571 /** @var DocumentStore\Filter\EqFilter $filter */
572572 $ 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 ];
574574 case DocumentStore \Filter \GtFilter::class:
575575 /** @var DocumentStore\Filter\GtFilter $filter */
576576 $ 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 ];
578578 case DocumentStore \Filter \GteFilter::class:
579579 /** @var DocumentStore\Filter\GteFilter $filter */
580580 $ 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 ];
582582 case DocumentStore \Filter \LtFilter::class:
583583 /** @var DocumentStore\Filter\LtFilter $filter */
584584 $ 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 ];
586586 case DocumentStore \Filter \LteFilter::class:
587587 /** @var DocumentStore\Filter\LteFilter $filter */
588588 $ 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 ];
590590 case DocumentStore \Filter \LikeFilter::class:
591591 /** @var DocumentStore\Filter\LikeFilter $filter */
592592 $ prop = $ this ->propToJsonPath ($ filter ->prop ());
@@ -614,7 +614,7 @@ private function filterToWhereClause(Filter $filter, $argsCount = 0): array
614614 case DocumentStore \Filter \InArrayFilter::class:
615615 /** @var DocumentStore\Filter\InArrayFilter $filter */
616616 $ 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 ];
618618 case DocumentStore \Filter \ExistsFilter::class:
619619 /** @var DocumentStore\Filter\ExistsFilter $filter */
620620 $ prop = $ this ->propToJsonPath ($ filter ->prop ());
@@ -708,6 +708,24 @@ private function indexToSqlCmd(Index $index, string $collectionName): string
708708 return $ cmd ;
709709 }
710710
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+
711729 private function getIndexName (Index $ index ): ?string
712730 {
713731 if (method_exists ($ index , 'name ' )) {
0 commit comments