Title: [506] trunk/activerecord-jdbc: Derby is stupid and handles default values VERY stupidly...
Revision
506
Author
olabini
Date
2007-04-26 07:21:31 -0400 (Thu, 26 Apr 2007)

Log Message

Derby is stupid and handles default values VERY stupidly... gah

Modified Paths


Diff

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb (505 => 506)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb	2007-04-26 09:42:15 UTC (rev 505)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb	2007-04-26 11:21:31 UTC (rev 506)
@@ -145,8 +145,17 @@
       end
     end
 
+    # There seems to be more than one thing wrong with 
+    # changing defaults for VARCHAR columns right now... DERBY-2371
+    # among others
     def change_column_default(table_name, column_name, default) #:nodoc:
-      execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} SET DEFAULT #{quote(default)}"
+      begin
+        execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} DEFAULT #{quote(default)}"
+      rescue
+        alter_table(table_name) do |definition|
+          definition[column_name].default = default
+        end
+      end        
     end
 
     # Support for renaming columns:

Modified: trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java (505 => 506)


--- trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-04-26 09:42:15 UTC (rev 505)
+++ trunk/activerecord-jdbc/src/java/JdbcAdapterInternalService.java	2007-04-26 11:21:31 UTC (rev 506)
@@ -235,6 +235,7 @@
 
     private static IRubyObject unmarshal_columns(IRubyObject recv, DatabaseMetaData metadata, ResultSet rs) throws SQLException, IOException {
         List columns = new ArrayList();
+        boolean isDerby = metadata.getClass().getName().indexOf("derby") != -1;
         Ruby runtime = recv.getRuntime();
         ThreadContext ctx = runtime.getCurrentContext();
 
@@ -271,6 +272,9 @@
             if(def == null) {
                 _def = runtime.getNil();
             } else {
+                if(isDerby && def.length() > 0 && def.charAt(0) == '\'') {
+                    def = def.substring(1, def.length()-1);
+                }
                 _def = runtime.newString(def);
             }
 
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to