Skip to content

Commit b1ec47d

Browse files
committed
Updated builders to use new types (date, datetime, json and binary) + updated tests
1 parent edebecd commit b1ec47d

File tree

4 files changed

+430
-193
lines changed

4 files changed

+430
-193
lines changed

src/Builder/AlternativeLoader.php

Lines changed: 113 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -163,30 +163,115 @@ public function getNode(): Node
163163
public function compileParameters(): iterable
164164
{
165165
foreach ($this->parameters as $key => $parameter) {
166-
yield new Node\Stmt\Expression(
167-
new Node\Expr\MethodCall(
168-
var: new Node\Expr\Variable('statement'),
169-
name: new Node\Identifier('bindParam'),
170-
args: array_filter([
171-
new Node\Arg(
172-
is_string($key) ? new Node\Scalar\Encapsed(
173-
[
174-
new Node\Scalar\EncapsedStringPart(':'),
175-
new Node\Scalar\EncapsedStringPart($key)
176-
]
177-
) : new Node\Scalar\LNumber($key)
178-
),
179-
new Node\Arg(
180-
$parameter["value"]
181-
),
182-
$this->compileParameterType($parameter),
183-
]),
184-
)
185-
);
166+
yield match ($parameter['type']) {
167+
'datetime' => new Node\Stmt\Expression(
168+
new Node\Expr\MethodCall(
169+
var: new Node\Expr\Variable('statement'),
170+
name: new Node\Identifier('bindValue'),
171+
args: [
172+
new Node\Arg(
173+
is_string($key) ? new Node\Scalar\Encapsed(
174+
[
175+
new Node\Scalar\EncapsedStringPart(':'),
176+
new Node\Scalar\EncapsedStringPart($key)
177+
]
178+
) : new Node\Scalar\LNumber($key)
179+
),
180+
new Node\Arg(
181+
value: new Node\Expr\MethodCall(
182+
var: $parameter['value'],
183+
name: new Node\Name('format'),
184+
args: [
185+
new Node\Arg(
186+
value: new Node\Scalar\String_('YYYY-MM-DD HH:MI:SS')
187+
),
188+
],
189+
),
190+
),
191+
$this->compileParameterType($parameter)
192+
],
193+
),
194+
),
195+
'date' => new Node\Stmt\Expression(
196+
new Node\Expr\MethodCall(
197+
var: new Node\Expr\Variable('statement'),
198+
name: new Node\Identifier('bindValue'),
199+
args: [
200+
new Node\Arg(
201+
is_string($key) ? new Node\Scalar\Encapsed(
202+
[
203+
new Node\Scalar\EncapsedStringPart(':'),
204+
new Node\Scalar\EncapsedStringPart($key)
205+
]
206+
) : new Node\Scalar\LNumber($key)
207+
),
208+
new Node\Arg(
209+
value: new Node\Expr\MethodCall(
210+
var: $parameter['value'],
211+
name: new Node\Name('format'),
212+
args: [
213+
new Node\Arg(
214+
value: new Node\Scalar\String_('YYYY-MM-DD')
215+
),
216+
],
217+
),
218+
),
219+
$this->compileParameterType($parameter)
220+
],
221+
),
222+
),
223+
'json' => new Node\Stmt\Expression(
224+
new Node\Expr\MethodCall(
225+
var: new Node\Expr\Variable('statement'),
226+
name: new Node\Identifier('bindValue'),
227+
args: [
228+
new Node\Arg(
229+
is_string($key) ? new Node\Scalar\Encapsed(
230+
[
231+
new Node\Scalar\EncapsedStringPart(':'),
232+
new Node\Scalar\EncapsedStringPart($key)
233+
]
234+
) : new Node\Scalar\LNumber($key)
235+
),
236+
new Node\Arg(
237+
new Node\Expr\FuncCall(
238+
name: new Node\Name('json_encode'),
239+
args: [
240+
new Node\Arg(
241+
value: $parameter['value']
242+
)
243+
],
244+
),
245+
),
246+
$this->compileParameterType($parameter)
247+
],
248+
),
249+
),
250+
default => new Node\Stmt\Expression(
251+
new Node\Expr\MethodCall(
252+
var: new Node\Expr\Variable('statement'),
253+
name: new Node\Identifier('bindValue'),
254+
args: [
255+
new Node\Arg(
256+
is_string($key) ? new Node\Scalar\Encapsed(
257+
[
258+
new Node\Scalar\EncapsedStringPart(':'),
259+
new Node\Scalar\EncapsedStringPart($key)
260+
]
261+
) : new Node\Scalar\LNumber($key)
262+
),
263+
new Node\Arg(
264+
$parameter["value"]
265+
),
266+
$this->compileParameterType($parameter)
267+
],
268+
),
269+
),
270+
};
186271
}
187272
}
188273

189-
private function compileParameterType(array $parameter): ?Node\Arg
274+
private function compileParameterType(array $parameter): Node\Arg
190275
{
191276
return match ($parameter["type"]) {
192277
'integer' => new Node\Arg(
@@ -201,13 +286,18 @@ class: new Node\Name\FullyQualified(name: 'PDO'),
201286
name: new Node\Identifier(name: 'PARAM_BOOL')
202287
)
203288
),
204-
'string' => new Node\Arg(
289+
'binary' => new Node\Arg(
290+
value: new Node\Expr\ClassConstFetch(
291+
class: new Node\Name\FullyQualified(name: 'PDO'),
292+
name: new Node\Identifier(name: 'PARAM_LOB')
293+
)
294+
),
295+
default => new Node\Arg(
205296
value: new Node\Expr\ClassConstFetch(
206297
class: new Node\Name\FullyQualified(name: 'PDO'),
207298
name: new Node\Identifier(name: 'PARAM_STR')
208299
)
209300
),
210-
default => null
211301
};
212302
}
213303
}

src/Builder/AlternativeLookup.php

Lines changed: 120 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -246,37 +246,121 @@ class: new Node\Name\FullyQualified('PDO'),
246246
))->getNode();
247247
}
248248

249-
/**
250-
* @return array<int, Node\Stmt\Expression>
251-
*/
252-
public function compileParameters(): array
249+
public function compileParameters(): iterable
253250
{
254-
$output = [];
255-
256251
foreach ($this->parameters as $key => $parameter) {
257-
$output[] = new Node\Stmt\Expression(
258-
expr: new Node\Expr\MethodCall(
259-
var: new Node\Expr\Variable('stmt'),
260-
name: new Node\Identifier('bindParam'),
261-
args: array_filter([
262-
new Node\Arg(
263-
is_string($key) ? new Node\Scalar\Encapsed(
264-
[
265-
new Node\Scalar\EncapsedStringPart(':'),
266-
new Node\Scalar\EncapsedStringPart($key)
267-
]
268-
) : new Node\Scalar\LNumber($key)
269-
),
270-
new Node\Arg(
271-
$parameter["value"]
272-
),
273-
$this->compileParameterType($parameter)
274-
]),
275-
)
276-
);
252+
yield match ($parameter['type']) {
253+
'datetime' => new Node\Stmt\Expression(
254+
new Node\Expr\MethodCall(
255+
var: new Node\Expr\Variable('stmt'),
256+
name: new Node\Identifier('bindValue'),
257+
args: [
258+
new Node\Arg(
259+
is_string($key) ? new Node\Scalar\Encapsed(
260+
[
261+
new Node\Scalar\EncapsedStringPart(':'),
262+
new Node\Scalar\EncapsedStringPart($key)
263+
]
264+
) : new Node\Scalar\LNumber($key)
265+
),
266+
new Node\Arg(
267+
value: new Node\Expr\StaticCall(
268+
class: new Node\Name('DateTimeImmutable'),
269+
name: new Node\Name('createFromFormat'),
270+
args: [
271+
new Node\Arg(
272+
value: new Node\Scalar\String_('YYYY-MM-DD HH:MI:SS')
273+
),
274+
new Node\Arg(
275+
value: $parameter['value']
276+
),
277+
],
278+
),
279+
),
280+
$this->compileParameterType($parameter)
281+
],
282+
),
283+
),
284+
'date' => new Node\Stmt\Expression(
285+
new Node\Expr\MethodCall(
286+
var: new Node\Expr\Variable('stmt'),
287+
name: new Node\Identifier('bindValue'),
288+
args: [
289+
new Node\Arg(
290+
is_string($key) ? new Node\Scalar\Encapsed(
291+
[
292+
new Node\Scalar\EncapsedStringPart(':'),
293+
new Node\Scalar\EncapsedStringPart($key)
294+
]
295+
) : new Node\Scalar\LNumber($key)
296+
),
297+
new Node\Arg(
298+
value: new Node\Expr\StaticCall(
299+
class: new Node\Name('DateTimeImmutable'),
300+
name: new Node\Name('createFromFormat'),
301+
args: [
302+
new Node\Arg(
303+
value: new Node\Scalar\String_('YYYY-MM-DD')
304+
),
305+
new Node\Arg(
306+
value: $parameter['value']
307+
),
308+
],
309+
),
310+
),
311+
$this->compileParameterType($parameter)
312+
],
313+
),
314+
),
315+
'json' => new Node\Stmt\Expression(
316+
new Node\Expr\MethodCall(
317+
var: new Node\Expr\Variable('stmt'),
318+
name: new Node\Identifier('bindValue'),
319+
args: [
320+
new Node\Arg(
321+
is_string($key) ? new Node\Scalar\Encapsed(
322+
[
323+
new Node\Scalar\EncapsedStringPart(':'),
324+
new Node\Scalar\EncapsedStringPart($key)
325+
]
326+
) : new Node\Scalar\LNumber($key)
327+
),
328+
new Node\Arg(
329+
new Node\Expr\FuncCall(
330+
name: new Node\Name('json_decode'),
331+
args: [
332+
new Node\Arg(
333+
value: $parameter['value']
334+
)
335+
],
336+
),
337+
),
338+
$this->compileParameterType($parameter)
339+
],
340+
),
341+
),
342+
default => new Node\Stmt\Expression(
343+
new Node\Expr\MethodCall(
344+
var: new Node\Expr\Variable('stmt'),
345+
name: new Node\Identifier('bindValue'),
346+
args: [
347+
new Node\Arg(
348+
is_string($key) ? new Node\Scalar\Encapsed(
349+
[
350+
new Node\Scalar\EncapsedStringPart(':'),
351+
new Node\Scalar\EncapsedStringPart($key)
352+
]
353+
) : new Node\Scalar\LNumber($key)
354+
),
355+
new Node\Arg(
356+
$parameter["value"]
357+
),
358+
$this->compileParameterType($parameter)
359+
],
360+
),
361+
),
362+
};
277363
}
278-
279-
return $output;
280364
}
281365

282366
private function compileParameterType(array $parameter): ?Node\Arg
@@ -294,13 +378,18 @@ class: new Node\Name\FullyQualified(name: 'PDO'),
294378
name: new Node\Identifier(name: 'PARAM_BOOL')
295379
)
296380
),
297-
'string' => new Node\Arg(
381+
'binary' => new Node\Arg(
298382
value: new Node\Expr\ClassConstFetch(
299383
class: new Node\Name\FullyQualified(name: 'PDO'),
300-
name: new Node\Identifier(name: 'PARAM_STR')
384+
name: new Node\Identifier(name: 'PARAM_LOB')
301385
)
302386
),
303-
default => null
387+
default => new Node\Arg(
388+
value: new Node\Expr\ClassConstFetch(
389+
class: new Node\Name\FullyQualified(name: 'PDO'),
390+
name: new Node\Identifier(name: 'PARAM_STR')
391+
)
392+
)
304393
};
305394
}
306395
}

0 commit comments

Comments
 (0)