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

Reply via email to