sequel 4.41.0 → 4.42.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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +98 -0
  3. data/README.rdoc +23 -10
  4. data/doc/active_record.rdoc +4 -4
  5. data/doc/advanced_associations.rdoc +2 -2
  6. data/doc/association_basics.rdoc +5 -2
  7. data/doc/cheat_sheet.rdoc +3 -3
  8. data/doc/core_extensions.rdoc +2 -2
  9. data/doc/dataset_basics.rdoc +4 -4
  10. data/doc/dataset_filtering.rdoc +1 -1
  11. data/doc/migration.rdoc +19 -1
  12. data/doc/prepared_statements.rdoc +2 -2
  13. data/doc/release_notes/4.42.0.txt +221 -0
  14. data/doc/testing.rdoc +3 -1
  15. data/lib/sequel/adapters/ado/access.rb +0 -1
  16. data/lib/sequel/adapters/ado/mssql.rb +0 -1
  17. data/lib/sequel/adapters/do/mysql.rb +0 -1
  18. data/lib/sequel/adapters/do/postgres.rb +0 -1
  19. data/lib/sequel/adapters/do/sqlite3.rb +0 -1
  20. data/lib/sequel/adapters/ibmdb.rb +21 -25
  21. data/lib/sequel/adapters/jdbc.rb +8 -16
  22. data/lib/sequel/adapters/jdbc/as400.rb +0 -1
  23. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -1
  24. data/lib/sequel/adapters/jdbc/db2.rb +0 -1
  25. data/lib/sequel/adapters/jdbc/derby.rb +0 -1
  26. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -1
  27. data/lib/sequel/adapters/jdbc/h2.rb +0 -1
  28. data/lib/sequel/adapters/jdbc/hsqldb.rb +0 -1
  29. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -1
  30. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -1
  31. data/lib/sequel/adapters/jdbc/jtds.rb +0 -1
  32. data/lib/sequel/adapters/jdbc/mssql.rb +0 -1
  33. data/lib/sequel/adapters/jdbc/mysql.rb +0 -1
  34. data/lib/sequel/adapters/jdbc/oracle.rb +0 -1
  35. data/lib/sequel/adapters/jdbc/postgresql.rb +0 -13
  36. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +0 -1
  37. data/lib/sequel/adapters/jdbc/sqlite.rb +0 -1
  38. data/lib/sequel/adapters/jdbc/sqlserver.rb +3 -4
  39. data/lib/sequel/adapters/mock.rb +54 -12
  40. data/lib/sequel/adapters/mysql.rb +1 -1
  41. data/lib/sequel/adapters/mysql2.rb +11 -17
  42. data/lib/sequel/adapters/odbc/mssql.rb +0 -1
  43. data/lib/sequel/adapters/oracle.rb +8 -20
  44. data/lib/sequel/adapters/postgres.rb +11 -29
  45. data/lib/sequel/adapters/shared/access.rb +5 -12
  46. data/lib/sequel/adapters/shared/cubrid.rb +4 -13
  47. data/lib/sequel/adapters/shared/db2.rb +4 -2
  48. data/lib/sequel/adapters/shared/firebird.rb +2 -4
  49. data/lib/sequel/adapters/shared/informix.rb +4 -2
  50. data/lib/sequel/adapters/shared/mssql.rb +3 -5
  51. data/lib/sequel/adapters/shared/mysql.rb +4 -14
  52. data/lib/sequel/adapters/shared/oracle.rb +1 -3
  53. data/lib/sequel/adapters/shared/postgres.rb +16 -38
  54. data/lib/sequel/adapters/shared/progress.rb +0 -2
  55. data/lib/sequel/adapters/shared/sqlanywhere.rb +0 -2
  56. data/lib/sequel/adapters/shared/sqlite.rb +20 -16
  57. data/lib/sequel/adapters/sqlite.rb +8 -20
  58. data/lib/sequel/adapters/swift/mysql.rb +0 -1
  59. data/lib/sequel/adapters/swift/postgres.rb +0 -1
  60. data/lib/sequel/adapters/swift/sqlite.rb +0 -1
  61. data/lib/sequel/adapters/tinytds.rb +4 -12
  62. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  63. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -2
  64. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +11 -34
  65. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  66. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +26 -0
  67. data/lib/sequel/ast_transformer.rb +2 -2
  68. data/lib/sequel/database/dataset.rb +1 -1
  69. data/lib/sequel/database/dataset_defaults.rb +0 -66
  70. data/lib/sequel/database/features.rb +6 -0
  71. data/lib/sequel/database/misc.rb +31 -17
  72. data/lib/sequel/database/query.rb +7 -4
  73. data/lib/sequel/database/schema_methods.rb +1 -1
  74. data/lib/sequel/dataset.rb +8 -8
  75. data/lib/sequel/dataset/actions.rb +140 -46
  76. data/lib/sequel/dataset/features.rb +1 -5
  77. data/lib/sequel/dataset/graph.rb +7 -8
  78. data/lib/sequel/dataset/misc.rb +127 -56
  79. data/lib/sequel/dataset/mutation.rb +9 -20
  80. data/lib/sequel/dataset/placeholder_literalizer.rb +10 -1
  81. data/lib/sequel/dataset/prepared_statements.rb +102 -46
  82. data/lib/sequel/dataset/query.rb +155 -72
  83. data/lib/sequel/dataset/sql.rb +26 -9
  84. data/lib/sequel/extensions/columns_introspection.rb +3 -1
  85. data/lib/sequel/extensions/core_extensions.rb +5 -5
  86. data/lib/sequel/extensions/core_refinements.rb +5 -5
  87. data/lib/sequel/extensions/duplicate_columns_handler.rb +4 -2
  88. data/lib/sequel/extensions/freeze_datasets.rb +69 -0
  89. data/lib/sequel/extensions/identifier_mangling.rb +196 -0
  90. data/lib/sequel/extensions/looser_typecasting.rb +11 -7
  91. data/lib/sequel/extensions/migration.rb +1 -1
  92. data/lib/sequel/extensions/null_dataset.rb +5 -2
  93. data/lib/sequel/extensions/pagination.rb +42 -23
  94. data/lib/sequel/extensions/pg_enum.rb +3 -3
  95. data/lib/sequel/extensions/query.rb +3 -3
  96. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +15 -8
  97. data/lib/sequel/model/associations.rb +25 -8
  98. data/lib/sequel/model/base.rb +88 -29
  99. data/lib/sequel/model/dataset_module.rb +37 -0
  100. data/lib/sequel/plugins/association_pks.rb +4 -4
  101. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  102. data/lib/sequel/plugins/constraint_validations.rb +1 -2
  103. data/lib/sequel/plugins/csv_serializer.rb +2 -2
  104. data/lib/sequel/plugins/dataset_associations.rb +8 -8
  105. data/lib/sequel/plugins/eager_each.rb +2 -2
  106. data/lib/sequel/plugins/instance_filters.rb +1 -1
  107. data/lib/sequel/plugins/json_serializer.rb +2 -2
  108. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  109. data/lib/sequel/plugins/list.rb +4 -4
  110. data/lib/sequel/plugins/prepared_statements.rb +2 -4
  111. data/lib/sequel/plugins/prepared_statements_associations.rb +1 -3
  112. data/lib/sequel/plugins/prepared_statements_with_pk.rb +1 -1
  113. data/lib/sequel/plugins/rcte_tree.rb +13 -13
  114. data/lib/sequel/plugins/sharding.rb +1 -1
  115. data/lib/sequel/plugins/single_table_inheritance.rb +9 -4
  116. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  117. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  118. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  119. data/lib/sequel/plugins/xml_serializer.rb +2 -2
  120. data/lib/sequel/sql.rb +69 -36
  121. data/lib/sequel/version.rb +1 -1
  122. data/spec/adapters/db2_spec.rb +10 -0
  123. data/spec/adapters/firebird_spec.rb +1 -1
  124. data/spec/adapters/mssql_spec.rb +4 -5
  125. data/spec/adapters/mysql_spec.rb +9 -9
  126. data/spec/adapters/postgres_spec.rb +67 -68
  127. data/spec/adapters/spec_helper.rb +6 -1
  128. data/spec/adapters/sqlite_spec.rb +29 -15
  129. data/spec/core/connection_pool_spec.rb +14 -14
  130. data/spec/core/database_spec.rb +38 -180
  131. data/spec/core/dataset_mutation_spec.rb +253 -0
  132. data/spec/core/dataset_spec.rb +394 -537
  133. data/spec/core/expression_filters_spec.rb +34 -32
  134. data/spec/core/mock_adapter_spec.rb +27 -35
  135. data/spec/core/placeholder_literalizer_spec.rb +2 -4
  136. data/spec/core/schema_generator_spec.rb +4 -4
  137. data/spec/core/schema_spec.rb +1 -2
  138. data/spec/core_extensions_spec.rb +22 -29
  139. data/spec/extensions/active_model_spec.rb +6 -6
  140. data/spec/extensions/association_dependencies_spec.rb +2 -2
  141. data/spec/extensions/blacklist_security_spec.rb +3 -3
  142. data/spec/extensions/boolean_readers_spec.rb +12 -12
  143. data/spec/extensions/caching_spec.rb +13 -10
  144. data/spec/extensions/class_table_inheritance_spec.rb +38 -43
  145. data/spec/extensions/column_conflicts_spec.rb +1 -3
  146. data/spec/extensions/columns_introspection_spec.rb +2 -3
  147. data/spec/extensions/composition_spec.rb +5 -3
  148. data/spec/extensions/constraint_validations_plugin_spec.rb +5 -5
  149. data/spec/extensions/constraint_validations_spec.rb +14 -8
  150. data/spec/extensions/core_refinements_spec.rb +22 -29
  151. data/spec/extensions/csv_serializer_spec.rb +7 -6
  152. data/spec/extensions/date_arithmetic_spec.rb +15 -15
  153. data/spec/extensions/defaults_setter_spec.rb +2 -2
  154. data/spec/extensions/delay_add_association_spec.rb +1 -1
  155. data/spec/extensions/dirty_spec.rb +19 -10
  156. data/spec/extensions/duplicate_columns_handler_spec.rb +12 -18
  157. data/spec/extensions/eager_each_spec.rb +12 -16
  158. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  159. data/spec/extensions/eval_inspect_spec.rb +4 -3
  160. data/spec/extensions/force_encoding_spec.rb +12 -12
  161. data/spec/extensions/freeze_datasets_spec.rb +31 -0
  162. data/spec/extensions/graph_each_spec.rb +6 -18
  163. data/spec/extensions/hook_class_methods_spec.rb +7 -7
  164. data/spec/extensions/identifier_mangling_spec.rb +307 -0
  165. data/spec/extensions/instance_filters_spec.rb +5 -6
  166. data/spec/extensions/instance_hooks_spec.rb +12 -12
  167. data/spec/extensions/json_serializer_spec.rb +12 -15
  168. data/spec/extensions/lazy_attributes_spec.rb +4 -4
  169. data/spec/extensions/list_spec.rb +19 -21
  170. data/spec/extensions/many_through_many_spec.rb +108 -163
  171. data/spec/extensions/meta_def_spec.rb +7 -2
  172. data/spec/extensions/migration_spec.rb +10 -12
  173. data/spec/extensions/mssql_optimistic_locking_spec.rb +4 -3
  174. data/spec/extensions/named_timezones_spec.rb +4 -3
  175. data/spec/extensions/nested_attributes_spec.rb +2 -2
  176. data/spec/extensions/null_dataset_spec.rb +17 -12
  177. data/spec/extensions/optimistic_locking_spec.rb +4 -5
  178. data/spec/extensions/pagination_spec.rb +8 -10
  179. data/spec/extensions/pg_array_associations_spec.rb +28 -27
  180. data/spec/extensions/pg_array_ops_spec.rb +2 -1
  181. data/spec/extensions/pg_array_spec.rb +6 -2
  182. data/spec/extensions/pg_enum_spec.rb +5 -3
  183. data/spec/extensions/pg_hstore_ops_spec.rb +3 -1
  184. data/spec/extensions/pg_hstore_spec.rb +7 -6
  185. data/spec/extensions/pg_inet_ops_spec.rb +2 -1
  186. data/spec/extensions/pg_inet_spec.rb +2 -1
  187. data/spec/extensions/pg_interval_spec.rb +2 -1
  188. data/spec/extensions/pg_json_ops_spec.rb +2 -1
  189. data/spec/extensions/pg_json_spec.rb +6 -3
  190. data/spec/extensions/pg_loose_count_spec.rb +1 -0
  191. data/spec/extensions/pg_range_ops_spec.rb +3 -1
  192. data/spec/extensions/pg_range_spec.rb +9 -5
  193. data/spec/extensions/pg_row_ops_spec.rb +2 -1
  194. data/spec/extensions/pg_row_plugin_spec.rb +4 -6
  195. data/spec/extensions/pg_row_spec.rb +5 -3
  196. data/spec/extensions/pg_static_cache_updater_spec.rb +2 -1
  197. data/spec/extensions/pg_typecast_on_load_spec.rb +1 -1
  198. data/spec/extensions/prepared_statements_associations_spec.rb +1 -1
  199. data/spec/extensions/prepared_statements_spec.rb +12 -11
  200. data/spec/extensions/pretty_table_spec.rb +1 -1
  201. data/spec/extensions/query_spec.rb +8 -5
  202. data/spec/extensions/rcte_tree_spec.rb +39 -39
  203. data/spec/extensions/round_timestamps_spec.rb +2 -2
  204. data/spec/extensions/schema_dumper_spec.rb +3 -2
  205. data/spec/extensions/schema_spec.rb +2 -2
  206. data/spec/extensions/scissors_spec.rb +1 -2
  207. data/spec/extensions/sequel_3_dataset_methods_spec.rb +30 -17
  208. data/spec/extensions/serialization_modification_detection_spec.rb +2 -2
  209. data/spec/extensions/serialization_spec.rb +15 -13
  210. data/spec/extensions/set_overrides_spec.rb +14 -8
  211. data/spec/extensions/sharding_spec.rb +9 -18
  212. data/spec/extensions/shared_caching_spec.rb +3 -4
  213. data/spec/extensions/single_table_inheritance_spec.rb +11 -11
  214. data/spec/extensions/skip_create_refresh_spec.rb +2 -1
  215. data/spec/extensions/spec_helper.rb +1 -1
  216. data/spec/extensions/split_values_spec.rb +2 -2
  217. data/spec/extensions/sql_comments_spec.rb +6 -0
  218. data/spec/extensions/static_cache_spec.rb +7 -9
  219. data/spec/extensions/string_agg_spec.rb +30 -29
  220. data/spec/extensions/tactical_eager_loading_spec.rb +4 -5
  221. data/spec/extensions/thread_local_timezones_spec.rb +2 -2
  222. data/spec/extensions/timestamps_spec.rb +28 -3
  223. data/spec/extensions/to_dot_spec.rb +1 -2
  224. data/spec/extensions/tree_spec.rb +33 -29
  225. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  226. data/spec/extensions/unlimited_update_spec.rb +1 -0
  227. data/spec/extensions/update_primary_key_spec.rb +11 -7
  228. data/spec/extensions/update_refresh_spec.rb +1 -1
  229. data/spec/extensions/uuid_spec.rb +0 -1
  230. data/spec/extensions/validate_associated_spec.rb +1 -1
  231. data/spec/extensions/validation_class_methods_spec.rb +10 -10
  232. data/spec/extensions/validation_helpers_spec.rb +10 -10
  233. data/spec/extensions/xml_serializer_spec.rb +7 -3
  234. data/spec/integration/associations_test.rb +31 -31
  235. data/spec/integration/dataset_test.rb +17 -19
  236. data/spec/integration/eager_loader_test.rb +24 -24
  237. data/spec/integration/model_test.rb +6 -6
  238. data/spec/integration/plugin_test.rb +43 -43
  239. data/spec/integration/prepared_statement_test.rb +6 -6
  240. data/spec/integration/schema_test.rb +63 -52
  241. data/spec/integration/spec_helper.rb +6 -1
  242. data/spec/integration/transaction_test.rb +13 -13
  243. data/spec/model/association_reflection_spec.rb +17 -17
  244. data/spec/model/associations_spec.rb +101 -96
  245. data/spec/model/base_spec.rb +175 -49
  246. data/spec/model/class_dataset_methods_spec.rb +5 -9
  247. data/spec/model/dataset_methods_spec.rb +5 -5
  248. data/spec/model/eager_loading_spec.rb +209 -235
  249. data/spec/model/hooks_spec.rb +15 -15
  250. data/spec/model/model_spec.rb +28 -21
  251. data/spec/model/plugins_spec.rb +4 -5
  252. data/spec/model/record_spec.rb +59 -57
  253. data/spec/model/spec_helper.rb +1 -1
  254. data/spec/model/validations_spec.rb +6 -6
  255. data/spec/spec_config.rb +1 -1
  256. metadata +10 -2
data/doc/testing.rdoc CHANGED
@@ -156,9 +156,11 @@ SEQUEL_COLUMNS_INTROSPECTION :: Use the columns_introspection extension when run
156
156
  SEQUEL_CONNECTION_VALIDATOR :: Use the connection validator extension when running the specs
157
157
  SEQUEL_DUPLICATE_COLUMNS_HANDLER :: Use the duplicate columns handler extension with value given when running the specs
158
158
  SEQUEL_ERROR_SQL :: Use the error_sql extension when running the specs
159
+ SEQUEL_FREEZE_DATASETS :: Use the freeze_datasets extension when running the specs
159
160
  SEQUEL_NO_AUTO_LITERAL_STRINGS :: Use the no_auto_string_literals extension when running the specs
160
161
  SEQUEL_NO_CACHE_ASSOCIATIONS :: Don't cache association metadata when running the specs
161
162
  SEQUEL_NO_CHECK_SQLS :: Don't check for specific SQL syntax when running the specs
162
- SEQUEL_NO_SPLIT_SYMBOLS :: Turn off symbol splitting when running the specs
163
+ SEQUEL_NO_MANGLE :: Don't use the identifier_mangling extension when runnsing the specs
163
164
  SEQUEL_NO_PENDING :: Don't skip any specs, try running all specs (note, can cause lockups for some adapters)
165
+ SEQUEL_NO_SPLIT_SYMBOLS :: Turn off symbol splitting when running the specs
164
166
  SKIPPED_TEST_WARN :: Warn when skipping any tests because libraries aren't available
@@ -86,7 +86,6 @@ module Sequel
86
86
  end
87
87
 
88
88
  module DatabaseMethods
89
- extend Sequel::Database::ResetIdentifierMangling
90
89
  include Sequel::Access::DatabaseMethods
91
90
  include Sequel::Database::SplitAlterTable
92
91
 
@@ -8,7 +8,6 @@ module Sequel
8
8
  # support via ADO.
9
9
  module MSSQL
10
10
  module DatabaseMethods
11
- extend Sequel::Database::ResetIdentifierMangling
12
11
  include Sequel::MSSQL::DatabaseMethods
13
12
  # Query to use to get the number of rows affected by an update or
14
13
  # delete query.
@@ -17,7 +17,6 @@ module Sequel
17
17
  module MySQL
18
18
  # Database instance methods for MySQL databases accessed via DataObjects.
19
19
  module DatabaseMethods
20
- extend Sequel::Database::ResetIdentifierMangling
21
20
  include Sequel::MySQL::DatabaseMethods
22
21
 
23
22
  private
@@ -20,7 +20,6 @@ module Sequel
20
20
  # Methods to add to Database instances that access PostgreSQL via
21
21
  # DataObjects.
22
22
  module DatabaseMethods
23
- extend Sequel::Database::ResetIdentifierMangling
24
23
  include Sequel::Postgres::DatabaseMethods
25
24
 
26
25
  # Add the primary_keys and primary_key_sequences instance variables,
@@ -17,7 +17,6 @@ module Sequel
17
17
  module SQLite
18
18
  # Instance methods for SQLite Database objects accessed via DataObjects.
19
19
  module DatabaseMethods
20
- extend Sequel::Database::ResetIdentifierMangling
21
20
  include Sequel::SQLite::DatabaseMethods
22
21
 
23
22
  private
@@ -308,10 +308,8 @@ module Sequel
308
308
  # dataset, since the DB2 metadata does not use
309
309
  # boolean columns, and some smallint columns are
310
310
  # accidently treated as booleans.
311
- def metadata_dataset
312
- ds = super
313
- ds.convert_smallint_to_bool = false
314
- ds
311
+ def _metadata_dataset
312
+ super.with_convert_smallint_to_bool(false)
315
313
  end
316
314
 
317
315
  # Format Numeric, Date, and Time types specially for use
@@ -359,31 +357,31 @@ module Sequel
359
357
  # Extend given dataset with this module so subselects inside subselects in
360
358
  # prepared statements work.
361
359
  def subselect_sql_append(sql, ds)
362
- ps = ds.to_prepared_statement(:select).clone(:append_sql=>sql)
363
- ps.extend(CallableStatementMethods)
360
+ ps = ds.to_prepared_statement(:select).
361
+ clone(:append_sql=>sql, :prepared_args=>prepared_args).
362
+ with_extend(CallableStatementMethods)
364
363
  ps = ps.bind(@opts[:bind_vars]) if @opts[:bind_vars]
365
- ps.prepared_args = prepared_args
366
364
  ps.prepared_sql
367
365
  end
368
366
  end
369
367
 
370
368
  PreparedStatementMethods = prepared_statements_module(:prepare_bind, Sequel::Dataset::UnnumberedArgumentMapper)
371
369
 
372
- # Emulate support of bind arguments in called statements.
373
- def call(type, bind_arguments={}, *values, &block)
374
- ps = to_prepared_statement(type, values)
375
- ps.extend(CallableStatementMethods)
376
- ps.call(bind_arguments, &block)
370
+ # Override the default IBMDB.convert_smallint_to_bool setting for this dataset.
371
+ def convert_smallint_to_bool=(v)
372
+ @opts[:convert_smallint_to_bool] = v
377
373
  end
378
374
 
379
375
  # Whether to convert smallint to boolean arguments for this dataset.
380
376
  # Defaults to the IBMDB module setting.
381
377
  def convert_smallint_to_bool
382
- defined?(@convert_smallint_to_bool) ? @convert_smallint_to_bool : (@convert_smallint_to_bool = IBMDB.convert_smallint_to_bool)
378
+ opts.has_key?(:convert_smallint_to_bool) ? opts[:convert_smallint_to_bool] : IBMDB.convert_smallint_to_bool
383
379
  end
384
380
 
385
- # Override the default IBMDB.convert_smallint_to_bool setting for this dataset.
386
- attr_writer :convert_smallint_to_bool
381
+ # Return a cloned dataset with the convert_smallint_to_bool option set.
382
+ def with_convert_smallint_to_bool(v)
383
+ clone(:convert_smallint_to_bool=>v)
384
+ end
387
385
 
388
386
  # Fetch the rows from the database and yield plain hashes.
389
387
  def fetch_rows(sql)
@@ -414,16 +412,14 @@ module Sequel
414
412
  self
415
413
  end
416
414
 
417
- # Store the given type of prepared statement in the associated database
418
- # with the given name.
419
- def prepare(type, name=nil, *values)
420
- ps = to_prepared_statement(type, values)
421
- ps.extend(PreparedStatementMethods)
422
- if name
423
- ps.prepared_statement_name = name
424
- db.set_prepared_statement(name, ps)
425
- end
426
- ps
415
+ private
416
+
417
+ def bound_variable_modules
418
+ [CallableStatementMethods]
419
+ end
420
+
421
+ def prepared_statement_modules
422
+ [PreparedStatementMethods]
427
423
  end
428
424
  end
429
425
  end
@@ -712,16 +712,16 @@ module Sequel
712
712
  end
713
713
 
714
714
  StoredProcedureMethods = prepared_statements_module(
715
- "sql = @sproc_name; opts = Hash[opts]; opts[:args] = @sproc_args; opts[:sproc] = true",
715
+ "sql = @opts[:sproc_name]; opts = Hash[opts]; opts[:args] = @opts[:sproc_args]; opts[:sproc] = true",
716
716
  Sequel::Dataset::StoredProcedureMethods,
717
717
  %w"execute execute_dui") do
718
718
  private
719
719
 
720
720
  # Same as execute, explicit due to intricacies of alias and super.
721
721
  def execute_insert(sql, opts=OPTS)
722
- sql = @sproc_name
722
+ sql = @opts[:sproc_name]
723
723
  opts = Hash[opts]
724
- opts[:args] = @sproc_args
724
+ opts[:args] = @opts[:sproc_args]
725
725
  opts[:sproc] = true
726
726
  opts[:type] = :insert
727
727
  super
@@ -739,18 +739,6 @@ module Sequel
739
739
  self
740
740
  end
741
741
 
742
- # Create a named prepared statement that is stored in the
743
- # database (and connection) for reuse.
744
- def prepare(type, name=nil, *values)
745
- ps = to_prepared_statement(type, values)
746
- ps.extend(PreparedStatementMethods)
747
- if name
748
- ps.prepared_statement_name = name
749
- db.set_prepared_statement(name, ps)
750
- end
751
- ps
752
- end
753
-
754
742
  # Set the fetch size on JDBC ResultSets created from this dataset.
755
743
  def with_fetch_size(size)
756
744
  clone(:fetch_size=>size)
@@ -766,7 +754,7 @@ module Sequel
766
754
 
767
755
  # Extend the dataset with the JDBC stored procedure methods.
768
756
  def prepare_extend_sproc(ds)
769
- ds.extend(StoredProcedureMethods)
757
+ ds.with_extend(StoredProcedureMethods)
770
758
  end
771
759
 
772
760
  # The type conversion proc to use for the given column number i,
@@ -784,6 +772,10 @@ module Sequel
784
772
  map[type]
785
773
  end
786
774
 
775
+ def prepared_statement_modules
776
+ [PreparedStatementMethods]
777
+ end
778
+
787
779
  # Split out from fetch rows to allow processing of JDBC result sets
788
780
  # that don't come from issuing an SQL string.
789
781
  def process_result_set(result)
@@ -18,7 +18,6 @@ module Sequel
18
18
  module AS400
19
19
  # Instance methods for AS400 Database objects accessed via JDBC.
20
20
  module DatabaseMethods
21
- extend Sequel::Database::ResetIdentifierMangling
22
21
  include Sequel::JDBC::Transactions
23
22
 
24
23
  TRANSACTION_BEGIN = 'Transaction.begin'.freeze
@@ -16,7 +16,6 @@ module Sequel
16
16
 
17
17
  module Cubrid
18
18
  module DatabaseMethods
19
- extend Sequel::Database::ResetIdentifierMangling
20
19
  include Sequel::Cubrid::DatabaseMethods
21
20
  include Sequel::JDBC::Transactions
22
21
 
@@ -37,7 +37,6 @@ module Sequel
37
37
  module DB2
38
38
  # Database instance methods for DB2 databases accessed via JDBC.
39
39
  module DatabaseMethods
40
- extend Sequel::Database::ResetIdentifierMangling
41
40
  PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
42
41
 
43
42
  include Sequel::DB2::DatabaseMethods
@@ -17,7 +17,6 @@ module Sequel
17
17
  module Derby
18
18
  # Instance methods for Derby Database objects accessed via JDBC.
19
19
  module DatabaseMethods
20
- extend Sequel::Database::ResetIdentifierMangling
21
20
  PRIMARY_KEY_INDEX_RE = /\Asql\d+\z/i.freeze
22
21
 
23
22
  include ::Sequel::JDBC::Transactions
@@ -19,7 +19,6 @@ module Sequel
19
19
  module Firebird
20
20
  # Database instance methods for Firebird databases accessed via JDBC.
21
21
  module DatabaseMethods
22
- extend Sequel::Database::ResetIdentifierMangling
23
22
  include Sequel::Firebird::DatabaseMethods
24
23
  include Sequel::JDBC::Transactions
25
24
 
@@ -16,7 +16,6 @@ module Sequel
16
16
  module H2
17
17
  # Instance methods for H2 Database objects accessed via JDBC.
18
18
  module DatabaseMethods
19
- extend Sequel::Database::ResetIdentifierMangling
20
19
  PRIMARY_KEY_INDEX_RE = /\Aprimary_key/i.freeze
21
20
 
22
21
  # Commit an existing prepared transaction with the given transaction
@@ -17,7 +17,6 @@ module Sequel
17
17
  module HSQLDB
18
18
  # Instance methods for HSQLDB Database objects accessed via JDBC.
19
19
  module DatabaseMethods
20
- extend Sequel::Database::ResetIdentifierMangling
21
20
  PRIMARY_KEY_INDEX_RE = /\Asys_idx_sys_pk_/i.freeze
22
21
 
23
22
  include ::Sequel::JDBC::Transactions
@@ -18,7 +18,6 @@ module Sequel
18
18
  module Informix
19
19
  # Database instance methods for Informix databases accessed via JDBC.
20
20
  module DatabaseMethods
21
- extend Sequel::Database::ResetIdentifierMangling
22
21
  include Sequel::Informix::DatabaseMethods
23
22
 
24
23
  private
@@ -19,7 +19,6 @@ module Sequel
19
19
  module Progress
20
20
  # Database instance methods for Progress databases accessed via JDBC.
21
21
  module DatabaseMethods
22
- extend Sequel::Database::ResetIdentifierMangling
23
22
  include Sequel::Progress::DatabaseMethods
24
23
  include Sequel::JDBC::Transactions
25
24
 
@@ -18,7 +18,6 @@ module Sequel
18
18
  # support via JDBC.
19
19
  module JTDS
20
20
  module DatabaseMethods
21
- extend Sequel::Database::ResetIdentifierMangling
22
21
  include Sequel::JDBC::MSSQL::DatabaseMethods
23
22
 
24
23
  private
@@ -9,7 +9,6 @@ module Sequel
9
9
  module MSSQL
10
10
  # Database instance methods for MSSQL databases accessed via JDBC.
11
11
  module DatabaseMethods
12
- extend Sequel::Database::ResetIdentifierMangling
13
12
  PRIMARY_KEY_INDEX_RE = /\Apk__/i.freeze
14
13
  ATAT_IDENTITY = 'SELECT @@IDENTITY'.freeze
15
14
  SCOPE_IDENTITY = 'SELECT SCOPE_IDENTITY()'.freeze
@@ -18,7 +18,6 @@ module Sequel
18
18
  module MySQL
19
19
  # Database instance methods for MySQL databases accessed via JDBC.
20
20
  module DatabaseMethods
21
- extend Sequel::Database::ResetIdentifierMangling
22
21
  include Sequel::MySQL::DatabaseMethods
23
22
  LAST_INSERT_ID = 'SELECT LAST_INSERT_ID()'.freeze
24
23
 
@@ -33,7 +33,6 @@ module Sequel
33
33
  module Oracle
34
34
  # Instance methods for Oracle Database objects accessed via JDBC.
35
35
  module DatabaseMethods
36
- extend Sequel::Database::ResetIdentifierMangling
37
36
  PRIMARY_KEY_INDEX_RE = /\Asys_/i.freeze
38
37
 
39
38
  include Sequel::Oracle::DatabaseMethods
@@ -41,7 +41,6 @@ module Sequel
41
41
  # Methods to add to Database instances that access PostgreSQL via
42
42
  # JDBC.
43
43
  module DatabaseMethods
44
- extend Sequel::Database::ResetIdentifierMangling
45
44
  include Sequel::Postgres::DatabaseMethods
46
45
 
47
46
  # Add the primary_keys and primary_key_sequences instance variables,
@@ -189,18 +188,6 @@ module Sequel
189
188
  include Sequel::Postgres::DatasetMethods
190
189
  APOS = Dataset::APOS
191
190
 
192
- # Add the shared PostgreSQL prepared statement methods
193
- def prepare(type, name=nil, *values)
194
- ps = to_prepared_statement(type, values)
195
- ps.extend(JDBC::Dataset::PreparedStatementMethods)
196
- ps.extend(::Sequel::Postgres::DatasetMethods::PreparedStatementMethods)
197
- if name
198
- ps.prepared_statement_name = name
199
- db.set_prepared_statement(name, ps)
200
- end
201
- ps
202
- end
203
-
204
191
  private
205
192
 
206
193
  # Literalize strings similar to the native postgres adapter
@@ -39,7 +39,6 @@ module Sequel
39
39
  module SqlAnywhere
40
40
  # Database instance methods for Sybase databases accessed via JDBC.
41
41
  module DatabaseMethods
42
- extend Sequel::Database::ResetIdentifierMangling
43
42
  include Sequel::SqlAnywhere::DatabaseMethods
44
43
  include Sequel::JDBC::Transactions
45
44
 
@@ -18,7 +18,6 @@ module Sequel
18
18
  module SQLite
19
19
  # Instance methods for SQLite Database objects accessed via JDBC.
20
20
  module DatabaseMethods
21
- extend Sequel::Database::ResetIdentifierMangling
22
21
  include Sequel::SQLite::DatabaseMethods
23
22
  LAST_INSERT_ROWID = 'SELECT last_insert_rowid()'.freeze
24
23
  FOREIGN_KEY_ERROR_RE = /query does not return ResultSet/.freeze
@@ -19,7 +19,6 @@ module Sequel
19
19
  module SQLServer
20
20
  # Database instance methods for SQLServer databases accessed via JDBC.
21
21
  module DatabaseMethods
22
- extend Sequel::Database::ResetIdentifierMangling
23
22
  include Sequel::JDBC::MSSQL::DatabaseMethods
24
23
 
25
24
  # Work around a bug in SQL Server JDBC Driver 3.0, where the metadata
@@ -48,12 +47,12 @@ module Sequel
48
47
  end
49
48
  end
50
49
 
51
- def metadata_dataset
50
+ private
51
+
52
+ def _metadata_dataset
52
53
  super.extend(MetadataDatasetMethods)
53
54
  end
54
55
 
55
- private
56
-
57
56
  def disconnect_error?(exception, opts)
58
57
  super || (exception.message =~ /connection is closed/)
59
58
  end
@@ -1,5 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
+ Sequel.require 'adapters/utils/unmodified_identifiers'
4
+
3
5
  module Sequel
4
6
  module Mock
5
7
  # Connection class for Sequel's mock adapter.
@@ -134,7 +136,7 @@ module Sequel
134
136
  case v
135
137
  when Integer
136
138
  if ds
137
- ds.autoid += 1 if ds.autoid.is_a?(Integer)
139
+ ds.send(:cache_set, :_autoid, ds.autoid + 1) if ds.autoid.is_a?(Integer)
138
140
  else
139
141
  @autoid += 1
140
142
  end
@@ -259,6 +261,11 @@ module Sequel
259
261
  end
260
262
  end
261
263
 
264
+ unless @shared_adapter
265
+ extend UnmodifiedIdentifiers::DatabaseMethods
266
+ extend_datasets UnmodifiedIdentifiers::DatasetMethods
267
+ end
268
+
262
269
  self.autoid = opts[:autoid]
263
270
  self.columns = opts[:columns]
264
271
  self.fetch = opts[:fetch]
@@ -290,14 +297,6 @@ module Sequel
290
297
  shared_adapter? ? super : false
291
298
  end
292
299
 
293
- def identifier_input_method_default
294
- shared_adapter? ? super : nil
295
- end
296
-
297
- def identifier_output_method_default
298
- shared_adapter? ? super : nil
299
- end
300
-
301
300
  def shared_adapter?
302
301
  @shared_adapter
303
302
  end
@@ -306,14 +305,38 @@ module Sequel
306
305
  class Dataset < Sequel::Dataset
307
306
  Database::DatasetClass = self
308
307
 
308
+ # The autoid setting for this dataset, if it has been overridden
309
+ def autoid
310
+ cache_get(:_autoid) || @opts[:autoid]
311
+ end
312
+
309
313
  # Override the databases's autoid setting for this dataset
310
- attr_accessor :autoid
314
+ def autoid=(v)
315
+ cache_set(:_autoid, nil)
316
+ @opts[:autoid] = v
317
+ end
318
+
319
+ # The fetch setting for this dataset, if it has been overridden
320
+ def _fetch
321
+ cache_get(:_fetch) || @opts[:fetch]
322
+ end
311
323
 
312
324
  # Override the databases's fetch setting for this dataset
313
- attr_accessor :_fetch
325
+ def _fetch=(v)
326
+ cache_set(:_fetch, nil)
327
+ @opts[:fetch] = v
328
+ end
329
+
330
+ # The numrows setting for this dataset, if it has been overridden
331
+ def numrows
332
+ cache_get(:_numrows) || @opts[:numrows]
333
+ end
314
334
 
315
335
  # Override the databases's numrows setting for this dataset
316
- attr_accessor :numrows
336
+ def numrows=(v)
337
+ cache_set(:_numrows, nil)
338
+ @opts[:numrows] = v
339
+ end
317
340
 
318
341
  # If arguments are provided, use them to set the columns
319
342
  # for this dataset and return self. Otherwise, use the
@@ -331,6 +354,25 @@ module Sequel
331
354
  execute(sql, &block)
332
355
  end
333
356
 
357
+ def quote_identifiers?
358
+ @opts.fetch(:quote_identifiers, db.send(:quote_identifiers_default))
359
+ end
360
+
361
+ # Return cloned dataset with the autoid setting modified
362
+ def with_autoid(autoid)
363
+ clone(:autoid=>autoid)
364
+ end
365
+
366
+ # Return cloned dataset with the fetch setting modified
367
+ def with_fetch(fetch)
368
+ clone(:fetch=>fetch)
369
+ end
370
+
371
+ # Return cloned dataset with the numrows setting modified
372
+ def with_numrows(numrows)
373
+ clone(:numrows=>numrows)
374
+ end
375
+
334
376
  private
335
377
 
336
378
  def execute(sql, opts=OPTS, &block)