activerecord-jdbc-adapter-onsite 1.2.2

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 (228) hide show
  1. data/.gitignore +22 -0
  2. data/.travis.yml +14 -0
  3. data/Appraisals +16 -0
  4. data/Gemfile +11 -0
  5. data/Gemfile.lock +45 -0
  6. data/History.txt +488 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.rdoc +214 -0
  9. data/Rakefile +62 -0
  10. data/activerecord-jdbc-adapter.gemspec +23 -0
  11. data/bench/bench_attributes.rb +13 -0
  12. data/bench/bench_attributes_new.rb +14 -0
  13. data/bench/bench_create.rb +12 -0
  14. data/bench/bench_find_all.rb +12 -0
  15. data/bench/bench_find_all_mt.rb +25 -0
  16. data/bench/bench_model.rb +85 -0
  17. data/bench/bench_new.rb +12 -0
  18. data/bench/bench_new_valid.rb +12 -0
  19. data/bench/bench_valid.rb +13 -0
  20. data/gemfiles/rails23.gemfile +10 -0
  21. data/gemfiles/rails23.gemfile.lock +38 -0
  22. data/gemfiles/rails30.gemfile +9 -0
  23. data/gemfiles/rails30.gemfile.lock +33 -0
  24. data/gemfiles/rails31.gemfile +9 -0
  25. data/gemfiles/rails31.gemfile.lock +35 -0
  26. data/gemfiles/rails32.gemfile +9 -0
  27. data/gemfiles/rails32.gemfile.lock +35 -0
  28. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
  29. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
  30. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
  31. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  32. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
  33. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  34. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
  35. data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
  36. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
  37. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  38. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
  39. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
  40. data/lib/activerecord-jdbc-adapter.rb +8 -0
  41. data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
  42. data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
  43. data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
  44. data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +15 -0
  45. data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
  46. data/lib/arel/engines/sql/compilers/mssql_compiler.rb +46 -0
  47. data/lib/arel/visitors/compat.rb +13 -0
  48. data/lib/arel/visitors/db2.rb +17 -0
  49. data/lib/arel/visitors/derby.rb +32 -0
  50. data/lib/arel/visitors/firebird.rb +24 -0
  51. data/lib/arel/visitors/hsqldb.rb +26 -0
  52. data/lib/arel/visitors/sql_server.rb +46 -0
  53. data/lib/arjdbc.rb +24 -0
  54. data/lib/arjdbc/db2.rb +2 -0
  55. data/lib/arjdbc/db2/adapter.rb +541 -0
  56. data/lib/arjdbc/derby.rb +7 -0
  57. data/lib/arjdbc/derby/adapter.rb +358 -0
  58. data/lib/arjdbc/derby/connection_methods.rb +19 -0
  59. data/lib/arjdbc/discover.rb +92 -0
  60. data/lib/arjdbc/firebird.rb +2 -0
  61. data/lib/arjdbc/firebird/adapter.rb +140 -0
  62. data/lib/arjdbc/h2.rb +4 -0
  63. data/lib/arjdbc/h2/adapter.rb +54 -0
  64. data/lib/arjdbc/h2/connection_methods.rb +13 -0
  65. data/lib/arjdbc/hsqldb.rb +4 -0
  66. data/lib/arjdbc/hsqldb/adapter.rb +184 -0
  67. data/lib/arjdbc/hsqldb/connection_methods.rb +15 -0
  68. data/lib/arjdbc/informix.rb +3 -0
  69. data/lib/arjdbc/informix/adapter.rb +142 -0
  70. data/lib/arjdbc/informix/connection_methods.rb +11 -0
  71. data/lib/arjdbc/jdbc.rb +2 -0
  72. data/lib/arjdbc/jdbc/adapter.rb +356 -0
  73. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  74. data/lib/arjdbc/jdbc/base_ext.rb +15 -0
  75. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  76. data/lib/arjdbc/jdbc/column.rb +47 -0
  77. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  78. data/lib/arjdbc/jdbc/connection.rb +134 -0
  79. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  80. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  81. data/lib/arjdbc/jdbc/discover.rb +18 -0
  82. data/lib/arjdbc/jdbc/driver.rb +35 -0
  83. data/lib/arjdbc/jdbc/extension.rb +47 -0
  84. data/lib/arjdbc/jdbc/java.rb +14 -0
  85. data/lib/arjdbc/jdbc/jdbc.rake +131 -0
  86. data/lib/arjdbc/jdbc/missing_functionality_helper.rb +88 -0
  87. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  88. data/lib/arjdbc/jdbc/railtie.rb +9 -0
  89. data/lib/arjdbc/jdbc/rake_tasks.rb +10 -0
  90. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  91. data/lib/arjdbc/jdbc/type_converter.rb +126 -0
  92. data/lib/arjdbc/mimer.rb +2 -0
  93. data/lib/arjdbc/mimer/adapter.rb +142 -0
  94. data/lib/arjdbc/mssql.rb +4 -0
  95. data/lib/arjdbc/mssql/adapter.rb +477 -0
  96. data/lib/arjdbc/mssql/connection_methods.rb +31 -0
  97. data/lib/arjdbc/mssql/limit_helpers.rb +101 -0
  98. data/lib/arjdbc/mssql/lock_helpers.rb +72 -0
  99. data/lib/arjdbc/mssql/tsql_helper.rb +61 -0
  100. data/lib/arjdbc/mysql.rb +4 -0
  101. data/lib/arjdbc/mysql/adapter.rb +505 -0
  102. data/lib/arjdbc/mysql/connection_methods.rb +28 -0
  103. data/lib/arjdbc/oracle.rb +3 -0
  104. data/lib/arjdbc/oracle/adapter.rb +432 -0
  105. data/lib/arjdbc/oracle/connection_methods.rb +12 -0
  106. data/lib/arjdbc/postgresql.rb +4 -0
  107. data/lib/arjdbc/postgresql/adapter.rb +861 -0
  108. data/lib/arjdbc/postgresql/connection_methods.rb +23 -0
  109. data/lib/arjdbc/sqlite3.rb +4 -0
  110. data/lib/arjdbc/sqlite3/adapter.rb +389 -0
  111. data/lib/arjdbc/sqlite3/connection_methods.rb +35 -0
  112. data/lib/arjdbc/sybase.rb +2 -0
  113. data/lib/arjdbc/sybase/adapter.rb +46 -0
  114. data/lib/arjdbc/version.rb +8 -0
  115. data/lib/generators/jdbc/USAGE +10 -0
  116. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  117. data/lib/jdbc_adapter.rb +2 -0
  118. data/lib/jdbc_adapter/rake_tasks.rb +3 -0
  119. data/lib/jdbc_adapter/version.rb +3 -0
  120. data/lib/pg.rb +26 -0
  121. data/pom.xml +57 -0
  122. data/rails_generators/jdbc_generator.rb +15 -0
  123. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  124. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  125. data/rakelib/bundler_ext.rb +11 -0
  126. data/rakelib/compile.rake +23 -0
  127. data/rakelib/db.rake +39 -0
  128. data/rakelib/rails.rake +41 -0
  129. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +69 -0
  130. data/src/java/arjdbc/derby/DerbyModule.java +324 -0
  131. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +70 -0
  132. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +74 -0
  133. data/src/java/arjdbc/jdbc/AdapterJavaService.java +68 -0
  134. data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +36 -0
  135. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1346 -0
  136. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  137. data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +127 -0
  138. data/src/java/arjdbc/mysql/MySQLModule.java +134 -0
  139. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +161 -0
  140. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +85 -0
  141. data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +82 -0
  142. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +126 -0
  143. data/test/abstract_db_create.rb +135 -0
  144. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  145. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  146. data/test/activerecord/jall.sh +7 -0
  147. data/test/activerecord/jtest.sh +3 -0
  148. data/test/db/db2.rb +11 -0
  149. data/test/db/derby.rb +12 -0
  150. data/test/db/h2.rb +11 -0
  151. data/test/db/hsqldb.rb +13 -0
  152. data/test/db/informix.rb +11 -0
  153. data/test/db/jdbc.rb +12 -0
  154. data/test/db/jndi_config.rb +40 -0
  155. data/test/db/logger.rb +3 -0
  156. data/test/db/mssql.rb +9 -0
  157. data/test/db/mysql.rb +10 -0
  158. data/test/db/oracle.rb +34 -0
  159. data/test/db/postgres.rb +18 -0
  160. data/test/db/sqlite3.rb +11 -0
  161. data/test/db2_reset_column_information_test.rb +8 -0
  162. data/test/db2_simple_test.rb +66 -0
  163. data/test/derby_migration_test.rb +68 -0
  164. data/test/derby_multibyte_test.rb +12 -0
  165. data/test/derby_reset_column_information_test.rb +8 -0
  166. data/test/derby_row_locking_test.rb +9 -0
  167. data/test/derby_simple_test.rb +139 -0
  168. data/test/generic_jdbc_connection_test.rb +29 -0
  169. data/test/h2_change_column_test.rb +68 -0
  170. data/test/h2_simple_test.rb +41 -0
  171. data/test/has_many_through.rb +79 -0
  172. data/test/helper.rb +108 -0
  173. data/test/hsqldb_simple_test.rb +6 -0
  174. data/test/informix_simple_test.rb +48 -0
  175. data/test/jdbc_common.rb +28 -0
  176. data/test/jndi_callbacks_test.rb +36 -0
  177. data/test/jndi_test.rb +25 -0
  178. data/test/manualTestDatabase.rb +191 -0
  179. data/test/models/add_not_null_column_to_table.rb +9 -0
  180. data/test/models/auto_id.rb +15 -0
  181. data/test/models/custom_pk_name.rb +14 -0
  182. data/test/models/data_types.rb +30 -0
  183. data/test/models/entry.rb +40 -0
  184. data/test/models/mixed_case.rb +22 -0
  185. data/test/models/reserved_word.rb +15 -0
  186. data/test/models/string_id.rb +17 -0
  187. data/test/models/thing.rb +16 -0
  188. data/test/models/validates_uniqueness_of_string.rb +19 -0
  189. data/test/mssql_db_create_test.rb +26 -0
  190. data/test/mssql_identity_insert_test.rb +19 -0
  191. data/test/mssql_ignore_system_views_test.rb +27 -0
  192. data/test/mssql_legacy_types_test.rb +58 -0
  193. data/test/mssql_limit_offset_test.rb +136 -0
  194. data/test/mssql_multibyte_test.rb +18 -0
  195. data/test/mssql_null_test.rb +14 -0
  196. data/test/mssql_reset_column_information_test.rb +8 -0
  197. data/test/mssql_row_locking_sql_test.rb +159 -0
  198. data/test/mssql_row_locking_test.rb +9 -0
  199. data/test/mssql_simple_test.rb +55 -0
  200. data/test/mysql_db_create_test.rb +27 -0
  201. data/test/mysql_index_length_test.rb +58 -0
  202. data/test/mysql_info_test.rb +123 -0
  203. data/test/mysql_multibyte_test.rb +10 -0
  204. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  205. data/test/mysql_reset_column_information_test.rb +8 -0
  206. data/test/mysql_simple_test.rb +125 -0
  207. data/test/oracle_reset_column_information_test.rb +8 -0
  208. data/test/oracle_simple_test.rb +18 -0
  209. data/test/oracle_specific_test.rb +83 -0
  210. data/test/postgres_db_create_test.rb +32 -0
  211. data/test/postgres_drop_db_test.rb +16 -0
  212. data/test/postgres_information_schema_leak_test.rb +29 -0
  213. data/test/postgres_mixed_case_test.rb +29 -0
  214. data/test/postgres_native_type_mapping_test.rb +93 -0
  215. data/test/postgres_nonseq_pkey_test.rb +38 -0
  216. data/test/postgres_reserved_test.rb +22 -0
  217. data/test/postgres_reset_column_information_test.rb +8 -0
  218. data/test/postgres_schema_search_path_test.rb +48 -0
  219. data/test/postgres_simple_test.rb +168 -0
  220. data/test/postgres_table_alias_length_test.rb +15 -0
  221. data/test/postgres_type_conversion_test.rb +34 -0
  222. data/test/row_locking.rb +90 -0
  223. data/test/simple.rb +731 -0
  224. data/test/sqlite3_reset_column_information_test.rb +8 -0
  225. data/test/sqlite3_simple_test.rb +316 -0
  226. data/test/sybase_jtds_simple_test.rb +28 -0
  227. data/test/sybase_reset_column_information_test.rb +8 -0
  228. metadata +288 -0
@@ -0,0 +1,29 @@
1
+ require 'jdbc_common'
2
+ require 'db/jdbc'
3
+
4
+ class GenericJdbcConnectionTest < Test::Unit::TestCase
5
+ def test_connection_available_through_jdbc_adapter
6
+ ActiveRecord::Base.connection.execute("show databases");
7
+ assert ActiveRecord::Base.connected?
8
+ end
9
+
10
+ def test_configure_connection_url
11
+ connection = Object.new
12
+ connection.extend ActiveRecord::ConnectionAdapters::JdbcConnection::ConfigHelper
13
+ connection.config = { :url => "jdbc://somehost", :options => { :hoge => "true", :fuya => "false"} }
14
+ assert_equal "jdbc://somehost?hoge=true&fuya=false", connection.configure_url
15
+
16
+ connection.config = { :url => "jdbc://somehost?param=0", :options => { :hoge => "true", :fuya => "false"} }
17
+ assert_equal "jdbc://somehost?param=0&hoge=true&fuya=false", connection.configure_url
18
+ end
19
+
20
+ def test_connection_fails_without_driver_and_url
21
+ conn = ActiveRecord::Base.remove_connection
22
+ assert_raises(ActiveRecord::ConnectionNotEstablished) do
23
+ ActiveRecord::Base.establish_connection :adapter => 'jdbc'
24
+ ActiveRecord::Base.connection
25
+ end
26
+ ensure
27
+ ActiveRecord::Base.establish_connection conn
28
+ end
29
+ end
@@ -0,0 +1,68 @@
1
+ require 'jdbc_common'
2
+ require 'db/h2'
3
+
4
+ class H2ChangeColumnTest < Test::Unit::TestCase
5
+
6
+ class Person < ActiveRecord::Base; end
7
+
8
+ class CreatePeopleTable < ActiveRecord::Migration
9
+ def self.up
10
+ create_table :people do |t|
11
+ t.integer :phone
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :people
17
+ end
18
+ end
19
+
20
+ def setup
21
+ CreatePeopleTable.up
22
+ end
23
+
24
+ def teardown
25
+ CreatePeopleTable.down
26
+ end
27
+
28
+ def test_should_change_column_type
29
+ ActiveRecord::Migration.change_column :people, :phone, :string
30
+ Person.reset_column_information
31
+
32
+ p = Person.create!(:phone => 'ABC')
33
+ assert_equal 'ABC', p.phone
34
+ end
35
+
36
+ def test_sets_defaults_on_column
37
+ ActiveRecord::Migration.change_column :people, :phone, :string, :default => '123456'
38
+ Person.reset_column_information
39
+
40
+ p = Person.create!
41
+ assert_equal '123456', p.phone
42
+ end
43
+
44
+ def test_should_change_column_default_value
45
+ ActiveRecord::Migration.add_column :people, :email, :string, :default => 'foo@example.com'
46
+ ActiveRecord::Migration.change_column :people, :email, :string, :default => 'bar@example.com'
47
+ Person.reset_column_information
48
+
49
+ p = Person.create!
50
+ assert_equal 'bar@example.com', p.email
51
+ end
52
+
53
+ def test_should_set_non_null_restriction
54
+ ActiveRecord::Migration.change_column :people, :phone, :string, :null => false
55
+ Person.reset_column_information
56
+ assert_raises(ActiveRecord::StatementInvalid) { Person.create! }
57
+ end
58
+
59
+ def test_should_set_null_restriction_with_default
60
+ p = Person.create!
61
+ ActiveRecord::Migration.change_column :people, :phone, :string, :null => true, :default => '123456'
62
+ Person.reset_column_information
63
+
64
+ assert_nil p.reload.phone
65
+ assert_equal '123456', Person.create!.phone
66
+ end
67
+ end
68
+
@@ -0,0 +1,41 @@
1
+ require 'jdbc_common'
2
+ require 'db/h2'
3
+
4
+ class H2SimpleTest < Test::Unit::TestCase
5
+ include SimpleTestMethods
6
+ end
7
+
8
+ class H2SchemaTest < Test::Unit::TestCase
9
+ def setup
10
+ @connection = ActiveRecord::Base.connection
11
+ @connection.execute("create schema s1");
12
+ @connection.execute("set schema s1");
13
+ CreateEntries.up
14
+ @connection.execute("create schema s2");
15
+ @connection.execute("set schema s2");
16
+ CreateUsers.up
17
+ @connection.execute("set schema public");
18
+ Entry.table_name = 's1.entries'
19
+ User.table_name = 's2.users'
20
+ user = User.create! :login => "something"
21
+ Entry.create! :title => "title", :content => "content", :rating => 123.45, :user => user
22
+ end
23
+
24
+ def teardown
25
+ @connection.execute("set schema s1");
26
+ CreateEntries.down
27
+ @connection.execute("set schema s2");
28
+ CreateUsers.down
29
+ @connection.execute("drop schema s1");
30
+ @connection.execute("drop schema s2");
31
+ @connection.execute("set schema public");
32
+ Entry.reset_table_name
33
+ Entry.reset_column_information
34
+ User.reset_table_name
35
+ User.reset_column_information
36
+ end
37
+
38
+ def test_find_in_other_schema
39
+ assert !Entry.all(:include => :user).empty?
40
+ end
41
+ end
@@ -0,0 +1,79 @@
1
+ class CreateRbac < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :role_assignments do |t|
4
+ t.column :role_id, :integer
5
+ t.column :user_id, :integer
6
+ end
7
+
8
+ create_table :roles do |t|
9
+ t.column :name, :string
10
+ t.column :description, :string
11
+ end
12
+
13
+ create_table :permission_groups do |t|
14
+ t.column :right_id, :integer
15
+ t.column :role_id, :integer
16
+ end
17
+
18
+ create_table :rights do |t|
19
+ t.column :name, :string
20
+ t.column :controller_name, :string
21
+ t.column :actions, :string
22
+ t.column :hours, :float, :null => false
23
+ end
24
+ end
25
+
26
+ def self.down
27
+ drop_table :role_assignments
28
+ drop_table :roles
29
+ drop_table :permission_groups
30
+ drop_table :rights
31
+ end
32
+ end
33
+
34
+ class Right < ActiveRecord::Base
35
+ has_many :permission_groups, :dependent => :destroy
36
+ has_many :roles, :through => :permission_groups
37
+ end
38
+
39
+ class Role < ActiveRecord::Base
40
+ has_many :permission_groups, :dependent => :destroy
41
+ has_many :rights, :through => :permission_groups
42
+ has_many :role_assignments, :dependent => :destroy
43
+ end
44
+
45
+ class PermissionGroup < ActiveRecord::Base
46
+ belongs_to :right
47
+ belongs_to :role
48
+ end
49
+
50
+ class RoleAssignment < ActiveRecord::Base
51
+ belongs_to :user
52
+ belongs_to :role
53
+ end
54
+
55
+ module HasManyThroughMethods
56
+ def setup
57
+ CreateRbac.up
58
+ end
59
+
60
+ def teardown
61
+ CreateRbac.down
62
+ end
63
+
64
+ def test_has_many_through
65
+ admin_role = Role.create( {:name => "Administrator", :description => "System defined super user - access to right and role management."} )
66
+ admin_role.save
67
+
68
+ assert_equal(0, admin_role.rights.sum(:hours))
69
+
70
+ role_rights = Right.create( {:name => "Administrator - Full Access To Roles", :actions => "*", :controller_name => "Admin::RolesController", :hours => 0} )
71
+ right_rights = Right.create( {:name => "Administrator - Full Access To Rights", :actions => "*", :controller_name => "Admin::RightsController", :hours => 1.5} )
72
+
73
+ admin_role.rights << role_rights
74
+ admin_role.rights << right_rights
75
+ admin_role.save
76
+
77
+ assert_equal(1.5, admin_role.rights.sum(:hours))
78
+ end
79
+ end
@@ -0,0 +1,108 @@
1
+ module Kernel
2
+ def find_executable?(name)
3
+ ENV['PATH'].split(File::PATH_SEPARATOR).detect {|p| File.executable?(File.join(p, name))}
4
+ end
5
+
6
+ def pg_cmdline_params
7
+ params = ""
8
+ params += "-h #{ENV['PGHOST']} " if ENV['PGHOST']
9
+ params += "-p #{ENV['PGPORT']} " if ENV['PGPORT']
10
+ params
11
+ end
12
+
13
+ def have_postgres?
14
+ if find_executable?("psql")
15
+ if `psql -c '\\l' -U postgres #{pg_cmdline_params}2>&1` && $?.exitstatus == 0
16
+ true
17
+ else
18
+ warn "No \"postgres\" role? You might need to execute `createuser postgres -drs' first."
19
+ false
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ # assert_queries and SQLCounter taken from rails active_record tests
26
+ require 'test/unit'
27
+ class Test::Unit::TestCase
28
+ def assert_queries(num = 1, matching = nil)
29
+ if !ActiveRecord::SQLCounter.enabled?
30
+ warn "SQLCounter assert_queries skipped"
31
+ return
32
+ end
33
+
34
+ ActiveRecord::SQLCounter.log = []
35
+ yield
36
+ ensure
37
+ queries = nil
38
+ ActiveRecord::SQLCounter.log.tap {|log| queries = (matching ? log.select {|s| s =~ matching } : log) }
39
+ assert_equal num, queries.size, "#{queries.size} instead of #{num} queries were executed.#{queries.size == 0 ? '' : "\nQueries:\n#{queries.join("\n")}"}"
40
+ end
41
+ end
42
+
43
+ module ActiveRecord
44
+ class SQLCounter
45
+ @@enabled = true
46
+ def self.enabled?
47
+ @@enabled
48
+ end
49
+
50
+ def self.ignored_sql
51
+ @@ignored_sql
52
+ end
53
+
54
+ def self.ignored_sql=(value)
55
+ @@ignored_sql = value
56
+ end
57
+
58
+ self.ignored_sql = [
59
+ /^PRAGMA (?!(table_info))/,
60
+ /^SELECT currval/,
61
+ /^SELECT CAST/,
62
+ /^SELECT @@IDENTITY/,
63
+ /^SELECT @@ROWCOUNT/,
64
+ /^SAVEPOINT/,
65
+ /^ROLLBACK TO SAVEPOINT/,
66
+ /^RELEASE SAVEPOINT/,
67
+ /^SHOW max_identifier_length/,
68
+ /^BEGIN/,
69
+ /^COMMIT/
70
+ ]
71
+
72
+ # FIXME: this needs to be refactored so specific database can add their own
73
+ # ignored SQL. This ignored SQL is for Oracle.
74
+ ignored_sql.concat [/^select .*nextval/i,
75
+ /^SAVEPOINT/,
76
+ /^ROLLBACK TO/,
77
+ /^\s*select .* from all_triggers/im
78
+ ]
79
+
80
+ def self.log=(v)
81
+ @@log = v
82
+ end
83
+
84
+ def self.log
85
+ @@log
86
+ end
87
+
88
+ self.log = []
89
+
90
+ def call(name, start, finish, message_id, values)
91
+ sql = values[:sql]
92
+
93
+ # FIXME: this seems bad. we should probably have a better way to indicate
94
+ # the query was cached
95
+ unless 'CACHE' == values[:name]
96
+ self.class.log << sql unless self.class.ignored_sql.
97
+ any? { |r| sql =~ r }
98
+ end
99
+ end
100
+ end
101
+
102
+ begin
103
+ require 'active_support/notifications'
104
+ ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
105
+ rescue LoadError
106
+ @@enabled = false
107
+ end
108
+ end
@@ -0,0 +1,6 @@
1
+ require 'jdbc_common'
2
+ require 'db/hsqldb'
3
+
4
+ class HsqldbSimpleTest < Test::Unit::TestCase
5
+ include SimpleTestMethods
6
+ end
@@ -0,0 +1,48 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # To run this script, run the following:
4
+ #
5
+ # CREATE DATABASE weblog_development;
6
+ #
7
+ # TODO: Finish the explanation.
8
+
9
+ require 'jdbc_common'
10
+ require 'db/informix'
11
+
12
+ class InformixSimpleTest < Test::Unit::TestCase
13
+ include SimpleTestMethods
14
+
15
+ # Informix does not like "= NULL".
16
+ def test_equals_null
17
+ Entry.create!(:title => "Foo")
18
+ entry = Entry.find(:first, :conditions => ["content = NULL"])
19
+ assert_equal "Foo", entry.title
20
+ end
21
+
22
+ # Informix does not like "!= NULL" or "<> NULL".
23
+ def test_not_equals_null
24
+ Entry.create!(:title => "Foo", :content => "Bar")
25
+ entry = Entry.find_by_title("Foo", :conditions => ["content != NULL"])
26
+ assert_equal "Foo", entry.title
27
+ entry = Entry.find_by_title("Foo", :conditions => ["content <> NULL"])
28
+ assert_equal "Foo", entry.title
29
+ end
30
+ end
31
+
32
+ class InformixMultibyteTest < Test::Unit::TestCase
33
+ include MultibyteTestMethods
34
+
35
+ # Overriding the included test since we can't create text fields via a
36
+ # simple insert in Informix.
37
+ def test_select_multibyte_string
38
+ Entry.create!(:title => 'テスト', :content => '本文')
39
+ entry = Entry.find(:first)
40
+ assert_equal "テスト", entry.title
41
+ assert_equal "本文", entry.content
42
+ assert_equal entry, Entry.find_by_title("テスト")
43
+ end
44
+ end
45
+
46
+ class InformixHasManyThroughTest < Test::Unit::TestCase
47
+ include HasManyThroughMethods
48
+ end
@@ -0,0 +1,28 @@
1
+ # Simple method to reduce the boilerplate
2
+ def jruby?
3
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
4
+ end
5
+
6
+ require 'arjdbc' if jruby?
7
+ puts "Using activerecord version #{ActiveRecord::VERSION::STRING}"
8
+ require 'models/auto_id'
9
+ require 'models/entry'
10
+ require 'models/data_types'
11
+ require 'models/add_not_null_column_to_table'
12
+ require 'models/validates_uniqueness_of_string'
13
+ require 'models/string_id'
14
+ require 'models/thing'
15
+ require 'models/custom_pk_name'
16
+ require 'simple'
17
+ require 'has_many_through'
18
+ require 'helper'
19
+ require 'row_locking'
20
+ require 'test/unit'
21
+
22
+ # Comment/uncomment to enable logging to be loaded for any of the database adapters
23
+ if $DEBUG || ENV['DEBUG']
24
+ require 'db/logger'
25
+ require 'ruby-debug'
26
+ end
27
+
28
+
@@ -0,0 +1,36 @@
1
+ require 'jdbc_common'
2
+ require 'db/jndi_config'
3
+
4
+ begin
5
+ require 'mocha'
6
+
7
+ class JndiConnectionPoolCallbacksTest < Test::Unit::TestCase
8
+ def setup
9
+ @logger = stub_everything "logger"
10
+ @config = JNDI_CONFIG
11
+ @connection = ActiveRecord::ConnectionAdapters::JdbcConnection.new @config
12
+ Entry.connection_pool.disconnect!
13
+ assert !Entry.connection_pool.connected?
14
+ class << Entry.connection_pool; public :instance_variable_set; end
15
+ end
16
+
17
+ def teardown
18
+ Entry.connection_pool.disconnect!
19
+ end
20
+
21
+ def test_should_call_hooks_on_checkout_and_checkin
22
+ @adapter = ActiveRecord::ConnectionAdapters::JdbcAdapter.new @connection, @logger, @config
23
+ Entry.connection_pool.instance_variable_set "@connections", [@adapter]
24
+ assert !@connection.active?
25
+
26
+ Entry.connection_pool.checkout
27
+ assert @connection.active?
28
+
29
+ Entry.connection_pool.checkin @adapter
30
+ assert !@connection.active?
31
+ end
32
+ end
33
+
34
+ rescue LoadError
35
+ warn "mocha not found, disabling mocha-based tests"
36
+ end if ActiveRecord::Base.respond_to?(:connection_pool)