@@ -93,6 +93,13 @@ public static function evaluate(
9393 case \Vimeo \MysqlEngine \Query \Expression \ParameterExpression::class:
9494 return ParameterEvaluator::evaluate ($ scope , $ expr );
9595
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+
96103 default :
97104 throw new ProcessorException ('Unsupported expression ' . get_class ($ expr ));
98105 }
@@ -226,25 +233,7 @@ public static function getColumnSchema(
226233
227234 case \Vimeo \MysqlEngine \Query \Expression \ParameterExpression::class:
228235 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 ]);
248237 }
249238
250239 // When MySQL can't figure out a variable column's type
@@ -255,6 +244,32 @@ public static function getColumnSchema(
255244 return $ expr ->column = new Column \Varchar (10 );
256245 }
257246
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+
258273 /**
259274 * @param list<Column> $types
260275 */
0 commit comments