@@ -75,14 +75,14 @@ public function search(Search $search): Result
75
75
$ filters = [];
76
76
foreach ($ search ->filters as $ filter ) {
77
77
match (true ) {
78
- $ filter instanceof Condition \IdentifierCondition => $ filters [] = $ index ->getIdentifierField ()->name . ' = \'' . $ filter ->identifier . '\'' , // TODO escape?
78
+ $ filter instanceof Condition \IdentifierCondition => $ filters [] = $ index ->getIdentifierField ()->name . ' = ' . $ this -> escapeFilterValue ( $ filter ->identifier ),
79
79
$ filter instanceof Condition \SearchCondition => $ query = $ filter ->query ,
80
- $ filter instanceof Condition \EqualCondition => $ filters [] = $ filter ->field . ' = \'' . $ filter ->value . '\'' , // TODO escape?
81
- $ filter instanceof Condition \NotEqualCondition => $ filters [] = $ filter ->field . ' != \'' . $ filter ->value . '\'' , // TODO escape?
82
- $ filter instanceof Condition \GreaterThanCondition => $ filters [] = $ filter ->field . ' > ' . $ filter ->value , // TODO escape?
83
- $ filter instanceof Condition \GreaterThanEqualCondition => $ filters [] = $ filter ->field . ' >= ' . $ filter ->value , // TODO escape?
84
- $ filter instanceof Condition \LessThanCondition => $ filters [] = $ filter ->field . ' < ' . $ filter ->value , // TODO escape?
85
- $ filter instanceof Condition \LessThanEqualCondition => $ filters [] = $ filter ->field . ' <= ' . $ filter ->value , // TODO escape?
80
+ $ filter instanceof Condition \EqualCondition => $ filters [] = $ filter ->field . ' = ' . $ this -> escapeFilterValue ( $ filter ->value ),
81
+ $ filter instanceof Condition \NotEqualCondition => $ filters [] = $ filter ->field . ' != ' . $ this -> escapeFilterValue ( $ filter ->value ),
82
+ $ filter instanceof Condition \GreaterThanCondition => $ filters [] = $ filter ->field . ' > ' . $ this -> escapeFilterValue ( $ filter ->value ),
83
+ $ filter instanceof Condition \GreaterThanEqualCondition => $ filters [] = $ filter ->field . ' >= ' . $ this -> escapeFilterValue ( $ filter ->value ),
84
+ $ filter instanceof Condition \LessThanCondition => $ filters [] = $ filter ->field . ' < ' . $ this -> escapeFilterValue ( $ filter ->value ),
85
+ $ filter instanceof Condition \LessThanEqualCondition => $ filters [] = $ filter ->field . ' <= ' . $ this -> escapeFilterValue ( $ filter ->value ),
86
86
default => throw new \LogicException ($ filter ::class . ' filter not implemented. ' ),
87
87
};
88
88
}
@@ -122,6 +122,17 @@ public function search(Search $search): Result
122
122
);
123
123
}
124
124
125
+ private function escapeFilterValue (string |int |float |bool $ value ): string
126
+ {
127
+ // TODO replace with SearchParameters::escapeFilterValue once updated Loupe to 0.5
128
+ // see also https://github.com/loupe-php/loupe/pull/54
129
+ return match (true ) {
130
+ \is_bool ($ value ) => $ value ? '1 ' : '0 ' ,
131
+ \is_int ($ value ), \is_float ($ value ) => (string ) $ value ,
132
+ default => "' " . \str_replace ("' " , "'' " , $ value ) . "' "
133
+ };
134
+ }
135
+
125
136
/**
126
137
* @param Index[] $indexes
127
138
* @param iterable<array<string, mixed>> $hits
0 commit comments