diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f6ecf8e1..2f88eece8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#890](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/890) Fix removal of invalid ordering from select statements - [#881](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/881) Dump column collation to schema.rb and allow collation changes using column_change - [#892](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/892) Add support for if_exists on remove_column +- [#883](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/885) Fix quoting of ActiveRecord::Relation::QueryAttribute and ActiveModel::Attributes #### Changed diff --git a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb index bad3d8f12..752350e4c 100644 --- a/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +++ b/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb @@ -27,7 +27,12 @@ def unprepare_sqlserver_statement(sql, binds) executesql = executesql.match(SQLSERVER_STATEMENT_REGEXP).to_a[1] binds.each_with_index do |bind, index| - value = connection.quote(bind) + + value = if bind.is_a?(::ActiveModel::Attribute) then + connection.quote(bind.value_for_database) + else + connection.quote(bind) + end executesql = executesql.sub("@#{index}", value) end diff --git a/lib/arel/visitors/sqlserver.rb b/lib/arel/visitors/sqlserver.rb index 1d377110f..f0dea89a0 100644 --- a/lib/arel/visitors/sqlserver.rb +++ b/lib/arel/visitors/sqlserver.rb @@ -79,7 +79,7 @@ def visit_Arel_Nodes_HomogeneousIn(o, collector) if values.empty? collector << @connection.quote(nil) - else + elsif @connection.prepared_statements # Monkey-patch start. Add query attribute bindings rather than just values. column_name = o.column_name column_type = o.attribute.relation.type_for_attribute(o.column_name) @@ -87,6 +87,8 @@ def visit_Arel_Nodes_HomogeneousIn(o, collector) collector.add_binds(attrs, &bind_block) # Monkey-patch end. + else + collector.add_binds(values, &bind_block) end collector << ")"