tgbyte-activerecord-jdbc-adapter 1.2.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 (218) hide show
  1. data/.gitignore +22 -0
  2. data/.travis.yml +8 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +40 -0
  5. data/History.txt +488 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.rdoc +199 -0
  8. data/Rakefile +60 -0
  9. data/activerecord-jdbc-adapter.gemspec +23 -0
  10. data/bench/bench_attributes.rb +13 -0
  11. data/bench/bench_attributes_new.rb +14 -0
  12. data/bench/bench_create.rb +12 -0
  13. data/bench/bench_find_all.rb +12 -0
  14. data/bench/bench_find_all_mt.rb +25 -0
  15. data/bench/bench_model.rb +85 -0
  16. data/bench/bench_new.rb +12 -0
  17. data/bench/bench_new_valid.rb +12 -0
  18. data/bench/bench_valid.rb +13 -0
  19. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
  20. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
  21. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
  22. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  23. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
  24. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  25. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
  26. data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
  27. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
  28. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  29. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
  30. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
  31. data/lib/activerecord-jdbc-adapter.rb +8 -0
  32. data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
  33. data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
  34. data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
  35. data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +15 -0
  36. data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
  37. data/lib/arel/engines/sql/compilers/mssql_compiler.rb +46 -0
  38. data/lib/arel/visitors/compat.rb +13 -0
  39. data/lib/arel/visitors/db2.rb +17 -0
  40. data/lib/arel/visitors/derby.rb +32 -0
  41. data/lib/arel/visitors/firebird.rb +24 -0
  42. data/lib/arel/visitors/hsqldb.rb +26 -0
  43. data/lib/arel/visitors/sql_server.rb +46 -0
  44. data/lib/arjdbc.rb +24 -0
  45. data/lib/arjdbc/db2.rb +2 -0
  46. data/lib/arjdbc/db2/adapter.rb +510 -0
  47. data/lib/arjdbc/derby.rb +7 -0
  48. data/lib/arjdbc/derby/adapter.rb +358 -0
  49. data/lib/arjdbc/derby/connection_methods.rb +19 -0
  50. data/lib/arjdbc/discover.rb +92 -0
  51. data/lib/arjdbc/firebird.rb +2 -0
  52. data/lib/arjdbc/firebird/adapter.rb +136 -0
  53. data/lib/arjdbc/h2.rb +4 -0
  54. data/lib/arjdbc/h2/adapter.rb +54 -0
  55. data/lib/arjdbc/h2/connection_methods.rb +13 -0
  56. data/lib/arjdbc/hsqldb.rb +4 -0
  57. data/lib/arjdbc/hsqldb/adapter.rb +184 -0
  58. data/lib/arjdbc/hsqldb/connection_methods.rb +15 -0
  59. data/lib/arjdbc/informix.rb +3 -0
  60. data/lib/arjdbc/informix/adapter.rb +138 -0
  61. data/lib/arjdbc/informix/connection_methods.rb +11 -0
  62. data/lib/arjdbc/jdbc.rb +2 -0
  63. data/lib/arjdbc/jdbc/adapter.rb +356 -0
  64. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  65. data/lib/arjdbc/jdbc/base_ext.rb +15 -0
  66. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  67. data/lib/arjdbc/jdbc/column.rb +47 -0
  68. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  69. data/lib/arjdbc/jdbc/connection.rb +134 -0
  70. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  71. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  72. data/lib/arjdbc/jdbc/discover.rb +18 -0
  73. data/lib/arjdbc/jdbc/driver.rb +35 -0
  74. data/lib/arjdbc/jdbc/extension.rb +47 -0
  75. data/lib/arjdbc/jdbc/java.rb +14 -0
  76. data/lib/arjdbc/jdbc/jdbc.rake +131 -0
  77. data/lib/arjdbc/jdbc/missing_functionality_helper.rb +88 -0
  78. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  79. data/lib/arjdbc/jdbc/railtie.rb +9 -0
  80. data/lib/arjdbc/jdbc/rake_tasks.rb +10 -0
  81. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  82. data/lib/arjdbc/jdbc/type_converter.rb +126 -0
  83. data/lib/arjdbc/mimer.rb +2 -0
  84. data/lib/arjdbc/mimer/adapter.rb +142 -0
  85. data/lib/arjdbc/mssql.rb +4 -0
  86. data/lib/arjdbc/mssql/adapter.rb +477 -0
  87. data/lib/arjdbc/mssql/connection_methods.rb +31 -0
  88. data/lib/arjdbc/mssql/limit_helpers.rb +101 -0
  89. data/lib/arjdbc/mssql/lock_helpers.rb +72 -0
  90. data/lib/arjdbc/mssql/tsql_helper.rb +61 -0
  91. data/lib/arjdbc/mysql.rb +4 -0
  92. data/lib/arjdbc/mysql/adapter.rb +505 -0
  93. data/lib/arjdbc/mysql/connection_methods.rb +28 -0
  94. data/lib/arjdbc/oracle.rb +3 -0
  95. data/lib/arjdbc/oracle/adapter.rb +428 -0
  96. data/lib/arjdbc/oracle/connection_methods.rb +12 -0
  97. data/lib/arjdbc/postgresql.rb +4 -0
  98. data/lib/arjdbc/postgresql/adapter.rb +825 -0
  99. data/lib/arjdbc/postgresql/connection_methods.rb +23 -0
  100. data/lib/arjdbc/sqlite3.rb +4 -0
  101. data/lib/arjdbc/sqlite3/adapter.rb +389 -0
  102. data/lib/arjdbc/sqlite3/connection_methods.rb +35 -0
  103. data/lib/arjdbc/sybase.rb +2 -0
  104. data/lib/arjdbc/sybase/adapter.rb +46 -0
  105. data/lib/arjdbc/version.rb +8 -0
  106. data/lib/generators/jdbc/USAGE +10 -0
  107. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  108. data/lib/jdbc_adapter.rb +2 -0
  109. data/lib/jdbc_adapter/rake_tasks.rb +3 -0
  110. data/lib/jdbc_adapter/version.rb +3 -0
  111. data/lib/pg.rb +26 -0
  112. data/pom.xml +57 -0
  113. data/rails_generators/jdbc_generator.rb +15 -0
  114. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  115. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  116. data/rakelib/bundler_ext.rb +11 -0
  117. data/rakelib/compile.rake +23 -0
  118. data/rakelib/db.rake +39 -0
  119. data/rakelib/rails.rake +41 -0
  120. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +62 -0
  121. data/src/java/arjdbc/derby/DerbyModule.java +324 -0
  122. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +70 -0
  123. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +74 -0
  124. data/src/java/arjdbc/jdbc/AdapterJavaService.java +68 -0
  125. data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +36 -0
  126. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1326 -0
  127. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  128. data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +127 -0
  129. data/src/java/arjdbc/mysql/MySQLModule.java +134 -0
  130. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +161 -0
  131. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +85 -0
  132. data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +82 -0
  133. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +126 -0
  134. data/test/abstract_db_create.rb +135 -0
  135. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  136. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  137. data/test/activerecord/jall.sh +7 -0
  138. data/test/activerecord/jtest.sh +3 -0
  139. data/test/db/db2.rb +11 -0
  140. data/test/db/derby.rb +12 -0
  141. data/test/db/h2.rb +11 -0
  142. data/test/db/hsqldb.rb +13 -0
  143. data/test/db/informix.rb +11 -0
  144. data/test/db/jdbc.rb +12 -0
  145. data/test/db/jndi_config.rb +40 -0
  146. data/test/db/logger.rb +3 -0
  147. data/test/db/mssql.rb +9 -0
  148. data/test/db/mysql.rb +10 -0
  149. data/test/db/oracle.rb +34 -0
  150. data/test/db/postgres.rb +9 -0
  151. data/test/db/sqlite3.rb +11 -0
  152. data/test/db2_reset_column_information_test.rb +8 -0
  153. data/test/db2_simple_test.rb +66 -0
  154. data/test/derby_migration_test.rb +68 -0
  155. data/test/derby_multibyte_test.rb +12 -0
  156. data/test/derby_reset_column_information_test.rb +8 -0
  157. data/test/derby_row_locking_test.rb +9 -0
  158. data/test/derby_simple_test.rb +139 -0
  159. data/test/generic_jdbc_connection_test.rb +29 -0
  160. data/test/h2_change_column_test.rb +68 -0
  161. data/test/h2_simple_test.rb +41 -0
  162. data/test/has_many_through.rb +79 -0
  163. data/test/helper.rb +87 -0
  164. data/test/hsqldb_simple_test.rb +6 -0
  165. data/test/informix_simple_test.rb +48 -0
  166. data/test/jdbc_common.rb +28 -0
  167. data/test/jndi_callbacks_test.rb +36 -0
  168. data/test/jndi_test.rb +25 -0
  169. data/test/manualTestDatabase.rb +191 -0
  170. data/test/models/add_not_null_column_to_table.rb +9 -0
  171. data/test/models/auto_id.rb +15 -0
  172. data/test/models/data_types.rb +30 -0
  173. data/test/models/entry.rb +40 -0
  174. data/test/models/mixed_case.rb +22 -0
  175. data/test/models/reserved_word.rb +15 -0
  176. data/test/models/string_id.rb +17 -0
  177. data/test/models/thing.rb +16 -0
  178. data/test/models/validates_uniqueness_of_string.rb +19 -0
  179. data/test/mssql_db_create_test.rb +26 -0
  180. data/test/mssql_identity_insert_test.rb +19 -0
  181. data/test/mssql_ignore_system_views_test.rb +27 -0
  182. data/test/mssql_legacy_types_test.rb +58 -0
  183. data/test/mssql_limit_offset_test.rb +136 -0
  184. data/test/mssql_multibyte_test.rb +18 -0
  185. data/test/mssql_null_test.rb +14 -0
  186. data/test/mssql_reset_column_information_test.rb +8 -0
  187. data/test/mssql_row_locking_sql_test.rb +159 -0
  188. data/test/mssql_row_locking_test.rb +9 -0
  189. data/test/mssql_simple_test.rb +55 -0
  190. data/test/mysql_db_create_test.rb +27 -0
  191. data/test/mysql_index_length_test.rb +58 -0
  192. data/test/mysql_info_test.rb +123 -0
  193. data/test/mysql_multibyte_test.rb +10 -0
  194. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  195. data/test/mysql_reset_column_information_test.rb +8 -0
  196. data/test/mysql_simple_test.rb +125 -0
  197. data/test/oracle_reset_column_information_test.rb +8 -0
  198. data/test/oracle_simple_test.rb +18 -0
  199. data/test/oracle_specific_test.rb +83 -0
  200. data/test/postgres_db_create_test.rb +32 -0
  201. data/test/postgres_drop_db_test.rb +16 -0
  202. data/test/postgres_information_schema_leak_test.rb +29 -0
  203. data/test/postgres_mixed_case_test.rb +29 -0
  204. data/test/postgres_native_type_mapping_test.rb +89 -0
  205. data/test/postgres_nonseq_pkey_test.rb +38 -0
  206. data/test/postgres_reserved_test.rb +22 -0
  207. data/test/postgres_reset_column_information_test.rb +8 -0
  208. data/test/postgres_schema_search_path_test.rb +48 -0
  209. data/test/postgres_simple_test.rb +167 -0
  210. data/test/postgres_table_alias_length_test.rb +15 -0
  211. data/test/postgres_type_conversion_test.rb +34 -0
  212. data/test/row_locking.rb +90 -0
  213. data/test/simple.rb +717 -0
  214. data/test/sqlite3_reset_column_information_test.rb +8 -0
  215. data/test/sqlite3_simple_test.rb +316 -0
  216. data/test/sybase_jtds_simple_test.rb +28 -0
  217. data/test/sybase_reset_column_information_test.rb +8 -0
  218. metadata +275 -0
@@ -0,0 +1,27 @@
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
+ Rake::Task["db:create"].invoke
13
+ if find_executable?("mysql")
14
+ output = nil
15
+ IO.popen("mysql -u #{MYSQL_CONFIG[:username]} --password=#{MYSQL_CONFIG[:password]}", "r+") do |mysql|
16
+ mysql << "show databases where `Database` = '#{@db_name}';"
17
+ mysql.close_write
18
+ assert mysql.read =~ /#{@db_name}/m
19
+ end
20
+ end
21
+ end
22
+
23
+ def test_rake_db_test_purge
24
+ Rake::Task["db:create"].invoke
25
+ Rake::Task["db:test:purge"].invoke
26
+ end
27
+ end
@@ -0,0 +1,58 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+
4
+ class MySQLIndexLengthDBSetup < ActiveRecord::Migration
5
+ def self.up
6
+ execute <<-SQL
7
+ CREATE TABLE index_length_test (
8
+ int_column INT,
9
+ text_column TEXT,
10
+ second_text_column TEXT,
11
+ INDEX ix_int (int_column),
12
+ INDEX ix_length_text (text_column(255))
13
+ )
14
+ SQL
15
+ end
16
+
17
+ def self.down
18
+ drop_table 'index_length_test'
19
+ end
20
+ end
21
+
22
+ class MySQLIndexLengthTest < Test::Unit::TestCase
23
+ def setup
24
+ MySQLIndexLengthDBSetup.up
25
+ @connection = ActiveRecord::Base.connection
26
+ end
27
+
28
+ def teardown
29
+ MySQLIndexLengthDBSetup.down
30
+ end
31
+
32
+ def test_index_length
33
+ index = @connection.indexes('index_length_test').find { |idx| idx.name == 'ix_length_text' }
34
+ assert_not_nil index
35
+ assert_equal "index_length_test", index.table
36
+ assert_equal "ix_length_text", index.name
37
+ assert !index.unique
38
+ assert_equal ["text_column"], index.columns
39
+ assert_equal [255], index.lengths
40
+ end
41
+
42
+ def test_add_index
43
+ @connection.add_index 'index_length_test', ['text_column', 'second_text_column'],
44
+ :name => 'added_index', :length => {'text_column' => 32, 'second_text_column' => 64}
45
+
46
+ index = @connection.indexes('index_length_test').find { |idx| idx.name == 'added_index' }
47
+ assert_not_nil index
48
+ assert_equal ['text_column', 'second_text_column'], index.columns
49
+ assert_equal [32, 64], index.lengths
50
+ end
51
+
52
+ def test_index_without_length
53
+ index = @connection.indexes('index_length_test').find { |idx| idx.name == 'ix_int' }
54
+ assert_not_nil index
55
+ assert_equal ['int_column'], index.columns
56
+ assert_equal [nil], index.lengths
57
+ end
58
+ end
@@ -0,0 +1,123 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+ begin; require 'active_support/core_ext/numeric/bytes'; rescue LoadError; end
4
+
5
+ class DBSetup < ActiveRecord::Migration
6
+
7
+ def self.up
8
+ create_table :books do |t|
9
+ t.string :title
10
+ t.timestamps
11
+ end
12
+
13
+ create_table :cars, :primary_key => 'legacy_id' do |t|
14
+ t.string :name
15
+ t.date :production_started_on
16
+ end
17
+
18
+ create_table :cats, :id => false do |t|
19
+ t.string :name
20
+ end
21
+
22
+ create_table :memos do |t|
23
+ t.text :text, :limit => 16.megabytes
24
+ end
25
+ end
26
+
27
+ def self.down
28
+ drop_table :books
29
+ drop_table :cars
30
+ drop_table :cats
31
+ drop_table :memos
32
+ end
33
+
34
+ end
35
+
36
+ class MysqlInfoTest < Test::Unit::TestCase
37
+
38
+ def setup
39
+ DBSetup.up
40
+ @connection = ActiveRecord::Base.connection
41
+ end
42
+
43
+ def teardown
44
+ DBSetup.down
45
+ end
46
+
47
+ ## primary_key
48
+ def test_should_return_the_primary_key_of_a_table
49
+ assert_equal 'id', @connection.primary_key('books')
50
+ end
51
+
52
+ def test_should_be_able_to_return_a_custom_primary_key
53
+ assert_equal 'legacy_id', @connection.primary_key('cars')
54
+ end
55
+
56
+ def test_should_return_nil_for_a_table_without_a_primary_key
57
+ assert_nil @connection.primary_key('cats')
58
+ end
59
+
60
+ ## structure_dump
61
+ def test_should_include_the_tables_in_a_structure_dump
62
+ # TODO: Improve these tests, I added this one because no other tests exists for this method.
63
+ dump = @connection.structure_dump
64
+ assert dump.include?('CREATE TABLE `books`')
65
+ assert dump.include?('CREATE TABLE `cars`')
66
+ assert dump.include?('CREATE TABLE `cats`')
67
+ assert dump.include?('CREATE TABLE `memos`')
68
+ end
69
+
70
+ def test_should_include_longtext_in_schema_dump
71
+ strio = StringIO.new
72
+ ActiveRecord::SchemaDumper::dump(@connection, strio)
73
+ dump = strio.string
74
+ assert_match %r{t.text\s+"text",\s+:limit => 2147483647$}, dump
75
+ end
76
+
77
+ # JRUBY-5040
78
+ def test_schema_dump_should_not_have_limits_on_datetime
79
+ strio = StringIO.new
80
+ ActiveRecord::SchemaDumper::dump(@connection, strio)
81
+ dump = strio.string
82
+ dump.lines.grep(/datetime/).each {|line| assert line !~ /limit/ }
83
+ end
84
+
85
+ def test_schema_dump_should_not_have_limits_on_date
86
+ strio = StringIO.new
87
+ ActiveRecord::SchemaDumper::dump(@connection, strio)
88
+ dump = strio.string
89
+ dump.lines.grep(/date/).each {|line| assert line !~ /limit/ }
90
+ end
91
+
92
+ def test_should_include_limit
93
+ text_column = @connection.columns('memos').find { |c| c.name == 'text' }
94
+ assert_equal 2147483647, text_column.limit
95
+ end
96
+
97
+ def test_should_set_sqltype_to_longtext
98
+ text_column = @connection.columns('memos').find { |c| c.name == 'text' }
99
+ assert text_column.sql_type =~ /^longtext/i
100
+ end
101
+
102
+ def test_should_set_type_to_text
103
+ text_column = @connection.columns('memos').find { |c| c.name == 'text' }
104
+ assert_equal :text, text_column.type
105
+ end
106
+
107
+ def test_verify_url_has_options
108
+ url = @connection.config[:url]
109
+ assert url =~ /characterEncoding=utf8/
110
+ assert url =~ /useUnicode=true/
111
+ assert url =~ /zeroDateTimeBehavior=convertToNull/
112
+ end
113
+
114
+ def test_no_limits_for_some_data_types
115
+ DbTypeMigration.up
116
+ strio = StringIO.new
117
+ ActiveRecord::SchemaDumper.dump(@connection, strio)
118
+ dump_lines = strio.string
119
+ assert_nil dump_lines.lines.detect {|l| l =~ /\.(float|date|datetime|integer|time|timestamp) .* :limit/ && l !~ /sample_integer/ }
120
+ ensure
121
+ DbTypeMigration.down
122
+ end
123
+ end
@@ -0,0 +1,10 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+
4
+ class MySQLMultibyteTest < Test::Unit::TestCase
5
+ include MultibyteTestMethods
6
+ end
7
+
8
+ class MySQLNonUTF8EncodingTest < Test::Unit::TestCase
9
+ include NonUTF8EncodingMethods
10
+ end
@@ -0,0 +1,42 @@
1
+ require 'jdbc_common'
2
+ require 'db/mysql'
3
+
4
+ class Project < ActiveRecord::Migration
5
+ def self.up
6
+ create_table :project, :primary_key => "project_id" do |t|
7
+ t.string :projectType, :limit => 31
8
+ t.boolean :published
9
+ t.datetime :created_date
10
+ t.text :abstract, :title
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table :project
16
+ end
17
+
18
+ end
19
+
20
+ class MysqlNonstandardPrimaryKeyTest < Test::Unit::TestCase
21
+
22
+ def setup
23
+ Project.up
24
+ end
25
+
26
+ def teardown
27
+ Project.down
28
+ end
29
+
30
+ def standard_dump
31
+ stream = StringIO.new
32
+ ActiveRecord::SchemaDumper.ignore_tables = []
33
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
34
+ stream.string
35
+ end
36
+
37
+ def test_nonstandard_primary_key
38
+ output = standard_dump
39
+ assert_match %r(:primary_key => "project_id"), output, "non-standard primary key not preserved"
40
+ end
41
+
42
+ end
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/mysql'
5
+
6
+ class MySQLResetColumnInformationTest < Test::Unit::TestCase
7
+ include ResetColumnInformationTestMethods
8
+ end
@@ -0,0 +1,125 @@
1
+ # To run this script, run the following in a mysql instance:
2
+ #
3
+ # drop database if exists weblog_development;
4
+ # create database weblog_development;
5
+ # grant all on weblog_development.* to blog@localhost;
6
+ # flush privileges;
7
+
8
+ require 'jdbc_common'
9
+ require 'db/mysql'
10
+
11
+ class MysqlSimpleTest < Test::Unit::TestCase
12
+ include SimpleTestMethods
13
+ include ActiveRecord3TestMethods
14
+ include ColumnNameQuotingTests
15
+
16
+ column_quote_char "`"
17
+
18
+ def test_column_class_instantiation
19
+ text_column = nil
20
+ assert_nothing_raised do
21
+ text_column = ActiveRecord::ConnectionAdapters::MysqlColumn.
22
+ new("title", nil, "text")
23
+ end
24
+ assert_not_nil text_column
25
+ end
26
+
27
+ def test_string_quoting_oddity
28
+ s = "0123456789a'a"
29
+ assert_equal "'0123456789a\\'a'", ActiveRecord::Base.connection.quote(s)
30
+
31
+ s2 = s[10,3]
32
+ assert_equal "a'a", s2
33
+ assert_equal "'a\\'a'", ActiveRecord::Base.connection.quote(s2)
34
+ end
35
+
36
+ def test_table_name_quoting_with_dot
37
+ s = "#{MYSQL_CONFIG[:database]}.posts"
38
+ assert_equal "`#{MYSQL_CONFIG[:database]}`.`posts`", ActiveRecord::Base.connection.quote_table_name(s)
39
+ end
40
+
41
+ def test_update_all_with_limit
42
+ assert_nothing_raised { Entry.update_all({:title => "test"}, {}, {:limit => 1}) }
43
+ end
44
+
45
+ # from rails active record tests
46
+ def test_update_all_with_joins_and_offset_and_order
47
+ user_1 = User.create :login => 'user_1'
48
+ user_2 = User.create :login => 'user_2'
49
+
50
+ entry_1 = Entry.create :title => 'title_1', :content => 'content_1', :rating => 0,
51
+ :user_id => user_1.id
52
+ entry_2 = Entry.create :title => 'title_2', :content => 'content_2', :rating => 1,
53
+ :user_id => user_2.id
54
+
55
+ all_entries = Entry.joins(:user).where('users.id' => user_1.id).
56
+ order('users.id', 'entries.id')
57
+ count = all_entries.count
58
+ entries = all_entries.offset(1)
59
+
60
+ assert_equal count - 1, entries.update_all(:user_id => user_2.id)
61
+ assert_equal user_2, Entry.find_by_title('title_2').user
62
+ end
63
+
64
+ # from rails active record tests
65
+ def test_caching_of_columns
66
+ user = User.create :login => 'test'
67
+
68
+ # clear cache possibly created by other tests
69
+ user.entries.reset_column_information
70
+
71
+ assert_queries(1, /SHOW FIELDS/) { user.entries.columns; user.entries.columns }
72
+
73
+ ## and again to verify that reset_column_information clears the cache correctly
74
+ user.entries.reset_column_information
75
+ assert_queries(1, /SHOW FIELDS/) { user.entries.columns; user.entries.columns }
76
+ end
77
+
78
+ # from rails active record tests
79
+ def test_drop_index_from_table_named_values
80
+ connection = Entry.connection
81
+ connection.create_table :values, :force => true do |t|
82
+ t.integer :value
83
+ end
84
+
85
+ assert_nothing_raised do
86
+ connection.add_index :values, :value
87
+ connection.remove_index :values, :column => :value
88
+ end
89
+
90
+ connection.drop_table :values rescue nil
91
+ end
92
+
93
+ def test_find_in_other_schema_with_include
94
+ old_entries_table_name = Entry.table_name
95
+ old_users_table_name = User.table_name
96
+ begin
97
+ User.table_name = "#{MYSQL_CONFIG[:database]}.users"
98
+ Entry.table_name = "#{MYSQL_CONFIG[:database]}.entries"
99
+ assert !Entry.all(:include => :user).empty?
100
+ ensure
101
+ Entry.table_name = old_entries_table_name
102
+ User.table_name = old_users_table_name
103
+ end
104
+ end
105
+
106
+ def test_create_xml_column
107
+ assert_nothing_raised do
108
+ @connection.create_table :xml_testings do |t|
109
+ t.xml :xml_test
110
+ end
111
+ end
112
+
113
+ xml_test = @connection.columns(:xml_testings).detect do |c|
114
+ c.name == "xml_test"
115
+ end
116
+
117
+ assert_equal "text", xml_test.sql_type
118
+ ensure
119
+ @connection.drop_table :xml_testings rescue nil
120
+ end
121
+ end
122
+
123
+ class MysqlHasManyThroughTest < Test::Unit::TestCase
124
+ include HasManyThroughMethods
125
+ end
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/oracle'
5
+
6
+ class OracleResetColumnInformationTest < Test::Unit::TestCase
7
+ include ResetColumnInformationTestMethods
8
+ end
@@ -0,0 +1,18 @@
1
+ require 'jdbc_common'
2
+ require 'db/oracle'
3
+
4
+ class OracleSimpleTest < Test::Unit::TestCase
5
+ include SimpleTestMethods
6
+
7
+ def test_default_id_type_is_integer
8
+ assert Integer === Entry.first.id
9
+ end
10
+
11
+ def test_sequences_are_not_cached
12
+ ActiveRecord::Base.transaction do
13
+ e1 = Entry.create :title => "hello1"
14
+ e2 = Entry.create :title => "hello2"
15
+ assert e1.id != e2.id
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,83 @@
1
+ require 'jdbc_common'
2
+ require 'db/oracle'
3
+
4
+ class DefaultNumber < ActiveRecord::Base
5
+ end
6
+
7
+ class OracleSpecificTest < Test::Unit::TestCase
8
+ include MultibyteTestMethods # so we can get @java_con
9
+
10
+ def setup
11
+ super
12
+ @java_con.createStatement.execute "
13
+ CREATE TABLE DEFAULT_NUMBERS (
14
+ ID INTEGER NOT NULL PRIMARY KEY, VALUE NUMBER, DATUM DATE, FPOINT NUMBER(10,2), VALUE2 NUMBER(15)
15
+ )"
16
+ @java_con.createStatement.execute "
17
+ INSERT INTO DEFAULT_NUMBERS (ID, VALUE, DATUM, FPOINT, VALUE2)
18
+ VALUES (1, 0.076, TIMESTAMP'2009-11-05 00:00:00', 1000.01, 1234)"
19
+ @java_con.createStatement.execute "CREATE SYNONYM POSTS FOR ENTRIES"
20
+ end
21
+
22
+ def teardown
23
+ @java_con.createStatement.execute "DROP TABLE DEFAULT_NUMBERS"
24
+ @java_con.createStatement.execute "DROP SYNONYM POSTS"
25
+ super
26
+ end
27
+
28
+ def test_default_number_precision
29
+ assert_equal 0.076, DefaultNumber.find(:first).value
30
+ end
31
+
32
+ def test_number_with_precision_and_scale
33
+ assert_equal 1000.01, DefaultNumber.find(:first).fpoint
34
+ end
35
+
36
+ def test_number_with_precision
37
+ assert_equal 1234, DefaultNumber.find(:first).value2
38
+ end
39
+
40
+ def test_number_type_with_precision_and_scale_is_reported_correctly
41
+ assert_equal 'NUMBER', DefaultNumber.columns_hash['value'].sql_type
42
+ assert_equal 'NUMBER(10,2)', DefaultNumber.columns_hash['fpoint'].sql_type
43
+ assert_equal 'NUMBER(15)', DefaultNumber.columns_hash['value2'].sql_type
44
+ end
45
+
46
+ # JRUBY-3675, ACTIVERECORD_JDBC-22
47
+ def test_load_date
48
+ obj = DefaultNumber.find(:first)
49
+ assert_not_nil obj.datum, "no date"
50
+ end
51
+
52
+ # ACTIVERECORD_JDBC-127
53
+ def test_save_date
54
+ obj = DefaultNumber.find(:first)
55
+ obj.datum = '01Jan2010'
56
+ obj.save!
57
+ end
58
+
59
+ def test_save_timestamp
60
+ obj = DefaultNumber.find(:first)
61
+ obj.datum = Time.now
62
+ obj.save!
63
+ end
64
+
65
+ def test_load_null_date
66
+ @java_con.createStatement.execute "UPDATE DEFAULT_NUMBERS SET DATUM = NULL"
67
+ obj = DefaultNumber.find(:first)
68
+ assert obj.datum.nil?
69
+ end
70
+
71
+ def test_model_access_by_synonym
72
+ @klass = Class.new(ActiveRecord::Base)
73
+ @klass.table_name = "POSTS"
74
+ entry_columns = Entry.columns_hash
75
+ @klass.columns.each do |c|
76
+ ec = entry_columns[c.name]
77
+ assert ec
78
+ assert_equal ec.sql_type, c.sql_type
79
+ assert_equal ec.type, c.type
80
+ end
81
+ end
82
+
83
+ end if defined?(JRUBY_VERSION)