Rails ActiveRecord mysql2 адаптер, используйте PreparedStatement по умолчанию - PullRequest
0 голосов
/ 10 марта 2019

Поддержка PreparedStatement для mysql2 уже была добавлена ​​в версии 0.4.0 согласно этой ссылке
В соответствии со следующими подробностями в версии 0.5.2 она все еще не использует подготовленный оператор во всех запросах ORM внутри.:

Shipment.where (order_id: 78987898789)
Shipment.where ('order_id =?', 56789876)

Mysql Log:

2019-03-10T13: 20: 01.722848Z 1072 Запрос SELECT shipments. * ОТ shipments ГДЕ shipments. order_id = 78987898789
2019-03-10T13: 22: 27.748687Z 1072Запрос SELECT shipments. * FROM shipments WHERE (order_id = 56789876)

Есть ли способ включить / отключить его для всех запросов ORM?(Так же, как адаптер postgreSQL ref ).Влияет ли его включение на общую производительность приложения?

Если нет, я еще не попробовал, но возможно ли достичь этого с помощью гема sequel и насколько сложна миграциясуществующее приложение из mysql2 для продолжения.

1 Ответ

0 голосов
/ 12 марта 2019

ActiveRecord с Mysql2 <5, не поддерживает настраиваемый параметр, чтобы включить подготовленное_статмент <br> Фрагмент кода из ActiveRecord 4.2.6

connection_adapters / mysql2_adapter.rb

module ConnectionAdapters
class Mysql2Adapter < AbstractMysqlAdapter
  ADAPTER_NAME = 'Mysql2'.freeze

  def initialize(connection, logger, connection_options, config)
    super
    @prepared_statements = false # No configurable param, default set to false
    configure_connection
  end
  ...
end

ActiveRecord с Mysql2 = 5.2.1 поддержка адаптера настраиваемый параметр, чтобы включить подготовленное_стандарт Фрагмент кода из ActiveRecord 5.2.1

connection_adapters / mysql2_adapter.rb

module ConnectionAdapters
class Mysql2Adapter < AbstractMysqlAdapter
  ADAPTER_NAME = "Mysql2".freeze

  include MySQL::DatabaseStatements

  def initialize(connection, logger, connection_options, config)
    super
    @prepared_statements = false unless config.key?(:prepared_statements)
    configure_connection
  end
  ...
end

Таким образом, в ActiveRecord 5.2.1 можно просто добавить следующую строку в database.yml, чтобы включить подготовленные_статы

подготовлено_отложений: правда

...