sequel 4.30.0 → 4.31.0

Sign up to get free protection for your applications and to get access to all the features.
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
  # ---------------------