Module: ArJdbc::DB2::Column

Defined in:
lib/arjdbc/db2/adapter.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cast_to_date_or_time(value) ⇒ Object



63
64
65
66
67
# File 'lib/arjdbc/db2/adapter.rb', line 63

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



69
70
71
72
73
74
75
76
77
# File 'lib/arjdbc/db2/adapter.rb', line 69

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 = DateTime.parse(value).to_time rescue nil
  return nil unless time
  time_array = [time.year, time.month, time.day, time.hour, time.min, time.sec]
  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



79
80
81
82
# File 'lib/arjdbc/db2/adapter.rb', line 79

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



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/arjdbc/db2/adapter.rb', line 35

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



52
53
54
55
56
57
58
59
60
61
# File 'lib/arjdbc/db2/adapter.rb', line 52

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