activerecord-jdbc-adapter 0.9.3-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 (121) hide show
  1. data/History.txt +248 -0
  2. data/LICENSE.txt +21 -0
  3. data/Manifest.txt +125 -0
  4. data/README.txt +218 -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 +640 -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/mysql_adapter.rb +13 -0
  15. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  16. data/lib/active_record/connection_adapters/postgresql_adapter.rb +13 -0
  17. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +13 -0
  18. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  19. data/lib/jdbc_adapter.rb +27 -0
  20. data/lib/jdbc_adapter/jdbc.rake +121 -0
  21. data/lib/jdbc_adapter/jdbc_adapter_internal.jar +0 -0
  22. data/lib/jdbc_adapter/jdbc_cachedb.rb +33 -0
  23. data/lib/jdbc_adapter/jdbc_db2.rb +203 -0
  24. data/lib/jdbc_adapter/jdbc_derby.rb +430 -0
  25. data/lib/jdbc_adapter/jdbc_firebird.rb +109 -0
  26. data/lib/jdbc_adapter/jdbc_hsqldb.rb +218 -0
  27. data/lib/jdbc_adapter/jdbc_informix.rb +147 -0
  28. data/lib/jdbc_adapter/jdbc_mimer.rb +141 -0
  29. data/lib/jdbc_adapter/jdbc_mssql.rb +337 -0
  30. data/lib/jdbc_adapter/jdbc_mysql.rb +236 -0
  31. data/lib/jdbc_adapter/jdbc_oracle.rb +377 -0
  32. data/lib/jdbc_adapter/jdbc_postgre.rb +498 -0
  33. data/lib/jdbc_adapter/jdbc_sqlite3.rb +384 -0
  34. data/lib/jdbc_adapter/jdbc_sybase.rb +50 -0
  35. data/lib/jdbc_adapter/missing_functionality_helper.rb +87 -0
  36. data/lib/jdbc_adapter/rake_tasks.rb +10 -0
  37. data/lib/jdbc_adapter/tsql_helper.rb +60 -0
  38. data/lib/jdbc_adapter/version.rb +5 -0
  39. data/lib/pg.rb +4 -0
  40. data/rails_generators/jdbc_generator.rb +15 -0
  41. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  42. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  43. data/rakelib/compile.rake +23 -0
  44. data/rakelib/package.rake +90 -0
  45. data/rakelib/rails.rake +41 -0
  46. data/rakelib/test.rake +76 -0
  47. data/src/java/jdbc_adapter/JdbcAdapterInternalService.java +53 -0
  48. data/src/java/jdbc_adapter/JdbcConnectionFactory.java +36 -0
  49. data/src/java/jdbc_adapter/JdbcDerbySpec.java +293 -0
  50. data/src/java/jdbc_adapter/JdbcMySQLSpec.java +134 -0
  51. data/src/java/jdbc_adapter/MssqlRubyJdbcConnection.java +71 -0
  52. data/src/java/jdbc_adapter/PostgresRubyJdbcConnection.java +55 -0
  53. data/src/java/jdbc_adapter/RubyJdbcConnection.java +1162 -0
  54. data/src/java/jdbc_adapter/SQLBlock.java +27 -0
  55. data/src/java/jdbc_adapter/Sqlite3RubyJdbcConnection.java +41 -0
  56. data/test/abstract_db_create.rb +107 -0
  57. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  58. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  59. data/test/cachedb_simple_test.rb +6 -0
  60. data/test/db/cachedb.rb +9 -0
  61. data/test/db/db2.rb +9 -0
  62. data/test/db/derby.rb +14 -0
  63. data/test/db/h2.rb +11 -0
  64. data/test/db/hsqldb.rb +12 -0
  65. data/test/db/informix.rb +11 -0
  66. data/test/db/jdbc.rb +11 -0
  67. data/test/db/jndi_config.rb +30 -0
  68. data/test/db/logger.rb +3 -0
  69. data/test/db/mssql.rb +9 -0
  70. data/test/db/mysql.rb +10 -0
  71. data/test/db/oracle.rb +34 -0
  72. data/test/db/postgres.rb +9 -0
  73. data/test/db/sqlite3.rb +15 -0
  74. data/test/db2_simple_test.rb +10 -0
  75. data/test/derby_migration_test.rb +21 -0
  76. data/test/derby_multibyte_test.rb +12 -0
  77. data/test/derby_simple_test.rb +21 -0
  78. data/test/generic_jdbc_connection_test.rb +9 -0
  79. data/test/h2_simple_test.rb +6 -0
  80. data/test/has_many_through.rb +79 -0
  81. data/test/helper.rb +5 -0
  82. data/test/hsqldb_simple_test.rb +6 -0
  83. data/test/informix_simple_test.rb +48 -0
  84. data/test/jdbc_adapter/jdbc_db2_test.rb +26 -0
  85. data/test/jdbc_adapter/jdbc_sybase_test.rb +33 -0
  86. data/test/jdbc_common.rb +25 -0
  87. data/test/jndi_callbacks_test.rb +38 -0
  88. data/test/jndi_test.rb +35 -0
  89. data/test/manualTestDatabase.rb +191 -0
  90. data/test/minirunit.rb +109 -0
  91. data/test/minirunit/testConnect.rb +14 -0
  92. data/test/minirunit/testH2.rb +73 -0
  93. data/test/minirunit/testHsqldb.rb +73 -0
  94. data/test/minirunit/testLoadActiveRecord.rb +3 -0
  95. data/test/minirunit/testMysql.rb +83 -0
  96. data/test/minirunit/testRawSelect.rb +24 -0
  97. data/test/models/add_not_null_column_to_table.rb +12 -0
  98. data/test/models/auto_id.rb +18 -0
  99. data/test/models/data_types.rb +28 -0
  100. data/test/models/entry.rb +23 -0
  101. data/test/models/mixed_case.rb +20 -0
  102. data/test/models/reserved_word.rb +18 -0
  103. data/test/models/string_id.rb +18 -0
  104. data/test/models/validates_uniqueness_of_string.rb +19 -0
  105. data/test/mssql_simple_test.rb +6 -0
  106. data/test/mysql_db_create_test.rb +25 -0
  107. data/test/mysql_multibyte_test.rb +10 -0
  108. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  109. data/test/mysql_simple_test.rb +32 -0
  110. data/test/oracle_simple_test.rb +29 -0
  111. data/test/pick_rails_version.rb +3 -0
  112. data/test/postgres_db_create_test.rb +21 -0
  113. data/test/postgres_mixed_case_test.rb +19 -0
  114. data/test/postgres_nonseq_pkey_test.rb +40 -0
  115. data/test/postgres_reserved_test.rb +22 -0
  116. data/test/postgres_schema_search_path_test.rb +46 -0
  117. data/test/postgres_simple_test.rb +13 -0
  118. data/test/simple.rb +475 -0
  119. data/test/sqlite3_simple_test.rb +233 -0
  120. data/test/sybase_jtds_simple_test.rb +6 -0
  121. metadata +188 -0
@@ -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,60 @@
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 'uniqueidentifier' if (type.to_s == 'uniqueidentifier')
14
+ return super unless type.to_s == 'integer'
15
+
16
+ if limit.nil? || limit == 4
17
+ 'int'
18
+ elsif limit == 2
19
+ 'smallint'
20
+ elsif limit == 1
21
+ 'tinyint'
22
+ else
23
+ 'bigint'
24
+ end
25
+ end
26
+
27
+ def add_limit_offset!(sql, options)
28
+ if options[:limit] and options[:offset]
29
+ total_rows = select_all("SELECT count(*) as TotalRows from (#{sql.gsub(/\bSELECT(\s+DISTINCT)?\b/i, "SELECT\\1 TOP 1000000000")}) tally")[0]["TotalRows"].to_i
30
+ if (options[:limit] + options[:offset]) >= total_rows
31
+ options[:limit] = (total_rows - options[:offset] >= 0) ? (total_rows - options[:offset]) : 0
32
+ end
33
+ sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i, "SELECT * FROM (SELECT TOP #{options[:limit]} * FROM (SELECT\\1 TOP #{options[:limit] + options[:offset]} ")
34
+ sql << ") AS tmp1"
35
+ if options[:order]
36
+ options[:order] = options[:order].split(',').map do |field|
37
+ parts = field.split(" ")
38
+ tc = parts[0]
39
+ if sql =~ /\.\[/ and tc =~ /\./ # if column quoting used in query
40
+ tc.gsub!(/\./, '\\.\\[')
41
+ tc << '\\]'
42
+ end
43
+ if sql =~ /#{tc} AS (t\d_r\d\d?)/
44
+ parts[0] = $1
45
+ elsif parts[0] =~ /\w+\.(\w+)/
46
+ parts[0] = $1
47
+ end
48
+ parts.join(' ')
49
+ end.join(', ')
50
+ sql << " ORDER BY #{change_order_direction(options[:order])}) AS tmp2 ORDER BY #{options[:order]}"
51
+ else
52
+ sql << " ) AS tmp2"
53
+ end
54
+ elsif sql !~ /^\s*SELECT (@@|COUNT\()/i
55
+ sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i) do
56
+ "SELECT#{$1} TOP #{options[:limit]}"
57
+ end unless options[:limit].nil?
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,5 @@
1
+ module JdbcAdapter
2
+ module Version
3
+ VERSION = "0.9.3"
4
+ end
5
+ end
@@ -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,90 @@
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.version = JdbcAdapter::Version::VERSION
17
+ p.spec_extras[:platform] = Gem::Platform.new("java")
18
+ p.spec_extras[:files] = MANIFEST
19
+ p.rubyforge_name = "jruby-extras"
20
+ p.url = "http://jruby-extras.rubyforge.org/activerecord-jdbc-adapter"
21
+ p.author = "Nick Sieger, Ola Bini and JRuby contributors"
22
+ p.email = "nick@nicksieger.com, ola.bini@gmail.com"
23
+ p.summary = "JDBC adapter for ActiveRecord, for use within JRuby on Rails."
24
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
25
+ p.description = p.paragraphs_of('README.txt', 0...1).join("\n\n")
26
+ end
27
+ hoe.spec.dependencies.delete_if { |dep| dep.name == "hoe" }
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
+ end
47
+
48
+ (Dir["drivers/*/Rakefile"] + Dir["adapters/*/Rakefile"]).each do |rakefile|
49
+ dir = File.dirname(rakefile)
50
+ prefix = dir.sub(%r{/}, ':')
51
+ tasks = %w(package install_gem debug_gem clean gemspec)
52
+ tasks << "test" if File.directory?(File.join(dir, "test"))
53
+ tasks.each do |task|
54
+ desc "Run rake #{task} on #{dir}"
55
+ task "#{prefix}:#{task}" do
56
+ Dir.chdir(dir) do
57
+ rake task
58
+ end
59
+ end
60
+
61
+ task "#{File.dirname(dir)}:#{task}" => "#{prefix}:#{task}"
62
+ task "all:#{task}" => "#{prefix}:#{task}"
63
+ end
64
+
65
+ # Copy all generated gems to the top-level pkg directory for convenience
66
+ task "#{prefix}:package" do
67
+ FileList["#{dir}/pkg/*.gem"].each {|gem| cp gem, "pkg"}
68
+ end
69
+
70
+ desc "Run rake release on #{dir}"
71
+ task "#{prefix}:release" do
72
+ Dir.chdir(dir) do
73
+ version = nil
74
+ if dir =~ /adapters/
75
+ version = ENV['VERSION']
76
+ else
77
+ Dir["lib/**/*.rb"].each do |file|
78
+ version ||= File.open(file) {|f| f.read =~ /VERSION = "([^"]+)"/ && $1}
79
+ end
80
+ end
81
+ rake "release", "VERSION=#{version}"
82
+ end
83
+ end
84
+ # Only release adapters synchronously with main release. Drivers are versioned
85
+ # according to their JDBC driver versions.
86
+ if dir =~ /adapters/
87
+ task "adapters:release" => "#{prefix}:release"
88
+ task "all:release" => "#{prefix}:release"
89
+ end
90
+ 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
@@ -0,0 +1,76 @@
1
+ require File.expand_path('../../test/helper', __FILE__)
2
+ if defined?(JRUBY_VERSION)
3
+ databases = [:test_mysql, :test_jdbc, :test_sqlite3]
4
+ if find_executable?("psql") && `psql -c '\\l'` && $?.exitstatus == 0
5
+ databases << :test_postgres
6
+ end
7
+ require File.expand_path('../../test/pick_rails_version', __FILE__)
8
+ if ActiveRecord::VERSION::MAJOR < 3
9
+ # These databases not working with Rails3/Arel yet
10
+ databases += [:test_derby, :test_hsqldb, :test_h2]
11
+ end
12
+ task :test => databases
13
+ else
14
+ task :test => [:test_mysql]
15
+ end
16
+
17
+ FileList['drivers/*'].each do |d|
18
+ next unless File.directory?(d)
19
+ driver = File.basename(d)
20
+ Rake::TestTask.new("test_#{driver}") do |t|
21
+ files = FileList["test/#{driver}*test.rb"]
22
+ if driver == "derby"
23
+ files << 'test/activerecord/connection_adapters/type_conversion_test.rb'
24
+ end
25
+ t.test_files = files
26
+ t.libs = []
27
+ if defined?(JRUBY_VERSION)
28
+ t.ruby_opts << "-rjdbc/#{driver}"
29
+ t.libs << "lib" << "#{d}/lib"
30
+ t.libs.push *FileList["adapters/#{driver}*/lib"]
31
+ end
32
+ t.libs << "test"
33
+ t.verbose = true
34
+ end
35
+ end
36
+
37
+ Rake::TestTask.new(:test_jdbc) do |t|
38
+ t.test_files = FileList['test/generic_jdbc_connection_test.rb', 'test/jndi_callbacks_test.rb']
39
+ t.libs << 'test' << 'drivers/mysql/lib'
40
+ end
41
+
42
+ Rake::TestTask.new(:test_jndi) do |t|
43
+ t.test_files = FileList['test/jndi_test.rb']
44
+ t.libs << 'test' << 'drivers/derby/lib'
45
+ end
46
+
47
+ task :test_postgresql => [:test_postgres]
48
+ task :test_pgsql => [:test_postgres]
49
+
50
+ # Ensure driver for these DBs is on your classpath
51
+ %w(oracle db2 cachedb mssql informix).each do |d|
52
+ Rake::TestTask.new("test_#{d}") do |t|
53
+ t.test_files = FileList["test/#{d}_simple_test.rb"]
54
+ t.libs = []
55
+ t.libs << 'lib' if defined?(JRUBY_VERSION)
56
+ t.libs << 'test'
57
+ end
58
+ end
59
+
60
+ # Tests for JDBC adapters that don't require a database.
61
+ Rake::TestTask.new(:test_jdbc_adapters) do | t |
62
+ t.test_files = FileList[ 'test/jdbc_adapter/jdbc_sybase_test.rb' ]
63
+ t.libs << 'test'
64
+ end
65
+
66
+ # Ensure that the jTDS driver is in your classpath before launching rake
67
+ Rake::TestTask.new(:test_sybase_jtds) do |t|
68
+ t.test_files = FileList['test/sybase_jtds_simple_test.rb']
69
+ t.libs << 'test'
70
+ end
71
+
72
+ # Ensure that the jConnect driver is in your classpath before launching rake
73
+ Rake::TestTask.new(:test_sybase_jconnect) do |t|
74
+ t.test_files = FileList['test/sybase_jconnect_simple_test.rb']
75
+ t.libs << 'test'
76
+ 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
+ }