activerecord-jdbc-adapter 1.3.0.beta1 → 1.3.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/.gitignore +12 -11
  2. data/.travis.yml +36 -7
  3. data/Appraisals +3 -3
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +13 -6
  6. data/History.txt +64 -0
  7. data/README.md +8 -1
  8. data/Rakefile +3 -1
  9. data/gemfiles/rails23.gemfile +1 -1
  10. data/gemfiles/rails23.gemfile.lock +6 -5
  11. data/gemfiles/rails30.gemfile +1 -1
  12. data/gemfiles/rails30.gemfile.lock +7 -6
  13. data/gemfiles/rails31.gemfile +1 -1
  14. data/gemfiles/rails31.gemfile.lock +6 -5
  15. data/gemfiles/rails32.gemfile +1 -1
  16. data/gemfiles/rails32.gemfile.lock +6 -5
  17. data/gemfiles/rails40.gemfile +2 -4
  18. data/gemfiles/rails40.gemfile.lock +37 -51
  19. data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
  20. data/lib/active_record/connection_adapters/db2_adapter.rb +1 -1
  21. data/lib/arel/visitors/db2.rb +5 -1
  22. data/lib/arel/visitors/hsqldb.rb +1 -0
  23. data/lib/arel/visitors/sql_server.rb +55 -13
  24. data/lib/arjdbc/db2/adapter.rb +197 -227
  25. data/lib/arjdbc/db2/as400.rb +124 -0
  26. data/lib/arjdbc/db2/connection_methods.rb +20 -1
  27. data/lib/arjdbc/derby/adapter.rb +17 -85
  28. data/lib/arjdbc/derby/connection_methods.rb +2 -1
  29. data/lib/arjdbc/discover.rb +55 -47
  30. data/lib/arjdbc/h2/adapter.rb +52 -18
  31. data/lib/arjdbc/h2/connection_methods.rb +10 -2
  32. data/lib/arjdbc/hsqldb/adapter.rb +33 -9
  33. data/lib/arjdbc/hsqldb/connection_methods.rb +10 -2
  34. data/lib/arjdbc/informix.rb +2 -1
  35. data/lib/arjdbc/jdbc.rb +5 -1
  36. data/lib/arjdbc/jdbc/adapter.rb +167 -89
  37. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  38. data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
  39. data/lib/arjdbc/jdbc/base_ext.rb +25 -3
  40. data/lib/arjdbc/jdbc/callbacks.rb +9 -8
  41. data/lib/arjdbc/jdbc/column.rb +8 -20
  42. data/lib/arjdbc/jdbc/connection.rb +69 -80
  43. data/lib/arjdbc/jdbc/extension.rb +6 -8
  44. data/lib/arjdbc/jdbc/jdbc.rake +3 -141
  45. data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
  46. data/lib/arjdbc/mssql/adapter.rb +108 -34
  47. data/lib/arjdbc/mssql/connection_methods.rb +3 -1
  48. data/lib/arjdbc/mssql/limit_helpers.rb +3 -2
  49. data/lib/arjdbc/mssql/lock_helpers.rb +5 -1
  50. data/lib/arjdbc/mysql/adapter.rb +127 -70
  51. data/lib/arjdbc/mysql/connection_methods.rb +5 -2
  52. data/lib/arjdbc/oracle/adapter.rb +124 -94
  53. data/lib/arjdbc/oracle/connection_methods.rb +2 -1
  54. data/lib/arjdbc/postgresql/adapter.rb +99 -67
  55. data/lib/arjdbc/postgresql/column_cast.rb +3 -5
  56. data/lib/arjdbc/postgresql/connection_methods.rb +6 -6
  57. data/lib/arjdbc/railtie.rb +3 -1
  58. data/lib/arjdbc/sqlite3/adapter.rb +60 -43
  59. data/lib/arjdbc/sqlite3/connection_methods.rb +9 -9
  60. data/lib/arjdbc/sybase.rb +1 -1
  61. data/lib/arjdbc/tasks.rb +13 -0
  62. data/lib/arjdbc/tasks/database_tasks.rb +50 -0
  63. data/lib/arjdbc/tasks/databases.rake +89 -0
  64. data/lib/arjdbc/tasks/databases3.rake +203 -0
  65. data/lib/arjdbc/tasks/databases4.rake +39 -0
  66. data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
  67. data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
  68. data/lib/arjdbc/tasks/h2_database_tasks.rb +29 -0
  69. data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
  70. data/lib/arjdbc/tasks/jdbc_database_tasks.rb +122 -0
  71. data/lib/arjdbc/tasks/mssql_database_tasks.rb +36 -0
  72. data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +297 -0
  73. data/lib/arjdbc/tasks/oracle_database_tasks.rb +62 -0
  74. data/lib/arjdbc/version.rb +1 -1
  75. data/pom.xml +11 -12
  76. data/rails_generators/jdbc_generator.rb +1 -1
  77. data/rails_generators/templates/config/initializers/jdbc.rb +8 -5
  78. data/rails_generators/templates/lib/tasks/jdbc.rake +7 -4
  79. data/rakelib/02-test.rake +42 -15
  80. data/rakelib/compile.rake +29 -2
  81. data/rakelib/db.rake +2 -1
  82. data/rakelib/rails.rake +23 -6
  83. data/src/java/arjdbc/ArJdbcModule.java +175 -0
  84. data/src/java/arjdbc/db2/DB2Module.java +2 -1
  85. data/src/java/arjdbc/derby/DerbyModule.java +5 -24
  86. data/src/java/arjdbc/hsqldb/HSQLDBModule.java +3 -2
  87. data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -46
  88. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1001 -259
  89. data/src/java/arjdbc/mssql/MSSQLModule.java +2 -1
  90. data/src/java/arjdbc/mysql/MySQLModule.java +4 -3
  91. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +12 -7
  92. data/src/java/arjdbc/oracle/OracleModule.java +2 -1
  93. data/src/java/arjdbc/sqlite3/SQLite3Module.java +2 -1
  94. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +12 -0
  95. data/test/db/db2.rb +14 -7
  96. data/test/db/db2/rake_test.rb +82 -0
  97. data/test/db/db2/rake_test_data.sql +35 -0
  98. data/test/db/db2/simple_test.rb +20 -0
  99. data/test/db/db2/unit_test.rb +3 -1
  100. data/test/db/derby.rb +7 -5
  101. data/test/db/derby/rake_test.rb +96 -0
  102. data/test/db/derby/simple_test.rb +10 -2
  103. data/test/db/h2.rb +6 -8
  104. data/test/db/h2/identity_column_test.rb +35 -0
  105. data/test/db/h2/offset_test.rb +49 -0
  106. data/test/db/h2/rake_test.rb +98 -0
  107. data/test/db/h2/schema_dump_test.rb +5 -1
  108. data/test/db/hsqldb.rb +6 -10
  109. data/test/db/hsqldb/rake_test.rb +101 -0
  110. data/test/db/hsqldb/schema_dump_test.rb +5 -1
  111. data/test/db/hsqldb/simple_test.rb +8 -0
  112. data/test/db/jndi_config.rb +1 -3
  113. data/test/db/jndi_pooled_config.rb +1 -3
  114. data/test/db/mssql/limit_offset_test.rb +23 -14
  115. data/test/db/mssql/rake_test.rb +143 -0
  116. data/test/db/mysql/_rails_test_mysql.32.out +1069 -1252
  117. data/test/db/mysql/nonstandard_primary_key_test.rb +21 -24
  118. data/test/db/mysql/rake_test.rb +97 -0
  119. data/test/db/mysql/schema_dump_test.rb +11 -11
  120. data/test/db/mysql/simple_test.rb +52 -3
  121. data/test/db/mysql/statement_escaping_test.rb +46 -0
  122. data/test/db/oracle/rake_test.rb +100 -0
  123. data/test/db/oracle/simple_test.rb +48 -0
  124. data/test/db/postgres/_rails_test_postgres.32.out +998 -1370
  125. data/test/db/postgres/active_schema_unit_test.rb +68 -0
  126. data/test/db/postgres/connection_test.rb +10 -2
  127. data/test/db/postgres/data_types_test.rb +2 -2
  128. data/test/db/postgres/ltree_test.rb +6 -5
  129. data/test/db/postgres/native_types_test.rb +1 -5
  130. data/test/db/postgres/rake_test.rb +117 -0
  131. data/test/db/postgres/schema_dump_test.rb +9 -2
  132. data/test/db/postgres/schema_test.rb +4 -2
  133. data/test/db/postgres/simple_test.rb +57 -16
  134. data/test/db/sqlite3.rb +3 -10
  135. data/test/db/sqlite3/_rails_test_sqlite3.32.out +1070 -1298
  136. data/test/db/sqlite3/rake_test.rb +71 -0
  137. data/test/db/sqlite3/simple_test.rb +9 -9
  138. data/test/has_many_through.rb +4 -1
  139. data/test/jdbc/db2.rb +14 -1
  140. data/test/jdbc_column_test.rb +23 -0
  141. data/test/{generic_jdbc_connection_test.rb → jdbc_connection_test.rb} +22 -17
  142. data/test/jndi_callbacks_test.rb +26 -28
  143. data/test/jndi_test.rb +7 -16
  144. data/test/models/data_types.rb +2 -1
  145. data/test/models/thing.rb +1 -0
  146. data/test/rails/mysql.rb +13 -0
  147. data/test/rails/sqlite3/version.rb +6 -0
  148. data/test/rails_stub.rb +31 -0
  149. data/test/rake_test_support.rb +298 -0
  150. data/test/serialize.rb +2 -4
  151. data/test/{helper.rb → shared_helper.rb} +0 -0
  152. data/test/simple.rb +167 -93
  153. data/test/test_helper.rb +52 -16
  154. metadata +388 -354
  155. data/lib/pg.rb +0 -26
  156. data/test/abstract_db_create.rb +0 -139
  157. data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -36
  158. data/test/db/mssql/db_create_test.rb +0 -29
  159. data/test/db/mysql/db_create_test.rb +0 -33
  160. data/test/db/postgres/db_create_test.rb +0 -44
  161. data/test/db/postgres/db_drop_test.rb +0 -17
data/lib/pg.rb DELETED
@@ -1,26 +0,0 @@
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.
5
- #
6
- # If by chance this library is installed in another Ruby and this file
7
- # got required then we'll just continue to try to load the next pg.rb
8
- # in the $LOAD_PATH.
9
-
10
- unless defined?(JRUBY_VERSION)
11
- gem 'pg' if respond_to?(:gem) # make sure pg gem is activated
12
- after_current_file = false
13
- $LOAD_PATH.each do |p|
14
- require_file = File.join(p, 'pg.rb')
15
-
16
- if File.expand_path(require_file) == File.expand_path(__FILE__)
17
- after_current_file = true
18
- next
19
- end
20
-
21
- if after_current_file && File.exist?(require_file)
22
- load require_file
23
- break
24
- end
25
- end
26
- end
@@ -1,139 +0,0 @@
1
- require 'test_helper'
2
- require 'rake'
3
-
4
- module Rails
5
- class Configuration; end unless const_defined?(:Configuration)
6
- class Application
7
- def self.config
8
- @config ||= Object.new
9
- end
10
- def self.paths
11
- @paths ||= Hash.new { [] }
12
- end
13
- end
14
- def self.application
15
- Rails::Application
16
- end
17
- end
18
-
19
- module AbstractDbCreate
20
- def self.included(base)
21
- base.module_eval { include Rake::DSL } if defined?(Rake::DSL)
22
- end
23
-
24
- def setup
25
- @prev_app = Rake.application
26
- Rake.application = Rake::Application.new
27
- verbose(true)
28
- do_setup
29
- end
30
-
31
- def do_setup(env = 'unittest', db = 'test_rake_db_create')
32
- @env = env
33
- @prev_configs = ActiveRecord::Base.configurations
34
- ActiveRecord::Base.connection.disconnect!
35
- @db_name = db
36
- setup_rails
37
- set_rails_constant("env", @env)
38
- set_rails_constant("root", ".")
39
- load File.dirname(__FILE__) + '/../lib/arjdbc/jdbc/jdbc.rake' if defined?(JRUBY_VERSION)
40
- task :environment do
41
- ActiveRecord::Base.configurations = configurations
42
- @full_env_loaded = true
43
- end
44
- task :rails_env do
45
- @rails_env_set = true
46
- end
47
- end
48
-
49
- def teardown
50
- Rake::Task["db:drop"].invoke
51
- Rake.application = @prev_app
52
- restore_rails
53
- ActiveRecord::Base.configurations = @prev_configs
54
- ActiveRecord::Base.establish_connection(db_config)
55
- @rails_env_set = nil
56
- @full_env_loaded = nil
57
- end
58
-
59
- def setup_rails
60
- if ActiveRecord::VERSION::MAJOR <= 2
61
- setup_rails2
62
- else
63
- setup_rails3
64
- end
65
- end
66
-
67
- def configurations
68
- db_name = @db_name
69
- db_config = self.db_config
70
- db_config = db_config.merge({:database => db_name}) if db_name
71
- db_config.stringify_keys!
72
- @configs = { @env => db_config }
73
- @configs["test"] = @configs[@env].dup
74
- @configs
75
- end
76
-
77
- def setup_rails2
78
- configs = configurations
79
- Rails::Configuration.module_eval do
80
- define_method(:database_configuration) { configs }
81
- end
82
- ar_version = $LOADED_FEATURES.grep(%r{active_record/version}).first
83
- ar_lib_path = $LOAD_PATH.detect {|p| p if File.exist?File.join(p, ar_version)}
84
- # if the old style finder didn't work, assume we have the absolute path already
85
- if ar_lib_path.nil? && File.exist?(ar_version)
86
- ar_lib_path = ar_version.sub(%r{/active_record/version.*}, '')
87
- end
88
- ar_lib_path = ar_lib_path.sub(%r{activerecord/lib}, 'railties/lib') # edge rails
89
- rails_lib_path = ar_lib_path.sub(/activerecord-([\d\.]+)/, 'rails-\1') # gem rails
90
- load "#{rails_lib_path}/tasks/databases.rake"
91
- end
92
-
93
- def setup_rails3
94
- configs = configurations
95
- (class << Rails::Application.config; self ; end).instance_eval do
96
- define_method(:database_configuration) { configs }
97
- end
98
- require 'pathname'
99
- ar_version = $LOADED_FEATURES.grep(%r{active_record/version}).first
100
- ar_lib_path = $LOAD_PATH.detect do |p|
101
- Pathname.new(p).absolute? && ar_version.start_with?(p) ||
102
- File.exist?(File.join(p, ar_version))
103
- end
104
- load "#{ar_lib_path}/active_record/railties/databases.rake"
105
- end
106
-
107
- def set_rails_constant(name, value)
108
- cname ="RAILS_#{name.upcase}"
109
- @constants ||= {}
110
- @constants[name] = Object.const_get(cname) rescue nil
111
- silence_warnings { Object.const_set(cname, value) }
112
- Rails.instance_eval do
113
- if instance_methods(false).include?(name)
114
- alias_method "orig_#{name}", name
115
- define_method(name) { value }
116
- end
117
- end
118
- end
119
-
120
- def restore_rails
121
- @constants.each do |key,value|
122
- silence_warnings { Object.const_set("RAILS_#{key.upcase}", value) }
123
- Rails.instance_eval do
124
- if instance_methods(false).include?(name)
125
- remove_method name
126
- alias_method name, "orig_#{name}"
127
- end
128
- end
129
- end
130
- end
131
-
132
- def silence_warnings
133
- prev, $VERBOSE = $VERBOSE, nil
134
- yield
135
- ensure
136
- $VERBOSE = prev
137
- end
138
-
139
- end
@@ -1,36 +0,0 @@
1
- require 'java'
2
- require 'models/data_types'
3
- require 'arjdbc'
4
- require 'test/unit'
5
-
6
- class TypeConversionTest < Test::Unit::TestCase
7
-
8
- TEST_INT = 987654321
9
-
10
- TEST_TIME = Time.at(1169964202).gmtime
11
-
12
- def self.startup
13
- DbTypeMigration.up
14
- end
15
-
16
- def self.shutdown
17
- DbTypeMigration.down
18
- end
19
-
20
- def setup
21
- DbType.create(
22
- :sample_timestamp => TEST_TIME,
23
- :sample_decimal => TEST_INT) # DECIMAL(9,0)
24
- end
25
-
26
- def test_timestamp
27
- type = DbType.first
28
- assert_equal TEST_TIME, type.sample_timestamp.getutc
29
- end
30
-
31
- def test_decimal
32
- type = DbType.first
33
- assert_equal TEST_INT, type.sample_decimal
34
- end
35
-
36
- end
@@ -1,29 +0,0 @@
1
- require 'abstract_db_create'
2
- require 'db/mssql'
3
-
4
- class MSSQLDbCreateTest < Test::Unit::TestCase
5
- include AbstractDbCreate
6
-
7
- def db_config
8
- MSSQL_CONFIG
9
- end
10
-
11
- def test_rake_db_create
12
- begin
13
- Rake::Task["db:create"].invoke
14
- rescue => e
15
- if e.message =~ /CREATE DATABASE permission denied/
16
- puts "\nwarning: db:create test skipped; add 'dbcreator' role to user '#{db_config[:username]}' to run"
17
- return
18
- end
19
- end
20
- ActiveRecord::Base.establish_connection(db_config.merge(:database => "master"))
21
- if ActiveRecord::Base.connection.send(:sqlserver_2000?)
22
- select = "SELECT name FROM master..sysdatabases ORDER BY name"
23
- else
24
- select = "SELECT name FROM sys.sysdatabases"
25
- end
26
- databases = ActiveRecord::Base.connection.select_rows(select).flatten
27
- assert databases.include?(@db_name)
28
- end
29
- end
@@ -1,33 +0,0 @@
1
- require 'abstract_db_create'
2
- require 'db/mysql'
3
-
4
- class MysqlDbCreateTest < Test::Unit::TestCase
5
- include AbstractDbCreate
6
-
7
- def db_config
8
- MYSQL_CONFIG
9
- end
10
-
11
- def test_rake_db_create
12
- omit_unless find_executable?("mysql")
13
- Rake::Task["db:create"].invoke
14
- with_mysql do |mysql|
15
- mysql << "show databases where `Database` = '#{@db_name}';"
16
- mysql.close_write
17
- assert mysql.read =~ /#{@db_name}/m
18
- end
19
- end
20
-
21
- def test_rake_db_test_purge
22
- Rake::Task["db:create"].invoke
23
- Rake::Task["db:test:purge"].invoke
24
- end
25
-
26
- private
27
-
28
- def with_mysql(args = nil)
29
- exec = "mysql -u #{db_config[:username]} --password=#{db_config[:password]} #{args}"
30
- IO.popen(exec, "r+") { |mysql| yield(mysql) }
31
- end
32
-
33
- end
@@ -1,44 +0,0 @@
1
- require 'db/postgres'
2
- require 'abstract_db_create'
3
-
4
- class PostgresDbCreateTest < Test::Unit::TestCase
5
- include AbstractDbCreate
6
-
7
- def db_config
8
- POSTGRES_CONFIG
9
- end
10
-
11
- PSQL_EXECUTABLE = find_executable?("psql")
12
-
13
- def test_rake_db_create
14
- omit_unless PSQL_EXECUTABLE
15
- Rake::Task["db:create"].invoke
16
- assert_match /#{@db_name}/m, psql("-d template1 -c '\\\l'")
17
- end
18
-
19
- def test_rake_db_test_purge
20
- # omit_unless PSQL_EXECUTABLE
21
- Rake::Task["db:create"].invoke
22
- Rake::Task["db:test:purge"].invoke
23
- end
24
-
25
- def test_rake_db_create_does_not_load_full_environment
26
- Rake::Task["db:create"].invoke
27
- assert @rails_env_set
28
- assert !defined?(@full_environment_loaded) || !@full_environment_loaded
29
- end
30
-
31
- private
32
-
33
- def psql(args)
34
- args = args.join(' ') unless args.is_a?(String)
35
- if db_config[:host] != 'localhost'
36
- args = "--host=#{db_config[:host]} #{args}"
37
- end
38
- if username = ENV['PSQL_USERNAME']
39
- args = "--username=#{username} #{args}"
40
- end
41
- `psql #{args}`
42
- end
43
-
44
- end
@@ -1,17 +0,0 @@
1
- require 'db/postgres'
2
- require 'abstract_db_create'
3
-
4
- class PostgresDbDropTest < Test::Unit::TestCase
5
- include AbstractDbCreate
6
-
7
- def db_config
8
- POSTGRES_CONFIG
9
- end
10
-
11
- def test_dropping_nonexistent_database_does_not_raise_exception
12
- assert_nothing_raised do
13
- Rake::Task["db:drop"].invoke
14
- end
15
- end
16
-
17
- end