Title: [689] trunk/activerecord-jdbc: Several Oracle fixes from Ye Zheng
- Revision
- 689
- Author
- olabini
- Date
- 2007-08-17 12:37:31 -0400 (Fri, 17 Aug 2007)
Log Message
Several Oracle fixes from Ye Zheng
Modified Paths
Diff
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb (688 => 689)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-08-16 09:42:36 UTC (rev 688)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-08-17 16:37:31 UTC (rev 689)
@@ -45,39 +45,46 @@
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 cast_to_date_or_time(value)
- when :time then cast_to_time(value)
+ when :datetime then JdbcSpec::Oracle::Column.cast_to_date_or_time(value)
+ when :time then JdbcSpec::Oracle::Column.cast_to_time(value)
when :decimal then self.class.value_to_decimal(value)
when :boolean then self.class.value_to_boolean(value)
else value
end
end
+ def type_cast_code(var_name)
+ return "JdbcSpec::Oracle::Column.cast_to_date_or_time(#{var_name})" if type == :datetime
+ super
+ end
+
private
- def simplified_type(field_type)
+ def simplified_type(field_type)
case field_type
when /char/i : :string
- when /num|float|double|dec|real|int/i : @scale == 0 ? :integer : :float
+ when /float|double/i : :float
+ when /int/i : :integer
+ when /num|dec|real/i : @scale == 0 ? :integer : :decimal
when /date|time/i : :datetime
when /clob/i : :text
when /blob/i : :binary
end
end
- def cast_to_date_or_time(value)
+ 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)
+ guess_date_or_time((value.is_a? Time) ? value : cast_to_time(value))
end
- def cast_to_time(value)
+ def self.cast_to_time(value)
return value if value.is_a? Time
time_array = ParseDate.parsedate value
time_array[0] ||= 2000; time_array[1] ||= 1; time_array[2] ||= 1;
Time.send(ActiveRecord::Base.default_timezone, *time_array) rescue nil
end
- def guess_date_or_time(value)
+ 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
@@ -121,7 +128,7 @@
end
def indexes(table, name = nil)
- @connection.indexesr(table, name, @connection.connection.meta_data.user_name)
+ @connection.indexes(table, name, @connection.connection.meta_data.user_name)
end
def _execute(sql, name = nil)
@@ -249,7 +256,7 @@
return value.to_s
end
case value
- when String : %Q{'#{quote_string(value)}'}
+ when String, ActiveSupport::Multibyte::Chars : %Q{'#{quote_string(value)}'}
when NilClass : 'null'
when TrueClass : '1'
when FalseClass : '0'
@@ -259,5 +266,16 @@
end
end
end
+
+ private
+
+ def select(sql, name = nil)
+ records = execute(sql, name)
+ records.map do |col|
+ col.delete('raw_rnum_')
+ col
+ end
+ records
+ end
end
end
Modified: trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java (688 => 689)
--- trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java 2007-08-16 09:42:36 UTC (rev 688)
+++ trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java 2007-08-17 16:37:31 UTC (rev 689)
@@ -39,6 +39,7 @@
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
+import java.sql.Timestamp;
import java.sql.Types;
import java.text.DateFormat;
@@ -603,6 +604,12 @@
}
rss.close();
return RubyString.newUnicodeString(runtime, str2.toString());
+ case Types.TIMESTAMP:
+ Timestamp time = rs.getTimestamp(row);
+ if (time == null || rs.wasNull()) {
+ return runtime.getNil();
+ }
+ return RubyString.newUnicodeString(runtime, time.toString());
default:
String vs = rs.getString(row);
if(vs == null || rs.wasNull()) {
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel