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,12 @@
1
+ require File.dirname(__FILE__) + '/bench_model'
2
+
3
+ puts "Widget.new"
4
+ Benchmark.bm do |make|
5
+ TIMES.times do
6
+ make.report do
7
+ 100_000.times do
8
+ Widget.new
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/bench_model'
2
+
3
+ puts "Widget.new.valid?"
4
+ Benchmark.bm do |make|
5
+ TIMES.times do
6
+ make.report do
7
+ 100_000.times do
8
+ Widget.new.valid?
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/bench_model'
2
+
3
+ puts "Widget.new.valid?"
4
+ Benchmark.bm do |make|
5
+ TIMES.times do
6
+ make.report do
7
+ widget = Widget.new
8
+ 100_000.times do
9
+ widget.valid?
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "appraisal"
7
+ gem "jruby-openssl", :group=>:development
8
+ gem "activerecord", "~> 2.3.14"
9
+ gem "rails", "~> 2.3.14"
10
+
@@ -0,0 +1,38 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ actionmailer (2.3.14)
5
+ actionpack (= 2.3.14)
6
+ actionpack (2.3.14)
7
+ activesupport (= 2.3.14)
8
+ rack (~> 1.1.0)
9
+ activerecord (2.3.14)
10
+ activesupport (= 2.3.14)
11
+ activeresource (2.3.14)
12
+ activesupport (= 2.3.14)
13
+ activesupport (2.3.14)
14
+ appraisal (0.4.0)
15
+ bundler
16
+ rake
17
+ bouncy-castle-java (1.5.0146.1)
18
+ jruby-openssl (0.7.5)
19
+ bouncy-castle-java (>= 1.5.0146.1)
20
+ rack (1.1.3)
21
+ rails (2.3.14)
22
+ actionmailer (= 2.3.14)
23
+ actionpack (= 2.3.14)
24
+ activerecord (= 2.3.14)
25
+ activeresource (= 2.3.14)
26
+ activesupport (= 2.3.14)
27
+ rake (>= 0.8.3)
28
+ rake (0.9.2.2)
29
+
30
+ PLATFORMS
31
+ java
32
+
33
+ DEPENDENCIES
34
+ activerecord (~> 2.3.14)
35
+ appraisal
36
+ jruby-openssl
37
+ rails (~> 2.3.14)
38
+ rake
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "appraisal"
7
+ gem "jruby-openssl", :group=>:development
8
+ gem "activerecord", "~> 3.0.11"
9
+
@@ -0,0 +1,33 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.11)
5
+ activesupport (= 3.0.11)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activerecord (3.0.11)
9
+ activemodel (= 3.0.11)
10
+ activesupport (= 3.0.11)
11
+ arel (~> 2.0.10)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.11)
14
+ appraisal (0.4.0)
15
+ bundler
16
+ rake
17
+ arel (2.0.10)
18
+ bouncy-castle-java (1.5.0146.1)
19
+ builder (2.1.2)
20
+ i18n (0.5.0)
21
+ jruby-openssl (0.7.5)
22
+ bouncy-castle-java (>= 1.5.0146.1)
23
+ rake (0.9.2.2)
24
+ tzinfo (0.3.31)
25
+
26
+ PLATFORMS
27
+ java
28
+
29
+ DEPENDENCIES
30
+ activerecord (~> 3.0.11)
31
+ appraisal
32
+ jruby-openssl
33
+ rake
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "appraisal"
7
+ gem "jruby-openssl", :group=>:development
8
+ gem "activerecord", "~> 3.1.3"
9
+
@@ -0,0 +1,35 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.1.3)
5
+ activesupport (= 3.1.3)
6
+ builder (~> 3.0.0)
7
+ i18n (~> 0.6)
8
+ activerecord (3.1.3)
9
+ activemodel (= 3.1.3)
10
+ activesupport (= 3.1.3)
11
+ arel (~> 2.2.1)
12
+ tzinfo (~> 0.3.29)
13
+ activesupport (3.1.3)
14
+ multi_json (~> 1.0)
15
+ appraisal (0.4.0)
16
+ bundler
17
+ rake
18
+ arel (2.2.1)
19
+ bouncy-castle-java (1.5.0146.1)
20
+ builder (3.0.0)
21
+ i18n (0.6.0)
22
+ jruby-openssl (0.7.5)
23
+ bouncy-castle-java (>= 1.5.0146.1)
24
+ multi_json (1.0.4)
25
+ rake (0.9.2.2)
26
+ tzinfo (0.3.31)
27
+
28
+ PLATFORMS
29
+ java
30
+
31
+ DEPENDENCIES
32
+ activerecord (~> 3.1.3)
33
+ appraisal
34
+ jruby-openssl
35
+ rake
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "appraisal"
7
+ gem "jruby-openssl", :group=>:development
8
+ gem "activerecord", "~> 3.2.3"
9
+
@@ -0,0 +1,35 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.1)
5
+ activesupport (= 3.2.1)
6
+ builder (~> 3.0.0)
7
+ activerecord (3.2.1)
8
+ activemodel (= 3.2.1)
9
+ activesupport (= 3.2.1)
10
+ arel (~> 3.0.0)
11
+ tzinfo (~> 0.3.29)
12
+ activesupport (3.2.1)
13
+ i18n (~> 0.6)
14
+ multi_json (~> 1.0)
15
+ appraisal (0.4.0)
16
+ bundler
17
+ rake
18
+ arel (3.0.0)
19
+ bouncy-castle-java (1.5.0146.1)
20
+ builder (3.0.0)
21
+ i18n (0.6.0)
22
+ jruby-openssl (0.7.5)
23
+ bouncy-castle-java (>= 1.5.0146.1)
24
+ multi_json (1.0.4)
25
+ rake (0.9.2.2)
26
+ tzinfo (0.3.31)
27
+
28
+ PLATFORMS
29
+ java
30
+
31
+ DEPENDENCIES
32
+ activerecord (~> 3.2.1)
33
+ appraisal
34
+ jruby-openssl
35
+ rake
@@ -0,0 +1 @@
1
+ require 'arjdbc/derby'
@@ -0,0 +1 @@
1
+ require 'arjdbc/h2'
@@ -0,0 +1 @@
1
+ require 'arjdbc/hsqldb'
@@ -0,0 +1 @@
1
+ require 'arjdbc/informix'
@@ -0,0 +1 @@
1
+ require 'arjdbc/jdbc'
@@ -0,0 +1 @@
1
+ require 'arjdbc/jdbc'
@@ -0,0 +1 @@
1
+ require 'arjdbc/mssql'
@@ -0,0 +1 @@
1
+ require 'arjdbc/mysql'
@@ -0,0 +1 @@
1
+ require 'arjdbc/mysql'
@@ -0,0 +1 @@
1
+ require 'arjdbc/oracle'
@@ -0,0 +1 @@
1
+ require 'arjdbc/postgresql'
@@ -0,0 +1 @@
1
+ require 'arjdbc/sqlite3'
@@ -0,0 +1,8 @@
1
+ require 'arjdbc'
2
+ if defined?(ActiveRecord::VERSION) && ActiveRecord::VERSION::MAJOR >= 3
3
+ begin
4
+ require 'arjdbc/jdbc/railtie'
5
+ rescue LoadError
6
+ # Assume we don't have railties in this version of AR
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require 'arel/engines/sql/compilers/ibm_db_compiler'
2
+
3
+ module Arel
4
+ module SqlCompiler
5
+ class DB2Compiler < IBM_DBCompiler
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class DerbyCompiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class H2Compiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class HsqldbCompiler < GenericCompiler
4
+ def select_sql
5
+ # HSQLDB needs to add LIMIT in right after SELECT
6
+ query = super
7
+ offset = relation.skipped
8
+ limit = relation.taken
9
+ @engine.connection.add_limit_offset!(query, :limit => limit,
10
+ :offset => offset) if offset || limit
11
+ query
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class JDBCCompiler < GenericCompiler
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,46 @@
1
+ module Arel
2
+ module SqlCompiler
3
+ class MsSQLCompiler < GenericCompiler
4
+ def select_sql
5
+ projections = @relation.projections
6
+ offset = relation.skipped
7
+ limit = relation.taken
8
+ if Count === projections.first && projections.size == 1 &&
9
+ (relation.taken.present? || relation.wheres.present?) && relation.joins(self).blank?
10
+ subquery = [
11
+ "SELECT * FROM #{relation.from_clauses}", build_clauses
12
+ ].join ' '
13
+ @engine.connection.add_limit_offset!(subquery, :limit => limit, :offset => offset) if offset || limit
14
+ query = "SELECT COUNT(*) AS count_id FROM (#{subquery}) AS subquery"
15
+ else
16
+ query = [
17
+ "SELECT #{relation.select_clauses.join(', ')}",
18
+ "FROM #{relation.from_clauses}",
19
+ build_clauses
20
+ ].compact.join ' '
21
+ @engine.connection.add_limit_offset!(query, :limit => limit, :offset => offset) if offset || limit
22
+ end
23
+ query
24
+ end
25
+
26
+ def build_clauses
27
+ joins = relation.joins(self)
28
+ wheres = relation.where_clauses
29
+ groups = relation.group_clauses
30
+ havings = relation.having_clauses
31
+ orders = relation.order_clauses
32
+
33
+ clauses = [ "",
34
+ joins,
35
+ ("WHERE #{wheres.join(' AND ')}" unless wheres.empty?),
36
+ ("GROUP BY #{groups.join(', ')}" unless groups.empty?),
37
+ ("HAVING #{havings.join(' AND ')}" unless havings.empty?),
38
+ ("ORDER BY #{orders.join(', ')}" unless orders.empty?)
39
+ ].compact.join ' '
40
+
41
+ clauses << " #{locked}" unless locked.blank?
42
+ clauses unless clauses.blank?
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,13 @@
1
+ module Arel
2
+ module Visitors
3
+ module ArJdbcCompat
4
+ def limit_for(limit_or_node)
5
+ limit_or_node.respond_to?(:expr) ? limit_or_node.expr.to_i : limit_or_node
6
+ end
7
+ end
8
+
9
+ class ToSql
10
+ include ArJdbcCompat
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'arel/visitors/compat'
2
+
3
+ module Arel
4
+ module Visitors
5
+ class DB2 < Arel::Visitors::ToSql
6
+ def visit_Arel_Nodes_SelectStatement o
7
+ add_limit_offset([o.cores.map { |x| visit_Arel_Nodes_SelectCore x }.join,
8
+ ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
9
+ ].compact.join(' '), o)
10
+ end
11
+
12
+ def add_limit_offset(sql, o)
13
+ @connection.replace_limit_offset! sql, limit_for(o.limit), o.offset && o.offset.value
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require 'arel/visitors/compat'
2
+
3
+ module Arel
4
+ module Visitors
5
+ class Derby < Arel::Visitors::ToSql
6
+ def visit_Arel_Nodes_SelectStatement o
7
+ [
8
+ o.cores.map { |x| visit(x) }.join,
9
+ ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
10
+ (visit(o.offset) if o.offset),
11
+ (visit(o.limit) if o.limit),
12
+ (visit(o.lock) if o.lock),
13
+ ].compact.join ' '
14
+ end
15
+
16
+ def visit_Arel_Nodes_Limit o
17
+ "FETCH FIRST #{limit_for(o)} ROWS ONLY"
18
+ end
19
+
20
+ def visit_Arel_Nodes_Offset o
21
+ "OFFSET #{visit o.value} ROWS"
22
+ end
23
+
24
+ # This generates SELECT...FOR UPDATE, but it will only work if the
25
+ # current transaction isolation level is set to SERIALIZABLE. Otherwise,
26
+ # locks aren't held for the entire transaction.
27
+ def visit_Arel_Nodes_Lock o
28
+ visit o.expr
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ require 'arel/visitors/compat'
2
+
3
+ module Arel
4
+ module Visitors
5
+ class Firebird < Arel::Visitors::ToSql
6
+ def visit_Arel_Nodes_SelectStatement o
7
+ lim_off = [
8
+ ("FIRST #{visit(o.limit.expr)}" if o.limit),
9
+ ("SKIP #{visit(o.offset.expr)}" if o.offset)
10
+ ].compact.join(' ').strip
11
+
12
+ sql = [
13
+ o.cores.map { |x| visit_Arel_Nodes_SelectCore x }.join,
14
+ ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
15
+ ].compact.join ' '
16
+
17
+ sql.sub!(/\A(\s*SELECT\s)/i, '\&' + lim_off + ' ') unless lim_off.empty?
18
+
19
+ sql
20
+ end
21
+
22
+ end
23
+ end
24
+ end