В рельсах нет настоящего «подготовленного заявления»? - PullRequest
3 голосов
/ 21 июня 2010

Когда мы используем ActiveRecord, мы можем использовать:

User.find(:first, :conditions=>["name=?", name])

Похоже, что ActiveRecord использует «подготовленный оператор», но после изучения кода я обнаружил, что ActiveRecord просто использует String.dup и connection.quote() настроить контент для создания sql, не как Java.

Итак, в raiils нет реального prepared statment?А почему рельсы этого не обеспечивают?

Ответы [ 3 ]

5 голосов
/ 21 июня 2010

Если под подготовленным оператором вы имеете в виду кусок SQL, который содержится в скомпилированной форме для более эффективного выполнения, то вы правы: это не то, что реализовано в Rails. Для этого есть несколько причин:

  1. Rails - это веб-фреймворк - он не знает и не заботится о базах данных. По умолчанию Rails использует
    • ActiveRecord для объектно-реляционного отображения. Вы можете изменить это, если хотите - это даже не обязательно должна быть СУБД.
    • ActiveRecord не знает о конкретных платформах баз данных. Для этого он использует «адаптеры», которые переводят требования AR в специфичный для платформы SQL.
    • Некоторые РСУБД, имеющие адаптеры AR, поддерживают подготовленные операторы (или эквивалентные), а другие нет.
3 голосов
/ 17 апреля 2013

Rails 3.1 (или выше) поддерживает подготовленные операторы.Каждый ваш новый запрос будет добавлен в пул подготовленной выписки.Если вы используете MySql DB, она все равно не будет поддерживать подготовленные операторы, потому что использование подготовленных операторов в MySql снижает производительность по сравнению с без подготовленного оператора. Здесь хорошая статья Пэт Шонесси об этом.

2 голосов
/ 21 июня 2010

Во многих (большинстве?) Отношениях представление БД представляет собой подготовленное утверждение. И с ActiveRecord легко использовать представления. Просто объявите представление в вашей БД (я использую задачи rake) и затем получите к нему доступ через ActiveRecord.

Отлично работает для доступа только для чтения к сложному SQL. Сохраняет БД от многих шагов, необходимых для разбора / вычисления SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...