Skip to content

Commit 2cae088

Browse files
committed
[Rails3] Sync abstract adapter directory structure - Quoting
1 parent 2f14a8e commit 2cae088

File tree

3 files changed

+61
-52
lines changed

3 files changed

+61
-52
lines changed

activerecord-sqlserver-adapter.gemspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ Gem::Specification.new do |s|
2222
"lib/active_record/connection_adapters/sqlserver_adapter.rb",
2323
"lib/active_record/connection_adapters/sqlserver_adapter/core_ext/active_record.rb",
2424
"lib/active_record/connection_adapters/sqlserver_adapter/core_ext/odbc.rb",
25-
"lib/active_record/connection_adapters/sqlserver_adapter/database_limits.rb" ]
25+
"lib/active_record/connection_adapters/sqlserver_adapter/database_limits.rb",
26+
"lib/active_record/connection_adapters/sqlserver_adapter/quoting.rb" ]
2627
s.test_files = [
2728
"test/cases/aaaa_create_tables_test_sqlserver.rb",
2829
"test/cases/adapter_test_sqlserver.rb",

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 2 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require 'active_record/connection_adapters/abstract_adapter'
33
require 'active_record/connection_adapters/sqlserver_adapter/core_ext/active_record'
44
require 'active_record/connection_adapters/sqlserver_adapter/database_limits'
5+
require 'active_record/connection_adapters/sqlserver_adapter/quoting'
56
require 'active_support/core_ext/kernel/requires'
67
require 'base64'
78

@@ -162,6 +163,7 @@ def simplified_datetime
162163

163164
class SQLServerAdapter < AbstractAdapter
164165

166+
include SqlserverAdapter::Quoting
165167
include SqlserverAdapter::DatabaseLimits
166168

167169
ADAPTER_NAME = 'SQLServer'.freeze
@@ -283,57 +285,6 @@ def native_binary_database_type
283285
@@native_binary_database_type || ((sqlserver_2005? || sqlserver_2008?) ? 'varbinary(max)' : 'image')
284286
end
285287

286-
287-
# QUOTING ==================================================#
288-
289-
def quote(value, column = nil)
290-
case value
291-
when String, ActiveSupport::Multibyte::Chars
292-
if column && column.type == :binary
293-
column.class.string_to_binary(value)
294-
elsif column && column.respond_to?(:is_utf8?) && column.is_utf8?
295-
quoted_utf8_value(value)
296-
else
297-
super
298-
end
299-
else
300-
super
301-
end
302-
end
303-
304-
def quote_string(string)
305-
string.to_s.gsub(/\'/, "''")
306-
end
307-
308-
def quote_column_name(column_name)
309-
column_name.to_s.split('.').map{ |name| name =~ /^\[.*\]$/ ? name : "[#{name}]" }.join('.')
310-
end
311-
312-
def quote_table_name(table_name)
313-
return table_name if table_name =~ /^\[.*\]$/
314-
quote_column_name(table_name)
315-
end
316-
317-
def quoted_true
318-
'1'
319-
end
320-
321-
def quoted_false
322-
'0'
323-
end
324-
325-
def quoted_date(value)
326-
if value.acts_like?(:time) && value.respond_to?(:usec)
327-
"#{super}.#{sprintf("%03d",value.usec/1000)}"
328-
else
329-
super
330-
end
331-
end
332-
333-
def quoted_utf8_value(value)
334-
"N'#{quote_string(value)}'"
335-
end
336-
337288
# REFERENTIAL INTEGRITY ====================================#
338289

339290
def disable_referential_integrity
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
module ActiveRecord
2+
module ConnectionAdapters
3+
module SqlserverAdapter
4+
module Quoting
5+
6+
def quote(value, column = nil)
7+
case value
8+
when String, ActiveSupport::Multibyte::Chars
9+
if column && column.type == :binary
10+
column.class.string_to_binary(value)
11+
elsif column && column.respond_to?(:is_utf8?) && column.is_utf8?
12+
quoted_utf8_value(value)
13+
else
14+
super
15+
end
16+
else
17+
super
18+
end
19+
end
20+
21+
def quote_string(string)
22+
string.to_s.gsub(/\'/, "''")
23+
end
24+
25+
def quote_column_name(column_name)
26+
column_name.to_s.split('.').map{ |name| name =~ /^\[.*\]$/ ? name : "[#{name}]" }.join('.')
27+
end
28+
29+
def quote_table_name(table_name)
30+
return table_name if table_name =~ /^\[.*\]$/
31+
quote_column_name(table_name)
32+
end
33+
34+
def quoted_true
35+
'1'
36+
end
37+
38+
def quoted_false
39+
'0'
40+
end
41+
42+
def quoted_date(value)
43+
if value.acts_like?(:time) && value.respond_to?(:usec)
44+
"#{super}.#{sprintf("%03d",value.usec/1000)}"
45+
else
46+
super
47+
end
48+
end
49+
50+
def quoted_utf8_value(value)
51+
"N'#{quote_string(value)}'"
52+
end
53+
54+
end
55+
end
56+
end
57+
end

0 commit comments

Comments
 (0)