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,9 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/mssql'
5
+
6
+ class MssqlRowLockingTest < Test::Unit::TestCase
7
+ include MigrationSetup
8
+ include RowLockingTestMethods
9
+ end
@@ -0,0 +1,55 @@
1
+ require 'jdbc_common'
2
+ require 'db/mssql'
3
+
4
+ class MsSQLSimpleTest < Test::Unit::TestCase
5
+
6
+ include SimpleTestMethods
7
+
8
+ # MS SQL 2005 doesn't have a DATE class, only TIMESTAMP.
9
+ undef_method :test_save_date
10
+
11
+ # String comparisons are insensitive by default
12
+ undef_method :test_validates_uniqueness_of_strings_case_sensitive
13
+
14
+ def test_does_not_munge_quoted_strings
15
+ example_quoted_values = [%{'quoted'}, %{D\'oh!}]
16
+ example_quoted_values.each do |value|
17
+ entry = Entry.create!(:title => value)
18
+ entry.reload
19
+ assert_equal(value, entry.title)
20
+ end
21
+ end
22
+
23
+ def test_change_column_default
24
+
25
+ Entry.connection.change_column "entries", "title", :string, :default => "new default"
26
+ Entry.reset_column_information
27
+ assert_equal("new default", Entry.new.title)
28
+
29
+ Entry.connection.change_column "entries", "title", :string, :default => nil
30
+ Entry.reset_column_information
31
+ assert_equal(nil, Entry.new.title)
32
+
33
+ end
34
+
35
+ def test_change_column_nullability
36
+
37
+ Entry.connection.change_column "entries", "title", :string, :null => true
38
+ Entry.reset_column_information
39
+ title_column = Entry.columns.find { |c| c.name == "title" }
40
+ assert(title_column.null)
41
+
42
+ Entry.connection.change_column "entries", "title", :string, :null => false
43
+ Entry.reset_column_information
44
+ title_column = Entry.columns.find { |c| c.name == "title" }
45
+ assert(!title_column.null)
46
+
47
+ end
48
+
49
+ # ACTIVERECORD_JDBC-124
50
+ def test_model_does_not_have_row_num_column
51
+ entry = Entry.first
52
+ assert !entry.attributes.keys.include?("_row_num")
53
+ assert !entry.respond_to?(:_row_num)
54
+ end
55
+ end
@@ -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