Skip to content

Commit c1b62dd

Browse files
committed
Remove the useless Parameter DTO + reworked how the argument type is handled + updated tests
1 parent 8231308 commit c1b62dd

File tree

12 files changed

+361
-230
lines changed

12 files changed

+361
-230
lines changed

src/Builder/AlternativeLoader.php

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,32 @@ public function withState(Node\Expr $state): StepBuilderInterface
4444
return $this;
4545
}
4646

47-
public function addParam(Parameter $parameter): StepBuilderInterface
47+
public function addStringParam(int|string $key, Node\Expr $param): StepBuilderInterface
4848
{
49-
$this->parameters[] = $parameter;
49+
$this->parameters[$key] = [
50+
'value' => $param,
51+
'type' => 'string',
52+
];
53+
54+
return $this;
55+
}
56+
57+
public function addIntegerParam(int|string $key, Node\Expr $param): StepBuilderInterface
58+
{
59+
$this->parameters[$key] = [
60+
'value' => $param,
61+
'type' => 'integer',
62+
];
63+
64+
return $this;
65+
}
66+
67+
public function addBooleanParam(int|string $key, Node\Expr $param): StepBuilderInterface
68+
{
69+
$this->parameters[$key] = [
70+
'value' => $param,
71+
'type' => 'boolean',
72+
];
5073

5174
return $this;
5275
}
@@ -99,33 +122,52 @@ public function getNode(): Node
99122

100123
public function compileParameters(): iterable
101124
{
102-
/** @var Parameter $parameter */
103-
foreach ($this->parameters as $parameter) {
125+
foreach ($this->parameters as $key => $parameter) {
104126
yield new Node\Stmt\Expression(
105127
new Node\Expr\MethodCall(
106128
var: new Node\Expr\Variable('statement'),
107129
name: new Node\Identifier('bindParam'),
108130
args: array_filter([
109131
new Node\Arg(
110-
is_string($parameter->key) ? new Node\Scalar\Encapsed(
132+
is_string($key) ? new Node\Scalar\Encapsed(
111133
[
112134
new Node\Scalar\EncapsedStringPart(':'),
113-
new Node\Scalar\EncapsedStringPart($parameter->key)
135+
new Node\Scalar\EncapsedStringPart($key)
114136
]
115-
) : new Node\Scalar\LNumber($parameter->key)
137+
) : new Node\Scalar\LNumber($key)
116138
),
117139
new Node\Arg(
118-
$parameter->value
140+
$parameter["value"]
119141
),
120-
$parameter->type !== null ? new Node\Arg(
121-
value: new Node\Expr\ClassConstFetch(
122-
class: new Node\Name\FullyQualified(name: 'PDO'),
123-
name: $parameter->type === 'boolean' ? new Node\Identifier(name: 'PARAM_BOOL') : new Node\Identifier(name: 'PARAM_INT')
124-
)
125-
) : null,
142+
$this->compileParameterType($parameter),
126143
]),
127144
)
128145
);
129146
}
130147
}
148+
149+
private function compileParameterType(array $parameter): ?Node\Arg
150+
{
151+
return match ($parameter["type"]) {
152+
'integer' => new Node\Arg(
153+
value: new Node\Expr\ClassConstFetch(
154+
class: new Node\Name\FullyQualified(name: 'PDO'),
155+
name: new Node\Identifier(name: 'PARAM_INT')
156+
)
157+
),
158+
'boolean' => new Node\Arg(
159+
value: new Node\Expr\ClassConstFetch(
160+
class: new Node\Name\FullyQualified(name: 'PDO'),
161+
name: new Node\Identifier(name: 'PARAM_BOOL')
162+
)
163+
),
164+
'string' => new Node\Arg(
165+
value: new Node\Expr\ClassConstFetch(
166+
class: new Node\Name\FullyQualified(name: 'PDO'),
167+
name: new Node\Identifier(name: 'PARAM_STR')
168+
)
169+
),
170+
default => null
171+
};
172+
}
131173
}

src/Builder/AlternativeLookup.php

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,32 @@ public function withState(Node\Expr $state): StepBuilderInterface
4747
return $this;
4848
}
4949

50-
public function addParam(Parameter $parameter): StepBuilderInterface
50+
public function addStringParam(int|string $key, Node\Expr $param): StepBuilderInterface
5151
{
52-
$this->parameters[] = $parameter;
52+
$this->parameters[$key] = [
53+
'value' => $param,
54+
'type' => 'string',
55+
];
56+
57+
return $this;
58+
}
59+
60+
public function addIntegerParam(int|string $key, Node\Expr $param): StepBuilderInterface
61+
{
62+
$this->parameters[$key] = [
63+
'value' => $param,
64+
'type' => 'integer',
65+
];
66+
67+
return $this;
68+
}
69+
70+
public function addBooleanParam(int|string $key, Node\Expr $param): StepBuilderInterface
71+
{
72+
$this->parameters[$key] = [
73+
'value' => $param,
74+
'type' => 'boolean',
75+
];
5376

5477
return $this;
5578
}
@@ -190,35 +213,54 @@ public function compileParameters(): array
190213
{
191214
$output = [];
192215

193-
/** @var Parameter $parameter */
194-
foreach ($this->parameters as $parameter) {
216+
foreach ($this->parameters as $key => $parameter) {
195217
$output[] = new Node\Stmt\Expression(
196218
expr: new Node\Expr\MethodCall(
197219
var: new Node\Expr\Variable('stmt'),
198220
name: new Node\Identifier('bindParam'),
199221
args: array_filter([
200222
new Node\Arg(
201-
is_string($parameter->key) ? new Node\Scalar\Encapsed(
223+
is_string($key) ? new Node\Scalar\Encapsed(
202224
[
203225
new Node\Scalar\EncapsedStringPart(':'),
204-
new Node\Scalar\EncapsedStringPart($parameter->key)
226+
new Node\Scalar\EncapsedStringPart($key)
205227
]
206-
) : new Node\Scalar\LNumber($parameter->key)
228+
) : new Node\Scalar\LNumber($key)
207229
),
208230
new Node\Arg(
209-
$parameter->value
231+
$parameter["value"]
210232
),
211-
$parameter->type !== null ? new Node\Arg(
212-
value: new Node\Expr\ClassConstFetch(
213-
class: new Node\Name\FullyQualified(name: 'PDO'),
214-
name: $parameter->type === 'boolean' ? new Node\Identifier(name: 'PARAM_BOOL') : new Node\Identifier(name: 'PARAM_INT')
215-
)
216-
) : null,
233+
$this->compileParameterType($parameter)
217234
]),
218235
)
219236
);
220237
}
221238

222239
return $output;
223240
}
241+
242+
private function compileParameterType(array $parameter): ?Node\Arg
243+
{
244+
return match ($parameter["type"]) {
245+
'integer' => new Node\Arg(
246+
value: new Node\Expr\ClassConstFetch(
247+
class: new Node\Name\FullyQualified(name: 'PDO'),
248+
name: new Node\Identifier(name: 'PARAM_INT')
249+
)
250+
),
251+
'boolean' => new Node\Arg(
252+
value: new Node\Expr\ClassConstFetch(
253+
class: new Node\Name\FullyQualified(name: 'PDO'),
254+
name: new Node\Identifier(name: 'PARAM_BOOL')
255+
)
256+
),
257+
'string' => new Node\Arg(
258+
value: new Node\Expr\ClassConstFetch(
259+
class: new Node\Name\FullyQualified(name: 'PDO'),
260+
name: new Node\Identifier(name: 'PARAM_STR')
261+
)
262+
),
263+
default => null
264+
};
265+
}
224266
}

src/Builder/DTO/Parameter.php

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/Builder/Extractor.php

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,32 @@ public function withAfterQueries(InitializerQueries ...$queries): self
8585
return $this;
8686
}
8787

88-
public function addParam(Parameter $parameter): StepBuilderInterface
88+
public function addStringParam(int|string $key, Node\Expr $param): StepBuilderInterface
8989
{
90-
$this->parameters[] = $parameter;
90+
$this->parameters[$key] = [
91+
'value' => $param,
92+
'type' => 'string',
93+
];
94+
95+
return $this;
96+
}
97+
98+
public function addIntegerParam(int|string $key, Node\Expr $param): StepBuilderInterface
99+
{
100+
$this->parameters[$key] = [
101+
'value' => $param,
102+
'type' => 'integer',
103+
];
104+
105+
return $this;
106+
}
107+
108+
public function addBooleanParam(int|string $key, Node\Expr $param): StepBuilderInterface
109+
{
110+
$this->parameters[$key] = [
111+
'value' => $param,
112+
'type' => 'boolean',
113+
];
91114

92115
return $this;
93116
}
@@ -135,30 +158,24 @@ class: new Node\Name\FullyQualified('Kiboko\\Component\\Flow\\SQL\\Extractor'),
135158

136159
public function compileParameters(): iterable
137160
{
138-
/** @var Parameter $parameter */
139-
foreach ($this->parameters as $parameter) {
161+
foreach ($this->parameters as $key => $parameter) {
140162
yield new Node\Stmt\Expression(
141163
new Node\Expr\MethodCall(
142164
var: new Node\Expr\Variable('statement'),
143165
name: new Node\Identifier('bindParam'),
144166
args: array_filter([
145167
new Node\Arg(
146-
is_string($parameter->key) ? new Node\Scalar\Encapsed(
168+
is_string($key) ? new Node\Scalar\Encapsed(
147169
[
148170
new Node\Scalar\EncapsedStringPart(':'),
149-
new Node\Scalar\EncapsedStringPart($parameter->key)
171+
new Node\Scalar\EncapsedStringPart($key)
150172
]
151-
) : new Node\Scalar\LNumber($parameter->key)
173+
) : new Node\Scalar\LNumber($key)
152174
),
153175
new Node\Arg(
154-
$parameter->value
176+
$parameter["value"]
155177
),
156-
$parameter->type !== null ? new Node\Arg(
157-
value: new Node\Expr\ClassConstFetch(
158-
class: new Node\Name\FullyQualified(name: 'PDO'),
159-
name: $parameter->type === 'boolean' ? new Node\Identifier(name: 'PARAM_BOOL') : new Node\Identifier(name: 'PARAM_INT')
160-
)
161-
) : null,
178+
$this->compileParameterType($parameter)
162179
]),
163180
)
164181
);
@@ -210,4 +227,29 @@ public function compileAfterQueries(): Node\Expr
210227
]
211228
);
212229
}
230+
231+
private function compileParameterType(array $parameter): ?Node\Arg
232+
{
233+
return match ($parameter["type"]) {
234+
'integer' => new Node\Arg(
235+
value: new Node\Expr\ClassConstFetch(
236+
class: new Node\Name\FullyQualified(name: 'PDO'),
237+
name: new Node\Identifier(name: 'PARAM_INT')
238+
)
239+
),
240+
'boolean' => new Node\Arg(
241+
value: new Node\Expr\ClassConstFetch(
242+
class: new Node\Name\FullyQualified(name: 'PDO'),
243+
name: new Node\Identifier(name: 'PARAM_BOOL')
244+
)
245+
),
246+
'string' => new Node\Arg(
247+
value: new Node\Expr\ClassConstFetch(
248+
class: new Node\Name\FullyQualified(name: 'PDO'),
249+
name: new Node\Identifier(name: 'PARAM_STR')
250+
)
251+
),
252+
default => null
253+
};
254+
}
213255
}

0 commit comments

Comments
 (0)