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

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

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

SELECT "name" FROM "characters" WHERE "id" = 1;
pico.sql([[SELECT "name" FROM "characters" WHERE "id" = ?]], {1});

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

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

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

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

SELECT "name","year" FROM "characters" WHERE "id" > 3 AND "year" > 2000;
pico.sql([[SELECT "name","year" FROM "characters" WHERE "id" > ? AND "year" > ? ]], {3, 2000});

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

---
- metadata:
  - {'name': 'name', 'type': 'string'}
  - {'name': 'year', 'type': 'integer'}
  rows:
  - ['Barbie', 2010]
  - ['Daisy', 2010]
  - ['Forky', 2019]
  - ['Dragon', 2019]
  - ['The Dummies', 2019]
...