@@ -93,6 +93,13 @@ public static function evaluate(
93
93
case \Vimeo \MysqlEngine \Query \Expression \ParameterExpression::class:
94
94
return ParameterEvaluator::evaluate ($ scope , $ expr );
95
95
96
+ case \Vimeo \MysqlEngine \Query \Expression \PlaceholderExpression::class:
97
+ if (\array_key_exists ($ expr ->offset , $ scope ->parameters )) {
98
+ return $ scope ->parameters [$ expr ->offset ];
99
+ }
100
+
101
+ throw new ProcessorException ('Parameter offset ' . $ expr ->offset . ' out of range ' );
102
+
96
103
default :
97
104
throw new ProcessorException ('Unsupported expression ' . get_class ($ expr ));
98
105
}
@@ -226,25 +233,7 @@ public static function getColumnSchema(
226
233
227
234
case \Vimeo \MysqlEngine \Query \Expression \ParameterExpression::class:
228
235
if (\array_key_exists ($ expr ->parameterName , $ scope ->parameters )) {
229
- $ value = $ scope ->parameters [$ expr ->parameterName ];
230
-
231
- if (\is_int ($ value )) {
232
- return $ expr ->column = new Column \IntColumn (false , 10 );
233
- }
234
-
235
- if (\is_float ($ value )) {
236
- return $ expr ->column = new Column \FloatColumn (10 , 2 );
237
- }
238
-
239
- if (\is_bool ($ value )) {
240
- return $ expr ->column = new Column \TinyInt (true , 1 );
241
- }
242
-
243
- if ($ value === null ) {
244
- return $ expr ->column = new Column \NullColumn ();
245
- }
246
-
247
- return new Column \Varchar (10 );
236
+ return self ::getColumnTypeFromValue ($ expr , $ scope ->parameters [$ expr ->parameterName ]);
248
237
}
249
238
250
239
// When MySQL can't figure out a variable column's type
@@ -255,6 +244,32 @@ public static function getColumnSchema(
255
244
return $ expr ->column = new Column \Varchar (10 );
256
245
}
257
246
247
+ /**
248
+ * @param mixed $value
249
+ */
250
+ private static function getColumnTypeFromValue (
251
+ \Vimeo \MysqlEngine \Query \Expression \Expression $ expr ,
252
+ $ value
253
+ ) : Column {
254
+ if (\is_int ($ value )) {
255
+ return $ expr ->column = new Column \IntColumn (false , 10 );
256
+ }
257
+
258
+ if (\is_float ($ value )) {
259
+ return $ expr ->column = new Column \FloatColumn (10 , 2 );
260
+ }
261
+
262
+ if (\is_bool ($ value )) {
263
+ return $ expr ->column = new Column \TinyInt (true , 1 );
264
+ }
265
+
266
+ if ($ value === null ) {
267
+ return $ expr ->column = new Column \NullColumn ();
268
+ }
269
+
270
+ return new Column \Varchar (10 );
271
+ }
272
+
258
273
/**
259
274
* @param list<Column> $types
260
275
*/
0 commit comments