Title: [670] trunk/activerecord-jdbc/lib: Fix for JRUBY-1225, make Oracle JDBC URLs work better.

Diff

Modified: trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -35,58 +35,26 @@
   end
 end
 
-module ActiveRecord
-  class Base
-    class << self
-      def jdbc_connection(config)
-        connection = ConnectionAdapters::JdbcConnection.new(config)
-        ConnectionAdapters::JdbcAdapter.new(connection, logger, config)
-      end
-      alias jndi_connection jdbc_connection
+module JdbcSpec
+  module ActiveRecordExtensions
+    def jdbc_connection(config)
+      connection = ::ActiveRecord::ConnectionAdapters::JdbcConnection.new(config)
+      ::ActiveRecord::ConnectionAdapters::JdbcAdapter.new(connection, logger, config)
+    end
+    alias jndi_connection jdbc_connection
 
-      def mysql_connection(config)
-        config[:url] ||= "jdbc:mysql://#{config[:host]}/#{config[:database]}"
-        config[:driver] = "com.mysql.jdbc.Driver"
-        jdbc_connection(config)
-      end
-
-      def postgresql_connection(config)
-        config[:url] ||= "jdbc:postgresql://#{config[:host]}/#{config[:database]}"
-        config[:driver] ||= "org.postgresql.Driver"
-        jdbc_connection(config)
-      end
-
-      def oracle_connection(config)
-        config[:url] ||= "jdbc:oracle:thin:@#{config[:host]}:#{config[:database]}"
-        config[:driver] ||= "oracle.jdbc.driver.OracleDriver"
-        jdbc_connection(config)
-      end
-      
-      def embedded_driver(config)
-        config[:username] ||= "sa"
-        config[:password] ||= ""
-        jdbc_connection(config)
-      end
-
-      def derby_connection(config)
-        config[:url] ||= "jdbc:derby:#{config[:database]};create=true"
-        config[:driver] ||= "org.apache.derby.jdbc.EmbeddedDriver"
-        embedded_driver(config)
-      end
-      
-      def hsqldb_connection(config)
-        config[:url] ||= "jdbc:hsqldb:#{config[:database]}"
-        config[:driver] ||= "org.hsqldb.jdbcDriver"
-        embedded_driver(config)
-      end
-      
-      def h2_connection(config)
-        config[:url] ||= "jdbc:h2:#{config[:database]}"
-        config[:driver] ||= "org.h2.Driver"
-        embedded_driver(config)
-      end
+    def embedded_driver(config)
+      config[:username] ||= "sa"
+      config[:password] ||= ""
+      jdbc_connection(config)
     end
+  end
+end
 
+module ActiveRecord
+  class Base
+    extend JdbcSpec::ActiveRecordExtensions
+
     alias :attributes_with_quotes_pre_oracle :attributes_with_quotes
     def attributes_with_quotes(include_primary_key = true) #:nodoc:
       aq = attributes_with_quotes_pre_oracle(include_primary_key)
@@ -238,21 +206,12 @@
     class JdbcColumn < Column
       attr_writer :limit, :precision
         
-      COLUMN_TYPES = {
-        /oracle/i => lambda {|cfg,col| col.extend(::JdbcSpec::Oracle::Column)},
-        /mysql/i => lambda {|cfg,col| col.extend(::JdbcSpec::MySQL::Column)},
-        /postgre/i => lambda {|cfg,col| col.extend(::JdbcSpec::PostgreSQL::Column)},
-        /sqlserver|tds/i => lambda {|cfg,col| col.extend(::JdbcSpec::MsSQL::Column)},
-        /hsqldb|\.h2\./i => lambda {|cfg,col| col.extend(::JdbcSpec::HSQLDB::Column)},
-        /derby/i => lambda {|cfg,col| col.extend(::JdbcSpec::Derby::Column)},
-        /db2/i => lambda {|cfg,col|
-          if cfg[:url] =~ /^jdbc:derby:net:/
-            col.extend(::JdbcSpec::Derby::Column)
-          else
-            col.extend(::JdbcSpec::DB2::Column)
-          end }
-      }
-
+      COLUMN_TYPES = ::JdbcSpec.constants.map{|c| 
+        ::JdbcSpec.const_get c }.select{ |c| 
+        c.respond_to? :column_selector }.map{|c| 
+        c.column_selector }.inject({}) { |h,val| 
+        h[val[0]] = val[1]; h }
+        
       def initialize(config, name, default, *args)
         ds = config[:driver].to_s
         for reg, func in COLUMN_TYPES
@@ -390,24 +349,12 @@
     class JdbcAdapter < AbstractAdapter
       attr_reader :config
 
-      ADAPTER_TYPES = {
-        /oracle/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::Oracle)},
-        /mimer/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::Mimer)},
-        /postgre/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::PostgreSQL)},
-        /mysql/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::MySQL)},
-        /sqlserver|tds/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::MsSQL)},
-        /hsqldb|\.h2\./i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::HSQLDB)},
-        /derby/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::Derby)},
-        /db2/i => lambda{|cfg,adapt|
-          if cfg[:url] =~ /^jdbc:derby:net:/
-            adapt.extend(::JdbcSpec::Derby)
-          else
-            adapt.extend(::JdbcSpec::DB2)
-          end},
-        /firebird/i => lambda{|cfg,adapt| adapt.extend(::JdbcSpec::FireBird)}
+      ADAPTER_TYPES = ::JdbcSpec.constants.map{|c| 
+        ::JdbcSpec.const_get c }.select{ |c|
+        c.respond_to? :adapter_selector }.map{|c| 
+        c.adapter_selector }.inject({}) { |h,val| 
+        h[val[0]] = val[1]; h }
 
-      }
-
       def initialize(connection, logger, config)
         super(connection, logger)
         @config = config

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_db2.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_db2.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_db2.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,23 @@
 module JdbcSpec
   module DB2
+    def self.column_selector
+      [/db2/i, lambda {|cfg,col|
+         if cfg[:url] =~ /^jdbc:derby:net:/
+           col.extend(::JdbcSpec::Derby::Column)
+         else
+           col.extend(::JdbcSpec::DB2::Column)
+         end }]
+    end
+
+    def self.adapter_selector
+      [/db2/i, lambda {|cfg,adapt|
+         if cfg[:url] =~ /^jdbc:derby:net:/
+           adapt.extend(::JdbcSpec::Derby)
+         else
+           adapt.extend(::JdbcSpec::DB2)
+         end }]
+    end
+    
     module Column
       def type_cast(value)
         return nil if value.nil? || value =~ /^\s*null\s*$/i

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


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_derby.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,7 +1,23 @@
 require 'jdbc_adapter/missing_functionality_helper'
 
-module JdbcSpec
+module ::JdbcSpec
+  module ActiveRecordExtensions
+    def derby_connection(config)
+      config[:url] ||= "jdbc:derby:#{config[:database]};create=true"
+      config[:driver] ||= "org.apache.derby.jdbc.EmbeddedDriver"
+      embedded_driver(config)
+    end
+  end 
+
   module Derby
+    def self.column_selector
+      [/derby/i, lambda {|cfg,col| col.extend(::JdbcSpec::Derby::Column)}]
+    end
+
+    def self.adapter_selector
+      [/derby/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::Derby)}]
+    end
+      
     def self.monkey_rails
       unless @already_monkeyd
         # Needed because Rails is broken wrt to quoting of 

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_firebird.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_firebird.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_firebird.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,9 @@
-module JdbcSpec
+module ::JdbcSpec
   module FireBird
+    def self.adapter_selector
+      [/firebird/i, lambda{|cfg,adapt| adapt.extend(::JdbcSpec::FireBird)}]
+    end
+
     def modify_types(tp)
       tp[:primary_key] = 'INTEGER NOT NULL PRIMARY KEY'
       tp[:string][:limit] = 252

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_hsqldb.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,27 @@
-module JdbcSpec
+module ::JdbcSpec
+  module ActiveRecordExtensions
+    def hsqldb_connection(config)
+      config[:url] ||= "jdbc:hsqldb:#{config[:database]}"
+      config[:driver] ||= "org.hsqldb.jdbcDriver"
+      embedded_driver(config)
+    end
+      
+    def h2_connection(config)
+      config[:url] ||= "jdbc:h2:#{config[:database]}"
+      config[:driver] ||= "org.h2.Driver"
+      embedded_driver(config)
+    end
+  end
+  
   module HSQLDB
+    def self.column_selector
+      [/hsqldb|\.h2\./i, lambda {|cfg,col| col.extend(::JdbcSpec::HSQLDB::Column)}]
+    end
+
+    def self.adapter_selector
+      [/hsqldb|\.h2\./i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::HSQLDB)}]
+    end
+    
     module Column
       def type_cast(value)
         return nil if value.nil? || value =~ /^\s*null\s*$/i

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mimer.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mimer.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mimer.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,9 @@
 module JdbcSpec
   module Mimer
+    def self.adapter_selector
+      [/mimer/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::Mimer)}]
+    end
+
     def modify_types(tp)
       tp[:primary_key] = "INTEGER NOT NULL PRIMARY KEY"
       tp[:boolean][:limit] = nil

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mssql.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mssql.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mssql.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,13 @@
 module JdbcSpec
   module MsSQL
+    def self.column_selector
+      [/sqlserver|tds/i, lambda {|cfg,col| col.extend(::JdbcSpec::MsSQL::Column)}]
+    end
+
+    def self.adapter_selector
+      [/sqlserver|tds/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::MsSQL)}]
+    end
+    
     module Column
       attr_accessor :identity, :is_special
       

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_mysql.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,7 +1,27 @@
 require 'active_record/connection_adapters/abstract/schema_definitions'
 
 module ::JdbcSpec
+  module ActiveRecordExtensions
+    def mysql_connection(config)
+      if config[:socket]
+        warn "AR-JDBC MySQL on JRuby does not support sockets"
+      end
+      config[:port] ||= 3306
+      config[:url] ||= "jdbc:mysql://#{config[:host]}:#{config[:port]}/#{config[:database]}"
+      config[:driver] = "com.mysql.jdbc.Driver"
+      jdbc_connection(config)
+    end
+  end
+
   module MySQL
+    def self.column_selector
+      [/mysql/i, lambda {|cfg,col| col.extend(::JdbcSpec::MySQL::Column)}]
+    end
+
+    def self.adapter_selector
+      [/mysql/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::MySQL)}]
+    end
+    
     def self.extended(adapter)
       adapter.execute("SET SQL_AUTO_IS_NULL=0")
     end

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,22 @@
-module JdbcSpec
+module ::JdbcSpec
+  module ActiveRecordExtensions
+    def oracle_connection(config)
+      config[:port] ||= 1521
+      config[:url] ||= "jdbc:oracle:thin://#{config[:host]}:#{config[:port]}:#{config[:database]}"
+      config[:driver] ||= "oracle.jdbc.driver.OracleDriver"
+      jdbc_connection(config)
+    end
+  end
+  
   module Oracle
+    def self.column_selector
+      [/oracle/i, lambda {|cfg,col| col.extend(::JdbcSpec::Oracle::Column)}]
+    end
+
+    def self.adapter_selector
+      [/oracle/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::Oracle)}]
+    end
+    
     module Column
       def type_cast(value)
         return nil if value.nil? || value =~ /^\s*null\s*$/i

Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb (669 => 670)


--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb	2007-07-20 11:47:11 UTC (rev 669)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_postgre.rb	2007-07-20 12:29:43 UTC (rev 670)
@@ -1,5 +1,22 @@
-module JdbcSpec
+module ::JdbcSpec
+  module ActiveRecordExtensions
+    def postgresql_connection(config)
+      config[:port] ||= 5432
+      config[:url] ||= "jdbc:postgresql://#{config[:host]}:#{config[:port]}/#{config[:database]}"
+      config[:driver] ||= "org.postgresql.Driver"
+      jdbc_connection(config)
+    end
+  end
+
   module PostgreSQL
+    def self.column_selector
+      [/postgre/i, lambda {|cfg,col| col.extend(::JdbcSpec::PostgreSQL::Column)}]
+    end
+
+    def self.adapter_selector
+      [/postgre/i, lambda {|cfg,adapt| adapt.extend(::JdbcSpec::PostgreSQL)}]
+    end
+    
     module Column
       def type_cast(value)
         case type
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel

Reply via email to