Параметризованные запросы¶
В 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]
...