Dukungan PreparedStatement untuk mysql2 telah ditambahkan di versi 0.4.0, sesuai tautan
Sesuai perincian berikut dalam versi 0.5.2 masih belum menggunakan pernyataan yang disiapkan di semua kueri ORM secara internal:

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

Catatan MySQL:

2019-03-10T13:20:01.722848Z  1072 Query SELECT `shipments`.* FROM `shipments` WHERE `shipments`.`order_id` = 78987898789<br>
2019-03-10T13:22:27.748687Z  1072 Query SELECT `shipments`.* FROM `shipments` WHERE (order_id = 56789876)

Apakah ada cara untuk mengaktifkan/menonaktifkannya untuk semua kueri ORM? (Sama seperti adaptor PostgreSQL ref). Apakah mengaktifkannya berdampak buruk pada kinerja aplikasi secara keseluruhan?

Jika tidak, saya belum mencobanya tetapi apakah mungkin untuk mencapai ini menggunakan Sekuel, dan betapa rumitnya memigrasikan aplikasi yang ada dari MySQL2 ke Sequel.

0
hsaini734 10 Maret 2019, 16:37

1 menjawab

Jawaban Terbaik

ActiveRecord dengan Mysql2 <5, tidak mendukung parameter yang dapat dikonfigurasi untuk mengaktifkan ready_statement
Cuplikan kode dari 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 dengan Mysql2 = 5.2.1 adaptor mendukung parameter yang dapat dikonfigurasi untuk mengaktifkan cuplikan kode ready_statement dari 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

Jadi, di ActiveRecord 5.2.1, kita bisa menambahkan baris berikut di database.yml untuk mengaktifkan ready_statements

siap_pernyataan: benar

0
hsaini734 12 Maret 2019, 12:39