sequel 4.45.0 → 4.46.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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +108 -0
  3. data/doc/release_notes/4.46.0.txt +404 -0
  4. data/doc/security.rdoc +9 -0
  5. data/doc/sql.rdoc +2 -2
  6. data/doc/testing.rdoc +1 -1
  7. data/doc/validations.rdoc +1 -2
  8. data/lib/sequel/adapters/ado.rb +8 -3
  9. data/lib/sequel/adapters/ado/access.rb +8 -4
  10. data/lib/sequel/adapters/ado/mssql.rb +3 -1
  11. data/lib/sequel/adapters/amalgalite.rb +5 -0
  12. data/lib/sequel/adapters/cubrid.rb +16 -7
  13. data/lib/sequel/adapters/do.rb +7 -1
  14. data/lib/sequel/adapters/do/mysql.rb +8 -4
  15. data/lib/sequel/adapters/ibmdb.rb +10 -5
  16. data/lib/sequel/adapters/jdbc.rb +8 -2
  17. data/lib/sequel/adapters/jdbc/as400.rb +10 -3
  18. data/lib/sequel/adapters/jdbc/db2.rb +27 -16
  19. data/lib/sequel/adapters/jdbc/derby.rb +47 -20
  20. data/lib/sequel/adapters/jdbc/h2.rb +13 -7
  21. data/lib/sequel/adapters/jdbc/hsqldb.rb +18 -9
  22. data/lib/sequel/adapters/jdbc/mssql.rb +5 -2
  23. data/lib/sequel/adapters/jdbc/mysql.rb +3 -2
  24. data/lib/sequel/adapters/jdbc/oracle.rb +3 -2
  25. data/lib/sequel/adapters/jdbc/postgresql.rb +4 -3
  26. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +2 -1
  27. data/lib/sequel/adapters/jdbc/sqlite.rb +10 -3
  28. data/lib/sequel/adapters/jdbc/sqlserver.rb +23 -0
  29. data/lib/sequel/adapters/jdbc/transactions.rb +16 -10
  30. data/lib/sequel/adapters/mock.rb +5 -0
  31. data/lib/sequel/adapters/mysql.rb +8 -1
  32. data/lib/sequel/adapters/mysql2.rb +6 -1
  33. data/lib/sequel/adapters/odbc.rb +20 -8
  34. data/lib/sequel/adapters/odbc/mssql.rb +6 -3
  35. data/lib/sequel/adapters/oracle.rb +12 -6
  36. data/lib/sequel/adapters/postgres.rb +20 -8
  37. data/lib/sequel/adapters/shared/access.rb +76 -47
  38. data/lib/sequel/adapters/shared/cubrid.rb +16 -11
  39. data/lib/sequel/adapters/shared/db2.rb +46 -19
  40. data/lib/sequel/adapters/shared/firebird.rb +20 -8
  41. data/lib/sequel/adapters/shared/informix.rb +6 -3
  42. data/lib/sequel/adapters/shared/mssql.rb +132 -72
  43. data/lib/sequel/adapters/shared/mysql.rb +112 -65
  44. data/lib/sequel/adapters/shared/oracle.rb +36 -21
  45. data/lib/sequel/adapters/shared/postgres.rb +91 -56
  46. data/lib/sequel/adapters/shared/sqlanywhere.rb +65 -37
  47. data/lib/sequel/adapters/shared/sqlite.rb +67 -32
  48. data/lib/sequel/adapters/sqlanywhere.rb +9 -1
  49. data/lib/sequel/adapters/sqlite.rb +8 -1
  50. data/lib/sequel/adapters/swift.rb +5 -0
  51. data/lib/sequel/adapters/swift/mysql.rb +4 -2
  52. data/lib/sequel/adapters/swift/sqlite.rb +1 -1
  53. data/lib/sequel/adapters/tinytds.rb +10 -3
  54. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  55. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  56. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  57. data/lib/sequel/adapters/utils/pg_types.rb +14 -6
  58. data/lib/sequel/adapters/utils/replace.rb +4 -2
  59. data/lib/sequel/connection_pool/single.rb +2 -2
  60. data/lib/sequel/core.rb +24 -11
  61. data/lib/sequel/database/connecting.rb +9 -3
  62. data/lib/sequel/database/dataset_defaults.rb +7 -1
  63. data/lib/sequel/database/logging.rb +1 -0
  64. data/lib/sequel/database/misc.rb +5 -2
  65. data/lib/sequel/database/query.rb +7 -5
  66. data/lib/sequel/database/schema_generator.rb +1 -0
  67. data/lib/sequel/database/schema_methods.rb +50 -27
  68. data/lib/sequel/database/transactions.rb +19 -9
  69. data/lib/sequel/dataset/actions.rb +15 -6
  70. data/lib/sequel/dataset/graph.rb +15 -5
  71. data/lib/sequel/dataset/misc.rb +12 -4
  72. data/lib/sequel/dataset/mutation.rb +17 -8
  73. data/lib/sequel/dataset/prepared_statements.rb +3 -2
  74. data/lib/sequel/dataset/query.rb +84 -38
  75. data/lib/sequel/dataset/sql.rb +302 -191
  76. data/lib/sequel/deprecated.rb +26 -17
  77. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +2 -2
  78. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  79. data/lib/sequel/extensions/from_block.rb +1 -0
  80. data/lib/sequel/extensions/graph_each.rb +1 -1
  81. data/lib/sequel/extensions/identifier_mangling.rb +2 -2
  82. data/lib/sequel/extensions/migration.rb +28 -4
  83. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -0
  84. data/lib/sequel/extensions/schema_dumper.rb +4 -4
  85. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +5 -3
  86. data/lib/sequel/extensions/set_overrides.rb +2 -0
  87. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  88. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  89. data/lib/sequel/model.rb +11 -7
  90. data/lib/sequel/model/associations.rb +5 -7
  91. data/lib/sequel/model/base.rb +47 -45
  92. data/lib/sequel/model/dataset_module.rb +9 -14
  93. data/lib/sequel/model/plugins.rb +3 -0
  94. data/lib/sequel/no_core_ext.rb +1 -0
  95. data/lib/sequel/plugins/blacklist_security.rb +1 -1
  96. data/lib/sequel/plugins/boolean_subsets.rb +7 -5
  97. data/lib/sequel/plugins/class_table_inheritance.rb +47 -10
  98. data/lib/sequel/plugins/dataset_associations.rb +1 -1
  99. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  100. data/lib/sequel/plugins/finder.rb +240 -0
  101. data/lib/sequel/plugins/inverted_subsets.rb +19 -12
  102. data/lib/sequel/plugins/many_through_many.rb +1 -1
  103. data/lib/sequel/plugins/nested_attributes.rb +1 -1
  104. data/lib/sequel/plugins/schema.rb +1 -1
  105. data/lib/sequel/plugins/single_table_inheritance.rb +7 -1
  106. data/lib/sequel/plugins/subset_conditions.rb +11 -3
  107. data/lib/sequel/plugins/whitelist_security.rb +118 -0
  108. data/lib/sequel/sql.rb +80 -36
  109. data/lib/sequel/timezones.rb +2 -0
  110. data/lib/sequel/version.rb +1 -1
  111. data/spec/adapters/mssql_spec.rb +20 -0
  112. data/spec/adapters/mysql_spec.rb +1 -1
  113. data/spec/adapters/oracle_spec.rb +12 -8
  114. data/spec/adapters/postgres_spec.rb +1 -1
  115. data/spec/adapters/spec_helper.rb +1 -1
  116. data/spec/adapters/sqlite_spec.rb +36 -34
  117. data/spec/core/connection_pool_spec.rb +2 -1
  118. data/spec/core/database_spec.rb +87 -9
  119. data/spec/core/dataset_spec.rb +501 -129
  120. data/spec/core/deprecated_spec.rb +1 -1
  121. data/spec/core/expression_filters_spec.rb +146 -60
  122. data/spec/core/mock_adapter_spec.rb +1 -1
  123. data/spec/core/object_graph_spec.rb +61 -9
  124. data/spec/core/placeholder_literalizer_spec.rb +20 -2
  125. data/spec/core/schema_generator_spec.rb +6 -6
  126. data/spec/core/schema_spec.rb +54 -5
  127. data/spec/core_extensions_spec.rb +122 -18
  128. data/spec/deprecation_helper.rb +27 -2
  129. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +6 -6
  130. data/spec/extensions/association_proxies_spec.rb +2 -2
  131. data/spec/extensions/auto_literal_strings_spec.rb +212 -0
  132. data/spec/extensions/blacklist_security_spec.rb +1 -0
  133. data/spec/extensions/class_table_inheritance_spec.rb +1037 -39
  134. data/spec/extensions/column_select_spec.rb +20 -8
  135. data/spec/extensions/columns_introspection_spec.rb +3 -3
  136. data/spec/extensions/core_refinements_spec.rb +29 -12
  137. data/spec/extensions/dataset_associations_spec.rb +12 -12
  138. data/spec/extensions/def_dataset_method_spec.rb +100 -0
  139. data/spec/extensions/error_sql_spec.rb +1 -1
  140. data/spec/extensions/finder_spec.rb +260 -0
  141. data/spec/extensions/graph_each_spec.rb +2 -2
  142. data/spec/extensions/identifier_mangling_spec.rb +14 -8
  143. data/spec/extensions/inverted_subsets_spec.rb +4 -4
  144. data/spec/extensions/lazy_attributes_spec.rb +7 -0
  145. data/spec/extensions/many_through_many_spec.rb +38 -14
  146. data/spec/extensions/nested_attributes_spec.rb +18 -6
  147. data/spec/extensions/no_auto_literal_strings_spec.rb +1 -1
  148. data/spec/extensions/pg_enum_spec.rb +16 -1
  149. data/spec/extensions/pg_interval_spec.rb +11 -2
  150. data/spec/extensions/pg_loose_count_spec.rb +5 -0
  151. data/spec/extensions/pg_row_spec.rb +25 -0
  152. data/spec/extensions/prepared_statements_spec.rb +10 -1
  153. data/spec/extensions/query_spec.rb +2 -2
  154. data/spec/extensions/schema_dumper_spec.rb +2 -2
  155. data/spec/extensions/schema_spec.rb +2 -2
  156. data/spec/extensions/set_overrides_spec.rb +7 -3
  157. data/spec/extensions/sql_expr_spec.rb +0 -1
  158. data/spec/extensions/subset_conditions_spec.rb +6 -6
  159. data/spec/extensions/table_select_spec.rb +24 -12
  160. data/spec/extensions/to_dot_spec.rb +4 -4
  161. data/spec/extensions/whitelist_security_spec.rb +131 -0
  162. data/spec/integration/dataset_test.rb +9 -5
  163. data/spec/integration/model_test.rb +2 -0
  164. data/spec/integration/plugin_test.rb +2 -2
  165. data/spec/integration/spec_helper.rb +1 -1
  166. data/spec/model/associations_spec.rb +39 -11
  167. data/spec/model/base_spec.rb +44 -24
  168. data/spec/model/class_dataset_methods_spec.rb +18 -16
  169. data/spec/model/dataset_methods_spec.rb +4 -4
  170. data/spec/model/eager_loading_spec.rb +84 -24
  171. data/spec/model/model_spec.rb +97 -63
  172. data/spec/model/record_spec.rb +21 -13
  173. metadata +13 -2
@@ -8,7 +8,28 @@ module Sequel
8
8
  module JDBC
9
9
  Sequel.synchronize do
10
10
  DATABASE_SETUP[:db2] = proc do |db|
11
+ (class << db; self; end).class_eval do
12
+ alias jdbc_schema_parse_table schema_parse_table
13
+ alias jdbc_tables tables
14
+ alias jdbc_views views
15
+ alias jdbc_indexes indexes
16
+ end
11
17
  db.extend(Sequel::JDBC::DB2::DatabaseMethods)
18
+ (class << db; self; end).class_eval do
19
+ alias schema_parse_table jdbc_schema_parse_table
20
+ alias tables jdbc_tables
21
+ alias views jdbc_views
22
+ alias indexes jdbc_indexes
23
+ %w'schema_parse_table tables views indexes'.each do |s|
24
+ class_eval(<<-END, __FILE__, __LINE__+1)
25
+ def jdbc_#{s}(*a)
26
+ Sequel::Deprecation.deprecate("Database#jdbc_#{s} in the jdbc/db2 adapter", "Use Database\##{s} instead")
27
+ #{s}(*a)
28
+ end
29
+ END
30
+ # remove_method(:"jdbc_#{s}") # SEQUEL5
31
+ end
32
+ end
12
33
  db.dataset_class = Sequel::JDBC::DB2::Dataset
13
34
  com.ibm.db2.jcc.DB2Driver
14
35
  end
@@ -24,29 +45,19 @@ module Sequel
24
45
  end
25
46
  end
26
47
 
27
- class Database
28
- # Alias the generic JDBC versions so they can be called directly later
29
- alias jdbc_schema_parse_table schema_parse_table
30
- alias jdbc_tables tables
31
- alias jdbc_views views
32
- alias jdbc_indexes indexes
33
- end
34
-
35
48
  # Database and Dataset instance methods for DB2 specific
36
49
  # support via JDBC.
37
50
  module DB2
38
51
  # Database instance methods for DB2 databases accessed via JDBC.
39
52
  module DatabaseMethods
40
- PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
41
-
42
53
  include Sequel::DB2::DatabaseMethods
43
54
  include Sequel::JDBC::Transactions
55
+
56
+ PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
57
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
44
58
  IDENTITY_VAL_LOCAL = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1".freeze
59
+ Sequel::Deprecation.deprecate_constant(self, :IDENTITY_VAL_LOCAL)
45
60
 
46
- %w'schema_parse_table tables views indexes'.each do |s|
47
- class_eval("def #{s}(*a) jdbc_#{s}(*a) end", __FILE__, __LINE__)
48
- end
49
-
50
61
  private
51
62
 
52
63
  def set_ps_arg(cps, arg, i)
@@ -64,7 +75,7 @@ module Sequel
64
75
 
65
76
  def last_insert_id(conn, opts=OPTS)
66
77
  statement(conn) do |stmt|
67
- sql = IDENTITY_VAL_LOCAL
78
+ sql = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1"
68
79
  rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
69
80
  rs.next
70
81
  rs.getLong(1)
@@ -73,7 +84,7 @@ module Sequel
73
84
 
74
85
  # Primary key indexes appear to be named sqlNNNN on DB2
75
86
  def primary_key_index_re
76
- PRIMARY_KEY_INDEX_RE
87
+ /\Asql\d+\z/i
77
88
  end
78
89
 
79
90
  def setup_type_convertor_map
@@ -18,6 +18,7 @@ module Sequel
18
18
  # Instance methods for Derby Database objects accessed via JDBC.
19
19
  module DatabaseMethods
20
20
  PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
21
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
21
22
 
22
23
  include ::Sequel::JDBC::Transactions
23
24
 
@@ -159,7 +160,7 @@ module Sequel
159
160
 
160
161
  # Primary key indexes appear to be named sqlNNNN on Derby
161
162
  def primary_key_index_re
162
- PRIMARY_KEY_INDEX_RE
163
+ /\Asql\d+\z/i
163
164
  end
164
165
 
165
166
  # If an :identity option is present in the column, add the necessary IDENTITY SQL.
@@ -190,23 +191,40 @@ module Sequel
190
191
 
191
192
  # Dataset class for Derby datasets accessed via JDBC.
192
193
  class Dataset < JDBC::Dataset
193
- PAREN_CLOSE = Dataset::PAREN_CLOSE
194
- PAREN_OPEN = Dataset::PAREN_OPEN
195
- OFFSET = Dataset::OFFSET
194
+ PAREN_CLOSE = ')'.freeze
195
+ Sequel::Deprecation.deprecate_constant(self, :PAREN_CLOSE)
196
+ PAREN_OPEN = '('.freeze
197
+ Sequel::Deprecation.deprecate_constant(self, :PAREN_OPEN)
198
+ OFFSET = " OFFSET ".freeze
199
+ Sequel::Deprecation.deprecate_constant(self, :OFFSET)
196
200
  CAST_STRING_OPEN = "RTRIM(".freeze
201
+ Sequel::Deprecation.deprecate_constant(self, :CAST_STRING_OPEN)
197
202
  BLOB_OPEN = "CAST(X'".freeze
203
+ Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
198
204
  BLOB_CLOSE = "' AS BLOB)".freeze
205
+ Sequel::Deprecation.deprecate_constant(self, :BLOB_CLOSE)
199
206
  HSTAR = "H*".freeze
207
+ Sequel::Deprecation.deprecate_constant(self, :HSTAR)
200
208
  TIME_FORMAT = "'%H:%M:%S'".freeze
209
+ Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
201
210
  DEFAULT_FROM = " FROM sysibm.sysdummy1".freeze
211
+ Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
202
212
  ROWS = " ROWS".freeze
213
+ Sequel::Deprecation.deprecate_constant(self, :ROWS)
203
214
  FETCH_FIRST = " FETCH FIRST ".freeze
215
+ Sequel::Deprecation.deprecate_constant(self, :FETCH_FIRST)
204
216
  ROWS_ONLY = " ROWS ONLY".freeze
217
+ Sequel::Deprecation.deprecate_constant(self, :ROWS_ONLY)
205
218
  BOOL_TRUE_OLD = '(1 = 1)'.freeze
219
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE_OLD)
206
220
  BOOL_FALSE_OLD = '(1 = 0)'.freeze
221
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE_OLD)
207
222
  BOOL_TRUE = 'TRUE'.freeze
223
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
208
224
  BOOL_FALSE = 'FALSE'.freeze
225
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
209
226
  EMULATED_FUNCTION_MAP = {:char_length=>'length'.freeze}
227
+ Sequel::Deprecation.deprecate_constant(self, :EMULATED_FUNCTION_MAP)
210
228
 
211
229
  # Derby doesn't support an expression between CASE and WHEN,
212
230
  # so remove
@@ -220,9 +238,9 @@ module Sequel
220
238
  # a string and the ending whitespace is important.
221
239
  def cast_sql_append(sql, expr, type)
222
240
  if type == String
223
- sql << CAST_STRING_OPEN
241
+ sql << "RTRIM("
224
242
  super
225
- sql << PAREN_CLOSE
243
+ sql << ')'
226
244
  else
227
245
  super
228
246
  end
@@ -241,9 +259,9 @@ module Sequel
241
259
  literal_append(sql, args[0])
242
260
  sql << "))"
243
261
  when :extract
244
- sql << args.at(0).to_s << PAREN_OPEN
245
- literal_append(sql, args.at(1))
246
- sql << PAREN_CLOSE
262
+ sql << args[0].to_s << '('
263
+ literal_append(sql, args[1])
264
+ sql << ')'
247
265
  else
248
266
  super
249
267
  end
@@ -267,12 +285,12 @@ module Sequel
267
285
  private
268
286
 
269
287
  def empty_from_sql
270
- DEFAULT_FROM
288
+ " FROM sysibm.sysdummy1"
271
289
  end
272
290
 
273
291
  # Derby needs a hex string casted to BLOB for blobs.
274
292
  def literal_blob_append(sql, v)
275
- sql << BLOB_OPEN << v.unpack(HSTAR).first << BLOB_CLOSE
293
+ sql << "CAST(X'" << v.unpack("H*").first << "' AS BLOB)"
276
294
  end
277
295
 
278
296
  # Derby needs the standard workaround to insert all default values into
@@ -285,24 +303,24 @@ module Sequel
285
303
  # Newer versions can use the FALSE literal, but the latest gem version cannot.
286
304
  def literal_false
287
305
  if db.svn_version >= 1040133
288
- BOOL_FALSE
306
+ 'FALSE'
289
307
  else
290
- BOOL_FALSE_OLD
308
+ '(1 = 0)'
291
309
  end
292
310
  end
293
311
 
294
312
  # Derby handles fractional seconds in timestamps, but not in times
295
313
  def literal_sqltime(v)
296
- v.strftime(TIME_FORMAT)
314
+ v.strftime("'%H:%M:%S'")
297
315
  end
298
316
 
299
317
  # Derby uses an expression yielding true for true values.
300
318
  # Newer versions can use the TRUE literal, but the latest gem version cannot.
301
319
  def literal_true
302
320
  if db.svn_version >= 1040133
303
- BOOL_TRUE
321
+ 'TRUE'
304
322
  else
305
- BOOL_TRUE_OLD
323
+ '(1 = 1)'
306
324
  end
307
325
  end
308
326
 
@@ -311,17 +329,26 @@ module Sequel
311
329
  :values
312
330
  end
313
331
 
332
+ # Emulate the char_length function with length
333
+ def native_function_name(emulated_function)
334
+ if emulated_function == :char_length
335
+ 'length'
336
+ else
337
+ super
338
+ end
339
+ end
340
+
314
341
  # Offset comes before limit in Derby
315
342
  def select_limit_sql(sql)
316
343
  if o = @opts[:offset]
317
- sql << OFFSET
344
+ sql << " OFFSET "
318
345
  literal_append(sql, o)
319
- sql << ROWS
346
+ sql << " ROWS"
320
347
  end
321
348
  if l = @opts[:limit]
322
- sql << FETCH_FIRST
349
+ sql << " FETCH FIRST "
323
350
  literal_append(sql, l)
324
- sql << ROWS_ONLY
351
+ sql << " ROWS ONLY"
325
352
  end
326
353
  end
327
354
  end
@@ -17,6 +17,7 @@ module Sequel
17
17
  # Instance methods for H2 Database objects accessed via JDBC.
18
18
  module DatabaseMethods
19
19
  PRIMARY_KEY_INDEX_RE = /\Aprimary_key/i.freeze
20
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
20
21
 
21
22
  # Commit an existing prepared transaction with the given transaction
22
23
  # identifier string.
@@ -150,7 +151,7 @@ module Sequel
150
151
  end
151
152
 
152
153
  def primary_key_index_re
153
- PRIMARY_KEY_INDEX_RE
154
+ /\Aprimary_key/i
154
155
  end
155
156
 
156
157
  # H2 does not support named column constraints.
@@ -167,17 +168,22 @@ module Sequel
167
168
 
168
169
  # Dataset class for H2 datasets accessed via JDBC.
169
170
  class Dataset < JDBC::Dataset
170
- APOS = Dataset::APOS
171
- HSTAR = "H*".freeze
172
171
  ILIKE_PLACEHOLDER = ["CAST(".freeze, " AS VARCHAR_IGNORECASE)".freeze].freeze
172
+
173
+ APOS = "'".freeze
174
+ Sequel::Deprecation.deprecate_constant(self, :APOS)
175
+ HSTAR = "H*".freeze
176
+ Sequel::Deprecation.deprecate_constant(self, :HSTAR)
173
177
  TIME_FORMAT = "'%H:%M:%S'".freeze
178
+ Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
174
179
  ONLY_OFFSET = " LIMIT -1 OFFSET ".freeze
180
+ Sequel::Deprecation.deprecate_constant(self, :ONLY_OFFSET)
175
181
 
176
182
  # Emulate the case insensitive LIKE operator and the bitwise operators.
177
183
  def complex_expression_sql_append(sql, op, args)
178
184
  case op
179
185
  when :ILIKE, :"NOT ILIKE"
180
- super(sql, (op == :ILIKE ? :LIKE : :"NOT LIKE"), [SQL::PlaceholderLiteralString.new(ILIKE_PLACEHOLDER, [args.at(0)]), args.at(1)])
186
+ super(sql, (op == :ILIKE ? :LIKE : :"NOT LIKE"), [SQL::PlaceholderLiteralString.new(ILIKE_PLACEHOLDER, [args[0]]), args[1]])
181
187
  when :&, :|, :^, :<<, :>>, :'B~'
182
188
  complex_expression_emulate_append(sql, op, args)
183
189
  else
@@ -214,12 +220,12 @@ module Sequel
214
220
 
215
221
  # H2 expects hexadecimal strings for blob values
216
222
  def literal_blob_append(sql, v)
217
- sql << APOS << v.unpack(HSTAR).first << APOS
223
+ sql << "'" << v.unpack("H*").first << "'"
218
224
  end
219
225
 
220
226
  # H2 handles fractional seconds in timestamps, but not in times
221
227
  def literal_sqltime(v)
222
- v.strftime(TIME_FORMAT)
228
+ v.strftime("'%H:%M:%S'")
223
229
  end
224
230
 
225
231
  # H2 supports multiple rows in INSERT.
@@ -228,7 +234,7 @@ module Sequel
228
234
  end
229
235
 
230
236
  def select_only_offset_sql(sql)
231
- sql << ONLY_OFFSET
237
+ sql << " LIMIT -1 OFFSET "
232
238
  literal_append(sql, @opts[:offset])
233
239
  end
234
240
 
@@ -18,6 +18,7 @@ module Sequel
18
18
  # Instance methods for HSQLDB Database objects accessed via JDBC.
19
19
  module DatabaseMethods
20
20
  PRIMARY_KEY_INDEX_RE = /\Asys_idx_sys_pk_/i.freeze
21
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
21
22
 
22
23
  include ::Sequel::JDBC::Transactions
23
24
 
@@ -40,7 +41,7 @@ module Sequel
40
41
  # The version of the database, as an integer (e.g 2.2.5 -> 20205)
41
42
  def db_version
42
43
  return @db_version if defined?(@db_version)
43
- v = get{DATABASE_VERSION(){}}
44
+ v = get(Sequel.function(:DATABASE_VERSION))
44
45
  @db_version = if v =~ /(\d+)\.(\d+)\.(\d+)/
45
46
  $1.to_i * 10000 + $2.to_i * 100 + $3.to_i
46
47
  end
@@ -112,7 +113,7 @@ module Sequel
112
113
 
113
114
  # Primary key indexes appear to start with sys_idx_sys_pk_ on HSQLDB
114
115
  def primary_key_index_re
115
- PRIMARY_KEY_INDEX_RE
116
+ /\Asys_idx_sys_pk_/i
116
117
  end
117
118
 
118
119
  # If an :identity option is present in the column, add the necessary IDENTITY SQL.
@@ -146,13 +147,21 @@ module Sequel
146
147
  # Dataset class for HSQLDB datasets accessed via JDBC.
147
148
  class Dataset < JDBC::Dataset
148
149
  BOOL_TRUE = 'TRUE'.freeze
150
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_TRUE)
149
151
  BOOL_FALSE = 'FALSE'.freeze
152
+ Sequel::Deprecation.deprecate_constant(self, :BOOL_FALSE)
150
153
  SQL_WITH_RECURSIVE = "WITH RECURSIVE ".freeze
151
- APOS = Dataset::APOS
154
+ Sequel::Deprecation.deprecate_constant(self, :SQL_WITH_RECURSIVE)
155
+ APOS = "'".freeze
156
+ Sequel::Deprecation.deprecate_constant(self, :APOS)
152
157
  HSTAR = "H*".freeze
158
+ Sequel::Deprecation.deprecate_constant(self, :HSTAR)
153
159
  BLOB_OPEN = "X'".freeze
160
+ Sequel::Deprecation.deprecate_constant(self, :BLOB_OPEN)
154
161
  DEFAULT_FROM = " FROM (VALUES (0))".freeze
162
+ Sequel::Deprecation.deprecate_constant(self, :DEFAULT_FROM)
155
163
  TIME_FORMAT = "'%H:%M:%S'".freeze
164
+ Sequel::Deprecation.deprecate_constant(self, :TIME_FORMAT)
156
165
 
157
166
  # Handle HSQLDB specific case insensitive LIKE and bitwise operator support.
158
167
  def complex_expression_sql_append(sql, op, args)
@@ -198,27 +207,27 @@ module Sequel
198
207
  private
199
208
 
200
209
  def empty_from_sql
201
- DEFAULT_FROM
210
+ " FROM (VALUES (0))"
202
211
  end
203
212
 
204
213
  # Use string in hex format for blob data.
205
214
  def literal_blob_append(sql, v)
206
- sql << BLOB_OPEN << v.unpack(HSTAR).first << APOS
215
+ sql << "X'" << v.unpack("H*").first << "'"
207
216
  end
208
217
 
209
218
  # HSQLDB uses FALSE for false values.
210
219
  def literal_false
211
- BOOL_FALSE
220
+ 'FALSE'
212
221
  end
213
222
 
214
223
  # HSQLDB handles fractional seconds in timestamps, but not in times
215
224
  def literal_sqltime(v)
216
- v.strftime(TIME_FORMAT)
225
+ v.strftime("'%H:%M:%S'")
217
226
  end
218
227
 
219
228
  # HSQLDB uses TRUE for true values.
220
229
  def literal_true
221
- BOOL_TRUE
230
+ 'TRUE'
222
231
  end
223
232
 
224
233
  # HSQLDB supports multiple rows in INSERT.
@@ -228,7 +237,7 @@ module Sequel
228
237
 
229
238
  # Use WITH RECURSIVE instead of WITH if any of the CTEs is recursive
230
239
  def select_with_sql_base
231
- opts[:with].any?{|w| w[:recursive]} ? SQL_WITH_RECURSIVE : super
240
+ opts[:with].any?{|w| w[:recursive]} ? "WITH RECURSIVE " : super
232
241
  end
233
242
  end
234
243
  end
@@ -10,8 +10,11 @@ module Sequel
10
10
  # Database instance methods for MSSQL databases accessed via JDBC.
11
11
  module DatabaseMethods
12
12
  PRIMARY_KEY_INDEX_RE = /\Apk__/i.freeze
13
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
13
14
  ATAT_IDENTITY = 'SELECT @@IDENTITY'.freeze
15
+ Sequel::Deprecation.deprecate_constant(self, :ATAT_IDENTITY)
14
16
  SCOPE_IDENTITY = 'SELECT SCOPE_IDENTITY()'.freeze
17
+ Sequel::Deprecation.deprecate_constant(self, :SCOPE_IDENTITY)
15
18
 
16
19
  include Sequel::MSSQL::DatabaseMethods
17
20
 
@@ -20,7 +23,7 @@ module Sequel
20
23
  # Get the last inserted id using SCOPE_IDENTITY().
21
24
  def last_insert_id(conn, opts=OPTS)
22
25
  statement(conn) do |stmt|
23
- sql = opts[:prepared] ? ATAT_IDENTITY : SCOPE_IDENTITY
26
+ sql = opts[:prepared] ? 'SELECT @@IDENTITY' : 'SELECT SCOPE_IDENTITY()'
24
27
  rs = log_connection_yield(sql, conn){stmt.executeQuery(sql)}
25
28
  rs.next
26
29
  rs.getLong(1)
@@ -29,7 +32,7 @@ module Sequel
29
32
 
30
33
  # Primary key indexes appear to start with pk__ on MSSQL
31
34
  def primary_key_index_re
32
- PRIMARY_KEY_INDEX_RE
35
+ /\Apk__/i
33
36
  end
34
37
  end
35
38
  end
@@ -20,6 +20,7 @@ module Sequel
20
20
  module DatabaseMethods
21
21
  include Sequel::MySQL::DatabaseMethods
22
22
  LAST_INSERT_ID = 'SELECT LAST_INSERT_ID()'.freeze
23
+ Sequel::Deprecation.deprecate_constant(self, :LAST_INSERT_ID)
23
24
 
24
25
  private
25
26
 
@@ -27,7 +28,7 @@ module Sequel
27
28
  # of the connection string, since the JDBC does no parsing on the
28
29
  # given connection string by default.
29
30
  def database_name
30
- Sequel::Deprecation.deprecate("Database#database_name", "Instead, use .get{DATABASE{}}")
31
+ Sequel::Deprecation.deprecate("Database#database_name", "Instead, use .get(Sequel.function(:DATABASE))")
31
32
  u = URI.parse(uri.sub(/\Ajdbc:/, ''))
32
33
  (m = /\/(.*)/.match(u.path)) && m[1]
33
34
  end
@@ -57,7 +58,7 @@ module Sequel
57
58
  end
58
59
  else
59
60
  statement(conn) do |st|
60
- rs = st.executeQuery(LAST_INSERT_ID)
61
+ rs = st.executeQuery('SELECT LAST_INSERT_ID()')
61
62
  rs.next
62
63
  rs.getLong(1)
63
64
  end
@@ -34,6 +34,7 @@ module Sequel
34
34
  # Instance methods for Oracle Database objects accessed via JDBC.
35
35
  module DatabaseMethods
36
36
  PRIMARY_KEY_INDEX_RE = /\Asys_/i.freeze
37
+ Sequel::Deprecation.deprecate_constant(self, :PRIMARY_KEY_INDEX_RE)
37
38
 
38
39
  include Sequel::Oracle::DatabaseMethods
39
40
  include Sequel::JDBC::Transactions
@@ -83,7 +84,7 @@ module Sequel
83
84
 
84
85
  # Primary key indexes appear to start with sys_ on Oracle
85
86
  def primary_key_index_re
86
- PRIMARY_KEY_INDEX_RE
87
+ /\Asys_/i
87
88
  end
88
89
 
89
90
  def schema_parse_table(*)
@@ -119,7 +120,7 @@ module Sequel
119
120
 
120
121
  NUMERIC_TYPE = Java::JavaSQL::Types::NUMERIC
121
122
  TIMESTAMP_TYPE = Java::JavaSQL::Types::TIMESTAMP
122
- TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ]
123
+ TIMESTAMPTZ_TYPES = [Java::oracle.jdbc.OracleTypes::TIMESTAMPTZ, Java::oracle.jdbc.OracleTypes::TIMESTAMPLTZ]#.freeze # SEQUEL5
123
124
 
124
125
  def type_convertor(map, meta, type, i)
125
126
  case type