sequel 4.41.0 → 4.42.0

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