@@ -49,6 +49,9 @@ final class Payload extends BasePayload {
49
49
/** @var string|array{index:string,query:array{match:array{'*'?:string}},options?:array<string,mixed>} */
50
50
public array |string $ payload ;
51
51
52
+ /** @var array<string> */
53
+ public array $ queries = [];
54
+
52
55
public function __construct () {
53
56
}
54
57
@@ -99,6 +102,8 @@ protected static function fromJsonRequest(Request $request): static {
99
102
*/
100
103
protected static function fromSqlRequest (Request $ request ): static {
101
104
$ query = $ request ->payload ;
105
+ $ additionalQueries = static ::extractAdditionalQueries ($ query );
106
+
102
107
preg_match ('/FROM\s+`?(\w+)`?\s+WHERE/ius ' , $ query , $ matches );
103
108
$ tableName = $ matches [1 ] ?? '' ;
104
109
@@ -145,9 +150,40 @@ protected static function fromSqlRequest(Request $request): static {
145
150
$ self ->layouts = $ layouts ;
146
151
$ self ->preserve = $ preserve ;
147
152
$ self ->payload = $ query ;
153
+ $ self ->queries = $ additionalQueries ;
148
154
return $ self ;
149
155
}
150
156
157
+ /**
158
+ * @param string $query
159
+ * @return array<string>
160
+ */
161
+ protected static function extractAdditionalQueries (string $ query ): array {
162
+ $ additionalQueries = [];
163
+
164
+ // Find the position of the first semicolon
165
+ $ firstSemicolonPos = strpos ($ query , '; ' , stripos ($ query , ' option ' ) ?: 0 ) ?: 0 ;
166
+
167
+ // If a semicolon exists
168
+ if ($ firstSemicolonPos > 0 ) {
169
+ // Get the text after the first semicolon
170
+ $ remainingText = trim (substr ($ query , $ firstSemicolonPos + 1 ));
171
+
172
+ // Split remaining text into additional queries
173
+ if (!empty ($ remainingText )) {
174
+ $ extraQueries = preg_split ('/;/ ' , $ remainingText , -1 , PREG_SPLIT_NO_EMPTY ) ?: [];
175
+
176
+ // Add non-empty queries to the result
177
+ $ additionalQueries = array_merge (
178
+ $ additionalQueries ,
179
+ array_filter (array_map ('trim ' , $ extraQueries ))
180
+ );
181
+ }
182
+ }
183
+
184
+ return $ additionalQueries ;
185
+ }
186
+
151
187
/**
152
188
* @param callable $fn A callable function that returns an array of options to be used in the query
153
189
* @return string returns payload to use in the query send to Manticore
@@ -207,7 +243,8 @@ public function getQueriesSQLRequest(callable $fn): string {
207
243
$ match = $ searchValue ;
208
244
}
209
245
Buddy::debug ("Fuzzy: match: $ match " );
210
- return sprintf ($ template , $ match );
246
+ $ queries = [sprintf ($ template , $ match ), ...$ this ->queries ];
247
+ return implode ('; ' , $ queries );
211
248
}
212
249
213
250
/**
0 commit comments