|
3 | 3 | namespace Kiboko\Plugin\SQL\Builder; |
4 | 4 |
|
5 | 5 | use Kiboko\Contract\Configurator\StepBuilderInterface; |
| 6 | +use Kiboko\Plugin\SQL\Builder\DTO\Parameter; |
6 | 7 | use PhpParser\Node; |
7 | 8 |
|
8 | 9 | final class Extractor implements StepBuilderInterface |
@@ -84,9 +85,9 @@ public function withAfterQueries(InitializerQueries ...$queries): self |
84 | 85 | return $this; |
85 | 86 | } |
86 | 87 |
|
87 | | - public function addParameter(string|int $key, Node\Expr $parameter): StepBuilderInterface |
| 88 | + public function addParam(Parameter $parameter): StepBuilderInterface |
88 | 89 | { |
89 | | - $this->parameters[$key] = $parameter; |
| 90 | + $this->parameters[] = $parameter; |
90 | 91 |
|
91 | 92 | return $this; |
92 | 93 | } |
@@ -134,24 +135,31 @@ class: new Node\Name\FullyQualified('Kiboko\\Component\\Flow\\SQL\\Extractor'), |
134 | 135 |
|
135 | 136 | public function compileParameters(): iterable |
136 | 137 | { |
137 | | - foreach ($this->parameters as $key => $parameter) { |
| 138 | + /** @var Parameter $parameter */ |
| 139 | + foreach ($this->parameters as $parameter) { |
138 | 140 | yield new Node\Stmt\Expression( |
139 | 141 | new Node\Expr\MethodCall( |
140 | 142 | var: new Node\Expr\Variable('statement'), |
141 | 143 | name: new Node\Identifier('bindParam'), |
142 | | - args: [ |
| 144 | + args: array_filter([ |
143 | 145 | new Node\Arg( |
144 | | - is_string($key) ? new Node\Scalar\Encapsed( |
| 146 | + is_string($parameter->key) ? new Node\Scalar\Encapsed( |
145 | 147 | [ |
146 | 148 | new Node\Scalar\EncapsedStringPart(':'), |
147 | | - new Node\Scalar\EncapsedStringPart($key) |
| 149 | + new Node\Scalar\EncapsedStringPart($parameter->key) |
148 | 150 | ] |
149 | | - ) : new Node\Scalar\LNumber($key) |
| 151 | + ) : new Node\Scalar\LNumber($parameter->key) |
150 | 152 | ), |
151 | 153 | new Node\Arg( |
152 | | - $parameter |
| 154 | + $parameter->value |
153 | 155 | ), |
154 | | - ], |
| 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, |
| 162 | + ]), |
155 | 163 | ) |
156 | 164 | ); |
157 | 165 | } |
|
0 commit comments