запрос с IN стейтментом список из значений?
хотелось бы иметь возможность делать что то вроде такого
query conn "select * from table where id in (?)" [1,2,3]
https://github.com/nurpax/sqlite-simple/issues/91
Решение с созданием доп таблицы это какое то извращение. А в этой либе можно как то посмотерть на сам запрос после всех подстановок? Я попробовал через intercalate собрать стрингу из id разделенных запятыми и подставить эту стрингу в "in (?)" но запрос почему то возвращает пустой список
я не работал конкретно с этой либой и не знаю ее внутренних деталей, но в других похожих библиотеках для "взрослых" баз есть разница между встраиванием значений в тело запроса (как в случае с IN) и подстановкой в плейсхолдеры (? или $1 или ${name}) в случае с ANY (https://www.postgresql.org/docs/14/functions-comparisons.html#FUNCTIONS-COMPARISONS-IN-SCALAR) Вариант с плейсхолдером отлично работает с ANY($1), потому что во многих базах sth = ANY(..) в непустом значении эквивалентно sth IN (...), с той разницей, что ANY умеет работать с экранированными подстановками в виде массива (а значит будут работать стандартные механизмы подстановки составных значений из библиотеки), а для IN нужен синтаксически верный подзапрос или comma-separated values, который обычно нужно писать отдельным комбинатором, чтобы он не экранировал входные значения, а инлайнил их как надо в тело запроса. В SQLite нет поддержки ANY, а плейсхолдер в IN (?) не должен работать из-за экранирования значений (что вроде подтверждают в тикете). Поэтому я бы смотрел как написать свой комбинатор для их Query типа
Эта либа не делает подстановок, поэтому не поддерживает массивы. Апи sqlite не умеет в массивы
Обсуждают сегодня