From 95c3965a4a302571c49727095b5a3c607267cc71 Mon Sep 17 00:00:00 2001 From: Shehbaz Date: Tue, 1 Sep 2020 13:47:22 +0100 Subject: [PATCH 1/2] Change gemspecs and gemfile --- Gemfile | 3 --- odbc_adapter.gemspec | 12 +++++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index c0cf8f4..fa75df1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,3 @@ source 'https://rubygems.org' gemspec - -gem 'activerecord', '5.0.1' -gem 'pry', '~> 0.11.1' diff --git a/odbc_adapter.gemspec b/odbc_adapter.gemspec index 4bf0142..7e3fbd4 100644 --- a/odbc_adapter.gemspec +++ b/odbc_adapter.gemspec @@ -19,11 +19,13 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] + spec.add_dependency 'activerecord', '>= 5.0' spec.add_dependency 'ruby-odbc', '~> 0.9' - spec.add_development_dependency 'bundler', '~> 1.14' - spec.add_development_dependency 'minitest', '~> 5.10' - spec.add_development_dependency 'rake', '~> 12.0' - spec.add_development_dependency 'rubocop', '0.48.1' - spec.add_development_dependency 'simplecov', '~> 0.14' + spec.add_development_dependency 'bundler', '>= 1.14' + spec.add_development_dependency 'minitest', '>= 5.10' + spec.add_development_dependency 'rake', '>= 12.0' + spec.add_development_dependency 'rubocop', '<= 0.58' + spec.add_development_dependency 'simplecov', '>= 0.14' + spec.add_development_dependency 'pry', '~> 0.13.1' end From af47f3d61e25d7d4733cd5d07bd18b70fa47b4b9 Mon Sep 17 00:00:00 2001 From: Shehbaz Date: Wed, 2 Sep 2020 13:48:53 +0100 Subject: [PATCH 2/2] Upgrade to rails5.2.1 --- .../connection_adapters/odbc_adapter.rb | 1 - lib/odbc_adapter/adapters/mysql_odbc_adapter.rb | 6 +----- lib/odbc_adapter/adapters/null_odbc_adapter.rb | 5 +---- lib/odbc_adapter/database_statements.rb | 11 ++++++++--- lib/odbc_adapter/version.rb | 2 +- odbc_adapter.gemspec | 14 +++++++------- 6 files changed, 18 insertions(+), 21 deletions(-) diff --git a/lib/active_record/connection_adapters/odbc_adapter.rb b/lib/active_record/connection_adapters/odbc_adapter.rb index 0668678..12ef819 100644 --- a/lib/active_record/connection_adapters/odbc_adapter.rb +++ b/lib/active_record/connection_adapters/odbc_adapter.rb @@ -1,5 +1,4 @@ require 'active_record' -require 'arel/visitors/bind_visitor' require 'odbc' require 'odbc_utf8' diff --git a/lib/odbc_adapter/adapters/mysql_odbc_adapter.rb b/lib/odbc_adapter/adapters/mysql_odbc_adapter.rb index eaa690e..0d43946 100644 --- a/lib/odbc_adapter/adapters/mysql_odbc_adapter.rb +++ b/lib/odbc_adapter/adapters/mysql_odbc_adapter.rb @@ -5,12 +5,8 @@ module Adapters class MySQLODBCAdapter < ActiveRecord::ConnectionAdapters::ODBCAdapter PRIMARY_KEY = 'INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY'.freeze - class BindSubstitution < Arel::Visitors::MySQL - include Arel::Visitors::BindVisitor - end - def arel_visitor - BindSubstitution.new(self) + Arel::Visitors::MySQL.new(self) end # Explicitly turning off prepared statements in the MySQL adapter because diff --git a/lib/odbc_adapter/adapters/null_odbc_adapter.rb b/lib/odbc_adapter/adapters/null_odbc_adapter.rb index 1a17990..98cb414 100644 --- a/lib/odbc_adapter/adapters/null_odbc_adapter.rb +++ b/lib/odbc_adapter/adapters/null_odbc_adapter.rb @@ -4,15 +4,12 @@ module Adapters # registry. This allows for minimal support for DBMSs for which we don't # have an explicit adapter. class NullODBCAdapter < ActiveRecord::ConnectionAdapters::ODBCAdapter - class BindSubstitution < Arel::Visitors::ToSql - include Arel::Visitors::BindVisitor - end # Using a BindVisitor so that the SQL string gets substituted before it is # sent to the DBMS (to attempt to get as much coverage as possible for # DBMSs we don't support). def arel_visitor - BindSubstitution.new(self) + Arel::Visitors::PostgreSQL.new(self) end # Explicitly turning off prepared_statements in the null adapter because diff --git a/lib/odbc_adapter/database_statements.rb b/lib/odbc_adapter/database_statements.rb index cac3168..1922dd1 100644 --- a/lib/odbc_adapter/database_statements.rb +++ b/lib/odbc_adapter/database_statements.rb @@ -10,7 +10,7 @@ module DatabaseStatements def execute(sql, name = nil, binds = []) log(sql, name) do if prepared_statements - @connection.do(sql, *prepared_binds(binds)) + @connection.do(prepare_statement_sub(sql), *prepared_binds(binds)) else @connection.do(sql) end @@ -24,7 +24,7 @@ def exec_query(sql, name = 'SQL', binds = [], prepare: false) # rubocop:disable log(sql, name) do stmt = if prepared_statements - @connection.run(sql, *prepared_binds(binds)) + @connection.do(prepare_statement_sub(sql), *prepared_binds(binds)) else @connection.run(sql) end @@ -127,8 +127,13 @@ def nullability(col_name, is_nullable, nullable) col_name == 'id' ? false : result end + # Adapt to Rails 5.2 + def prepare_statement_sub(sql) + sql.gsub(/\$\d+/, '?') + end + def prepared_binds(binds) - prepare_binds_for_database(binds).map { |bind| _type_cast(bind) } + binds.map(&:value_for_database).map { |bind| _type_cast(bind) } end end end diff --git a/lib/odbc_adapter/version.rb b/lib/odbc_adapter/version.rb index 4a65ac6..598c96e 100644 --- a/lib/odbc_adapter/version.rb +++ b/lib/odbc_adapter/version.rb @@ -1,3 +1,3 @@ module ODBCAdapter - VERSION = '5.0.5'.freeze + VERSION = '5.0.6'.freeze end diff --git a/odbc_adapter.gemspec b/odbc_adapter.gemspec index 7e3fbd4..d108cb7 100644 --- a/odbc_adapter.gemspec +++ b/odbc_adapter.gemspec @@ -19,13 +19,13 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] - spec.add_dependency 'activerecord', '>= 5.0' + spec.add_dependency 'activerecord', '>= 5.2.1' spec.add_dependency 'ruby-odbc', '~> 0.9' - spec.add_development_dependency 'bundler', '>= 1.14' - spec.add_development_dependency 'minitest', '>= 5.10' - spec.add_development_dependency 'rake', '>= 12.0' - spec.add_development_dependency 'rubocop', '<= 0.58' - spec.add_development_dependency 'simplecov', '>= 0.14' - spec.add_development_dependency 'pry', '~> 0.13.1' + spec.add_development_dependency 'bundler', '~> 1.14' + spec.add_development_dependency 'minitest', '~> 5.10' + spec.add_development_dependency 'rake', '~> 12.0' + spec.add_development_dependency 'rubocop', '0.48.1' + spec.add_development_dependency 'simplecov', '~> 0.14' + spec.add_development_dependency 'pry', '~> 0.11.1' end