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,25 @@
1
+ print "Using native JDBC (MySQL)\n"
2
+ require_dependency 'fixtures/course'
3
+ require 'logger'
4
+
5
+ RAILS_CONNECTION_ADAPTERS << 'jdbc'
6
+ require "active_record/connection_adapters/jdbc_adapter"
7
+
8
+ ActiveRecord::Base.logger = Logger.new("debug.log")
9
+
10
+ db1 = 'activerecord_unittest'
11
+ db2 = 'activerecord_unittest2'
12
+
13
+ ActiveRecord::Base.establish_connection(
14
+ :adapter => "jdbc",
15
+ :driver => "com.mysql.jdbc.Driver",
16
+ :url => "jdbc:mysql://localhost:3306/#{db1}",
17
+ :username => "rails"
18
+ )
19
+
20
+ Course.establish_connection(
21
+ :adapter => "jdbc",
22
+ :driver => "com.mysql.jdbc.Driver",
23
+ :url => "jdbc:mysql://localhost:3306/#{db2}",
24
+ :username => "rails"
25
+ )
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+
3
+ for test in *_test.rb; do
4
+ ./jtest.sh $test
5
+ done
6
+
7
+ #jruby.sh -I connections/native_jdbc_mysql -e 'Dir.foreach(".") { |file| require file if file =~ /_test.rb$/ }' | tee all.log
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ jruby.sh -I connections/native_jdbc_mysql $1 | tee $1.log
@@ -0,0 +1,11 @@
1
+ config = {
2
+ # DB2 uses $USER if running locally, just add
3
+ # yourself to your db2 groups in /etc/group
4
+ # :username => "blog",
5
+ # :password => "",
6
+ :adapter => "jdbc",
7
+ :driver => "com.ibm.db2.jcc.DB2Driver",
8
+ :url => "jdbc:db2:weblog_development"
9
+ }
10
+
11
+ ActiveRecord::Base.establish_connection(config)
@@ -0,0 +1,12 @@
1
+ config = {
2
+ :adapter => 'derby',
3
+ :database => "derby-testdb"
4
+ }
5
+
6
+ ActiveRecord::Base.establish_connection(config)
7
+
8
+ at_exit {
9
+ # Clean up derby files
10
+ require 'fileutils'
11
+ FileUtils.rm_rf('derby-testdb')
12
+ }
@@ -0,0 +1,11 @@
1
+ config = {
2
+ :adapter => 'h2',
3
+ :database => 'test.db'
4
+ }
5
+
6
+ ActiveRecord::Base.establish_connection(config)
7
+
8
+ at_exit {
9
+ # Clean up hsqldb when done
10
+ Dir['test.db*'].each {|f| File.delete(f)}
11
+ }
@@ -0,0 +1,13 @@
1
+ config = {
2
+ :adapter => 'hsqldb',
3
+ :database => 'test.db'
4
+ }
5
+
6
+ ActiveRecord::Base.establish_connection(config)
7
+
8
+ at_exit {
9
+ # Clean up hsqldb when done
10
+ require "fileutils"
11
+ Dir['test.db*'].each {|f| FileUtils.rm_rf(f)}
12
+ FileUtils.rm_rf('hsqldb-testdb.log') rescue nil #can't delete on windows
13
+ }
@@ -0,0 +1,11 @@
1
+ config = {
2
+ :username => 'blog',
3
+ :password => 'blog',
4
+ :adapter => 'informix',
5
+ :servername => 'ol_weblog',
6
+ :database => 'weblog_development',
7
+ :host => 'localhost',
8
+ :port => '9088'
9
+ }
10
+
11
+ ActiveRecord::Base.establish_connection(config)
@@ -0,0 +1,12 @@
1
+ require 'jdbc/mysql'
2
+
3
+ config = {
4
+ # see db/mysql.rb
5
+ :username => 'arjdbc',
6
+ :password => 'arjdbc',
7
+ :adapter => 'jdbc',
8
+ :driver => 'com.mysql.jdbc.Driver',
9
+ :url => 'jdbc:mysql://localhost:3306/arjdbc_test'
10
+ }
11
+
12
+ ActiveRecord::Base.establish_connection(config)
@@ -0,0 +1,40 @@
1
+ require 'fileutils'
2
+ require 'arjdbc'
3
+
4
+ JNDI_CONFIG = {
5
+ :adapter => "jdbc",
6
+ :jndi => 'jdbc/derbydb'
7
+ }
8
+
9
+ # To test JNDI, grab fscontext-1_2-beta3.zip from
10
+ # http://java.sun.com/products/jndi/downloads/index.html
11
+ # and put fscontext.jar and providerutil.jar in test/
12
+ require 'test/fscontext.jar'
13
+ require 'test/providerutil.jar'
14
+ require 'jdbc/derby'
15
+
16
+ System = java.lang.System
17
+ Context = javax.naming.Context
18
+ InitialContext = javax.naming.InitialContext
19
+ Reference = javax.naming.Reference
20
+ StringRefAddr = javax.naming.StringRefAddr
21
+
22
+ System.set_property(Context::INITIAL_CONTEXT_FACTORY,
23
+ 'com.sun.jndi.fscontext.RefFSContextFactory')
24
+ project_path = File.expand_path(File.dirname(__FILE__) + '/../..')
25
+ jndi_dir = project_path + '/jndi_test'
26
+ jdbc_dir = jndi_dir + '/jdbc'
27
+ FileUtils.mkdir_p jdbc_dir unless File.exist?(jdbc_dir)
28
+
29
+ System.set_property(Context::PROVIDER_URL, "file://#{jndi_dir}")
30
+
31
+ ic = InitialContext.new
32
+ ic.rebind(JNDI_CONFIG[:jndi],
33
+ org.apache.derby.jdbc.EmbeddedDataSource.new.tap {|ds|
34
+ ds.database_name = "derby-testdb-jndi"
35
+ ds.create_database = "create"
36
+ ds.user = "sa"
37
+ ds.password = ""})
38
+
39
+
40
+ ActiveRecord::Base.establish_connection(JNDI_CONFIG)
@@ -0,0 +1,3 @@
1
+ require 'logger'
2
+ ActiveRecord::Base.logger = Logger.new($stdout)
3
+ ActiveRecord::Base.logger.level = Logger::DEBUG
@@ -0,0 +1,9 @@
1
+ MSSQL_CONFIG = {
2
+ :username => 'blog',
3
+ :password => '',
4
+ :adapter => 'mssql',
5
+ :database => 'weblog_development'
6
+ }
7
+ MSSQL_CONFIG[:host] = ENV['SQLHOST'] if ENV['SQLHOST']
8
+
9
+ ActiveRecord::Base.establish_connection(MSSQL_CONFIG)
@@ -0,0 +1,10 @@
1
+ MYSQL_CONFIG = {
2
+ :username => 'arjdbc',
3
+ :password => 'arjdbc',
4
+ :adapter => 'mysql',
5
+ :database => 'arjdbc_test',
6
+ :host => 'localhost'
7
+ }
8
+
9
+ ActiveRecord::Base.establish_connection(MYSQL_CONFIG)
10
+
@@ -0,0 +1,34 @@
1
+ config = {
2
+ :username => 'blog',
3
+ :password => 'blog',
4
+ :adapter => 'oracle',
5
+ :host => ENV["ORACLE_HOST"] || 'localhost',
6
+ :database => ENV["ORACLE_SID"] || 'XE' # XE is the default SID for oracle xe
7
+ }
8
+
9
+ ActiveRecord::Base.establish_connection(config)
10
+
11
+ # Here are some notes of things I had to do to get running on Oracle
12
+ # XE.
13
+ #
14
+ # ON Linux:
15
+ # create tablespace weblog_development
16
+ # datafile '/usr/lib/oracle/xe/oradata/XE/weblog_development.dbf';
17
+ # ON Windows XP:
18
+ # create tablespace weblog_development
19
+ # datafile 'C:\ORACLEXE\ORADATA\XE\WEBLOGD.DBF' size 16m;
20
+ #
21
+ # create user blog identified by blog
22
+ # default tablespace weblog_development;
23
+ # grant all privileges to blog;
24
+ #
25
+ # You might need to up the number of processes and restart the
26
+ # listener. (In my case, I had to reboot.) See
27
+ # http://it.newinstance.it/2007/06/01/ora-12519-tnsno-appropriate-service-handler-found/
28
+ #
29
+ # alter system set PROCESSES=150 scope=SPFILE;
30
+ #
31
+ # These might be helpful too (numbers are rather arbitrary...)
32
+ #
33
+ # alter system set TRANSACTIONS=126 scope=SPFILE;
34
+ # alter system set SESSIONS=115 scope=SPFILE;
@@ -0,0 +1,18 @@
1
+ POSTGRES_CONFIG = {
2
+ :adapter => 'postgresql',
3
+ :database => 'arjdbc_test',
4
+ :host => 'localhost',
5
+ :username => 'arjdbc',
6
+ :password => 'arjdbc'
7
+ }
8
+
9
+ POSTGRES_CONFIG[:host] = ENV['PGHOST'] if ENV['PGHOST']
10
+ POSTGRES_CONFIG[:port] = ENV['PGPORT'] if ENV['PGPORT']
11
+ ActiveRecord::Base.establish_connection(POSTGRES_CONFIG)
12
+
13
+ begin
14
+ result = ActiveRecord::Base.connection.execute("SHOW server_version_num")
15
+ PG_VERSION = result.first.first[1].to_i
16
+ rescue
17
+ PG_VERSION = 0
18
+ end
@@ -0,0 +1,11 @@
1
+ config = {
2
+ :adapter => 'sqlite3',
3
+ :database => 'test.sqlite3.db'
4
+ }
5
+
6
+ ActiveRecord::Base.establish_connection(config)
7
+
8
+ at_exit {
9
+ # Clean up sqlite3 db when done
10
+ Dir['test.sqlite3*'].each {|f| File.delete(f)}
11
+ }
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/db2'
5
+
6
+ class DB2ResetColumnInformationTest < Test::Unit::TestCase
7
+ include ResetColumnInformationTestMethods
8
+ end
@@ -0,0 +1,66 @@
1
+ require 'jdbc_common'
2
+ require 'db/db2'
3
+
4
+ class DB2SimpleTest < Test::Unit::TestCase
5
+ include SimpleTestMethods
6
+
7
+ # For backwards compatibility with how the DB2 code in
8
+ # jdbc_adapter 0.9.x handled booleans.
9
+ #
10
+ # The old DB2 jdbc_db2.rb driver was broken enough that
11
+ # applications were exposed to the underlying type (was DECIMAL)
12
+ # and used 0 and 1 as false and true, respectively.
13
+ #
14
+ # This driver now uses SMALLINT as a boolean, and properly
15
+ # type cast's it to a Ruby boolean. Need to make sure we don't
16
+ # break existing apps!
17
+ def test_boolean_as_integer
18
+ e = DbType.find(:first)
19
+
20
+ # true
21
+ e.sample_boolean = 1
22
+ assert_equal true, e.sample_boolean
23
+ assert_equal true, e.sample_boolean?
24
+ e.save!
25
+
26
+ e = DbType.find(:first)
27
+ assert_equal true, e.sample_boolean
28
+ assert_equal true, e.sample_boolean?
29
+
30
+ # false
31
+ e.sample_boolean = 0
32
+ assert_equal false, e.sample_boolean
33
+ assert_equal false, e.sample_boolean?
34
+ e.save!
35
+
36
+ e = DbType.find(:first)
37
+ assert_equal false, e.sample_boolean
38
+ assert_equal false, e.sample_boolean?
39
+ end
40
+ end
41
+
42
+ class DB2HasManyThroughTest < Test::Unit::TestCase
43
+ include HasManyThroughMethods
44
+ end
45
+
46
+ class DB2Test < Test::Unit::TestCase
47
+ def setup
48
+ @inst = Object.new
49
+ @inst.extend ArJdbc::DB2
50
+ @column = Object.new
51
+ class << @column
52
+ attr_accessor :type
53
+ end
54
+ end
55
+
56
+ def test_quote_decimal
57
+ assert_equal %q{'123.45'}, @inst.quote("123.45")
58
+ @column.type = :decimal
59
+ assert_equal %q{123.45}, @inst.quote("123.45", @column), "decimal columns should not have quotes"
60
+ end
61
+
62
+ def test_primary_key_generation
63
+ @column.type = :primary_key
64
+ assert_equal 'int not null generated by default as identity (start with 1) primary key', @inst.modify_types({:string => {}, :integer => {}, :boolean => {}})[:primary_key]
65
+ end
66
+ end
@@ -0,0 +1,68 @@
1
+ require 'jdbc_common'
2
+ require 'db/derby'
3
+
4
+ class CreateDummies < ActiveRecord::Migration
5
+ def self.up
6
+ create_table :dummies, :force => true do |t|
7
+ t.string :year, :default => "", :null => false
8
+ end
9
+ add_index :dummies, :year, :unique => true
10
+ end
11
+
12
+ end
13
+
14
+ class ChangeColumn < ActiveRecord::Migration
15
+ def self.up
16
+ create_table :people, :id => false, :force => true do |t|
17
+ t.string :id, :limit => 22, :null => false
18
+ t.string :name, :null => false
19
+ end
20
+ change_column(:people, :name, :string, {:limit=>22})
21
+ execute("SELECT id FROM people WHERE id = 'some string'")
22
+ end
23
+
24
+ def self.down
25
+ end
26
+
27
+ end
28
+
29
+ class CreateIndex < ActiveRecord::Migration
30
+ def self.up
31
+ create_table :people, :id => false, :force => true do |t|
32
+ t.string :id, :limit => 22, :null => false
33
+ t.string :first_name, :null => false
34
+ t.string :last_name, :null => false
35
+ t.string :nickname, :null => false
36
+ t.string :long_name, :null => false
37
+ t.string :very_long_name, :null => false
38
+ t.string :extremely_long_name, :null => false
39
+ end
40
+
41
+ add_index(:people, [:first_name, :last_name, :nickname, :long_name, :very_long_name, :extremely_long_name], :unique => true)
42
+
43
+ remove_index(:people, [:first_name, :last_name, :nickname, :long_name, :very_long_name, :extremely_long_name])
44
+ end
45
+
46
+ def self.down
47
+ end
48
+
49
+ end
50
+
51
+ class DerbyMigrationTest < Test::Unit::TestCase
52
+ include FixtureSetup
53
+
54
+ def test_create_table_column_quoting_vs_keywords
55
+ CreateDummies.up
56
+ end
57
+
58
+ def test_migrate_change_column_for_non_standard_id
59
+ ChangeColumn.up
60
+ ChangeColumn.down
61
+ end
62
+
63
+ def test_migrate_create_index
64
+ CreateIndex.up
65
+ CreateIndex.down
66
+ end
67
+
68
+ end
@@ -0,0 +1,12 @@
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
+
7
+ require 'jdbc_common'
8
+ require 'db/derby'
9
+
10
+ class DerbyMultibyteTest < Test::Unit::TestCase
11
+ include MultibyteTestMethods
12
+ end
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/derby'
5
+
6
+ class DerbyResetColumnInformationTest < Test::Unit::TestCase
7
+ include ResetColumnInformationTestMethods
8
+ end
@@ -0,0 +1,9 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/derby'
5
+
6
+ class DerbyRowLockingTest < Test::Unit::TestCase
7
+ include MigrationSetup
8
+ include RowLockingTestMethods
9
+ end
@@ -0,0 +1,139 @@
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
+
7
+ require 'jdbc_common'
8
+ require 'db/derby'
9
+
10
+ class DerbySimpleTest < Test::Unit::TestCase
11
+ include SimpleTestMethods
12
+
13
+ # Check that a table-less VALUES(xxx) query (like SELECT works.
14
+ def test_values
15
+ value = nil
16
+ assert_nothing_raised do
17
+ value = ActiveRecord::Base.connection.send(:select_rows, "VALUES('ur', 'doin', 'it', 'right')")
18
+ end
19
+ assert_equal [['ur', 'doin', 'it', 'right']], value
20
+ end
21
+
22
+ def test_find_with_include_and_order
23
+ users = User.find(:all, :include=>[:entries], :order=>"entries.rating DESC", :limit=>2)
24
+
25
+ assert users.include?(@user)
26
+ end
27
+
28
+ def test_text_and_string_conversions
29
+ e = DbType.find(:first)
30
+
31
+ # Derby will normally reject any non text value.
32
+ # The adapter has been patched to convert non text values to strings
33
+ ['string', 45, 4.3, 18488425889503641645].each do |value|
34
+ assert_nothing_raised do
35
+ e.sample_string = value
36
+ e.sample_text = value
37
+ e.save!
38
+ e.reload
39
+ assert_equal [value.to_s]*2, [e.sample_string, e.sample_text]
40
+ end
41
+ end
42
+ [true, false].each do |value|
43
+ assert_nothing_raised do
44
+ e.sample_string = value
45
+ e.sample_text = value
46
+ e.save!
47
+ e.reload
48
+ assert_equal [value ? "1" : "0"]*2, [e.sample_string, e.sample_text]
49
+ end
50
+ end
51
+ assert_nothing_raised do
52
+ value = Time.now
53
+ if ActiveRecord::VERSION::MAJOR >= 3
54
+ str = value.utc.to_s(:db)
55
+ else # AR 2 #quoted_date did not do TZ conversions
56
+ str = value.to_s(:db)
57
+ end
58
+ e.sample_string = value
59
+ e.sample_text = value
60
+ e.save!
61
+ e.reload
62
+ assert_equal [str]*2, [e.sample_string, e.sample_text]
63
+ end
64
+ assert_nothing_raised do
65
+ value = Date.today
66
+ e.sample_string = value
67
+ e.sample_text = value
68
+ e.save!
69
+ e.reload
70
+ assert_equal [value.to_s(:db)]*2, [e.sample_string, e.sample_text]
71
+ end
72
+ value = {'a' => 7}
73
+ assert_nothing_raised do
74
+ e.sample_string = value
75
+ e.sample_text = value
76
+ e.save!
77
+ e.reload
78
+ assert_equal [value.to_yaml]*2, [e.sample_string, e.sample_text]
79
+ end
80
+ value = BigDecimal.new("0")
81
+ assert_nothing_raised do
82
+ e.sample_string = value
83
+ e.sample_text = value
84
+ e.save!
85
+ e.reload
86
+ assert_equal ['0.0']*2, [e.sample_string, e.sample_text]
87
+ end
88
+ # An empty string is treated as a null value in Oracle: http://www.techonthenet.com/oracle/questions/empty_null.php
89
+ unless ActiveRecord::Base.connection.adapter_name =~ /oracle/i
90
+ assert_nothing_raised do
91
+ e.sample_string = nil
92
+ e.sample_text = nil
93
+ e.save!
94
+ e.reload
95
+ assert_equal [nil]*2, [e.sample_string, e.sample_text]
96
+ end
97
+ end
98
+ end
99
+
100
+ def test_data_types
101
+ # From test/models/data_types.rb, with the modifications as noted in the comments.
102
+ expected_types = [
103
+ ["id", :integer, { }],
104
+ ["sample_timestamp", :datetime, { }], # :timestamp is just an alias for :datetime in Derby
105
+ ["sample_datetime", :datetime, { }],
106
+ ["sample_date", :date, { }],
107
+ ["sample_time", :time, { }],
108
+ ["sample_decimal", :integer, { :precision => 15, :scale => 0 }], # it's an :integer because the :scale is 0 (...right?)
109
+ ["sample_small_decimal", :decimal, { :precision => 3, :scale => 2 }],
110
+ ["sample_default_decimal", :integer, { }], # decimal and integer are the same type in Derby
111
+ ["sample_float", :float, { }],
112
+ ["sample_binary", :binary, { }],
113
+ ["sample_boolean", :boolean, { }],
114
+ ["sample_string", :string, { :default => '' }],
115
+ ["sample_integer", :integer, { }], # don't care about the limit
116
+ ["sample_integer_with_limit_2", :integer, { }], # don't care about the limit
117
+ ["sample_integer_with_limit_8", :integer, { }], # don't care about the limit
118
+ ["sample_integer_no_limit", :integer, { }],
119
+ ["sample_integer_neg_default", :integer, { :default => -1 }],
120
+ ["sample_text", :text, { }],
121
+ ].sort{|a,b| a[0] <=> b[0]}
122
+
123
+ column_names = (expected_types.map{|et| et[0]} + DbType.column_names).sort.uniq
124
+ result = []
125
+ column_names.each do |column_name|
126
+ et = expected_types.detect{|t| t[0] == column_name }
127
+ col = DbType.columns_hash[column_name]
128
+ if col
129
+ attrs = et && Hash[et[2].keys.map{|k| [k, col.send(k)]}]
130
+ result << [col.name, col.type, attrs]
131
+ else
132
+ result << [column_name, nil, nil]
133
+ end
134
+ end
135
+ result.sort!{|a,b| a[0] <=> b[0]}
136
+
137
+ assert_equal expected_types, result
138
+ end
139
+ end