kb-activerecord-jdbc-adapter 0.9.7.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. data/History.txt +296 -0
  2. data/LICENSE.txt +21 -0
  3. data/Manifest.txt +139 -0
  4. data/README.txt +219 -0
  5. data/Rakefile +10 -0
  6. data/lib/active_record/connection_adapters/cachedb_adapter.rb +1 -0
  7. data/lib/active_record/connection_adapters/derby_adapter.rb +13 -0
  8. data/lib/active_record/connection_adapters/h2_adapter.rb +13 -0
  9. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +13 -0
  10. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  11. data/lib/active_record/connection_adapters/jdbc_adapter.rb +661 -0
  12. data/lib/active_record/connection_adapters/jdbc_adapter_spec.rb +26 -0
  13. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  14. data/lib/active_record/connection_adapters/mssql_adapter.rb +13 -0
  15. data/lib/active_record/connection_adapters/mysql_adapter.rb +13 -0
  16. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  17. data/lib/active_record/connection_adapters/postgresql_adapter.rb +13 -0
  18. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +13 -0
  19. data/lib/activerecord-jdbc-adapter.rb +6 -0
  20. data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
  21. data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
  22. data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
  23. data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +6 -0
  24. data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
  25. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  26. data/lib/jdbc_adapter.rb +27 -0
  27. data/lib/jdbc_adapter/jdbc.rake +122 -0
  28. data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
  29. data/lib/jdbc_adapter/jdbc_cachedb.rb +33 -0
  30. data/lib/jdbc_adapter/jdbc_db2.rb +222 -0
  31. data/lib/jdbc_adapter/jdbc_derby.rb +426 -0
  32. data/lib/jdbc_adapter/jdbc_firebird.rb +109 -0
  33. data/lib/jdbc_adapter/jdbc_hsqldb.rb +221 -0
  34. data/lib/jdbc_adapter/jdbc_informix.rb +147 -0
  35. data/lib/jdbc_adapter/jdbc_mimer.rb +145 -0
  36. data/lib/jdbc_adapter/jdbc_mssql.rb +468 -0
  37. data/lib/jdbc_adapter/jdbc_mysql.rb +260 -0
  38. data/lib/jdbc_adapter/jdbc_oracle.rb +397 -0
  39. data/lib/jdbc_adapter/jdbc_postgre.rb +531 -0
  40. data/lib/jdbc_adapter/jdbc_sqlite3.rb +386 -0
  41. data/lib/jdbc_adapter/jdbc_sybase.rb +50 -0
  42. data/lib/jdbc_adapter/missing_functionality_helper.rb +87 -0
  43. data/lib/jdbc_adapter/railtie.rb +9 -0
  44. data/lib/jdbc_adapter/rake_tasks.rb +10 -0
  45. data/lib/jdbc_adapter/tsql_helper.rb +69 -0
  46. data/lib/jdbc_adapter/version.rb +5 -0
  47. data/lib/pg.rb +4 -0
  48. data/rails_generators/jdbc_generator.rb +15 -0
  49. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  50. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  51. data/rakelib/compile.rake +23 -0
  52. data/rakelib/package.rake +91 -0
  53. data/rakelib/rails.rake +41 -0
  54. data/rakelib/test.rake +78 -0
  55. data/src/java/jdbc_adapter/JdbcAdapterInternalService.java +53 -0
  56. data/src/java/jdbc_adapter/JdbcConnectionFactory.java +36 -0
  57. data/src/java/jdbc_adapter/JdbcDerbySpec.java +293 -0
  58. data/src/java/jdbc_adapter/JdbcMySQLSpec.java +134 -0
  59. data/src/java/jdbc_adapter/MssqlRubyJdbcConnection.java +71 -0
  60. data/src/java/jdbc_adapter/PostgresRubyJdbcConnection.java +55 -0
  61. data/src/java/jdbc_adapter/RubyJdbcConnection.java +1176 -0
  62. data/src/java/jdbc_adapter/SQLBlock.java +27 -0
  63. data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +41 -0
  64. data/test/abstract_db_create.rb +107 -0
  65. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  66. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  67. data/test/cachedb_simple_test.rb +6 -0
  68. data/test/db/cachedb.rb +9 -0
  69. data/test/db/db2.rb +9 -0
  70. data/test/db/derby.rb +14 -0
  71. data/test/db/h2.rb +11 -0
  72. data/test/db/hsqldb.rb +12 -0
  73. data/test/db/informix.rb +11 -0
  74. data/test/db/jdbc.rb +11 -0
  75. data/test/db/jndi_config.rb +30 -0
  76. data/test/db/logger.rb +3 -0
  77. data/test/db/mssql.rb +9 -0
  78. data/test/db/mysql.rb +10 -0
  79. data/test/db/oracle.rb +34 -0
  80. data/test/db/postgres.rb +9 -0
  81. data/test/db/sqlite3.rb +15 -0
  82. data/test/db2_simple_test.rb +10 -0
  83. data/test/derby_migration_test.rb +21 -0
  84. data/test/derby_multibyte_test.rb +12 -0
  85. data/test/derby_simple_test.rb +21 -0
  86. data/test/generic_jdbc_connection_test.rb +9 -0
  87. data/test/h2_simple_test.rb +6 -0
  88. data/test/has_many_through.rb +79 -0
  89. data/test/helper.rb +5 -0
  90. data/test/hsqldb_simple_test.rb +6 -0
  91. data/test/informix_simple_test.rb +48 -0
  92. data/test/jdbc_adapter/jdbc_db2_test.rb +26 -0
  93. data/test/jdbc_adapter/jdbc_sybase_test.rb +33 -0
  94. data/test/jdbc_common.rb +25 -0
  95. data/test/jndi_callbacks_test.rb +38 -0
  96. data/test/jndi_test.rb +35 -0
  97. data/test/manualTestDatabase.rb +191 -0
  98. data/test/minirunit.rb +109 -0
  99. data/test/minirunit/testConnect.rb +14 -0
  100. data/test/minirunit/testH2.rb +73 -0
  101. data/test/minirunit/testHsqldb.rb +73 -0
  102. data/test/minirunit/testLoadActiveRecord.rb +3 -0
  103. data/test/minirunit/testMysql.rb +83 -0
  104. data/test/minirunit/testRawSelect.rb +24 -0
  105. data/test/models/add_not_null_column_to_table.rb +12 -0
  106. data/test/models/auto_id.rb +18 -0
  107. data/test/models/data_types.rb +28 -0
  108. data/test/models/entry.rb +23 -0
  109. data/test/models/mixed_case.rb +20 -0
  110. data/test/models/reserved_word.rb +18 -0
  111. data/test/models/string_id.rb +18 -0
  112. data/test/models/validates_uniqueness_of_string.rb +19 -0
  113. data/test/mssql_db_create_test.rb +26 -0
  114. data/test/mssql_identity_insert_test.rb +19 -0
  115. data/test/mssql_legacy_types_test.rb +58 -0
  116. data/test/mssql_limit_offset_test.rb +108 -0
  117. data/test/mssql_multibyte_test.rb +18 -0
  118. data/test/mssql_simple_test.rb +49 -0
  119. data/test/mysql_db_create_test.rb +25 -0
  120. data/test/mysql_info_test.rb +62 -0
  121. data/test/mysql_multibyte_test.rb +10 -0
  122. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  123. data/test/mysql_simple_test.rb +32 -0
  124. data/test/oracle_simple_test.rb +54 -0
  125. data/test/pick_rails_version.rb +3 -0
  126. data/test/postgres_db_create_test.rb +21 -0
  127. data/test/postgres_mixed_case_test.rb +19 -0
  128. data/test/postgres_nonseq_pkey_test.rb +40 -0
  129. data/test/postgres_reserved_test.rb +22 -0
  130. data/test/postgres_schema_search_path_test.rb +46 -0
  131. data/test/postgres_simple_test.rb +13 -0
  132. data/test/simple.rb +494 -0
  133. data/test/sqlite3_simple_test.rb +233 -0
  134. data/test/sybase_jtds_simple_test.rb +6 -0
  135. metadata +230 -0
@@ -0,0 +1,9 @@
1
+ require 'rails/railtie'
2
+
3
+ module ::JdbcSpec
4
+ class Railtie < ::Rails::Railtie
5
+ rake_tasks do
6
+ load File.expand_path('../rake_tasks.rb', __FILE__)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ if defined?(Rake.application) && Rake.application && ENV["SKIP_AR_JDBC_RAKE_REDEFINES"].nil?
2
+ jdbc_rakefile = File.dirname(__FILE__) + "/jdbc.rake"
3
+ if Rake.application.lookup("db:create")
4
+ # rails tasks already defined; load the override tasks now
5
+ load jdbc_rakefile
6
+ else
7
+ # rails tasks not loaded yet; load as an import
8
+ Rake.application.add_import(jdbc_rakefile)
9
+ end
10
+ end
@@ -0,0 +1,69 @@
1
+ # Common methods for handling TSQL databases.
2
+ module TSqlMethods
3
+
4
+ def modify_types(tp) #:nodoc:
5
+ tp[:primary_key] = "int NOT NULL IDENTITY(1, 1) PRIMARY KEY"
6
+ tp[:integer][:limit] = nil
7
+ tp[:boolean] = {:name => "bit"}
8
+ tp[:binary] = { :name => "image"}
9
+ tp
10
+ end
11
+
12
+ def type_to_sql(type, limit = nil, precision = nil, scale = nil) #:nodoc:
13
+ return super unless type.to_s == 'integer'
14
+
15
+ if limit.nil? || limit == 4
16
+ 'int'
17
+ elsif limit == 2
18
+ 'smallint'
19
+ elsif limit == 1
20
+ 'tinyint'
21
+ else
22
+ 'bigint'
23
+ end
24
+ end
25
+
26
+ def add_limit_offset!(sql, options)
27
+ if options[:limit] and options[:offset]
28
+ total_query = sql.gsub(/\bSELECT(\s+DISTINCT)?\b/i, "SELECT\\1 TOP 1000000000")
29
+ if options[:order] && sql =~ /DISTINCT/
30
+ # SELECT DISTINCT cannot have order by unless order by appears in select,
31
+ # You also cannot do a select distinct/order by in a subselect, so we need to
32
+ # just chop the order by to prevent an error generating TotalRows
33
+ total_query.gsub!(/ORDER BY #{options[:order]}/, '')
34
+ sql.gsub!(/\bSELECT\s+(.*)\s+FROM\b/i, "SELECT \\1,#{options[:order].split.first} FROM")
35
+ end
36
+ total_rows = select_all("SELECT count(*) as TotalRows from (#{total_query}) tally")[0]["TotalRows"].to_i
37
+ if (options[:limit] + options[:offset]) >= total_rows
38
+ options[:limit] = (total_rows - options[:offset] >= 0) ? (total_rows - options[:offset]) : 0
39
+ end
40
+ sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i, "SELECT * FROM (SELECT TOP #{options[:limit]} * FROM (SELECT\\1 TOP #{options[:limit] + options[:offset]} ")
41
+ sql << ") AS tmp1"
42
+ if options[:order]
43
+ options[:order] = options[:order].split(',').map do |field|
44
+ parts = field.split(" ")
45
+ if options[:order] && sql =~ /DISTINCT/
46
+ tc = parts[1]
47
+ else
48
+ tc = parts[0]
49
+ end
50
+ if sql =~ /\.\[/ and tc =~ /\./ # if column quoting used in query
51
+ tc.gsub!(/\./, '\\.\\[')
52
+ tc << '\\]'
53
+ end
54
+ if sql =~ /#{tc} AS (t\d_r\d\d?)/
55
+ parts[0] = $1
56
+ end
57
+ parts.join(' ')
58
+ end.join(', ')
59
+ sql << " ) AS tmp2"
60
+ else
61
+ sql << " ) AS tmp2"
62
+ end
63
+ elsif sql !~ /^\s*SELECT (@@|COUNT\()/i
64
+ sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i) do
65
+ "SELECT#{$1} TOP #{options[:limit]}"
66
+ end unless options[:limit].nil?
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,5 @@
1
+ module JdbcAdapter
2
+ module Version
3
+ VERSION = "0.9.7.1"
4
+ end
5
+ end
data/lib/pg.rb ADDED
@@ -0,0 +1,4 @@
1
+ # Stub library for postgresql -- allows Rails to load
2
+ # postgresql_adapter without error Other than postgres-pr, there's no
3
+ # other way to use PostgreSQL on JRuby anyway, right? If you've
4
+ # installed ar-jdbc you probably want to use that to connect to pg.
@@ -0,0 +1,15 @@
1
+ class JdbcGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.directory 'config/initializers'
5
+ m.template 'config/initializers/jdbc.rb', File.join('config', 'initializers', 'jdbc.rb')
6
+ m.directory 'lib/tasks'
7
+ m.template 'lib/tasks/jdbc.rake', File.join('lib', 'tasks', 'jdbc.rake')
8
+ end
9
+ end
10
+
11
+ protected
12
+ def banner
13
+ "Usage: #{$0} jdbc\nGenerate JDBC bootstrapping files for your Rails application."
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ # This file was generated by the "jdbc" generator, which is provided
2
+ # by the activerecord-jdbc-adapter gem.
3
+ #
4
+ # This file allows the JDBC drivers to be hooked into ActiveRecord
5
+ # such that you don't have to change anything else in your Rails
6
+ # application.
7
+ require 'jdbc_adapter' if defined?(JRUBY_VERSION)
@@ -0,0 +1,8 @@
1
+ # This file was generated by the "jdbc" generator, which is provided
2
+ # by the activerecord-jdbc-adapter gem.
3
+ #
4
+ # This file allows you to use Rails' various db:* tasks with JDBC.
5
+ if defined?(JRUBY_VERSION)
6
+ require 'jdbc_adapter'
7
+ require 'jdbc_adapter/rake_tasks'
8
+ end
@@ -0,0 +1,23 @@
1
+ def java_classpath_arg # myriad of ways to discover JRuby classpath
2
+ begin
3
+ cpath = Java::java.lang.System.getProperty('java.class.path').split(File::PATH_SEPARATOR)
4
+ cpath += Java::java.lang.System.getProperty('sun.boot.class.path').split(File::PATH_SEPARATOR)
5
+ jruby_cpath = cpath.compact.join(File::PATH_SEPARATOR)
6
+ rescue => e
7
+ end
8
+ unless jruby_cpath
9
+ jruby_cpath = ENV['JRUBY_PARENT_CLASSPATH'] || ENV['JRUBY_HOME'] &&
10
+ FileList["#{ENV['JRUBY_HOME']}/lib/*.jar"].join(File::PATH_SEPARATOR)
11
+ end
12
+ jruby_cpath ? "-cp \"#{jruby_cpath}\"" : ""
13
+ end
14
+
15
+ desc "Compile the native Java code."
16
+ task :java_compile do
17
+ pkg_classes = File.join(*%w(pkg classes))
18
+ jar_name = File.join(*%w(lib jdbc_adapter jdbc_adapter_internal.jar))
19
+ mkdir_p pkg_classes
20
+ sh "javac -target 1.5 -source 1.5 -d pkg/classes #{java_classpath_arg} #{FileList['src/java/**/*.java'].join(' ')}"
21
+ sh "jar cf #{jar_name} -C #{pkg_classes} ."
22
+ end
23
+ file "lib/jdbc_adapter/jdbc_adapter_internal.jar" => :java_compile
@@ -0,0 +1,91 @@
1
+ MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt",
2
+ "Rakefile", "LICENSE.txt", "lib/**/*.rb", "lib/jdbc_adapter/jdbc_adapter_internal.jar", "test/**/*.rb",
3
+ "lib/**/*.rake", "src/**/*.java", "rakelib/*.rake", "rails_generators/**/*"]
4
+
5
+ file "Manifest.txt" => :manifest
6
+ task :manifest do
7
+ File.open("Manifest.txt", "w") {|f| MANIFEST.each {|n| f << "#{n}\n"} }
8
+ end
9
+ Rake::Task['manifest'].invoke # Always regen manifest, so Hoe has up-to-date list of files
10
+
11
+ require File.dirname(__FILE__) + "/../lib/jdbc_adapter/version"
12
+ begin
13
+ require 'hoe'
14
+ Hoe.plugin :gemcutter
15
+ hoe = Hoe.spec("activerecord-jdbc-adapter") do |p|
16
+ p.name = %q{kb-activerecord-jdbc-adapter}
17
+ p.version = JdbcAdapter::Version::VERSION
18
+ p.spec_extras[:platform] = Gem::Platform.new("java")
19
+ p.spec_extras[:files] = MANIFEST
20
+ p.rubyforge_name = "jruby-extras"
21
+ p.url = "http://jruby-extras.rubyforge.org/activerecord-jdbc-adapter"
22
+ p.author = "Nick Sieger, Ola Bini and JRuby contributors"
23
+ p.email = "nick@nicksieger.com, ola.bini@gmail.com"
24
+ p.summary = "JDBC adapter for ActiveRecord, for use within JRuby on Rails."
25
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
26
+ p.description = p.paragraphs_of('README.txt', 0...1).join("\n\n")
27
+ end
28
+ task :gemspec do
29
+ File.open("#{hoe.name}.gemspec", "w") {|f| f << hoe.spec.to_ruby }
30
+ end
31
+ task :package => :gemspec
32
+ rescue LoadError => le
33
+ puts le.to_s, *le.backtrace
34
+ puts "Problem loading Hoe; please check the error above to ensure that Hoe is installed correctly"
35
+ rescue => e
36
+ puts "ignoring error while loading Hoe: #{e.to_s}"
37
+ end
38
+
39
+ def rake(*args)
40
+ ruby "-S", "rake", *args
41
+ end
42
+
43
+ %w(test package install_gem release clean).each do |task|
44
+ desc "Run rake #{task} on all available adapters and drivers"
45
+ task "all:#{task}" => task
46
+ task "adapters:#{task}" => task
47
+ end
48
+
49
+ (Dir["drivers/*/Rakefile"] + Dir["adapters/*/Rakefile"]).each do |rakefile|
50
+ dir = File.dirname(rakefile)
51
+ prefix = dir.sub(%r{/}, ':')
52
+ tasks = %w(package install_gem debug_gem clean gemspec)
53
+ tasks << "test" if File.directory?(File.join(dir, "test"))
54
+ tasks.each do |task|
55
+ desc "Run rake #{task} on #{dir}"
56
+ task "#{prefix}:#{task}" do
57
+ Dir.chdir(dir) do
58
+ rake task
59
+ end
60
+ end
61
+
62
+ task "#{File.dirname(dir)}:#{task}" => "#{prefix}:#{task}"
63
+ task "all:#{task}" => "#{prefix}:#{task}"
64
+ end
65
+
66
+ # Copy all generated gems to the top-level pkg directory for convenience
67
+ task "#{prefix}:package" do
68
+ FileList["#{dir}/pkg/*.gem"].each {|gem| cp gem, "pkg"}
69
+ end
70
+
71
+ desc "Run rake release on #{dir}"
72
+ task "#{prefix}:release" do
73
+ Dir.chdir(dir) do
74
+ version = nil
75
+ if dir =~ /adapters/
76
+ version = ENV['VERSION']
77
+ else
78
+ Dir["lib/**/*.rb"].each do |file|
79
+ version ||= File.open(file) {|f| f.read =~ /VERSION = "([^"]+)"/ && $1}
80
+ end
81
+ end
82
+ rake "release", "VERSION=#{version}"
83
+ end
84
+ end
85
+ # Only release adapters synchronously with main release. Drivers are versioned
86
+ # according to their JDBC driver versions.
87
+ if dir =~ /adapters/
88
+ task "adapters:release" => "#{prefix}:release"
89
+ task "all:release" => "#{prefix}:release"
90
+ end
91
+ end
@@ -0,0 +1,41 @@
1
+ namespace :rails do
2
+ def _adapter(n)
3
+ case n
4
+ when /postgres/
5
+ 'postgresql'
6
+ else
7
+ n
8
+ end
9
+ end
10
+
11
+ def _driver(n)
12
+ case n
13
+ when /postgres/
14
+ 'postgres'
15
+ else
16
+ n
17
+ end
18
+ end
19
+
20
+ def _target(n)
21
+ case n
22
+ when /postgres/
23
+ 'test_jdbcpostgresql'
24
+ else
25
+ "test_jdbc#{n}"
26
+ end
27
+ end
28
+
29
+ task :test => "java_compile" do
30
+ driver = ENV['DRIVER']
31
+ raise "need a DRIVER" unless driver
32
+ activerecord = ENV['RAILS']
33
+ raise "need location of RAILS source code" unless activerecord
34
+ activerecord = File.join(activerecord, 'activerecord') unless activerecord =~ /activerecord$/
35
+ ar_jdbc = File.expand_path(File.dirname(__FILE__) + '/..')
36
+ rubylib = "#{ar_jdbc}/lib:#{ar_jdbc}/drivers/#{_driver(driver)}/lib:#{ar_jdbc}/adapters/#{_adapter(driver)}/lib"
37
+ Dir.chdir(activerecord) do
38
+ rake "RUBYLIB=#{rubylib}", "#{_target(driver)}"
39
+ end
40
+ end
41
+ end
data/rakelib/test.rake ADDED
@@ -0,0 +1,78 @@
1
+ require File.expand_path('../../test/helper', __FILE__)
2
+ if defined?(JRUBY_VERSION)
3
+ databases = [:test_mysql, :test_jdbc, :test_sqlite3, :test_derby, :test_hsqldb, :test_h2]
4
+ if find_executable?("psql") && `psql -c '\\l'` && $?.exitstatus == 0
5
+ databases << :test_postgres
6
+ end
7
+ task :test => databases
8
+ else
9
+ task :test => [:test_mysql]
10
+ end
11
+
12
+ def declare_test_task_for(adapter, options = {})
13
+ driver = options[:driver] || adapter
14
+ Rake::TestTask.new("test_#{adapter}") do |t|
15
+ files = FileList["test/#{adapter}*test.rb"]
16
+ if adapter == "derby"
17
+ files << 'test/activerecord/connection_adapters/type_conversion_test.rb'
18
+ end
19
+ t.test_files = files
20
+ t.libs = []
21
+ if defined?(JRUBY_VERSION)
22
+ t.ruby_opts << "-rjdbc/#{driver}"
23
+ t.libs << "lib" << "drivers/#{driver}/lib"
24
+ t.libs.push *FileList["adapters/#{adapter}*/lib"]
25
+ end
26
+ t.libs << "test"
27
+ t.verbose = true
28
+ end
29
+ end
30
+
31
+ declare_test_task_for :derby
32
+ declare_test_task_for :h2
33
+ declare_test_task_for :hsqldb
34
+ declare_test_task_for :mssql, :driver => :jtds
35
+ declare_test_task_for :mysql
36
+ declare_test_task_for :postgres
37
+ declare_test_task_for :sqlite3
38
+
39
+ Rake::TestTask.new(:test_jdbc) do |t|
40
+ t.test_files = FileList['test/generic_jdbc_connection_test.rb', 'test/jndi_callbacks_test.rb']
41
+ t.libs << 'test' << 'drivers/mysql/lib'
42
+ end
43
+
44
+ Rake::TestTask.new(:test_jndi) do |t|
45
+ t.test_files = FileList['test/jndi_test.rb']
46
+ t.libs << 'test' << 'drivers/derby/lib'
47
+ end
48
+
49
+ task :test_postgresql => [:test_postgres]
50
+ task :test_pgsql => [:test_postgres]
51
+
52
+ # Ensure driver for these DBs is on your classpath
53
+ %w(oracle db2 cachedb informix).each do |d|
54
+ Rake::TestTask.new("test_#{d}") do |t|
55
+ t.test_files = FileList["test/#{d}_simple_test.rb"]
56
+ t.libs = []
57
+ t.libs << 'lib' if defined?(JRUBY_VERSION)
58
+ t.libs << 'test'
59
+ end
60
+ end
61
+
62
+ # Tests for JDBC adapters that don't require a database.
63
+ Rake::TestTask.new(:test_jdbc_adapters) do | t |
64
+ t.test_files = FileList[ 'test/jdbc_adapter/jdbc_sybase_test.rb' ]
65
+ t.libs << 'test'
66
+ end
67
+
68
+ # Ensure that the jTDS driver is in your classpath before launching rake
69
+ Rake::TestTask.new(:test_sybase_jtds) do |t|
70
+ t.test_files = FileList['test/sybase_jtds_simple_test.rb']
71
+ t.libs << 'test'
72
+ end
73
+
74
+ # Ensure that the jConnect driver is in your classpath before launching rake
75
+ Rake::TestTask.new(:test_sybase_jconnect) do |t|
76
+ t.test_files = FileList['test/sybase_jconnect_simple_test.rb']
77
+ t.libs << 'test'
78
+ end
@@ -0,0 +1,53 @@
1
+ /*
2
+ **** BEGIN LICENSE BLOCK *****
3
+ * Copyright (c) 2006-2009 Nick Sieger <nick@nicksieger.com>
4
+ * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
5
+ * Copyright (c) 2008-2009 Thomas E Enebo <enebo@acm.org>
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining
8
+ * a copy of this software and associated documentation files (the
9
+ * "Software"), to deal in the Software without restriction, including
10
+ * without limitation the rights to use, copy, modify, merge, publish,
11
+ * distribute, sublicense, and/or sell copies of the Software, and to
12
+ * permit persons to whom the Software is furnished to do so, subject to
13
+ * the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be
16
+ * included in all copies or substantial portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ ***** END LICENSE BLOCK *****/
26
+
27
+ package jdbc_adapter;
28
+
29
+ import java.io.IOException;
30
+
31
+ import org.jruby.Ruby;
32
+ import org.jruby.RubyClass;
33
+ import org.jruby.RubyModule;
34
+ import org.jruby.RubyObjectAdapter;
35
+ import org.jruby.javasupport.JavaEmbedUtils;
36
+ import org.jruby.runtime.load.BasicLibraryService;
37
+
38
+ public class JdbcAdapterInternalService implements BasicLibraryService {
39
+ private static RubyObjectAdapter rubyApi;
40
+
41
+ public boolean basicLoad(final Ruby runtime) throws IOException {
42
+ RubyClass jdbcConnection = RubyJdbcConnection.createJdbcConnectionClass(runtime);
43
+ PostgresRubyJdbcConnection.createPostgresJdbcConnectionClass(runtime, jdbcConnection);
44
+ MssqlRubyJdbcConnection.createMssqlJdbcConnectionClass(runtime, jdbcConnection);
45
+ Sqlite3RubyJdbcConnection.createSqlite3JdbcConnectionClass(runtime, jdbcConnection);
46
+ RubyModule jdbcSpec = runtime.getOrCreateModule("JdbcSpec");
47
+
48
+ rubyApi = JavaEmbedUtils.newObjectAdapter();
49
+ JdbcMySQLSpec.load(jdbcSpec);
50
+ JdbcDerbySpec.load(jdbcSpec, rubyApi);
51
+ return true;
52
+ }
53
+ }
@@ -0,0 +1,36 @@
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Copyright (c) 2006-2007 Nick Sieger <nick@nicksieger.com>
3
+ * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining
6
+ * a copy of this software and associated documentation files (the
7
+ * "Software"), to deal in the Software without restriction, including
8
+ * without limitation the rights to use, copy, modify, merge, publish,
9
+ * distribute, sublicense, and/or sell copies of the Software, and to
10
+ * permit persons to whom the Software is furnished to do so, subject to
11
+ * the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be
14
+ * included in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ ***** END LICENSE BLOCK *****/
24
+
25
+ package jdbc_adapter;
26
+
27
+ import java.sql.Connection;
28
+
29
+ /**
30
+ * Interface to be implemented in Ruby for retrieving a new connection
31
+ *
32
+ * @author nicksieger
33
+ */
34
+ public interface JdbcConnectionFactory {
35
+ Connection newConnection();
36
+ }