У меня такое ощущение, что от замены placeholder'ов вы плавно перешли.
Не-не-не, Девид Блейн!
Это только
ksnk продвигает такую идею.
Я же твердо стою на позициях парсера плейсходеров, точка.
И в итоге решил остановиться только на модификаторе, который скажет парсеру, размножать значение, или нет.
По факту, у нас есть три условно "скалярных" типа, которые имеет смысл размножать через запятую: это строка, число и идентификатор. То есть
Код:
SELECT (?n) FROM t; # SELECT (`a`,`b`,`c`) FROM t;
SELECT id FROM t WHERE cat IN (?i); # SELECT id FROM t WHERE cat IN (1,2,3)
INSERT INTO (?n) VALUES (?s) # INSERT INTO (`a`,`b`,`c`) VALUES ('a','b','c')
От идеи автоматом определять массивы я отказался - Григорий вправил мне мозги на тему, что такой автомат легко сделает бажный запрос типа
Код:
SELECT * FROM t WHERE id = 1,2,3
Поэтому нужен модификатор.
Я думаю над вариантами
Код:
SELECT id FROM t WHERE cat IN (?ai);
и
SELECT id FROM t WHERE cat IN ([?i]);
Вот Фикс говорит, правда, что квадратные скобки заняты МС-ом. но с другой стороны, когда еще до того МС-а руки дойдутю С третьей - для тупо ?ai не нужно усложнять парсер