sequel 5.80.0 → 5.92.0

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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sequel +9 -4
  3. data/lib/sequel/adapters/ado.rb +1 -1
  4. data/lib/sequel/adapters/ibmdb.rb +1 -0
  5. data/lib/sequel/adapters/jdbc/db2.rb +2 -2
  6. data/lib/sequel/adapters/jdbc/derby.rb +3 -3
  7. data/lib/sequel/adapters/jdbc/h2.rb +2 -2
  8. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -2
  9. data/lib/sequel/adapters/jdbc/jtds.rb +2 -2
  10. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  11. data/lib/sequel/adapters/jdbc/oracle.rb +5 -5
  12. data/lib/sequel/adapters/jdbc/postgresql.rb +5 -5
  13. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +6 -6
  14. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -2
  15. data/lib/sequel/adapters/jdbc/sqlserver.rb +2 -2
  16. data/lib/sequel/adapters/jdbc.rb +8 -8
  17. data/lib/sequel/adapters/mysql2.rb +8 -1
  18. data/lib/sequel/adapters/shared/access.rb +1 -0
  19. data/lib/sequel/adapters/shared/db2.rb +1 -1
  20. data/lib/sequel/adapters/shared/mssql.rb +18 -5
  21. data/lib/sequel/adapters/shared/mysql.rb +8 -4
  22. data/lib/sequel/adapters/shared/oracle.rb +1 -0
  23. data/lib/sequel/adapters/shared/postgres.rb +106 -13
  24. data/lib/sequel/adapters/shared/sqlite.rb +4 -2
  25. data/lib/sequel/adapters/sqlite.rb +4 -0
  26. data/lib/sequel/adapters/trilogy.rb +1 -2
  27. data/lib/sequel/connection_pool/sharded_threaded.rb +26 -10
  28. data/lib/sequel/connection_pool/threaded.rb +26 -10
  29. data/lib/sequel/connection_pool.rb +2 -2
  30. data/lib/sequel/core.rb +15 -0
  31. data/lib/sequel/database/connecting.rb +20 -26
  32. data/lib/sequel/database/dataset_defaults.rb +3 -3
  33. data/lib/sequel/database/misc.rb +46 -10
  34. data/lib/sequel/database/query.rb +11 -11
  35. data/lib/sequel/database/schema_generator.rb +8 -0
  36. data/lib/sequel/database/schema_methods.rb +17 -1
  37. data/lib/sequel/dataset/actions.rb +9 -1
  38. data/lib/sequel/dataset/deprecated_singleton_class_methods.rb +1 -1
  39. data/lib/sequel/dataset/prepared_statements.rb +2 -1
  40. data/lib/sequel/dataset/query.rb +9 -5
  41. data/lib/sequel/dataset/sql.rb +25 -5
  42. data/lib/sequel/extensions/caller_logging.rb +2 -0
  43. data/lib/sequel/extensions/connection_validator.rb +15 -10
  44. data/lib/sequel/extensions/dataset_run.rb +41 -0
  45. data/lib/sequel/extensions/migration.rb +23 -3
  46. data/lib/sequel/extensions/null_dataset.rb +2 -2
  47. data/lib/sequel/extensions/pg_auto_parameterize.rb +1 -1
  48. data/lib/sequel/extensions/pg_auto_parameterize_in_array.rb +93 -10
  49. data/lib/sequel/extensions/pg_enum.rb +3 -3
  50. data/lib/sequel/extensions/pg_json_ops.rb +642 -9
  51. data/lib/sequel/extensions/pg_row.rb +3 -1
  52. data/lib/sequel/extensions/pg_schema_caching.rb +90 -0
  53. data/lib/sequel/extensions/provenance.rb +2 -0
  54. data/lib/sequel/extensions/query_blocker.rb +172 -0
  55. data/lib/sequel/extensions/schema_caching.rb +24 -9
  56. data/lib/sequel/extensions/schema_dumper.rb +16 -4
  57. data/lib/sequel/extensions/sqlite_json_ops.rb +1 -1
  58. data/lib/sequel/extensions/stdio_logger.rb +48 -0
  59. data/lib/sequel/extensions/string_agg.rb +17 -4
  60. data/lib/sequel/extensions/temporarily_release_connection.rb +178 -0
  61. data/lib/sequel/extensions/virtual_row_method_block.rb +1 -0
  62. data/lib/sequel/model/associations.rb +28 -3
  63. data/lib/sequel/model/base.rb +67 -18
  64. data/lib/sequel/plugins/association_pks.rb +1 -1
  65. data/lib/sequel/plugins/column_encryption.rb +1 -1
  66. data/lib/sequel/plugins/composition.rb +1 -1
  67. data/lib/sequel/plugins/defaults_setter.rb +16 -4
  68. data/lib/sequel/plugins/enum.rb +1 -1
  69. data/lib/sequel/plugins/forbid_lazy_load.rb +14 -1
  70. data/lib/sequel/plugins/input_transformer.rb +1 -1
  71. data/lib/sequel/plugins/inspect_pk.rb +44 -0
  72. data/lib/sequel/plugins/instance_filters.rb +4 -1
  73. data/lib/sequel/plugins/inverted_subsets.rb +1 -0
  74. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  75. data/lib/sequel/plugins/nested_attributes.rb +10 -5
  76. data/lib/sequel/plugins/optimistic_locking.rb +2 -0
  77. data/lib/sequel/plugins/paged_operations.rb +5 -2
  78. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +6 -1
  79. data/lib/sequel/plugins/pg_auto_validate_enums.rb +88 -0
  80. data/lib/sequel/plugins/pg_eager_any_typed_array.rb +95 -0
  81. data/lib/sequel/plugins/rcte_tree.rb +1 -1
  82. data/lib/sequel/plugins/serialization.rb +11 -5
  83. data/lib/sequel/plugins/sql_comments.rb +7 -2
  84. data/lib/sequel/plugins/static_cache_cache.rb +50 -13
  85. data/lib/sequel/plugins/subset_conditions.rb +85 -5
  86. data/lib/sequel/plugins/subset_static_cache.rb +263 -0
  87. data/lib/sequel/plugins/tactical_eager_loading.rb +6 -2
  88. data/lib/sequel/plugins/validate_associated.rb +1 -1
  89. data/lib/sequel/sql.rb +16 -6
  90. data/lib/sequel/version.rb +1 -1
  91. metadata +12 -234
  92. data/CHANGELOG +0 -1355
  93. data/README.rdoc +0 -936
  94. data/doc/advanced_associations.rdoc +0 -884
  95. data/doc/association_basics.rdoc +0 -1859
  96. data/doc/bin_sequel.rdoc +0 -146
  97. data/doc/cheat_sheet.rdoc +0 -255
  98. data/doc/code_order.rdoc +0 -102
  99. data/doc/core_extensions.rdoc +0 -405
  100. data/doc/dataset_basics.rdoc +0 -96
  101. data/doc/dataset_filtering.rdoc +0 -222
  102. data/doc/extensions.rdoc +0 -77
  103. data/doc/fork_safety.rdoc +0 -84
  104. data/doc/mass_assignment.rdoc +0 -98
  105. data/doc/migration.rdoc +0 -660
  106. data/doc/model_dataset_method_design.rdoc +0 -129
  107. data/doc/model_hooks.rdoc +0 -254
  108. data/doc/model_plugins.rdoc +0 -270
  109. data/doc/mssql_stored_procedures.rdoc +0 -43
  110. data/doc/object_model.rdoc +0 -563
  111. data/doc/opening_databases.rdoc +0 -436
  112. data/doc/postgresql.rdoc +0 -611
  113. data/doc/prepared_statements.rdoc +0 -144
  114. data/doc/querying.rdoc +0 -1070
  115. data/doc/reflection.rdoc +0 -120
  116. data/doc/release_notes/5.0.0.txt +0 -159
  117. data/doc/release_notes/5.1.0.txt +0 -31
  118. data/doc/release_notes/5.10.0.txt +0 -84
  119. data/doc/release_notes/5.11.0.txt +0 -83
  120. data/doc/release_notes/5.12.0.txt +0 -141
  121. data/doc/release_notes/5.13.0.txt +0 -27
  122. data/doc/release_notes/5.14.0.txt +0 -63
  123. data/doc/release_notes/5.15.0.txt +0 -39
  124. data/doc/release_notes/5.16.0.txt +0 -110
  125. data/doc/release_notes/5.17.0.txt +0 -31
  126. data/doc/release_notes/5.18.0.txt +0 -69
  127. data/doc/release_notes/5.19.0.txt +0 -28
  128. data/doc/release_notes/5.2.0.txt +0 -33
  129. data/doc/release_notes/5.20.0.txt +0 -89
  130. data/doc/release_notes/5.21.0.txt +0 -87
  131. data/doc/release_notes/5.22.0.txt +0 -48
  132. data/doc/release_notes/5.23.0.txt +0 -56
  133. data/doc/release_notes/5.24.0.txt +0 -56
  134. data/doc/release_notes/5.25.0.txt +0 -32
  135. data/doc/release_notes/5.26.0.txt +0 -35
  136. data/doc/release_notes/5.27.0.txt +0 -21
  137. data/doc/release_notes/5.28.0.txt +0 -16
  138. data/doc/release_notes/5.29.0.txt +0 -22
  139. data/doc/release_notes/5.3.0.txt +0 -121
  140. data/doc/release_notes/5.30.0.txt +0 -20
  141. data/doc/release_notes/5.31.0.txt +0 -148
  142. data/doc/release_notes/5.32.0.txt +0 -46
  143. data/doc/release_notes/5.33.0.txt +0 -24
  144. data/doc/release_notes/5.34.0.txt +0 -40
  145. data/doc/release_notes/5.35.0.txt +0 -56
  146. data/doc/release_notes/5.36.0.txt +0 -60
  147. data/doc/release_notes/5.37.0.txt +0 -30
  148. data/doc/release_notes/5.38.0.txt +0 -28
  149. data/doc/release_notes/5.39.0.txt +0 -19
  150. data/doc/release_notes/5.4.0.txt +0 -80
  151. data/doc/release_notes/5.40.0.txt +0 -40
  152. data/doc/release_notes/5.41.0.txt +0 -25
  153. data/doc/release_notes/5.42.0.txt +0 -136
  154. data/doc/release_notes/5.43.0.txt +0 -98
  155. data/doc/release_notes/5.44.0.txt +0 -32
  156. data/doc/release_notes/5.45.0.txt +0 -34
  157. data/doc/release_notes/5.46.0.txt +0 -87
  158. data/doc/release_notes/5.47.0.txt +0 -59
  159. data/doc/release_notes/5.48.0.txt +0 -14
  160. data/doc/release_notes/5.49.0.txt +0 -59
  161. data/doc/release_notes/5.5.0.txt +0 -61
  162. data/doc/release_notes/5.50.0.txt +0 -78
  163. data/doc/release_notes/5.51.0.txt +0 -47
  164. data/doc/release_notes/5.52.0.txt +0 -87
  165. data/doc/release_notes/5.53.0.txt +0 -23
  166. data/doc/release_notes/5.54.0.txt +0 -27
  167. data/doc/release_notes/5.55.0.txt +0 -21
  168. data/doc/release_notes/5.56.0.txt +0 -51
  169. data/doc/release_notes/5.57.0.txt +0 -23
  170. data/doc/release_notes/5.58.0.txt +0 -31
  171. data/doc/release_notes/5.59.0.txt +0 -73
  172. data/doc/release_notes/5.6.0.txt +0 -31
  173. data/doc/release_notes/5.60.0.txt +0 -22
  174. data/doc/release_notes/5.61.0.txt +0 -43
  175. data/doc/release_notes/5.62.0.txt +0 -132
  176. data/doc/release_notes/5.63.0.txt +0 -33
  177. data/doc/release_notes/5.64.0.txt +0 -50
  178. data/doc/release_notes/5.65.0.txt +0 -21
  179. data/doc/release_notes/5.66.0.txt +0 -24
  180. data/doc/release_notes/5.67.0.txt +0 -32
  181. data/doc/release_notes/5.68.0.txt +0 -61
  182. data/doc/release_notes/5.69.0.txt +0 -26
  183. data/doc/release_notes/5.7.0.txt +0 -108
  184. data/doc/release_notes/5.70.0.txt +0 -35
  185. data/doc/release_notes/5.71.0.txt +0 -21
  186. data/doc/release_notes/5.72.0.txt +0 -33
  187. data/doc/release_notes/5.73.0.txt +0 -66
  188. data/doc/release_notes/5.74.0.txt +0 -45
  189. data/doc/release_notes/5.75.0.txt +0 -35
  190. data/doc/release_notes/5.76.0.txt +0 -86
  191. data/doc/release_notes/5.77.0.txt +0 -63
  192. data/doc/release_notes/5.78.0.txt +0 -67
  193. data/doc/release_notes/5.79.0.txt +0 -28
  194. data/doc/release_notes/5.8.0.txt +0 -170
  195. data/doc/release_notes/5.80.0.txt +0 -40
  196. data/doc/release_notes/5.9.0.txt +0 -99
  197. data/doc/schema_modification.rdoc +0 -679
  198. data/doc/security.rdoc +0 -443
  199. data/doc/sharding.rdoc +0 -286
  200. data/doc/sql.rdoc +0 -648
  201. data/doc/testing.rdoc +0 -190
  202. data/doc/thread_safety.rdoc +0 -15
  203. data/doc/transactions.rdoc +0 -250
  204. data/doc/validations.rdoc +0 -558
  205. data/doc/virtual_rows.rdoc +0 -265
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddf0e8e9009f39ca7f6dffca8aef10ef4fbdf22a8c5002def5ecea4042f38763
4
- data.tar.gz: b9f3cb97273dd9885e8002a64e17bddd0a6db2f932d1c68ce97844e2ac843096
3
+ metadata.gz: df46d23e3607466eb34477a5ba9c31d14fd57294275088599f8ef4d561179faf
4
+ data.tar.gz: 9566fcb614fded77e5e20c929c9ed5cb6786e0548c3e59837ae2dd1a1877762d
5
5
  SHA512:
6
- metadata.gz: 7387d403f32cb492abe6fad35d6a87a4ac274fc3602aee0f8afba38d9feb30578ee774de2b168a88d86ab740a41fa2a62333f695c0d2fa507fde775943917daa
7
- data.tar.gz: 11b1c1e9daf92153585f158358ee85078b83decfca8bcf4569fa90e59335dfd123a0d8fddf8f6e58e166801029de23937279dc3aa746d0d3878a34dac90ce636
6
+ metadata.gz: 8375cb4204be00b492b841fea5427dce809e43d119c6fd9f559cbfa1b4b9f652e752d22e52a93942a8a228166829d4227202e0f783a89f790d4fad40a8eb0963
7
+ data.tar.gz: 4c6bbc4bd1172ed8c5117bd628651757b8685fab754b4d664ceb3254917fbeb58d778bccd3b8dbe998e4694f185baa4e630910dc1de8fe1b5026d23e95c215b4
data/bin/sequel CHANGED
@@ -61,8 +61,7 @@ options = OptionParser.new do |opts|
61
61
  end
62
62
 
63
63
  opts.on("-E", "--echo", "echo SQL statements") do
64
- require 'logger'
65
- loggers << Logger.new($stdout)
64
+ loggers << $stdout
66
65
  end
67
66
 
68
67
  opts.on("-I", "--include dir", "specify $LOAD_PATH directory") do |v|
@@ -70,8 +69,9 @@ options = OptionParser.new do |opts|
70
69
  end
71
70
 
72
71
  opts.on("-l", "--log logfile", "log SQL statements to log file") do |v|
73
- require 'logger'
74
- loggers << Logger.new(v)
72
+ file = File.open(v, 'a')
73
+ file.sync = true
74
+ loggers << file
75
75
  end
76
76
 
77
77
  opts.on("-L", "--load-dir DIR", "loads all *.rb under specifed directory") do |v|
@@ -155,6 +155,11 @@ begin
155
155
  end
156
156
  end
157
157
 
158
+ unless loggers.empty?
159
+ Sequel.extension :stdio_logger
160
+ loggers.map!{|io| Sequel::StdioLogger.new(io)}
161
+ end
162
+
158
163
  DB = connect_proc[db]
159
164
  load_dirs.each{|d| d.is_a?(Array) ? require(d.first) : Dir["#{d}/**/*.rb"].each{|f| load(f)}}
160
165
  if migrate_dir
@@ -179,7 +179,7 @@ module Sequel
179
179
 
180
180
  def adapter_initialize
181
181
  case @opts[:conn_string]
182
- when /Microsoft\.(Jet|ACE)\.OLEDB/io
182
+ when /Microsoft\.(Jet|ACE)\.OLEDB/i
183
183
  require_relative 'ado/access'
184
184
  extend Sequel::ADO::Access::DatabaseMethods
185
185
  self.dataset_class = ADO::Access::Dataset
@@ -7,6 +7,7 @@ module Sequel
7
7
 
8
8
  module IBMDB
9
9
  tt = Class.new do
10
+ Sequel.set_temp_name(self){"Sequel::IBMDB::_TypeTranslator"}
10
11
  def boolean(s) !s.to_i.zero? end
11
12
  def int(s) s.to_i end
12
13
  end.new
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('com.ibm.db2.jcc.DB2Driver')
3
+ Sequel::JDBC.load_driver('Java::ComIbmDb2Jcc::DB2Driver')
4
4
  require_relative '../shared/db2'
5
5
  require_relative 'transactions'
6
6
 
@@ -25,7 +25,7 @@ module Sequel
25
25
  end
26
26
  end
27
27
  db.extend_datasets Sequel::DB2::DatasetMethods
28
- com.ibm.db2.jcc.DB2Driver
28
+ Java::ComIbmDb2Jcc::DB2Driver
29
29
  end
30
30
  end
31
31
 
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('org.apache.derby.jdbc.EmbeddedDriver', :Derby)
3
+ Sequel::JDBC.load_driver('Java::OrgApacheDerbyJdbc::EmbeddedDriver', :Derby)
4
4
  require_relative 'transactions'
5
5
  require_relative '../utils/columns_limit_1'
6
6
 
@@ -10,7 +10,7 @@ module Sequel
10
10
  DATABASE_SETUP[:derby] = proc do |db|
11
11
  db.extend(Sequel::JDBC::Derby::DatabaseMethods)
12
12
  db.dataset_class = Sequel::JDBC::Derby::Dataset
13
- org.apache.derby.jdbc.EmbeddedDriver
13
+ Java::OrgApacheDerbyJdbc::EmbeddedDriver
14
14
  end
15
15
  end
16
16
 
@@ -115,7 +115,7 @@ module Sequel
115
115
  # Temporary table creation on Derby uses DECLARE instead of CREATE.
116
116
  def create_table_prefix_sql(name, options)
117
117
  if options[:temp]
118
- "DECLARE GLOBAL TEMPORARY TABLE #{quote_identifier(name)}"
118
+ "DECLARE GLOBAL TEMPORARY TABLE #{create_table_table_name_sql(name, options)}"
119
119
  else
120
120
  super
121
121
  end
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('org.h2.Driver', :H2)
3
+ Sequel::JDBC.load_driver('Java::OrgH2::Driver', :H2)
4
4
  require_relative '../../extensions/auto_cast_date_and_time'
5
5
 
6
6
  module Sequel
@@ -9,7 +9,7 @@ module Sequel
9
9
  DATABASE_SETUP[:h2] = proc do |db|
10
10
  db.extend(Sequel::JDBC::H2::DatabaseMethods)
11
11
  db.dataset_class = Sequel::JDBC::H2::Dataset
12
- org.h2.Driver
12
+ Java::OrgH2::Driver
13
13
  end
14
14
  end
15
15
 
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('org.hsqldb.jdbcDriver', :HSQLDB)
3
+ Sequel::JDBC.load_driver('Java::OrgHsqldb::jdbcDriver', :HSQLDB)
4
4
  require_relative 'transactions'
5
5
  require_relative '../../extensions/auto_cast_date_and_time'
6
6
 
@@ -10,7 +10,7 @@ module Sequel
10
10
  DATABASE_SETUP[:hsqldb] = proc do |db|
11
11
  db.extend(Sequel::JDBC::HSQLDB::DatabaseMethods)
12
12
  db.dataset_class = Sequel::JDBC::HSQLDB::Dataset
13
- org.hsqldb.jdbcDriver
13
+ Java::OrgHsqldb::jdbcDriver
14
14
  end
15
15
  end
16
16
 
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('Java::net.sourceforge.jtds.jdbc.Driver', :JTDS)
3
+ Sequel::JDBC.load_driver('Java::NetSourceforgeJtdsJdbc::Driver', :JTDS)
4
4
  require_relative 'mssql'
5
5
 
6
6
  module Sequel
@@ -10,7 +10,7 @@ module Sequel
10
10
  db.extend(Sequel::JDBC::JTDS::DatabaseMethods)
11
11
  db.extend_datasets Sequel::MSSQL::DatasetMethods
12
12
  db.send(:set_mssql_unicode_strings)
13
- Java::net.sourceforge.jtds.jdbc.Driver
13
+ Java::NetSourceforgeJtdsJdbc::Driver
14
14
  end
15
15
  end
16
16
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Sequel
4
4
  module JDBC
5
- driver = Sequel::JDBC.load_driver(%w'com.mysql.cj.jdbc.Driver com.mysql.jdbc.Driver', :MySQL)
5
+ driver = Sequel::JDBC.load_driver(%w'Java::ComMysqlCjJdbc::Driver Java::ComMysqlJdbc::Driver', :MySQL)
6
6
  require_relative '../shared/mysql'
7
7
 
8
8
  Sequel.synchronize do
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('Java::oracle.jdbc.driver.OracleDriver')
3
+ Sequel::JDBC.load_driver('Java::OracleJdbcDriver::OracleDriver')
4
4
  require_relative '../shared/oracle'
5
5
  require_relative 'transactions'
6
6
 
@@ -10,12 +10,12 @@ module Sequel
10
10
  DATABASE_SETUP[:oracle] = proc do |db|
11
11
  db.extend(Sequel::JDBC::Oracle::DatabaseMethods)
12
12
  db.dataset_class = Sequel::JDBC::Oracle::Dataset
13
- Java::oracle.jdbc.driver.OracleDriver
13
+ Java::OracleJdbcDriver::OracleDriver
14
14
  end
15
15
  end
16
16
 
17
17
  module Oracle
18
- JAVA_BIG_DECIMAL_CONSTRUCTOR = java.math.BigDecimal.java_class.constructor(Java::long).method(:new_instance)
18
+ JAVA_BIG_DECIMAL_CONSTRUCTOR = Java::JavaMath::BigDecimal.java_class.constructor(Java::long).method(:new_instance)
19
19
  ORACLE_DECIMAL = Object.new
20
20
  def ORACLE_DECIMAL.call(r, i)
21
21
  if v = r.getBigDecimal(i)
@@ -76,7 +76,7 @@ module Sequel
76
76
  rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
77
77
  rs.next
78
78
  rs.getLong(1)
79
- rescue java.sql.SQLException
79
+ rescue Java::JavaSql::SQLException
80
80
  nil
81
81
  end
82
82
  end
@@ -122,7 +122,7 @@ module Sequel
122
122
  NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
123
123
  TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
124
124
  CLOB_TYPE = Java::JavaSQL::Types::CLOB
125
- TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ].freeze
125
+ TIMESTAMPTZ_TYPES = [Java::OracleJdbc::OracleTypes::TIMESTAMPTZ, Java::OracleJdbc::OracleTypes::TIMESTAMPLTZ].freeze
126
126
 
127
127
  def type_convertor(map, meta, type, i)
128
128
  case type
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('org.postgresql.Driver', :Postgres)
3
+ Sequel::JDBC.load_driver('Java::OrgPostgresql::Driver', :Postgres)
4
4
  require_relative '../shared/postgres'
5
5
 
6
6
  module Sequel
@@ -9,7 +9,7 @@ module Sequel
9
9
  DATABASE_SETUP[:postgresql] = proc do |db|
10
10
  db.dataset_class = Sequel::JDBC::Postgres::Dataset
11
11
  db.extend(Sequel::JDBC::Postgres::DatabaseMethods)
12
- org.postgresql.Driver
12
+ Java::OrgPostgresql::Driver
13
13
  end
14
14
  end
15
15
 
@@ -43,7 +43,7 @@ module Sequel
43
43
 
44
44
  synchronize(opts[:server]) do |conn|
45
45
  begin
46
- copy_manager = org.postgresql.copy.CopyManager.new(conn)
46
+ copy_manager = Java::OrgPostgresqlCopy::CopyManager.new(conn)
47
47
  copier = copy_manager.copy_in(copy_into_sql(table, opts))
48
48
  if defined?(yield)
49
49
  while buf = yield
@@ -74,7 +74,7 @@ module Sequel
74
74
  # See Sequel::Postgres::Adapter#copy_table
75
75
  def copy_table(table, opts=OPTS)
76
76
  synchronize(opts[:server]) do |conn|
77
- copy_manager = org.postgresql.copy.CopyManager.new(conn)
77
+ copy_manager = Java::OrgPostgresqlCopy::CopyManager.new(conn)
78
78
  copier = copy_manager.copy_out(copy_table_sql(table, opts))
79
79
  begin
80
80
  if defined?(yield)
@@ -148,7 +148,7 @@ module Sequel
148
148
  # and set that as the prepared statement argument.
149
149
  def set_ps_arg(cps, arg, i)
150
150
  if v = bound_variable_arg(arg, nil)
151
- obj = org.postgresql.util.PGobject.new
151
+ obj = Java::OrgPostgresqlUtil::PGobject.new
152
152
  obj.setType("unknown")
153
153
  obj.setValue(v)
154
154
  cps.setObject(i, obj)
@@ -6,12 +6,12 @@ require_relative 'transactions'
6
6
  module Sequel
7
7
  module JDBC
8
8
  drv = [
9
- lambda{Java::sybase.jdbc4.sqlanywhere.IDriver},
10
- lambda{Java::ianywhere.ml.jdbcodbc.jdbc4.IDriver},
11
- lambda{Java::sybase.jdbc.sqlanywhere.IDriver},
12
- lambda{Java::ianywhere.ml.jdbcodbc.jdbc.IDriver},
13
- lambda{Java::com.sybase.jdbc4.jdbc.Sybdriver},
14
- lambda{Java::com.sybase.jdbc3.jdbc.Sybdriver}
9
+ lambda{Java::SybaseJdbc4Sqlanywhere::IDriver},
10
+ lambda{Java::IanywhereMlJdbcodbcJdbc4::IDriver},
11
+ lambda{Java::SybaseJdbcSqlanywhere::IDriver},
12
+ lambda{Java::IanywhereMlJdbcodbcJdbc::IDriver},
13
+ lambda{Java::ComSybaseJdbc4Jdbc::Sybdriver},
14
+ lambda{Java::ComSybaseJdbc3Jdbc::Sybdriver}
15
15
  ].each do |class_proc|
16
16
  begin
17
17
  break class_proc.call
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('org.sqlite.JDBC', :SQLite3)
3
+ Sequel::JDBC.load_driver('Java::OrgSqlite::JDBC', :SQLite3)
4
4
  require_relative '../shared/sqlite'
5
5
 
6
6
  module Sequel
@@ -10,7 +10,7 @@ module Sequel
10
10
  db.extend(Sequel::JDBC::SQLite::DatabaseMethods)
11
11
  db.extend_datasets Sequel::SQLite::DatasetMethods
12
12
  db.set_integer_booleans
13
- org.sqlite.JDBC
13
+ Java::OrgSqlite::JDBC
14
14
  end
15
15
  end
16
16
 
@@ -1,6 +1,6 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- Sequel::JDBC.load_driver('com.microsoft.sqlserver.jdbc.SQLServerDriver')
3
+ Sequel::JDBC.load_driver('Java::ComMicrosoftSqlserverJdbc::SQLServerDriver')
4
4
  require_relative 'mssql'
5
5
 
6
6
  module Sequel
@@ -10,7 +10,7 @@ module Sequel
10
10
  db.extend(Sequel::JDBC::SQLServer::DatabaseMethods)
11
11
  db.extend_datasets Sequel::MSSQL::DatasetMethods
12
12
  db.send(:set_mssql_unicode_strings)
13
- com.microsoft.sqlserver.jdbc.SQLServerDriver
13
+ Java::ComMicrosoftSqlserverJdbc::SQLServerDriver
14
14
  end
15
15
  end
16
16
 
@@ -20,7 +20,7 @@ module Sequel
20
20
 
21
21
  # Create custom NativeException alias for nicer access, and also so that
22
22
  # JRuby 9.2+ so it doesn't use the deprecated ::NativeException
23
- NativeException = java.lang.Exception
23
+ NativeException = Java::JavaLang::Exception
24
24
 
25
25
  # Default database error classes
26
26
  DATABASE_ERROR_CLASSES = [NativeException]
@@ -227,7 +227,7 @@ module Sequel
227
227
  raise e unless driver
228
228
  # If the DriverManager can't get the connection - use the connect
229
229
  # method of the driver. (This happens under Tomcat for instance)
230
- props = java.util.Properties.new
230
+ props = Java::JavaUtil::Properties.new
231
231
  if opts && opts[:user] && opts[:password]
232
232
  props.setProperty("user", opts[:user])
233
233
  props.setProperty("password", opts[:password])
@@ -506,7 +506,7 @@ module Sequel
506
506
  # Gets the connection from JNDI.
507
507
  def get_connection_from_jndi
508
508
  jndi_name = JNDI_URI_REGEXP.match(uri)[1]
509
- javax.naming.InitialContext.new.lookup(jndi_name).connection
509
+ Java::JavaxNaming::InitialContext.new.lookup(jndi_name).connection
510
510
  end
511
511
 
512
512
  # Gets the JDBC connection uri from the JNDI resource.
@@ -530,19 +530,19 @@ module Sequel
530
530
 
531
531
  # Support Date objects used in bound variables
532
532
  def java_sql_date(date)
533
- java.sql.Date.new(Time.local(date.year, date.month, date.day).to_i * 1000)
533
+ Java::JavaSql::Date.new(Time.local(date.year, date.month, date.day).to_i * 1000)
534
534
  end
535
535
 
536
536
  # Support DateTime objects used in bound variables
537
537
  def java_sql_datetime(datetime)
538
- ts = java.sql.Timestamp.new(Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min, datetime.sec).to_i * 1000)
538
+ ts = Java::JavaSql::Timestamp.new(Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min, datetime.sec).to_i * 1000)
539
539
  ts.setNanos((datetime.sec_fraction * 1000000000).to_i)
540
540
  ts
541
541
  end
542
542
 
543
543
  # Support fractional seconds for Time objects used in bound variables
544
544
  def java_sql_timestamp(time)
545
- ts = java.sql.Timestamp.new(time.to_i * 1000)
545
+ ts = Java::JavaSql::Timestamp.new(time.to_i * 1000)
546
546
  ts.setNanos(time.nsec)
547
547
  ts
548
548
  end
@@ -636,11 +636,11 @@ module Sequel
636
636
  def schema_column_set_db_type(schema)
637
637
  case schema[:type]
638
638
  when :string
639
- if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/io && schema[:column_size] > 0
639
+ if schema[:db_type] =~ /\A(character( varying)?|n?(var)?char2?)\z/i && schema[:column_size] > 0
640
640
  schema[:db_type] += "(#{schema[:column_size]})"
641
641
  end
642
642
  when :decimal
643
- if schema[:db_type] =~ /\A(decimal|numeric)\z/io && schema[:column_size] > 0 && schema[:scale] >= 0
643
+ if schema[:db_type] =~ /\A(decimal|numeric)\z/i && schema[:column_size] > 0 && schema[:scale] >= 0
644
644
  schema[:db_type] += "(#{schema[:column_size]}, #{schema[:scale]})"
645
645
  end
646
646
  end
@@ -97,7 +97,14 @@ module Sequel
97
97
  synchronize(opts[:server]) do |conn|
98
98
  stmt, ps_sql = conn.prepared_statements[ps_name]
99
99
  unless ps_sql == sql
100
- stmt.close if stmt
100
+ if stmt
101
+ begin
102
+ stmt.close
103
+ rescue ::Mysql2::Error
104
+ # probably Invalid statement handle, can happen from dropping
105
+ # related table, ignore as we won't be using it again.
106
+ end
107
+ end
101
108
  stmt = log_connection_yield("Preparing #{ps_name}: #{sql}", conn){conn.prepare(sql)}
102
109
  conn.prepared_statements[ps_name] = [stmt, sql]
103
110
  end
@@ -88,6 +88,7 @@ module Sequel
88
88
 
89
89
  module DatasetMethods
90
90
  include(Module.new do
91
+ Sequel.set_temp_name(self){"Sequel::Access::DatasetMethods::_SQLMethods"}
91
92
  Dataset.def_sql_method(self, :select, %w'select distinct limit columns into from join where group order having compounds')
92
93
  end)
93
94
  include EmulateOffsetWithReverseAndCount
@@ -198,7 +198,7 @@ module Sequel
198
198
  # http://www.ibm.com/developerworks/data/library/techarticle/dm-0912globaltemptable/
199
199
  def create_table_prefix_sql(name, options)
200
200
  if options[:temp]
201
- "DECLARE GLOBAL TEMPORARY TABLE #{quote_identifier(name)}"
201
+ "DECLARE GLOBAL TEMPORARY TABLE #{create_table_table_name_sql(name, options)}"
202
202
  else
203
203
  super
204
204
  end
@@ -379,9 +379,21 @@ module Sequel
379
379
  # a regular and temporary table, with temporary table names starting with
380
380
  # a #.
381
381
  def create_table_prefix_sql(name, options)
382
- "CREATE TABLE #{quote_schema_table(options[:temp] ? "##{name}" : name)}"
382
+ "CREATE TABLE #{create_table_table_name_sql(name, options)}"
383
383
  end
384
-
384
+
385
+ # The SQL to use for the table name for a temporary table.
386
+ def create_table_temp_table_name_sql(name, _options)
387
+ case name
388
+ when String, Symbol
389
+ "##{name}"
390
+ when SQL::Identifier
391
+ "##{name.value}"
392
+ else
393
+ raise Error, "temporary table names must be strings, symbols, or Sequel::SQL::Identifier instances on Microsoft SQL Server"
394
+ end
395
+ end
396
+
385
397
  # MSSQL doesn't support CREATE TABLE AS, it only supports SELECT INTO.
386
398
  # Emulating CREATE TABLE AS using SELECT INTO is only possible if a dataset
387
399
  # is given as the argument, it can't work with a string, so raise an
@@ -468,11 +480,11 @@ module Sequel
468
480
 
469
481
  def schema_column_type(db_type)
470
482
  case db_type
471
- when /\A(?:bit)\z/io
483
+ when /\A(?:bit)\z/i
472
484
  :boolean
473
- when /\A(?:(?:small)?money)\z/io
485
+ when /\A(?:(?:small)?money)\z/i
474
486
  :decimal
475
- when /\A(timestamp|rowversion)\z/io
487
+ when /\A(timestamp|rowversion)\z/i
476
488
  :blob
477
489
  else
478
490
  super
@@ -562,6 +574,7 @@ module Sequel
562
574
 
563
575
  module DatasetMethods
564
576
  include(Module.new do
577
+ Sequel.set_temp_name(self){"Sequel::MSSQL::DatasetMethods::_SQLMethods"}
565
578
  Dataset.def_sql_method(self, :select, %w'with select distinct limit columns into from lock join where group having compounds order')
566
579
  end)
567
580
  include EmulateOffsetWithRowNumber
@@ -550,11 +550,11 @@ module Sequel
550
550
 
551
551
  def schema_column_type(db_type)
552
552
  case db_type
553
- when /\Aset/io
553
+ when /\Aset/i
554
554
  :set
555
- when /\Amediumint/io
555
+ when /\Amediumint/i
556
556
  :integer
557
- when /\Amediumtext/io
557
+ when /\Amediumtext/i
558
558
  :string
559
559
  else
560
560
  super
@@ -567,7 +567,7 @@ module Sequel
567
567
  im = input_identifier_meth(opts[:dataset])
568
568
  table = SQL::Identifier.new(im.call(table_name))
569
569
  table = SQL::QualifiedIdentifier.new(im.call(opts[:schema]), table) if opts[:schema]
570
- metadata_dataset.with_sql("DESCRIBE ?", table).map do |row|
570
+ metadata_dataset.with_sql("SHOW FULL COLUMNS FROM ?", table).map do |row|
571
571
  extra = row.delete(:Extra)
572
572
  if row[:primary_key] = row.delete(:Key) == 'PRI'
573
573
  row[:auto_increment] = !!(extra.to_s =~ /auto_increment/i)
@@ -577,10 +577,14 @@ module Sequel
577
577
  row[:generated] = !!(extra.to_s =~ /VIRTUAL|STORED|PERSISTENT/i)
578
578
  end
579
579
  row[:allow_null] = row.delete(:Null) == 'YES'
580
+ row[:comment] = row.delete(:Comment)
581
+ row[:comment] = nil if row[:comment] == ""
580
582
  row[:default] = row.delete(:Default)
581
583
  row[:db_type] = row.delete(:Type)
582
584
  row[:type] = schema_column_type(row[:db_type])
583
585
  row[:extra] = extra
586
+ row.delete(:Collation)
587
+ row.delete(:Privileges)
584
588
  [m.call(row.delete(:Field)), row]
585
589
  end
586
590
  end
@@ -333,6 +333,7 @@ module Sequel
333
333
  BITAND_PROC = lambda{|a, b| Sequel.lit(["CAST(BITAND(", ", ", ") AS INTEGER)"], a, b)}
334
334
 
335
335
  include(Module.new do
336
+ Sequel.set_temp_name(self){"Sequel::Oracle::DatasetMethods::_SQLMethods"}
336
337
  Dataset.def_sql_method(self, :select, %w'with select distinct columns from join where group having compounds order limit lock')
337
338
  end)
338
339