Class: ActiveRecord::ConnectionAdapters::SQLServerColumn
- Inherits:
-
Column
- Object
- Column
- ActiveRecord::ConnectionAdapters::SQLServerColumn
- Defined in:
- lib/active_record/connection_adapters/sqlserver_adapter.rb
Class Method Summary collapse
- .binary_to_string(value) ⇒ Object
- .string_to_binary(value) ⇒ Object
- .string_to_utf8_encoding(value) ⇒ Object
Instance Method Summary collapse
-
#initialize(name, default, sql_type = nil, null = true, sqlserver_options = {}) ⇒ SQLServerColumn
constructor
A new instance of SQLServerColumn.
- #is_identity? ⇒ Boolean
- #is_special? ⇒ Boolean
- #is_utf8? ⇒ Boolean
- #table_klass ⇒ Object
- #table_name ⇒ Object
- #type_cast(value) ⇒ Object
- #type_cast_code(var_name) ⇒ Object
Constructor Details
#initialize(name, default, sql_type = nil, null = true, sqlserver_options = {}) ⇒ SQLServerColumn
45 46 47 48 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 45 def initialize(name, default, sql_type = nil, null = true, = {}) @sqlserver_options = super(name, default, sql_type, null) end |
Class Method Details
.binary_to_string(value) ⇒ Object
60 61 62 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 60 def binary_to_string(value) value =~ /[^[:xdigit:]]/ ? value : [value].pack('H*') end |
.string_to_binary(value) ⇒ Object
56 57 58 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 56 def string_to_binary(value) "0x#{value.unpack("H*")[0]}" end |
.string_to_utf8_encoding(value) ⇒ Object
52 53 54 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 52 def string_to_utf8_encoding(value) value.force_encoding('UTF-8') rescue value end |
Instance Method Details
#is_identity? ⇒ Boolean
82 83 84 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 82 def is_identity? @sqlserver_options[:is_identity] end |
#is_special? ⇒ Boolean
86 87 88 89 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 86 def is_special? # TODO: Not sure if these should be added: varbinary(max), nchar, nvarchar(max) sql_type =~ /^text|ntext|image$/ end |
#is_utf8? ⇒ Boolean
91 92 93 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 91 def is_utf8? sql_type =~ /nvarchar|ntext|nchar/i end |
#table_klass ⇒ Object
99 100 101 102 103 104 105 106 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 99 def table_klass @table_klass ||= begin table_name.classify.constantize rescue StandardError, NameError, LoadError nil end (@table_klass && @table_klass < ActiveRecord::Base) ? @table_klass : nil end |
#table_name ⇒ Object
95 96 97 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 95 def table_name @sqlserver_options[:table_name] end |
#type_cast(value) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 66 def type_cast(value) if value && type == :string && is_utf8? self.class.string_to_utf8_encoding(value) else super end end |
#type_cast_code(var_name) ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 74 def type_cast_code(var_name) if type == :string && is_utf8? "#{self.class.name}.string_to_utf8_encoding(#{var_name})" else super end end |