sequel 4.30.0 → 4.31.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 (274) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +18 -0
  3. data/MIT-LICENSE +1 -1
  4. data/bin/sequel +1 -0
  5. data/doc/opening_databases.rdoc +6 -0
  6. data/doc/release_notes/4.31.0.txt +57 -0
  7. data/lib/sequel.rb +2 -0
  8. data/lib/sequel/adapters/ado.rb +2 -0
  9. data/lib/sequel/adapters/ado/access.rb +2 -0
  10. data/lib/sequel/adapters/ado/mssql.rb +2 -0
  11. data/lib/sequel/adapters/amalgalite.rb +2 -0
  12. data/lib/sequel/adapters/cubrid.rb +2 -0
  13. data/lib/sequel/adapters/do.rb +2 -0
  14. data/lib/sequel/adapters/do/mysql.rb +2 -0
  15. data/lib/sequel/adapters/do/postgres.rb +2 -0
  16. data/lib/sequel/adapters/do/sqlite3.rb +2 -0
  17. data/lib/sequel/adapters/ibmdb.rb +3 -1
  18. data/lib/sequel/adapters/jdbc.rb +2 -0
  19. data/lib/sequel/adapters/jdbc/as400.rb +2 -0
  20. data/lib/sequel/adapters/jdbc/cubrid.rb +2 -0
  21. data/lib/sequel/adapters/jdbc/db2.rb +2 -0
  22. data/lib/sequel/adapters/jdbc/derby.rb +2 -0
  23. data/lib/sequel/adapters/jdbc/firebirdsql.rb +2 -0
  24. data/lib/sequel/adapters/jdbc/h2.rb +2 -0
  25. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -0
  26. data/lib/sequel/adapters/jdbc/informix-sqli.rb +2 -0
  27. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +2 -0
  28. data/lib/sequel/adapters/jdbc/jtds.rb +2 -0
  29. data/lib/sequel/adapters/jdbc/mssql.rb +2 -0
  30. data/lib/sequel/adapters/jdbc/mysql.rb +2 -0
  31. data/lib/sequel/adapters/jdbc/oracle.rb +2 -0
  32. data/lib/sequel/adapters/jdbc/postgresql.rb +24 -1
  33. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +2 -0
  34. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -0
  35. data/lib/sequel/adapters/jdbc/sqlserver.rb +2 -0
  36. data/lib/sequel/adapters/jdbc/transactions.rb +2 -0
  37. data/lib/sequel/adapters/mock.rb +2 -0
  38. data/lib/sequel/adapters/mysql.rb +2 -0
  39. data/lib/sequel/adapters/mysql2.rb +2 -0
  40. data/lib/sequel/adapters/odbc.rb +2 -0
  41. data/lib/sequel/adapters/odbc/db2.rb +2 -0
  42. data/lib/sequel/adapters/odbc/mssql.rb +2 -0
  43. data/lib/sequel/adapters/odbc/progress.rb +2 -0
  44. data/lib/sequel/adapters/oracle.rb +4 -2
  45. data/lib/sequel/adapters/postgres.rb +5 -3
  46. data/lib/sequel/adapters/postgresql.rb +2 -0
  47. data/lib/sequel/adapters/shared/access.rb +2 -0
  48. data/lib/sequel/adapters/shared/cubrid.rb +2 -0
  49. data/lib/sequel/adapters/shared/db2.rb +2 -0
  50. data/lib/sequel/adapters/shared/firebird.rb +2 -0
  51. data/lib/sequel/adapters/shared/informix.rb +2 -0
  52. data/lib/sequel/adapters/shared/mssql.rb +2 -0
  53. data/lib/sequel/adapters/shared/mysql.rb +5 -1
  54. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +2 -0
  55. data/lib/sequel/adapters/shared/oracle.rb +5 -3
  56. data/lib/sequel/adapters/shared/postgres.rb +19 -12
  57. data/lib/sequel/adapters/shared/progress.rb +2 -0
  58. data/lib/sequel/adapters/shared/sqlanywhere.rb +3 -1
  59. data/lib/sequel/adapters/shared/sqlite.rb +2 -0
  60. data/lib/sequel/adapters/sqlanywhere.rb +2 -0
  61. data/lib/sequel/adapters/sqlite.rb +4 -1
  62. data/lib/sequel/adapters/swift.rb +2 -0
  63. data/lib/sequel/adapters/swift/mysql.rb +2 -0
  64. data/lib/sequel/adapters/swift/postgres.rb +2 -0
  65. data/lib/sequel/adapters/swift/sqlite.rb +2 -0
  66. data/lib/sequel/adapters/tinytds.rb +2 -0
  67. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +5 -3
  68. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +5 -3
  69. data/lib/sequel/adapters/utils/pg_types.rb +2 -0
  70. data/lib/sequel/adapters/utils/replace.rb +2 -0
  71. data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
  72. data/lib/sequel/adapters/utils/stored_procedures.rb +2 -0
  73. data/lib/sequel/ast_transformer.rb +2 -0
  74. data/lib/sequel/connection_pool.rb +2 -0
  75. data/lib/sequel/connection_pool/sharded_single.rb +2 -0
  76. data/lib/sequel/connection_pool/sharded_threaded.rb +2 -0
  77. data/lib/sequel/connection_pool/single.rb +2 -0
  78. data/lib/sequel/connection_pool/threaded.rb +2 -0
  79. data/lib/sequel/core.rb +2 -0
  80. data/lib/sequel/database.rb +2 -0
  81. data/lib/sequel/database/connecting.rb +2 -0
  82. data/lib/sequel/database/dataset.rb +2 -0
  83. data/lib/sequel/database/dataset_defaults.rb +2 -0
  84. data/lib/sequel/database/features.rb +2 -0
  85. data/lib/sequel/database/logging.rb +2 -0
  86. data/lib/sequel/database/misc.rb +2 -0
  87. data/lib/sequel/database/query.rb +2 -0
  88. data/lib/sequel/database/schema_generator.rb +2 -0
  89. data/lib/sequel/database/schema_methods.rb +11 -4
  90. data/lib/sequel/database/transactions.rb +2 -0
  91. data/lib/sequel/dataset.rb +2 -0
  92. data/lib/sequel/dataset/actions.rb +2 -0
  93. data/lib/sequel/dataset/features.rb +2 -0
  94. data/lib/sequel/dataset/graph.rb +2 -0
  95. data/lib/sequel/dataset/misc.rb +2 -0
  96. data/lib/sequel/dataset/mutation.rb +2 -0
  97. data/lib/sequel/dataset/placeholder_literalizer.rb +3 -1
  98. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  99. data/lib/sequel/dataset/query.rb +2 -0
  100. data/lib/sequel/dataset/sql.rb +7 -5
  101. data/lib/sequel/deprecated.rb +2 -0
  102. data/lib/sequel/exceptions.rb +2 -0
  103. data/lib/sequel/extensions/_pretty_table.rb +5 -3
  104. data/lib/sequel/extensions/arbitrary_servers.rb +2 -0
  105. data/lib/sequel/extensions/blank.rb +2 -0
  106. data/lib/sequel/extensions/columns_introspection.rb +2 -0
  107. data/lib/sequel/extensions/connection_validator.rb +2 -0
  108. data/lib/sequel/extensions/constraint_validations.rb +2 -0
  109. data/lib/sequel/extensions/core_extensions.rb +2 -0
  110. data/lib/sequel/extensions/core_refinements.rb +2 -0
  111. data/lib/sequel/extensions/current_datetime_timestamp.rb +2 -0
  112. data/lib/sequel/extensions/dataset_source_alias.rb +2 -0
  113. data/lib/sequel/extensions/date_arithmetic.rb +3 -1
  114. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -0
  115. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +2 -0
  116. data/lib/sequel/extensions/error_sql.rb +2 -0
  117. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  118. data/lib/sequel/extensions/filter_having.rb +2 -0
  119. data/lib/sequel/extensions/from_block.rb +2 -0
  120. data/lib/sequel/extensions/graph_each.rb +2 -0
  121. data/lib/sequel/extensions/hash_aliases.rb +2 -0
  122. data/lib/sequel/extensions/inflector.rb +2 -0
  123. data/lib/sequel/extensions/looser_typecasting.rb +2 -0
  124. data/lib/sequel/extensions/meta_def.rb +2 -0
  125. data/lib/sequel/extensions/migration.rb +14 -4
  126. data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +2 -0
  127. data/lib/sequel/extensions/named_timezones.rb +2 -0
  128. data/lib/sequel/extensions/null_dataset.rb +2 -0
  129. data/lib/sequel/extensions/pagination.rb +2 -0
  130. data/lib/sequel/extensions/pg_array.rb +16 -36
  131. data/lib/sequel/extensions/pg_array_ops.rb +2 -0
  132. data/lib/sequel/extensions/pg_enum.rb +4 -1
  133. data/lib/sequel/extensions/pg_hstore.rb +3 -1
  134. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -0
  135. data/lib/sequel/extensions/pg_inet.rb +2 -0
  136. data/lib/sequel/extensions/pg_inet_ops.rb +2 -0
  137. data/lib/sequel/extensions/pg_interval.rb +3 -1
  138. data/lib/sequel/extensions/pg_json.rb +2 -0
  139. data/lib/sequel/extensions/pg_json_ops.rb +2 -0
  140. data/lib/sequel/extensions/pg_loose_count.rb +2 -0
  141. data/lib/sequel/extensions/pg_range.rb +2 -0
  142. data/lib/sequel/extensions/pg_range_ops.rb +2 -0
  143. data/lib/sequel/extensions/pg_row.rb +2 -0
  144. data/lib/sequel/extensions/pg_row_ops.rb +2 -0
  145. data/lib/sequel/extensions/pg_static_cache_updater.rb +2 -0
  146. data/lib/sequel/extensions/pretty_table.rb +2 -0
  147. data/lib/sequel/extensions/query.rb +2 -0
  148. data/lib/sequel/extensions/query_literals.rb +2 -0
  149. data/lib/sequel/extensions/round_timestamps.rb +2 -0
  150. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +2 -0
  151. data/lib/sequel/extensions/schema_caching.rb +2 -0
  152. data/lib/sequel/extensions/schema_dumper.rb +4 -1
  153. data/lib/sequel/extensions/select_remove.rb +2 -0
  154. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +3 -1
  155. data/lib/sequel/extensions/server_block.rb +2 -0
  156. data/lib/sequel/extensions/set_overrides.rb +2 -0
  157. data/lib/sequel/extensions/split_array_nil.rb +2 -0
  158. data/lib/sequel/extensions/sql_expr.rb +2 -0
  159. data/lib/sequel/extensions/string_date_time.rb +2 -0
  160. data/lib/sequel/extensions/thread_local_timezones.rb +2 -0
  161. data/lib/sequel/extensions/to_dot.rb +3 -1
  162. data/lib/sequel/model.rb +2 -0
  163. data/lib/sequel/model/associations.rb +3 -1
  164. data/lib/sequel/model/base.rb +5 -1
  165. data/lib/sequel/model/dataset_module.rb +2 -0
  166. data/lib/sequel/model/default_inflections.rb +2 -0
  167. data/lib/sequel/model/errors.rb +2 -0
  168. data/lib/sequel/model/exceptions.rb +2 -0
  169. data/lib/sequel/model/inflections.rb +2 -0
  170. data/lib/sequel/model/plugins.rb +2 -0
  171. data/lib/sequel/no_core_ext.rb +2 -0
  172. data/lib/sequel/plugins/accessed_columns.rb +2 -0
  173. data/lib/sequel/plugins/active_model.rb +2 -0
  174. data/lib/sequel/plugins/after_initialize.rb +2 -0
  175. data/lib/sequel/plugins/association_autoreloading.rb +2 -0
  176. data/lib/sequel/plugins/association_dependencies.rb +2 -0
  177. data/lib/sequel/plugins/association_pks.rb +20 -24
  178. data/lib/sequel/plugins/association_proxies.rb +2 -0
  179. data/lib/sequel/plugins/auto_validations.rb +2 -0
  180. data/lib/sequel/plugins/before_after_save.rb +2 -0
  181. data/lib/sequel/plugins/blacklist_security.rb +2 -0
  182. data/lib/sequel/plugins/boolean_readers.rb +2 -0
  183. data/lib/sequel/plugins/boolean_subsets.rb +2 -0
  184. data/lib/sequel/plugins/caching.rb +2 -0
  185. data/lib/sequel/plugins/class_table_inheritance.rb +2 -0
  186. data/lib/sequel/plugins/column_conflicts.rb +2 -0
  187. data/lib/sequel/plugins/column_select.rb +2 -0
  188. data/lib/sequel/plugins/composition.rb +2 -0
  189. data/lib/sequel/plugins/constraint_validations.rb +2 -0
  190. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  191. data/lib/sequel/plugins/dataset_associations.rb +2 -0
  192. data/lib/sequel/plugins/defaults_setter.rb +2 -0
  193. data/lib/sequel/plugins/delay_add_association.rb +2 -0
  194. data/lib/sequel/plugins/dirty.rb +2 -0
  195. data/lib/sequel/plugins/eager_each.rb +2 -0
  196. data/lib/sequel/plugins/error_splitter.rb +2 -0
  197. data/lib/sequel/plugins/force_encoding.rb +2 -0
  198. data/lib/sequel/plugins/hook_class_methods.rb +2 -0
  199. data/lib/sequel/plugins/identifier_columns.rb +2 -0
  200. data/lib/sequel/plugins/input_transformer.rb +2 -0
  201. data/lib/sequel/plugins/insert_returning_select.rb +2 -0
  202. data/lib/sequel/plugins/instance_filters.rb +2 -0
  203. data/lib/sequel/plugins/instance_hooks.rb +2 -0
  204. data/lib/sequel/plugins/inverted_subsets.rb +2 -0
  205. data/lib/sequel/plugins/json_serializer.rb +2 -0
  206. data/lib/sequel/plugins/lazy_attributes.rb +2 -0
  207. data/lib/sequel/plugins/list.rb +2 -0
  208. data/lib/sequel/plugins/many_through_many.rb +2 -0
  209. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +2 -0
  210. data/lib/sequel/plugins/modification_detection.rb +2 -0
  211. data/lib/sequel/plugins/mssql_optimistic_locking.rb +2 -0
  212. data/lib/sequel/plugins/nested_attributes.rb +2 -0
  213. data/lib/sequel/plugins/optimistic_locking.rb +2 -0
  214. data/lib/sequel/plugins/pg_array_associations.rb +2 -0
  215. data/lib/sequel/plugins/pg_row.rb +2 -0
  216. data/lib/sequel/plugins/pg_typecast_on_load.rb +2 -0
  217. data/lib/sequel/plugins/prepared_statements.rb +2 -0
  218. data/lib/sequel/plugins/prepared_statements_associations.rb +2 -0
  219. data/lib/sequel/plugins/prepared_statements_safe.rb +2 -0
  220. data/lib/sequel/plugins/prepared_statements_with_pk.rb +2 -0
  221. data/lib/sequel/plugins/rcte_tree.rb +2 -0
  222. data/lib/sequel/plugins/schema.rb +2 -0
  223. data/lib/sequel/plugins/scissors.rb +2 -0
  224. data/lib/sequel/plugins/serialization.rb +2 -0
  225. data/lib/sequel/plugins/serialization_modification_detection.rb +2 -0
  226. data/lib/sequel/plugins/sharding.rb +2 -0
  227. data/lib/sequel/plugins/single_table_inheritance.rb +2 -0
  228. data/lib/sequel/plugins/singular_table_names.rb +2 -0
  229. data/lib/sequel/plugins/skip_create_refresh.rb +2 -0
  230. data/lib/sequel/plugins/split_values.rb +2 -0
  231. data/lib/sequel/plugins/static_cache.rb +2 -0
  232. data/lib/sequel/plugins/string_stripper.rb +2 -0
  233. data/lib/sequel/plugins/subclasses.rb +2 -0
  234. data/lib/sequel/plugins/subset_conditions.rb +2 -0
  235. data/lib/sequel/plugins/table_select.rb +2 -0
  236. data/lib/sequel/plugins/tactical_eager_loading.rb +2 -0
  237. data/lib/sequel/plugins/timestamps.rb +2 -0
  238. data/lib/sequel/plugins/touch.rb +2 -0
  239. data/lib/sequel/plugins/tree.rb +2 -0
  240. data/lib/sequel/plugins/typecast_on_load.rb +2 -0
  241. data/lib/sequel/plugins/unlimited_update.rb +2 -0
  242. data/lib/sequel/plugins/update_or_create.rb +2 -0
  243. data/lib/sequel/plugins/update_primary_key.rb +2 -0
  244. data/lib/sequel/plugins/update_refresh.rb +2 -0
  245. data/lib/sequel/plugins/uuid.rb +2 -0
  246. data/lib/sequel/plugins/validate_associated.rb +2 -0
  247. data/lib/sequel/plugins/validation_class_methods.rb +2 -0
  248. data/lib/sequel/plugins/validation_helpers.rb +3 -1
  249. data/lib/sequel/plugins/xml_serializer.rb +2 -0
  250. data/lib/sequel/sql.rb +3 -1
  251. data/lib/sequel/timezones.rb +2 -0
  252. data/lib/sequel/version.rb +3 -1
  253. data/spec/adapters/mysql_spec.rb +4 -0
  254. data/spec/adapters/postgres_spec.rb +35 -11
  255. data/spec/core/connection_pool_spec.rb +1 -1
  256. data/spec/extensions/association_pks_spec.rb +4 -2
  257. data/spec/extensions/caching_spec.rb +1 -1
  258. data/spec/extensions/csv_serializer_spec.rb +7 -0
  259. data/spec/extensions/date_arithmetic_spec.rb +1 -1
  260. data/spec/extensions/dirty_spec.rb +6 -6
  261. data/spec/extensions/force_encoding_spec.rb +12 -12
  262. data/spec/extensions/input_transformer_spec.rb +1 -1
  263. data/spec/extensions/migration_spec.rb +16 -0
  264. data/spec/extensions/modification_detection_spec.rb +2 -2
  265. data/spec/extensions/nested_attributes_spec.rb +1 -1
  266. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  267. data/spec/extensions/pg_array_spec.rb +3 -8
  268. data/spec/files/double_migration/001_create_sessions.rb +9 -0
  269. data/spec/files/double_migration/002_create_nodes.rb +19 -0
  270. data/spec/files/double_migration/003_3_create_users.rb +4 -0
  271. data/spec/files/empty_migration/001_create_sessions.rb +9 -0
  272. data/spec/files/empty_migration/002_create_nodes.rb +0 -0
  273. data/spec/files/empty_migration/003_3_create_users.rb +4 -0
  274. metadata +11 -3
@@ -1 +1,3 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/postgres'
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  require 'adapters/utils/emulate_offset_with_reverse_and_count'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/split_alter_table'
2
4
 
3
5
  module Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/emulate_offset_with_row_number'
2
4
 
3
5
  module Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module Firebird
3
5
  module DatabaseMethods
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module Informix
3
5
  module DatabaseMethods
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require %w'emulate_offset_with_row_number split_alter_table', 'adapters/utils'
2
4
 
3
5
  module Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/split_alter_table'
2
4
  Sequel.require 'adapters/utils/replace'
3
5
 
@@ -187,7 +189,7 @@ module Sequel
187
189
 
188
190
  def alter_table_add_column_sql(table, op)
189
191
  if related = op.delete(:table)
190
- sql = super
192
+ sql = super.dup
191
193
  op[:table] = related
192
194
  op[:key] ||= primary_key_from_schema(related)
193
195
  sql << ", ADD "
@@ -356,6 +358,8 @@ module Sequel
356
358
  [pk]
357
359
  elsif !(pkc = generator.constraints.select{|con| con[:type] == :primary_key}).empty?
358
360
  pkc.first[:columns]
361
+ elsif !(pkc = generator.columns.select{|con| con[:primary_key] == true}).empty?
362
+ pkc.map{|c| c[:name]}
359
363
  end
360
364
  else
361
365
  primary_key_from_schema(t)
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require %w'shared/mysql utils/stored_procedures', 'adapters'
2
4
 
3
5
  module Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/emulate_offset_with_row_number'
2
4
 
3
5
  module Sequel
@@ -342,7 +344,7 @@ module Sequel
342
344
  def select_sql
343
345
  return super if @opts[:sql]
344
346
  if o = @opts[:offset]
345
- columns = clone(:append_sql=>'', :placeholder_literal_null=>true).columns
347
+ columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
346
348
  dsa1 = dataset_alias(1)
347
349
  rn = row_number_column
348
350
  limit = @opts[:limit]
@@ -353,7 +355,7 @@ module Sequel
353
355
  select(*columns).
354
356
  where(SQL::Identifier.new(rn) > o)
355
357
  ds = ds.where(SQL::Identifier.new(rn) <= Sequel.+(o, limit)) if limit
356
- sql = @opts[:append_sql] || ''
358
+ sql = @opts[:append_sql] || String.new
357
359
  subselect_sql_append(sql, ds)
358
360
  sql
359
361
  elsif limit = @opts[:limit]
@@ -361,7 +363,7 @@ module Sequel
361
363
  # Lock doesn't work in subselects, so don't use a subselect when locking.
362
364
  # Don't use a subselect if custom SQL is used, as it breaks somethings.
363
365
  ds = ds.from_self unless @opts[:lock]
364
- sql = @opts[:append_sql] || ''
366
+ sql = @opts[:append_sql] || String.new
365
367
  subselect_sql_append(sql, ds.where(SQL::ComplexExpression.new(:<=, ROW_NUMBER_EXPRESSION, limit)))
366
368
  sql
367
369
  else
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/pg_types'
2
4
 
3
5
  module Sequel
@@ -373,7 +375,8 @@ module Sequel
373
375
  # :server :: The server to which to send the NOTIFY statement, if the sharding support
374
376
  # is being used.
375
377
  def notify(channel, opts=OPTS)
376
- sql = "NOTIFY "
378
+ sql = String.new
379
+ sql << "NOTIFY "
377
380
  dataset.send(:identifier_append, sql, channel)
378
381
  if payload = opts[:payload]
379
382
  sql << ", "
@@ -583,7 +586,7 @@ module Sequel
583
586
  s = super
584
587
  if using = op[:using]
585
588
  using = Sequel::LiteralString.new(using) if using.is_a?(String)
586
- s << ' USING '
589
+ s += ' USING '
587
590
  s << literal(using)
588
591
  end
589
592
  s
@@ -693,7 +696,8 @@ module Sequel
693
696
  case constraint[:type]
694
697
  when :exclude
695
698
  elements = constraint[:elements].map{|c, op| "#{literal(c)} WITH #{op}"}.join(', ')
696
- sql = "#{"CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]}EXCLUDE USING #{constraint[:using]||'gist'} (#{elements})#{" WHERE #{filter_expr(constraint[:where])}" if constraint[:where]}"
699
+ sql = String.new
700
+ sql << "#{"CONSTRAINT #{quote_identifier(constraint[:name])} " if constraint[:name]}EXCLUDE USING #{constraint[:using]||'gist'} (#{elements})#{" WHERE #{filter_expr(constraint[:where])}" if constraint[:where]}"
697
701
  constraint_deferrable_sql_append(sql, constraint[:deferrable])
698
702
  sql
699
703
  when :foreign_key, :check
@@ -760,7 +764,8 @@ module Sequel
760
764
 
761
765
  # SQL for doing fast table insert from stdin.
762
766
  def copy_into_sql(table, opts)
763
- sql = "COPY #{literal(table)}"
767
+ sql = String.new
768
+ sql << "COPY #{literal(table)}"
764
769
  if cols = opts[:columns]
765
770
  sql << literal(Array(cols))
766
771
  end
@@ -780,7 +785,8 @@ module Sequel
780
785
  table
781
786
  else
782
787
  if opts[:options] || opts[:format]
783
- options = " ("
788
+ options = String.new
789
+ options << " ("
784
790
  options << "FORMAT #{opts[:format]}" if opts[:format]
785
791
  options << "#{', ' if opts[:format]}#{opts[:options]}" if opts[:options]
786
792
  options << ')'
@@ -845,17 +851,17 @@ module Sequel
845
851
  sql = super
846
852
 
847
853
  if inherits = options[:inherits]
848
- sql << " INHERITS (#{Array(inherits).map{|t| quote_schema_table(t)}.join(', ')})"
854
+ sql += " INHERITS (#{Array(inherits).map{|t| quote_schema_table(t)}.join(', ')})"
849
855
  end
850
856
 
851
857
  if on_commit = options[:on_commit]
852
858
  raise(Error, "can't provide :on_commit without :temp to create_table") unless options[:temp]
853
859
  raise(Error, "unsupported on_commit option: #{on_commit.inspect}") unless ON_COMMIT.has_key?(on_commit)
854
- sql << " ON COMMIT #{ON_COMMIT[on_commit]}"
860
+ sql += " ON COMMIT #{ON_COMMIT[on_commit]}"
855
861
  end
856
862
 
857
863
  if server = options[:foreign]
858
- sql << " SERVER #{quote_identifier(server)}"
864
+ sql += " SERVER #{quote_identifier(server)}"
859
865
  if foreign_opts = options[:options]
860
866
  sql << " OPTIONS (#{foreign_opts.map{|k, v| "#{k} #{literal(v.to_s)}"}.join(', ')})"
861
867
  end
@@ -867,9 +873,9 @@ module Sequel
867
873
  def create_table_as_sql(name, sql, options)
868
874
  result = create_table_prefix_sql name, options
869
875
  if on_commit = options[:on_commit]
870
- result << " ON COMMIT #{ON_COMMIT[on_commit]}"
876
+ result += " ON COMMIT #{ON_COMMIT[on_commit]}"
871
877
  end
872
- result << " AS #{sql}"
878
+ result += " AS #{sql}"
873
879
  end
874
880
 
875
881
  # Use a PostgreSQL-specific create table generator
@@ -1111,7 +1117,8 @@ module Sequel
1111
1117
  read_only = opts[:read_only]
1112
1118
  deferrable = opts[:deferrable]
1113
1119
  if level || !read_only.nil? || !deferrable.nil?
1114
- sql = "SET TRANSACTION"
1120
+ sql = String.new
1121
+ sql << "SET TRANSACTION"
1115
1122
  sql << " ISOLATION LEVEL #{Sequel::Database::TRANSACTION_ISOLATION_LEVELS[level]}" if level
1116
1123
  sql << " READ #{read_only ? 'ONLY' : 'WRITE'}" unless read_only.nil?
1117
1124
  sql << " #{'NOT ' unless deferrable}DEFERRABLE" unless deferrable.nil?
@@ -1421,7 +1428,7 @@ module Sequel
1421
1428
  if block_given? # perform locking inside a transaction and yield to block
1422
1429
  @db.transaction(opts){lock(mode, opts); yield}
1423
1430
  else
1424
- sql = 'LOCK TABLE '
1431
+ sql = 'LOCK TABLE '.dup
1425
1432
  source_list_append(sql, @opts[:from])
1426
1433
  mode = mode.to_s.upcase.strip
1427
1434
  unless LOCK_MODES.include?(mode)
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module Progress
3
5
  module DatabaseMethods
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module SqlAnywhere
3
5
 
@@ -329,7 +331,7 @@ module Sequel
329
331
  sql << Sequel::Dataset::PAREN_OPEN
330
332
  literal_append(sql, args.at(0))
331
333
  sql << Sequel::Dataset::SPACE << (op == :LIKE ? REGEXP : NOT_REGEXP) << Sequel::Dataset::SPACE
332
- pattern = ''
334
+ pattern = String.new
333
335
  last_c = ''
334
336
  args.at(1).each_char do |c|
335
337
  if c == '_' and not pattern.end_with?('\\') and last_c != '\\'
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  Sequel.require 'adapters/utils/replace'
2
4
 
3
5
  module Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'sqlanywhere'
2
4
 
3
5
  Sequel.require %w'shared/sqlanywhere', 'adapters'
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'sqlite3'
2
4
  Sequel.require 'adapters/shared/sqlite'
3
5
 
@@ -242,7 +244,8 @@ module Sequel
242
244
  cps = log_yield("PREPARE #{name}: #{sql}"){conn.prepare(sql)}
243
245
  conn.prepared_statements[name] = [cps, sql]
244
246
  end
245
- log_sql = "EXECUTE #{name}"
247
+ log_sql = String.new
248
+ log_sql << "EXECUTE #{name}"
246
249
  if ps.log_sql
247
250
  log_sql << " ("
248
251
  log_sql << sql
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  # Module holding the Swift DB support for Sequel. Swift DB is a
3
5
  # collection of drivers used in Swift ORM.
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'swift/db/mysql'
2
4
  Sequel.require 'adapters/shared/mysql'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'swift/db/postgres'
2
4
  Sequel.require 'adapters/shared/postgres'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'swift/db/sqlite3'
2
4
  Sequel.require 'adapters/shared/sqlite'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'tiny_tds'
2
4
  Sequel.require 'adapters/shared/mssql'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module EmulateOffsetWithReverseAndCount
3
5
  # Make empty? work with an offset with an order.
@@ -27,7 +29,7 @@ module Sequel
27
29
  end
28
30
 
29
31
  ds = unlimited
30
- row_count = @opts[:offset_total_count] || ds.clone(:append_sql=>'', :placeholder_literal_null=>true).count
32
+ row_count = @opts[:offset_total_count] || ds.clone(:append_sql=>String.new, :placeholder_literal_null=>true).count
31
33
  dsa1 = dataset_alias(1)
32
34
 
33
35
  if o.is_a?(Symbol) && @opts[:bind_vars] && (match = Sequel::Dataset::PreparedStatementMethods::PLACEHOLDER_RE.match(o.to_s))
@@ -53,7 +55,7 @@ module Sequel
53
55
  # shuld be returned, so use a condition that is always false.
54
56
  ds.where(1=>0)
55
57
  end
56
- sql = @opts[:append_sql] || ''
58
+ sql = @opts[:append_sql] || String.new
57
59
  subselect_sql_append(sql, ds)
58
60
  sql
59
61
  end
@@ -69,7 +71,7 @@ module Sequel
69
71
  # The default order to use for datasets with offsets, if no order is defined.
70
72
  # By default, orders by all of the columns in the dataset.
71
73
  def default_offset_order
72
- clone(:append_sql=>'', :offset=>nil).columns
74
+ clone(:append_sql=>String.new, :offset=>nil).columns
73
75
  end
74
76
  end
75
77
  end
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module EmulateOffsetWithRowNumber
3
5
  # If the offset must be emulated with ROW_NUMBER, don't remove any ordering,
@@ -28,10 +30,10 @@ module Sequel
28
30
  end
29
31
  end
30
32
 
31
- columns = clone(:append_sql=>'', :placeholder_literal_null=>true).columns
33
+ columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
32
34
  dsa1 = dataset_alias(1)
33
35
  rn = row_number_column
34
- sql = @opts[:append_sql] || ''
36
+ sql = @opts[:append_sql] || String.new
35
37
  subselect_sql_append(sql, unlimited.
36
38
  unordered.
37
39
  select_append{ROW_NUMBER{}.over(:order=>order).as(rn)}.
@@ -75,7 +77,7 @@ module Sequel
75
77
  end
76
78
  end
77
79
  end
78
- clone(:append_sql=>'').columns
80
+ clone(:append_sql=>String.new).columns
79
81
  end
80
82
 
81
83
  # Whether an order is required when using offset emulation via ROW_NUMBER, true by default.
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  module Postgres
3
5
  NAN = 0.0/0.0
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  class Dataset
3
5
  module Replace
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel::Database::SplitAlterTable
2
4
  private
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  class Dataset
3
5
  module StoredProcedureMethods
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  # The +ASTTransformer+ class is designed to handle the abstract syntax trees
3
5
  # that Sequel uses internally and produce modified copies of them. By itself
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  # The base connection pool class, which all other connection pools are based
2
4
  # on. This class is not instantiated directly, but subclasses should at
3
5
  # the very least implement the following API:
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  # A ShardedSingleConnectionPool is a single threaded connection pool that
2
4
  # works with multiple shards/servers.
3
5
  class Sequel::ShardedSingleConnectionPool < Sequel::ConnectionPool
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require 'sequel/connection_pool/threaded'
2
4
 
3
5
  # The slowest and most advanced connection, dealing with both multi-threaded
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  # This is the fastest connection pool, since it isn't a connection pool at all.
2
4
  # It is just a wrapper around a single connection that uses the connection pool
3
5
  # API.
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  # A connection pool allowing multi-threaded access to a pool of connections.
2
4
  # This is the default connection pool used by Sequel.
3
5
  class Sequel::ThreadedConnectionPool < Sequel::ConnectionPool
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  %w'bigdecimal date thread time uri'.each{|f| require f}
2
4
 
3
5
  # Top level module for Sequel
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  # Hash of adapters that have been used. The key is the adapter scheme
3
5
  # symbol, and the value is the Database subclass.
@@ -1,3 +1,5 @@
1
+ # frozen-string-literal: true
2
+
1
3
  module Sequel
2
4
  class Database
3
5
  # ---------------------