sequel 4.45.0 → 4.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +108 -0
  3. data/doc/release_notes/4.46.0.txt +404 -0
  4. data/doc/security.rdoc +9 -0
  5. data/doc/sql.rdoc +2 -2
  6. data/doc/testing.rdoc +1 -1
  7. data/doc/validations.rdoc +1 -2
  8. data/lib/sequel/adapters/ado.rb +8 -3
  9. data/lib/sequel/adapters/ado/access.rb +8 -4
  10. data/lib/sequel/adapters/ado/mssql.rb +3 -1
  11. data/lib/sequel/adapters/amalgalite.rb +5 -0
  12. data/lib/sequel/adapters/cubrid.rb +16 -7
  13. data/lib/sequel/adapters/do.rb +7 -1
  14. data/lib/sequel/adapters/do/mysql.rb +8 -4
  15. data/lib/sequel/adapters/ibmdb.rb +10 -5
  16. data/lib/sequel/adapters/jdbc.rb +8 -2
  17. data/lib/sequel/adapters/jdbc/as400.rb +10 -3
  18. data/lib/sequel/adapters/jdbc/db2.rb +27 -16
  19. data/lib/sequel/adapters/jdbc/derby.rb +47 -20
  20. data/lib/sequel/adapters/jdbc/h2.rb +13 -7
  21. data/lib/sequel/adapters/jdbc/hsqldb.rb +18 -9
  22. data/lib/sequel/adapters/jdbc/mssql.rb +5 -2
  23. data/lib/sequel/adapters/jdbc/mysql.rb +3 -2
  24. data/lib/sequel/adapters/jdbc/oracle.rb +3 -2
  25. data/lib/sequel/adapters/jdbc/postgresql.rb +4 -3
  26. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +2 -1
  27. data/lib/sequel/adapters/jdbc/sqlite.rb +10 -3
  28. data/lib/sequel/adapters/jdbc/sqlserver.rb +23 -0
  29. data/lib/sequel/adapters/jdbc/transactions.rb +16 -10
  30. data/lib/sequel/adapters/mock.rb +5 -0
  31. data/lib/sequel/adapters/mysql.rb +8 -1
  32. data/lib/sequel/adapters/mysql2.rb +6 -1
  33. data/lib/sequel/adapters/odbc.rb +20 -8
  34. data/lib/sequel/adapters/odbc/mssql.rb +6 -3
  35. data/lib/sequel/adapters/oracle.rb +12 -6
  36. data/lib/sequel/adapters/postgres.rb +20 -8
  37. data/lib/sequel/adapters/shared/access.rb +76 -47
  38. data/lib/sequel/adapters/shared/cubrid.rb +16 -11
  39. data/lib/sequel/adapters/shared/db2.rb +46 -19
  40. data/lib/sequel/adapters/shared/firebird.rb +20 -8
  41. data/lib/sequel/adapters/shared/informix.rb +6 -3
  42. data/lib/sequel/adapters/shared/mssql.rb +132 -72
  43. data/lib/sequel/adapters/shared/mysql.rb +112 -65
  44. data/lib/sequel/adapters/shared/oracle.rb +36 -21
  45. data/lib/sequel/adapters/shared/postgres.rb +91 -56
  46. data/lib/sequel/adapters/shared/sqlanywhere.rb +65 -37
  47. data/lib/sequel/adapters/shared/sqlite.rb +67 -32
  48. data/lib/sequel/adapters/sqlanywhere.rb +9 -1
  49. data/lib/sequel/adapters/sqlite.rb +8 -1
  50. data/lib/sequel/adapters/swift.rb +5 -0
  51. data/lib/sequel/adapters/swift/mysql.rb +4 -2
  52. data/lib/sequel/adapters/swift/sqlite.rb +1 -1
  53. data/lib/sequel/adapters/tinytds.rb +10 -3
  54. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  55. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  56. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  57. data/lib/sequel/adapters/utils/pg_types.rb +14 -6
  58. data/lib/sequel/adapters/utils/replace.rb +4 -2
  59. data/lib/sequel/connection_pool/single.rb +2 -2
  60. data/lib/sequel/core.rb +24 -11
  61. data/lib/sequel/database/connecting.rb +9 -3
  62. data/lib/sequel/database/dataset_defaults.rb +7 -1
  63. data/lib/sequel/database/logging.rb +1 -0
  64. data/lib/sequel/database/misc.rb +5 -2
  65. data/lib/sequel/database/query.rb +7 -5
  66. data/lib/sequel/database/schema_generator.rb +1 -0
  67. data/lib/sequel/database/schema_methods.rb +50 -27
  68. data/lib/sequel/database/transactions.rb +19 -9
  69. data/lib/sequel/dataset/actions.rb +15 -6
  70. data/lib/sequel/dataset/graph.rb +15 -5
  71. data/lib/sequel/dataset/misc.rb +12 -4
  72. data/lib/sequel/dataset/mutation.rb +17 -8
  73. data/lib/sequel/dataset/prepared_statements.rb +3 -2
  74. data/lib/sequel/dataset/query.rb +84 -38
  75. data/lib/sequel/dataset/sql.rb +302 -191
  76. data/lib/sequel/deprecated.rb +26 -17
  77. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +2 -2
  78. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  79. data/lib/sequel/extensions/from_block.rb +1 -0
  80. data/lib/sequel/extensions/graph_each.rb +1 -1
  81. data/lib/sequel/extensions/identifier_mangling.rb +2 -2
  82. data/lib/sequel/extensions/migration.rb +28 -4
  83. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -0
  84. data/lib/sequel/extensions/schema_dumper.rb +4 -4
  85. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +5 -3
  86. data/lib/sequel/extensions/set_overrides.rb +2 -0
  87. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  88. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  89. data/lib/sequel/model.rb +11 -7
  90. data/lib/sequel/model/associations.rb +5 -7
  91. data/lib/sequel/model/base.rb +47 -45
  92. data/lib/sequel/model/dataset_module.rb +9 -14
  93. data/lib/sequel/model/plugins.rb +3 -0
  94. data/lib/sequel/no_core_ext.rb +1 -0
  95. data/lib/sequel/plugins/blacklist_security.rb +1 -1
  96. data/lib/sequel/plugins/boolean_subsets.rb +7 -5
  97. data/lib/sequel/plugins/class_table_inheritance.rb +47 -10
  98. data/lib/sequel/plugins/dataset_associations.rb +1 -1
  99. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  100. data/lib/sequel/plugins/finder.rb +240 -0
  101. data/lib/sequel/plugins/inverted_subsets.rb +19 -12
  102. data/lib/sequel/plugins/many_through_many.rb +1 -1
  103. data/lib/sequel/plugins/nested_attributes.rb +1 -1
  104. data/lib/sequel/plugins/schema.rb +1 -1
  105. data/lib/sequel/plugins/single_table_inheritance.rb +7 -1
  106. data/lib/sequel/plugins/subset_conditions.rb +11 -3
  107. data/lib/sequel/plugins/whitelist_security.rb +118 -0
  108. data/lib/sequel/sql.rb +80 -36
  109. data/lib/sequel/timezones.rb +2 -0
  110. data/lib/sequel/version.rb +1 -1
  111. data/spec/adapters/mssql_spec.rb +20 -0
  112. data/spec/adapters/mysql_spec.rb +1 -1
  113. data/spec/adapters/oracle_spec.rb +12 -8
  114. data/spec/adapters/postgres_spec.rb +1 -1
  115. data/spec/adapters/spec_helper.rb +1 -1
  116. data/spec/adapters/sqlite_spec.rb +36 -34
  117. data/spec/core/connection_pool_spec.rb +2 -1
  118. data/spec/core/database_spec.rb +87 -9
  119. data/spec/core/dataset_spec.rb +501 -129
  120. data/spec/core/deprecated_spec.rb +1 -1
  121. data/spec/core/expression_filters_spec.rb +146 -60
  122. data/spec/core/mock_adapter_spec.rb +1 -1
  123. data/spec/core/object_graph_spec.rb +61 -9
  124. data/spec/core/placeholder_literalizer_spec.rb +20 -2
  125. data/spec/core/schema_generator_spec.rb +6 -6
  126. data/spec/core/schema_spec.rb +54 -5
  127. data/spec/core_extensions_spec.rb +122 -18
  128. data/spec/deprecation_helper.rb +27 -2
  129. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +6 -6
  130. data/spec/extensions/association_proxies_spec.rb +2 -2
  131. data/spec/extensions/auto_literal_strings_spec.rb +212 -0
  132. data/spec/extensions/blacklist_security_spec.rb +1 -0
  133. data/spec/extensions/class_table_inheritance_spec.rb +1037 -39
  134. data/spec/extensions/column_select_spec.rb +20 -8
  135. data/spec/extensions/columns_introspection_spec.rb +3 -3
  136. data/spec/extensions/core_refinements_spec.rb +29 -12
  137. data/spec/extensions/dataset_associations_spec.rb +12 -12
  138. data/spec/extensions/def_dataset_method_spec.rb +100 -0
  139. data/spec/extensions/error_sql_spec.rb +1 -1
  140. data/spec/extensions/finder_spec.rb +260 -0
  141. data/spec/extensions/graph_each_spec.rb +2 -2
  142. data/spec/extensions/identifier_mangling_spec.rb +14 -8
  143. data/spec/extensions/inverted_subsets_spec.rb +4 -4
  144. data/spec/extensions/lazy_attributes_spec.rb +7 -0
  145. data/spec/extensions/many_through_many_spec.rb +38 -14
  146. data/spec/extensions/nested_attributes_spec.rb +18 -6
  147. data/spec/extensions/no_auto_literal_strings_spec.rb +1 -1
  148. data/spec/extensions/pg_enum_spec.rb +16 -1
  149. data/spec/extensions/pg_interval_spec.rb +11 -2
  150. data/spec/extensions/pg_loose_count_spec.rb +5 -0
  151. data/spec/extensions/pg_row_spec.rb +25 -0
  152. data/spec/extensions/prepared_statements_spec.rb +10 -1
  153. data/spec/extensions/query_spec.rb +2 -2
  154. data/spec/extensions/schema_dumper_spec.rb +2 -2
  155. data/spec/extensions/schema_spec.rb +2 -2
  156. data/spec/extensions/set_overrides_spec.rb +7 -3
  157. data/spec/extensions/sql_expr_spec.rb +0 -1
  158. data/spec/extensions/subset_conditions_spec.rb +6 -6
  159. data/spec/extensions/table_select_spec.rb +24 -12
  160. data/spec/extensions/to_dot_spec.rb +4 -4
  161. data/spec/extensions/whitelist_security_spec.rb +131 -0
  162. data/spec/integration/dataset_test.rb +9 -5
  163. data/spec/integration/model_test.rb +2 -0
  164. data/spec/integration/plugin_test.rb +2 -2
  165. data/spec/integration/spec_helper.rb +1 -1
  166. data/spec/model/associations_spec.rb +39 -11
  167. data/spec/model/base_spec.rb +44 -24
  168. data/spec/model/class_dataset_methods_spec.rb +18 -16
  169. data/spec/model/dataset_methods_spec.rb +4 -4
  170. data/spec/model/eager_loading_spec.rb +84 -24
  171. data/spec/model/model_spec.rb +97 -63
  172. data/spec/model/record_spec.rb +21 -13
  173. metadata +13 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 823afa5d16b89b8446d98fe80d985cadb2e58e65
4
- data.tar.gz: 8bd6d96fc5c32b1199cf36cf955d93e4700b9308
3
+ metadata.gz: 8ecafb93f6c5af1a4ba3d659bbac127a7ee31e6d
4
+ data.tar.gz: 9e9a68697228e06a456cfd8ccefcbb9acff1dbef
5
5
  SHA512:
6
- metadata.gz: 79ecfbb21f5fcfb61921baa56353338b2dfbe2311851b0811c91fbb42cacb2ec7952684e4c1abd1f4bf3afb5b380465945de0c673581672bccc2e5e3dea60ae9
7
- data.tar.gz: 3bae1fbfc25de1394f74e8f76cf435ce9353d55d0cd2a95b0246a53dc27335f1dd00bfe0f6574372ae8edf85e94d776da9d79b91f6833c0ae9bcc2d8671bcfbf
6
+ metadata.gz: 6a82addc13ea6af0d5259a621a12da38e992eb249e2f7f623ff50ec5224e16670c2517c073e2e9af596f8d903603770883974731ef8173ca1183bd3d58c91613
7
+ data.tar.gz: 708159da412ed6bc0e45fc2af49a344df092e1bad67b343481e0cf976b9d185d338f8643269997dc9b40a392084391c7ad1cde72284eb92c6bc33683d18dda20
data/CHANGELOG CHANGED
@@ -1,3 +1,111 @@
1
+ === 4.46.0 (2017-05-01)
2
+
3
+ * Recognize additional disconnect error on MySQL (jeremyevans)
4
+
5
+ * Deconstantize dataset SQL generation, speeding up ruby 2.3+, slowing down earlier versions (jeremyevans)
6
+
7
+ * Deprecate calling Dataset#set_graph_aliases before Dataset#graph (jeremyevans)
8
+
9
+ * Don't swallow exception if there is an exception when rolling back a transaction when using :rollback=>:always option (jeremyevans)
10
+
11
+ * Deprecate passing 2 arguments to Database#alter_table (jeremyevans)
12
+
13
+ * Deprecate passing Schema::CreateTableGenerator instance as second argument to Database#create_table (jeremyevans)
14
+
15
+ * Deprecate Database::DatasetClass as a way for getting default dataset classes for datasets (jeremyevans)
16
+
17
+ * Deprecate SQLite pragma getting and setting methods (jeremyevans)
18
+
19
+ * Remove handling of EMULATED_FUNCTION_MAP from adapter dataset classes, overide Dataset#native_function_name instead (jeremyevans)
20
+
21
+ * Deprecate {Integer,Timestamp}Migrator::DEFAULT_SCHEMA_{COLUMN,TABLE} (jeremyevans)
22
+
23
+ * Deprecate Database#jdbc_* methods for jdbc/db2 adapter Database instances (jeremyevans)
24
+
25
+ * Remove addition of Database#jdbc_* to JDBC::Database in jdbc/db2 adapter (jeremyevans)
26
+
27
+ * Deprecate many internal Database and Dataset string/regexp constants in core and included adapters (jeremyevans)
28
+
29
+ * Remove use of Fixnum in sqlanywhere shared adapter (jeremyevans)
30
+
31
+ * Deprecate Sequel::Schema::Generator constant, use Sequel::Schema::CreateTableGenerator instead (jeremyevans)
32
+
33
+ * Deprecate Database#log_yield (jeremyevans)
34
+
35
+ * Deprecate the set_overrides extension (jeremyevans)
36
+
37
+ * If passing an empty array or hash and a block to a filtering method, ignore the array or hash and just use the block (jeremyevans)
38
+
39
+ * Deprecate ignoring explicit nil argument when there is no existing filter (jeremyevans)
40
+
41
+ * Deprecate ignoring explicit nil argument to filtering methods when passing a block (jeremyevans)
42
+
43
+ * Deprecate ignoring empty strings and other empty? arguments passed to the filtering methods without a block (jeremyevans)
44
+
45
+ * Deprecate calling filtering methods without an argument or a block (jeremyevans)
46
+
47
+ * Deprecate Sequel::VirtualRow#` to create literal SQL, use Sequel.lit instead (jeremyevans)
48
+
49
+ * Add auto_literal_strings extensions for treating plain strings passed to filtering/update methods as literal SQL (jeremyevans)
50
+
51
+ * Deprecate automatically treating plain strings passed to filtering/update methods as literal SQL (jeremyevans)
52
+
53
+ * Passing a PlaceholderLiteralString to a filtering method now uses parentheses around the expression (jeremyevans)
54
+
55
+ * Make Dataset#full_text_search work on Microsoft SQL Server when no_auto_literal_strings extension is used (jeremyevans)
56
+
57
+ * Fix Database#disconnect when using the single connection pool without an active connection (jeremyevans) (#1339)
58
+
59
+ * Handle conversion of datetimeoffset values when using the jdbc/sqlserver adapter in some configurations (iaddict, jeremyevans) (#1338)
60
+
61
+ * Fix conversion of some time values when using the jdbc/sqlserver adapter in some configurations (iaddict, jeremyevans) (#1337)
62
+
63
+ * Use microsecond precision for time values on Microsoft SQL Server, instead of millisecond precision (jeremyevans)
64
+
65
+ * Add Dataset#sqltime_precision private method for adapters to use different precision for Sequel::SQLTime than Time and Date (jeremyevans)
66
+
67
+ * Use utc timezone in Sequel::SQLTime.create if Sequel.application_timezone is :utc (jeremyevans) (#1336)
68
+
69
+ * Include migration filename in message about migration file without a single migration (jmettraux) (#1334)
70
+
71
+ * Deprecate conversion of - to _ in adapter schemes (jeremyevans)
72
+
73
+ * Don't quote function names that are SQL::Identifiers, unless SQL::Function#quoted is used (jeremyevans)
74
+
75
+ * Deprecate splitting virtual row method names (jeremyevans)
76
+
77
+ * Deprecate passing blocks to virtual row methods, move to virtual_row_method_block extension (jeremyevans)
78
+
79
+ * Deprecate Sequel::SQL::Expression#sql_literal and #lit (jeremyevans)
80
+
81
+ * Don't issue deprecation warnings on ruby 1.8.7, as Sequel 5 is dropping support for it (jeremyevans)
82
+
83
+ * Deprecate Sequel::BasicObject#remove_methods! (jeremyevans)
84
+
85
+ * Deprecate sequel/no_core_ext file (jeremyevans)
86
+
87
+ * Deprecate model dataset #insert_sql accepting model instances (jeremyevans)
88
+
89
+ * Deprecate model dataset #join_table and #graph accepting model classes (jeremyevans)
90
+
91
+ * Support :alias option to class_table_inheritance plugin, wrapping subclass datasets in a subquery to fix ambiguous column issues (jeremyevans)
92
+
93
+ * Deprecate Model.set_allowed_columns and Model#{set_all,set_only,update_all,update_only}, move to whitelist security plugin (jeremyevans)
94
+
95
+ * Do not raise MassAssignmentRestriction when setting nested attributes and using the :fields option, only check for fields given (jeremyevans)
96
+
97
+ * Do not add class methods for private methods definined in dataset_module (jeremyevans)
98
+
99
+ * Deprecate Model.def_dataset_method and Model.subset, move to def_dataset_method plugin (jeremyevans)
100
+
101
+ * Deprecate Model.finder and Model.prepared_finder, move to finder plugin (jeremyevans)
102
+
103
+ * Deprecate calling Model.db= on a model with a dataset (jeremyevans)
104
+
105
+ * Deprecate splitting symbols to look for qualified/aliased identifiers (e.g. :table__column) (jeremyevans)
106
+
107
+ * Allow optimized lookups and deletes for models using SQL::Identifier and SQL::QualifiedIdentifier values as the FROM table (jeremyevans)
108
+
1
109
  === 4.45.0 (2017-04-01)
2
110
 
3
111
  * Correctly handle datasets with offsets but no limits used in compound datasets on MSSQL <2012 (jeremyevans)
@@ -0,0 +1,404 @@
1
+ = Deprecated Features
2
+
3
+ * Symbol splitting is now deprecated by default. Sequel has
4
+ split symbols since the very first version, but it has caused
5
+ many problems over the years and while terse, it isn't
6
+ intuitive to new Sequel users and causes significant
7
+ problems when using databases that use double/triple
8
+ underscores in identifiers.
9
+
10
+ If you are using symbols with embedded double/triple
11
+ underscores, such as:
12
+
13
+ :table__column
14
+ :column___alias
15
+ :table__column___alias
16
+
17
+ you either need to turn symbol splitting on by doing:
18
+
19
+ Sequel.split_symbols = true
20
+
21
+ or you need to convert the symbols to Sequel objects:
22
+
23
+ Sequel[:table][:column]
24
+ Sequel[:column].as(:alias)
25
+ Sequel[:table][:column].as(:alias)
26
+
27
+ Sequel ships with multiple extensions that make creation
28
+ of those Sequel objects less verbose, so consider using
29
+ the symbol_aref, symbol_aref_refinement, symbol_as,
30
+ symbol_as_refinement, and/or s extensions.
31
+
32
+ To automatically convert symbols with double/triple
33
+ underscores to their Sequel object equivalents, you can
34
+ use the sequel-unsplit tool available at
35
+ https://github.com/jeremyevans/sequel-unsplit.
36
+
37
+ This deprecation also affects virtual row block methods that use
38
+ double underscores. For example:
39
+
40
+ DB[:table].where{table__column > 3}
41
+
42
+ should be changed to:
43
+
44
+ DB[:table].where{table[:column] > 3}
45
+
46
+ * Automatically treating plain strings passed to filtering/update
47
+ methods as literal strings has been deprecated, with support moved
48
+ to the auto_literal_strings extension. The automatic conversion
49
+ of plain strings to literal SQL is the most common cause of
50
+ SQL injections in applications using Sequel, since many methods
51
+ pass their arguments down to the filtering methods, without
52
+ considering whether the argument might be a string derived from
53
+ user input. By requiring explicit marking of literal SQL strings,
54
+ SQL injections are less likely and easier to audit for.
55
+
56
+ This change means that unless you want to use the
57
+ auto_literal_strings extension, code such as:
58
+
59
+ DB[:table].where("a = 1")
60
+ DB[:table].where("a > ?", 1)
61
+
62
+ should to be converted to:
63
+
64
+ DB[:table].where(Sequel.lit("a = 1"))
65
+ DB[:table].where(Sequel.lit("a > ?", 1))
66
+
67
+ or even better, avoid literal SQL completely by converting it to
68
+ use equivalent Sequel expressions:
69
+
70
+ DB[:table].where(:a => 1)
71
+ DB[:table].where{a > 1}
72
+
73
+ This change also affects passing Dataset#update a string:
74
+
75
+ # Before
76
+ DB[:table].update("a = a + 1")
77
+
78
+ # Change to
79
+ DB[:table].update(Sequel.lit("a = a + 1"))
80
+ DB[:table].update(:a => Sequel[:a] + 1)
81
+
82
+ Note that this deprecation does not affect cases where literal
83
+ SQL is used for the entire query, such as when using any of the
84
+ following:
85
+
86
+ DB["SELECT * FROM foo"]
87
+ DB.fetch("SELECT * FROM foo WHERE a = ?", 1)
88
+ DB.dataset.with_sql("SELECT * FROM foo WHERE a = ?", 1)
89
+
90
+ * Passing blocks to virtual row methods has been deprecated,
91
+ with support moved to the virtual_row_method_block
92
+ extension. Historically, passing blocks to virtual row methods
93
+ changed how the methods were handled, but in recent years
94
+ alternative methods have been added to get the same results.
95
+ If you don't want to use the virtual_row_method_block extension,
96
+ conversion is fairly simple:
97
+
98
+ # WHERE a()
99
+ # Before
100
+ where{a{}}
101
+ # Change to
102
+ where{a.function}
103
+
104
+ # SELECT count(*)
105
+ # Before
106
+ select{count(:*){}}
107
+ # Change to
108
+ select{count.function.*}
109
+
110
+ # SELECT count(DISTINCT c)
111
+ # Before
112
+ select{count(:distinct, :c){}}
113
+ # Change to
114
+ select{count(:c).distinct}
115
+
116
+ # SELECT sum(c) OVER (PARTITION BY a)
117
+ # Before
118
+ select{count(:over, :args=>c, :partition=>:a){}}
119
+ # Change to
120
+ select{count(:c).over(:partition=>:a)}
121
+
122
+ * Model.set_allowed_columns and Model#{set,update}_{all,only}
123
+ have been deprecated, with support moved to the
124
+ whitelist_security plugin. These were the historical mass
125
+ assignment methods supported by Sequel, but set_fields and
126
+ update_fields have been recommended instead for many years.
127
+
128
+ * Model.finder and .prepared_finder have been deprecated by default,
129
+ with support moved to the finder plugin. Model.finder was
130
+ originally added to make it easy to create optimized finder
131
+ methods, but few Sequel users actually use it, so it makes more
132
+ sense to move it to a plugin.
133
+
134
+ * Model.def_dataset_method and Model.subset have been deprecated
135
+ by default, with support moved to the def_dataset_method plugin.
136
+ It's been recommended for many years to use Model.dataset_module
137
+ to define dataset methods, instead of calling def_dataset_method
138
+ and subset on the model class.
139
+
140
+ * Using ` in virtual rows to create literal SQL is now deprecated,
141
+ switch to using Sequel.lit instead:
142
+
143
+ # Before
144
+ DB[:table].where{`a = 1`}
145
+ # Change to
146
+ DB[:table].where(Sequel.lit('a = 1'))
147
+
148
+ * Corner cases in argument handling in the filtering methods are now
149
+ deprecated, including:
150
+
151
+ * Ignoring a filtering method called without an argument or block.
152
+ In Sequel 5, this will raise an exception.
153
+
154
+ * Ignoring empty string arguments or other objects that respond to
155
+ empty? and return true. In Sequel 5, only an empty array or hash
156
+ will be ignored.
157
+
158
+ * Ignoring an explicit nil argument when a block is passed. In
159
+ Sequel 5, this will use a NULL filter.
160
+
161
+ * Ignoring an explicit nil argument when there is no existing
162
+ filter on the dataset. In Sequel 5, this will use a NULL
163
+ filter.
164
+
165
+ * Using a joined dataset as a Sequel::Model dataset is now
166
+ deprecated. Such datasets should now be wrapped in a subquery.
167
+ In Sequel 5, such datasets will automatically be wrapped in
168
+ a subquery aliased to the first table.
169
+
170
+ # Before
171
+ Model.dataset = DB[:a].join(:b, :id=>:b_id)
172
+ # Change to
173
+ Model.dataset = DB[:a].join(:b, :id=>:b_id).from_self(:alias=>:a)
174
+
175
+ * Model.first_where has been deprecated, Model.first should be used
176
+ instead.
177
+
178
+ * Database#log_yield is now deprecated. This does not affect any of
179
+ the adapters that ship with Sequel, but external adapters that
180
+ have not yet been updated to support #log_connection_yield will need
181
+ to be updated.
182
+
183
+ * The set_overrides extension is now deprecated. Anyone using it
184
+ should consider supporting it as an external extension.
185
+
186
+ * Many internal Database and Dataset regexp and string constants
187
+ that were previously used internally have been deprecated.
188
+ Additionally, some historical aliases for existing constants
189
+ have also been deprecated, such as Sequel::Schema::Generator.
190
+ Ruby 2.3+ is required to receive deprecation warnings related to
191
+ these constants.
192
+
193
+ * Passing model classes as the first argument to Dataset#join_table
194
+ and Dataset#graph is now deprecated. Pass the model's table name
195
+ or the model's datasets instead.
196
+
197
+ * Passing model instances to Dataset#insert and #insert_sql is now
198
+ deprecated. Call values on the model instance to get the values
199
+ hash, and pass that as the argument instead.
200
+
201
+ * Calling Dataset#set_graph_aliases before Dataset#graph is now
202
+ deprecated. Dataset#set_graph_aliases should now be called
203
+ after Dataset#graph, not before.
204
+
205
+ * The sequel/no_core_ext file is deprecated. Sequel hasn't loaded
206
+ the core extensions by default since Sequel 3. You can use the
207
+ following if you want to support both Sequel 3 and Sequel 5:
208
+
209
+ begin
210
+ require 'sequel/no_core_ext'
211
+ rescue LoadError
212
+ require 'sequel'
213
+ end
214
+
215
+ * Database#pragma_get and #pragma_set on SQLite are now deprecated,
216
+ along with any method that calls them, such as auto_vacuum,
217
+ temp_store, foreign_keys, case_sensitive_like, synchronous, and
218
+ their setter methods. To set these pragrams for all SQLite
219
+ database connections, the appropriate options should be passed
220
+ when creating the Database instance.
221
+
222
+ * Automatically looking up the dataset class for a Database
223
+ instance by looking for a DatasetClass constant in the Database's
224
+ class is now deprecated. All adapters that ship with Sequel have
225
+ been converted, but external adapters should now define the
226
+ Database#dataset_class_default private method appropriately
227
+ to return the correct dataset class.
228
+
229
+ * Calling Model.db= on a model with a dataset is now deprecated.
230
+ If a model already has a dataset, you must now use set_dataset
231
+ or dataset= to change the dataset, not db=.
232
+
233
+ * Sequel::SQL::Expression#sql_literal and #lit are now deprecated.
234
+ These aren't used internally and aren't expected to be used
235
+ externally.
236
+
237
+ * {Integer,Timestamp}Migrator::DEFAULT_SCHEMA_{COLUMN,TABLE}
238
+ are now deprecated. They have been replaced by
239
+ default_schema_column and default_schema_table instance methods.
240
+
241
+ * Passing a Schema::CreateTableGenerator instance as the
242
+ second argument to Database#create_table is now
243
+ deprecated. Database#create_table still supports passing the
244
+ generator via the :generator option.
245
+
246
+ * Passing a second argument to Database#alter_table is now
247
+ deprecated.
248
+
249
+ * Sequel::BasicObject.remove_methods! is now deprecated. It has
250
+ always been a no-op on ruby 1.9+.
251
+
252
+ * Referencing the PG_NAMED_TYPES constant in your code is now
253
+ deprecated. Previously, adding entries to the PG_NAMED_TYPES
254
+ was deprecated, but no deprecation message would be issued by
255
+ referencing the constant.
256
+
257
+ * The conversion of - to _ in adapter schemes is now deprecated.
258
+ This does not affect any internal adapters, but it may affect
259
+ external ones.
260
+
261
+ * The Database#jdbc_* methods in the jdbc/db2 adapter (e.g.
262
+ jdbc_tables) are now deprecated. Call the regular versions
263
+ instead (e.g. tables).
264
+
265
+ * Dataset#_filter and #_filter_or_exclude private methods have
266
+ been deprecated. If you have an extension that was calling these
267
+ methods, switch to the new #add_filter private method.
268
+
269
+ = New Features
270
+
271
+ * The class_table_inheritance plugin now supports an :alias option.
272
+ If provided, this wraps subclass datasets in subqueries, avoiding
273
+ problems with ambiguous columns and cases where the wrong table
274
+ name is used. Due to the deprecation of joined datasets for
275
+ models, use of the class_table_inheritance plugin without this
276
+ :alias option will result in deprecation warnings. In Sequel 5,
277
+ class_table_inheritance will default to using an :alias option
278
+ with the same as the name of the parent table.
279
+
280
+ * The Dataset#sqltime_precision private method has been added.
281
+ Adapters can use override this if the precision for time values
282
+ is different from the precision for timestamp values. Sequel
283
+ uses this support on Microsoft SQL Server, so that time values
284
+ now support microsecond precision, instead of millisecond
285
+ precision.
286
+
287
+ = Other Improvements
288
+
289
+ * Sequel::Model classes that use a SQL::Identifier or
290
+ SQL::QualifiedIdentifier FROM table value will now use optimized
291
+ lookups and deletes, just as is done for those that use a
292
+ Symbol or String.
293
+
294
+ * Dataset#simple_select_all? now handles aliased subqueries
295
+ correctly, returning false instead of true.
296
+
297
+ * If Sequel.application_timezone is set to :utc,
298
+ Sequel::SQLTime.create will create instances using utc time
299
+ instead of local time.
300
+
301
+ * If there is an exception while rolling back a transaction when
302
+ using the :rollback=>:always option, the exception is now
303
+ raised instead of being ignored.
304
+
305
+ * If a migration file does not contain a migration or contains
306
+ multiple migrations, the exception raised will now include
307
+ the file name in the exception message.
308
+
309
+ * In the jdbc/sqlserver adapter, time values with fractional
310
+ seconds and datetimeoffset values are now handled better when
311
+ using some versions of the underlying JDBC driver.
312
+
313
+ * An additional disconnect error is recognized when using the
314
+ mysql and mysql2 adapters.
315
+
316
+ * Dataset#full_text_search on Microsoft SQL Server now works
317
+ correctly if the no_auto_literal_strings extension is used.
318
+
319
+ * Calling Database#disconnect when using the single connection
320
+ pool without an active connection works correctly again. It was
321
+ broken starting in 4.43.0 during changes to implement
322
+ Database#freeze.
323
+
324
+ * Model class methods are no longer added for private methods
325
+ defined in a dataset_module block. Previously, a public model
326
+ class method was defined, but it would raise an error when
327
+ called.
328
+
329
+ * Fixnum is no longer referenced in the sqlanywhere shared
330
+ adapter, fixing deprecation warnings on ruby 2.4.
331
+
332
+ * Sequel no longer uses constants for building SQL queries,
333
+ relying on frozen string literal support for better
334
+ performance on ruby 2.3+. However, this decreases SQL
335
+ query building performance on ruby <2.3. For the fastest
336
+ SQL query building, update to a recent version of ruby.
337
+
338
+ * Sequel no longer ignores an empty object argument to a
339
+ filtering method if a block is provided. Previously,
340
+ this could raise an exception or produce invalid SQL.
341
+
342
+ * Many small modifications were made to reduce array
343
+ allocations, providing minor speedups.
344
+
345
+ * Internal use of Array#at has been replaced with Array#[],
346
+ providing minor speedups on recent ruby versions.
347
+
348
+ * The jdbc/db2 adapter no longer adds jdbc_* methods to
349
+ JDBC::Database.
350
+
351
+ * Sequel no longer issues deprecation warnings on ruby 1.8.7.
352
+ Sequel 5 will drop support for ruby 1.8.7, and it doesn't make
353
+ sense to issue a deprecation warning if you couldn't upgrade
354
+ anyway.
355
+
356
+ = Backwards Compatibility
357
+
358
+ * When specifying the :fields option to a nested_attributes
359
+ setter, set_fields is now used internally instead of set_only.
360
+ set_fields has been recommended over set_fields since it's
361
+ introduction in Sequel 3.12, but nested_attributes was added
362
+ in Sequel 3.4, before set_fields was available. The result
363
+ of this change is that if additional fields are provided that
364
+ do not match the fields in the :fields option, they will be
365
+ ignored instead of an exception being raised.
366
+
367
+ * When specifying a function name using a Sequel::SQL::Identifier
368
+ instance, the function name is no longer quoted unless
369
+ Sequel::SQL::Function#quoted is used to create a quoted
370
+ function. The reason for this is to make converting virtual
371
+ row method block code easier.
372
+
373
+ # Before
374
+ Sequel.function(Sequel[:a]) # "a"()
375
+
376
+ # Now
377
+ Sequel.function(Sequel[:a]) # a()
378
+ Sequel.function(Sequel[:a]).quoted # "a"()
379
+
380
+ * When passing an SQL::PlaceholderLiteralString instance to a
381
+ dataset filtering method, the placeholder string is now always
382
+ wrapped in parentheses:
383
+
384
+ ds.where(Sequel.lit('? OR ?', :a, :b)).where(:c)
385
+ # Before: WHERE a OR b AND c
386
+ # Now: WHERE (a OR b) AND c
387
+
388
+ This is more of a bugfix than a backwards compatibility issue,
389
+ but is listed in the backwards compatibility section as there
390
+ may be applications that could break due to this change.
391
+
392
+ * Model.subset now calls Model.dataset_module.subset, instead of
393
+ the other way around. If your code depends on this, you will
394
+ need to make modifications.
395
+
396
+ * The private Database#column_definition_order method no longer
397
+ uses const_get(:COLUMN_DEFINITION_ORDER). External adapters
398
+ that defined COLUMN_DEFINITION_ORDER but did not override
399
+ this method must now override this method.
400
+
401
+ * The private Database#native_function_name method no longer
402
+ uses const_get(:EMULATED_FUNCTION_MAP). External adapters
403
+ that defined EMULATED_FUNCTION_MAP but did not override
404
+ this method must now override this method.