Из примера where-col-in пример и этот ответ, предложения WHERE IN
должны иметь запрос с параметрами со следующим синтаксисом
const response = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [data])
где данные - это массив.
Теперь, когда данные представляют собой пустой массив, он создает следующий запрос
SELECT * FROM users WHERE id IN ()
что является синтаксической ошибкой.
Рассмотрим следующие утверждения:
это работает
const x = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [[1, 2, 3]]);
это не работает
const y = await db.any('SELECT * FROM table WHERE id IN ($1:csv)', [[]]);
похожая ошибка, о которой сообщается для библиотеки squel
, содержит ответы о том, как knex
и ruby sequel
ведут себя в таком сценарии. .
Это баг или я что-то не так делаю? Может ли быть альтернативный синтаксис, который работает для обоих сценариев.
Например, альтернативный запрос с использованием ANY
работает в обеих ситуациях:
await db.any(`SELECT * FROM table WHERE id = ANY($1)`, [[1, 2, 3]]);
await db.any(`SELECT * FROM table WHERE id = ANY($1)`, [[]]);
Каким должен быть лучший способ иметь запросы WHERE col IN
, которые также могут обрабатывать пустые массивы в качестве параметров?