intermediate

Query builder

Собирайте typed или fluent SQL, сохраняя контроль над joins, filters, ordering, pagination и execution plans.

Query builder собирает SQL через функции или fluent API, часто с привязкой параметров и опциональной типизацией. Силён для динамических фильтров, join и пагинации без конкатенации строк.

					db.selectFrom('orders')
  .innerJoin('customers', 'customers.id', 'orders.customer_id')
  .where('orders.status', '=', status)
  .limit(pageSize)
  .offset(page * pageSize);
				

На интервью: объясните опциональные фильтры, join, пагинацию, защиту от SQL injection и почему builder всё равно требует знания индексов и планов.

Типовые ошибки: fluent API, скрывающий неэффективные join; нечитаемые динамические запросы; отключённые логи SQL в production.

Компромисс — безопасный динамический SQL и переиспользование против читаемости и дисциплины планов.

Чеклист:

  • Просматривайте сгенерированный SQL.
  • Параметризуйте динамические значения.
  • Связывайте форму запроса с индексами и пагинацией.
  • Логируйте или трассируйте важные пути доступа.