Module: ArJdbc::DB2::Column
- Defined in:
- lib/arjdbc/db2/adapter.rb
Class Method Summary collapse
- .cast_to_date_or_time(value) ⇒ Object
- .cast_to_time(value) ⇒ Object
- .guess_date_or_time(value) ⇒ Object
Instance Method Summary collapse
Class Method Details
.cast_to_date_or_time(value) ⇒ Object
41 42 43 44 45 |
# File 'lib/arjdbc/db2/adapter.rb', line 41 def self.cast_to_date_or_time(value) return value if value.is_a? Date return nil if value.blank? guess_date_or_time((value.is_a? Time) ? value : cast_to_time(value)) end |
.cast_to_time(value) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/arjdbc/db2/adapter.rb', line 47 def self.cast_to_time(value) return value if value.is_a? Time # AS400 returns a 2 digit year, LUW returns a 4 digit year, so comp = true to help out AS400 time_array = ParseDate.parsedate(value, true) time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1; Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil end |
.guess_date_or_time(value) ⇒ Object
55 56 57 58 |
# File 'lib/arjdbc/db2/adapter.rb', line 55 def self.guess_date_or_time(value) (value.hour == 0 and value.min == 0 and value.sec == 0) ? Date.new(value.year, value.month, value.day) : value end |
Instance Method Details
#type_cast(value) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/arjdbc/db2/adapter.rb', line 13 def type_cast(value) return nil if value.nil? || value =~ /^\s*null\s*$/i case type when :string then value when :integer then defined?(value.to_i) ? value.to_i : (value ? 1 : 0) when :primary_key then defined?(value.to_i) ? value.to_i : (value ? 1 : 0) when :float then value.to_f when :datetime then ArJdbc::DB2::Column.cast_to_date_or_time(value) when :date then ArJdbc::DB2::Column.cast_to_date_or_time(value) when :timestamp then ArJdbc::DB2::Column.cast_to_time(value) when :time then ArJdbc::DB2::Column.cast_to_time(value) # TODO AS400 stores binary strings in EBCDIC (CCSID 65535), need to convert back to ASCII else super end end |
#type_cast_code(var_name) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/arjdbc/db2/adapter.rb', line 30 def type_cast_code(var_name) case type when :datetime then "ArJdbc::DB2::Column.cast_to_date_or_time(#{var_name})" when :date then "ArJdbc::DB2::Column.cast_to_date_or_time(#{var_name})" when :timestamp then "ArJdbc::DB2::Column.cast_to_time(#{var_name})" when :time then "ArJdbc::DB2::Column.cast_to_time(#{var_name})" else super end end |