Перейти к содержанию

Параметризованные запросы

В DQL- и DML-запросах с условиями можно использовать как обычный вид, так и параметризированный. В последнем случае потребуется сначала переключить язык консоли на Lua. Так, следующие две команды дадут одинаковый результат (вывод строки по известному id). :

SELECT item FROM warehouse WHERE id = 1;
pico.sql([[SELECT item FROM warehouse WHERE id = ?]], {1});

Вывод в консоль:

---
- metadata:
  - {'name': 'ITEM', 'type': 'string'}
  rows:
  - ['bricks']
...

Разница состоит в том, что при параметризации происходит кеширование плана запроса по ключу от шаблона SQL (в данном случае select item from warehouse where id = ?), и если подобных запросов несколько, то они все смогут использовать кешированный план. Без параметризации у каждого запроса будет свой отдельный план, и ускорения от кеша не произойдет.

Пример вывода строк по нескольким условиям для разных столбцов (также два варианта):

SELECT item, type FROM warehouse WHERE id > 3 AND type = 'light';
pico.sql([[SELECT item, type FROM warehouse WHERE id > ? AND type = ?]], {3, 'light'});

Вывод в консоль:

---
- metadata:
  - {'name': 'ITEM', 'type': 'string'}
  - {'name': 'TYPE', 'type': 'string'}
  rows:
  - ['piles', 'light']
  - ['panels', 'light']
...