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