Skip to content

Commit 5bc019e

Browse files
committed
Fixed bugs exposed by core ActiveRecord tests.
√ 22 - RuntimeError: unsupported: String lib/arel/visitors/to_sql.rb:729:in `unsupported'
1 parent dfb8458 commit 5bc019e

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* Use `ARTest` namespace with `SQLServer` module for our helpers/objects.
1717
* Simple 2012 schmea addition and extensive column/type_cast object tests.
1818
* Follow Rails convention and remove varying character default limits.
19+
* The `cs_equality_operator` is now s class configuration property only.
1920

2021
#### Deprecated
2122

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ def empty_insert_statement_value
7575
end
7676

7777
def case_sensitive_modifier(node, table_attribute)
78-
node.acts_like?(:string) ? Arel::Nodes::Bin.new(node) : node
78+
node = Arel::Nodes.build_quoted node, table_attribute
79+
Arel::Nodes::Bin.new(node)
7980
end
8081

8182
# === SQLServer Specific ======================================== #

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ class SQLServerAdapter < AbstractAdapter
3838
attr_reader :spid
3939

4040
cattr_accessor :auto_connect, :auto_connect_duration, instance_accessor: false
41-
cattr_accessor :cs_equality_operator, :lowercase_schema_reflection, :showplan_option
41+
cattr_accessor :cs_equality_operator, instance_accessor: false
42+
cattr_accessor :lowercase_schema_reflection, :showplan_option
43+
44+
self.cs_equality_operator = 'COLLATE Latin1_General_CS_AS_WS'
4245

4346
def initialize(connection, logger, pool, config)
4447
super(connection, logger, pool)
@@ -181,9 +184,6 @@ def auto_connect_duration
181184
self.class.auto_connect_duration ||= 10
182185
end
183186

184-
def cs_equality_operator
185-
@@cs_equality_operator || 'COLLATE Latin1_General_CS_AS_WS'
186-
end
187187

188188
protected
189189

lib/arel/visitors/sqlserver.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ def visit_Arel_Nodes_BindParam o, collector
1616
collector.add_bind(o) { |i| "@#{i-1}" }
1717
end
1818

19+
def visit_Arel_Nodes_Bin o, collector
20+
visit o.expr, collector
21+
collector << ActiveRecord::ConnectionAdapters::SQLServerAdapter.cs_equality_operator
22+
collector << SPACE
23+
end
24+
1925
def visit_Arel_Nodes_Lock o, collector
2026
o.expr = Arel.sql('WITH (UPDLOCK)') if o.expr.to_s =~ /FOR UPDATE/
2127
collector << SPACE

0 commit comments

Comments
 (0)