viking-sequel 3.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. data/CHANGELOG +3134 -0
  2. data/COPYING +19 -0
  3. data/README.rdoc +723 -0
  4. data/Rakefile +193 -0
  5. data/bin/sequel +196 -0
  6. data/doc/advanced_associations.rdoc +644 -0
  7. data/doc/cheat_sheet.rdoc +218 -0
  8. data/doc/dataset_basics.rdoc +106 -0
  9. data/doc/dataset_filtering.rdoc +158 -0
  10. data/doc/opening_databases.rdoc +296 -0
  11. data/doc/prepared_statements.rdoc +104 -0
  12. data/doc/reflection.rdoc +84 -0
  13. data/doc/release_notes/1.0.txt +38 -0
  14. data/doc/release_notes/1.1.txt +143 -0
  15. data/doc/release_notes/1.3.txt +101 -0
  16. data/doc/release_notes/1.4.0.txt +53 -0
  17. data/doc/release_notes/1.5.0.txt +155 -0
  18. data/doc/release_notes/2.0.0.txt +298 -0
  19. data/doc/release_notes/2.1.0.txt +271 -0
  20. data/doc/release_notes/2.10.0.txt +328 -0
  21. data/doc/release_notes/2.11.0.txt +215 -0
  22. data/doc/release_notes/2.12.0.txt +534 -0
  23. data/doc/release_notes/2.2.0.txt +253 -0
  24. data/doc/release_notes/2.3.0.txt +88 -0
  25. data/doc/release_notes/2.4.0.txt +106 -0
  26. data/doc/release_notes/2.5.0.txt +137 -0
  27. data/doc/release_notes/2.6.0.txt +157 -0
  28. data/doc/release_notes/2.7.0.txt +166 -0
  29. data/doc/release_notes/2.8.0.txt +171 -0
  30. data/doc/release_notes/2.9.0.txt +97 -0
  31. data/doc/release_notes/3.0.0.txt +221 -0
  32. data/doc/release_notes/3.1.0.txt +406 -0
  33. data/doc/release_notes/3.10.0.txt +286 -0
  34. data/doc/release_notes/3.2.0.txt +268 -0
  35. data/doc/release_notes/3.3.0.txt +192 -0
  36. data/doc/release_notes/3.4.0.txt +325 -0
  37. data/doc/release_notes/3.5.0.txt +510 -0
  38. data/doc/release_notes/3.6.0.txt +366 -0
  39. data/doc/release_notes/3.7.0.txt +179 -0
  40. data/doc/release_notes/3.8.0.txt +151 -0
  41. data/doc/release_notes/3.9.0.txt +233 -0
  42. data/doc/schema.rdoc +36 -0
  43. data/doc/sharding.rdoc +113 -0
  44. data/doc/virtual_rows.rdoc +205 -0
  45. data/lib/sequel.rb +1 -0
  46. data/lib/sequel/adapters/ado.rb +90 -0
  47. data/lib/sequel/adapters/ado/mssql.rb +30 -0
  48. data/lib/sequel/adapters/amalgalite.rb +176 -0
  49. data/lib/sequel/adapters/db2.rb +139 -0
  50. data/lib/sequel/adapters/dbi.rb +113 -0
  51. data/lib/sequel/adapters/do.rb +188 -0
  52. data/lib/sequel/adapters/do/mysql.rb +49 -0
  53. data/lib/sequel/adapters/do/postgres.rb +91 -0
  54. data/lib/sequel/adapters/do/sqlite.rb +40 -0
  55. data/lib/sequel/adapters/firebird.rb +283 -0
  56. data/lib/sequel/adapters/informix.rb +77 -0
  57. data/lib/sequel/adapters/jdbc.rb +587 -0
  58. data/lib/sequel/adapters/jdbc/as400.rb +58 -0
  59. data/lib/sequel/adapters/jdbc/h2.rb +133 -0
  60. data/lib/sequel/adapters/jdbc/mssql.rb +57 -0
  61. data/lib/sequel/adapters/jdbc/mysql.rb +78 -0
  62. data/lib/sequel/adapters/jdbc/oracle.rb +50 -0
  63. data/lib/sequel/adapters/jdbc/postgresql.rb +108 -0
  64. data/lib/sequel/adapters/jdbc/sqlite.rb +55 -0
  65. data/lib/sequel/adapters/mysql.rb +421 -0
  66. data/lib/sequel/adapters/odbc.rb +143 -0
  67. data/lib/sequel/adapters/odbc/mssql.rb +42 -0
  68. data/lib/sequel/adapters/openbase.rb +64 -0
  69. data/lib/sequel/adapters/oracle.rb +131 -0
  70. data/lib/sequel/adapters/postgres.rb +504 -0
  71. data/lib/sequel/adapters/shared/mssql.rb +490 -0
  72. data/lib/sequel/adapters/shared/mysql.rb +498 -0
  73. data/lib/sequel/adapters/shared/oracle.rb +195 -0
  74. data/lib/sequel/adapters/shared/postgres.rb +830 -0
  75. data/lib/sequel/adapters/shared/progress.rb +44 -0
  76. data/lib/sequel/adapters/shared/sqlite.rb +389 -0
  77. data/lib/sequel/adapters/sqlite.rb +224 -0
  78. data/lib/sequel/adapters/utils/stored_procedures.rb +84 -0
  79. data/lib/sequel/connection_pool.rb +99 -0
  80. data/lib/sequel/connection_pool/sharded_single.rb +84 -0
  81. data/lib/sequel/connection_pool/sharded_threaded.rb +211 -0
  82. data/lib/sequel/connection_pool/single.rb +29 -0
  83. data/lib/sequel/connection_pool/threaded.rb +150 -0
  84. data/lib/sequel/core.rb +293 -0
  85. data/lib/sequel/core_sql.rb +241 -0
  86. data/lib/sequel/database.rb +1079 -0
  87. data/lib/sequel/database/schema_generator.rb +327 -0
  88. data/lib/sequel/database/schema_methods.rb +203 -0
  89. data/lib/sequel/database/schema_sql.rb +320 -0
  90. data/lib/sequel/dataset.rb +32 -0
  91. data/lib/sequel/dataset/actions.rb +441 -0
  92. data/lib/sequel/dataset/features.rb +86 -0
  93. data/lib/sequel/dataset/graph.rb +254 -0
  94. data/lib/sequel/dataset/misc.rb +119 -0
  95. data/lib/sequel/dataset/mutation.rb +64 -0
  96. data/lib/sequel/dataset/prepared_statements.rb +227 -0
  97. data/lib/sequel/dataset/query.rb +709 -0
  98. data/lib/sequel/dataset/sql.rb +996 -0
  99. data/lib/sequel/exceptions.rb +51 -0
  100. data/lib/sequel/extensions/blank.rb +43 -0
  101. data/lib/sequel/extensions/inflector.rb +242 -0
  102. data/lib/sequel/extensions/looser_typecasting.rb +21 -0
  103. data/lib/sequel/extensions/migration.rb +239 -0
  104. data/lib/sequel/extensions/named_timezones.rb +61 -0
  105. data/lib/sequel/extensions/pagination.rb +100 -0
  106. data/lib/sequel/extensions/pretty_table.rb +82 -0
  107. data/lib/sequel/extensions/query.rb +52 -0
  108. data/lib/sequel/extensions/schema_dumper.rb +271 -0
  109. data/lib/sequel/extensions/sql_expr.rb +122 -0
  110. data/lib/sequel/extensions/string_date_time.rb +46 -0
  111. data/lib/sequel/extensions/thread_local_timezones.rb +48 -0
  112. data/lib/sequel/metaprogramming.rb +9 -0
  113. data/lib/sequel/model.rb +120 -0
  114. data/lib/sequel/model/associations.rb +1514 -0
  115. data/lib/sequel/model/base.rb +1069 -0
  116. data/lib/sequel/model/default_inflections.rb +45 -0
  117. data/lib/sequel/model/errors.rb +39 -0
  118. data/lib/sequel/model/exceptions.rb +21 -0
  119. data/lib/sequel/model/inflections.rb +162 -0
  120. data/lib/sequel/model/plugins.rb +70 -0
  121. data/lib/sequel/plugins/active_model.rb +59 -0
  122. data/lib/sequel/plugins/association_dependencies.rb +103 -0
  123. data/lib/sequel/plugins/association_proxies.rb +41 -0
  124. data/lib/sequel/plugins/boolean_readers.rb +53 -0
  125. data/lib/sequel/plugins/caching.rb +141 -0
  126. data/lib/sequel/plugins/class_table_inheritance.rb +214 -0
  127. data/lib/sequel/plugins/composition.rb +138 -0
  128. data/lib/sequel/plugins/force_encoding.rb +72 -0
  129. data/lib/sequel/plugins/hook_class_methods.rb +126 -0
  130. data/lib/sequel/plugins/identity_map.rb +116 -0
  131. data/lib/sequel/plugins/instance_filters.rb +98 -0
  132. data/lib/sequel/plugins/instance_hooks.rb +57 -0
  133. data/lib/sequel/plugins/lazy_attributes.rb +77 -0
  134. data/lib/sequel/plugins/many_through_many.rb +208 -0
  135. data/lib/sequel/plugins/nested_attributes.rb +206 -0
  136. data/lib/sequel/plugins/optimistic_locking.rb +81 -0
  137. data/lib/sequel/plugins/rcte_tree.rb +281 -0
  138. data/lib/sequel/plugins/schema.rb +66 -0
  139. data/lib/sequel/plugins/serialization.rb +166 -0
  140. data/lib/sequel/plugins/single_table_inheritance.rb +74 -0
  141. data/lib/sequel/plugins/subclasses.rb +45 -0
  142. data/lib/sequel/plugins/tactical_eager_loading.rb +61 -0
  143. data/lib/sequel/plugins/timestamps.rb +87 -0
  144. data/lib/sequel/plugins/touch.rb +118 -0
  145. data/lib/sequel/plugins/typecast_on_load.rb +72 -0
  146. data/lib/sequel/plugins/validation_class_methods.rb +405 -0
  147. data/lib/sequel/plugins/validation_helpers.rb +223 -0
  148. data/lib/sequel/sql.rb +1020 -0
  149. data/lib/sequel/timezones.rb +161 -0
  150. data/lib/sequel/version.rb +12 -0
  151. data/lib/sequel_core.rb +1 -0
  152. data/lib/sequel_model.rb +1 -0
  153. data/spec/adapters/firebird_spec.rb +407 -0
  154. data/spec/adapters/informix_spec.rb +97 -0
  155. data/spec/adapters/mssql_spec.rb +403 -0
  156. data/spec/adapters/mysql_spec.rb +1019 -0
  157. data/spec/adapters/oracle_spec.rb +286 -0
  158. data/spec/adapters/postgres_spec.rb +969 -0
  159. data/spec/adapters/spec_helper.rb +51 -0
  160. data/spec/adapters/sqlite_spec.rb +432 -0
  161. data/spec/core/connection_pool_spec.rb +808 -0
  162. data/spec/core/core_sql_spec.rb +417 -0
  163. data/spec/core/database_spec.rb +1662 -0
  164. data/spec/core/dataset_spec.rb +3827 -0
  165. data/spec/core/expression_filters_spec.rb +595 -0
  166. data/spec/core/object_graph_spec.rb +296 -0
  167. data/spec/core/schema_generator_spec.rb +159 -0
  168. data/spec/core/schema_spec.rb +830 -0
  169. data/spec/core/spec_helper.rb +56 -0
  170. data/spec/core/version_spec.rb +7 -0
  171. data/spec/extensions/active_model_spec.rb +76 -0
  172. data/spec/extensions/association_dependencies_spec.rb +127 -0
  173. data/spec/extensions/association_proxies_spec.rb +50 -0
  174. data/spec/extensions/blank_spec.rb +67 -0
  175. data/spec/extensions/boolean_readers_spec.rb +92 -0
  176. data/spec/extensions/caching_spec.rb +250 -0
  177. data/spec/extensions/class_table_inheritance_spec.rb +252 -0
  178. data/spec/extensions/composition_spec.rb +194 -0
  179. data/spec/extensions/force_encoding_spec.rb +117 -0
  180. data/spec/extensions/hook_class_methods_spec.rb +470 -0
  181. data/spec/extensions/identity_map_spec.rb +202 -0
  182. data/spec/extensions/inflector_spec.rb +181 -0
  183. data/spec/extensions/instance_filters_spec.rb +55 -0
  184. data/spec/extensions/instance_hooks_spec.rb +133 -0
  185. data/spec/extensions/lazy_attributes_spec.rb +153 -0
  186. data/spec/extensions/looser_typecasting_spec.rb +39 -0
  187. data/spec/extensions/many_through_many_spec.rb +884 -0
  188. data/spec/extensions/migration_spec.rb +332 -0
  189. data/spec/extensions/named_timezones_spec.rb +72 -0
  190. data/spec/extensions/nested_attributes_spec.rb +396 -0
  191. data/spec/extensions/optimistic_locking_spec.rb +100 -0
  192. data/spec/extensions/pagination_spec.rb +99 -0
  193. data/spec/extensions/pretty_table_spec.rb +91 -0
  194. data/spec/extensions/query_spec.rb +85 -0
  195. data/spec/extensions/rcte_tree_spec.rb +205 -0
  196. data/spec/extensions/schema_dumper_spec.rb +357 -0
  197. data/spec/extensions/schema_spec.rb +127 -0
  198. data/spec/extensions/serialization_spec.rb +209 -0
  199. data/spec/extensions/single_table_inheritance_spec.rb +96 -0
  200. data/spec/extensions/spec_helper.rb +91 -0
  201. data/spec/extensions/sql_expr_spec.rb +89 -0
  202. data/spec/extensions/string_date_time_spec.rb +93 -0
  203. data/spec/extensions/subclasses_spec.rb +52 -0
  204. data/spec/extensions/tactical_eager_loading_spec.rb +65 -0
  205. data/spec/extensions/thread_local_timezones_spec.rb +45 -0
  206. data/spec/extensions/timestamps_spec.rb +150 -0
  207. data/spec/extensions/touch_spec.rb +155 -0
  208. data/spec/extensions/typecast_on_load_spec.rb +69 -0
  209. data/spec/extensions/validation_class_methods_spec.rb +984 -0
  210. data/spec/extensions/validation_helpers_spec.rb +438 -0
  211. data/spec/integration/associations_test.rb +281 -0
  212. data/spec/integration/database_test.rb +26 -0
  213. data/spec/integration/dataset_test.rb +963 -0
  214. data/spec/integration/eager_loader_test.rb +734 -0
  215. data/spec/integration/model_test.rb +130 -0
  216. data/spec/integration/plugin_test.rb +814 -0
  217. data/spec/integration/prepared_statement_test.rb +213 -0
  218. data/spec/integration/schema_test.rb +361 -0
  219. data/spec/integration/spec_helper.rb +73 -0
  220. data/spec/integration/timezone_test.rb +55 -0
  221. data/spec/integration/transaction_test.rb +122 -0
  222. data/spec/integration/type_test.rb +96 -0
  223. data/spec/model/association_reflection_spec.rb +175 -0
  224. data/spec/model/associations_spec.rb +2633 -0
  225. data/spec/model/base_spec.rb +418 -0
  226. data/spec/model/dataset_methods_spec.rb +78 -0
  227. data/spec/model/eager_loading_spec.rb +1391 -0
  228. data/spec/model/hooks_spec.rb +240 -0
  229. data/spec/model/inflector_spec.rb +26 -0
  230. data/spec/model/model_spec.rb +593 -0
  231. data/spec/model/plugins_spec.rb +236 -0
  232. data/spec/model/record_spec.rb +1500 -0
  233. data/spec/model/spec_helper.rb +97 -0
  234. data/spec/model/validations_spec.rb +153 -0
  235. data/spec/rcov.opts +6 -0
  236. data/spec/spec_config.rb.example +10 -0
  237. metadata +346 -0
@@ -0,0 +1,157 @@
1
+ New Features
2
+ ------------
3
+
4
+ * Schema parsing was refactored, resulting in a huge speedup when
5
+ using MySQL. MySQL now uses the DESCRIBE statement instead of the
6
+ INFORMATION_SCHEMA. PostgreSQL now uses the pg_* system catalogs
7
+ instead of the INFORMATION schema.
8
+
9
+ * The schema information now includes the :primary_key field. Models
10
+ now use this field to automatically determine the primary key for
11
+ a table, so it no longer needs to be specified explicitly. Models
12
+ even handle the composite primary key case.
13
+
14
+ * The raise_on_typecast_failure switch was added, with it being true
15
+ by default (so no change in behavior). This allows the user to
16
+ silently ignore errors when typecasting fails, at the global, class,
17
+ and instance levels.
18
+
19
+ Sequel::Model.raise_on_typecast_failure = false # Global
20
+ Artist.raise_on_typecast_failure = true # Class
21
+ artist = Artist.new
22
+ artist.raise_on_typecast_failure = false # Instance
23
+
24
+ Album.raise_on_typecast_failure = true
25
+ Album.new(:numtracks=>'a') # => raises Sequel::Error::InvalidValue
26
+ Album.raise_on_typecast_failure = false
27
+ Album.new(:numtracks=>'a') # => #<Album @values={:numtracks=>"a"}>
28
+
29
+ * Associations' orders are now respected when eager loading via
30
+ eager_graph. Sequel will qualify the columns in the order with
31
+ the alias being used, so you can have overlapping columns when
32
+ eager loading multiple associations.
33
+
34
+ Artist.one_to_many :albums, :order=>:name
35
+ Album.one_to_many :tracks, :order=>:number
36
+ Artist.order(:artists__name).eager_graph(:albums=>:tracks).sql
37
+ # => ... ORDER BY artists.name, albums.name, tracks.number
38
+
39
+ * The support for CASE expressions has been enhanced by allowing the
40
+ use of an optional expression:
41
+
42
+ {1=>2}.case(0, :x)
43
+ # => CASE x WHEN 1 THEN 2 ELSE 0 END
44
+ [[:a, 1], [:b, 2], [:c, 3]].case(4, :y)
45
+ # => CASE y WHEN a THEN 1 WHEN b THEN 2 WHEN c THEN 3 ELSE 4 END
46
+
47
+ Previously, to get something equivalent to this, you had to do:
48
+
49
+ {{:x=>1}=>2}.case(0)
50
+ # => CASE WHEN (x = 1) THEN 2 ELSE 0 END
51
+ [[{:y=>:a}, 1], [{:y=>:b}, 2], [{:y=>:c}, 3]].case(4)
52
+ # => CASE WHEN (y = a) THEN 1 WHEN (y = b) THEN 2 WHEN (y = c)
53
+ THEN 3 ELSE 4 END
54
+
55
+ * You can now change the NULL/NOT NULL value of an existing column
56
+ using the set_column_allow_null method.
57
+
58
+ # Set NOT NULL
59
+ DB.alter_table(:artists){set_column_allow_null :name, false}
60
+ # Set NULL
61
+ DB.alter_table(:artists){set_column_allow_null :name, true}
62
+
63
+ * You can now get the schema information for a table in a non-public
64
+ schema in PostgreSQL using the implicit :schema__table syntax.
65
+ Before, the :schema option had to be given explicitly to
66
+ Database#schema. This allows models to get schema information for
67
+ tables outside the public schema.
68
+
69
+ * Transactions are now supported on MSSQL.
70
+
71
+ * Dataset#tables now returns all tables in the database for MySQL
72
+ databases accessed via JDBC.
73
+
74
+ * Database#drop_view can now drop multiple views at once.
75
+
76
+ Other Improvements
77
+ ------------------
78
+
79
+ * The SQLite adapter now respects the Sequel.datetime_class option
80
+ for timestamp and datetime columns.
81
+
82
+ * Adding a unique constraint no longer explicity creates a unique
83
+ index. If you want a unique index, use index :unique=>true.
84
+
85
+ * If no language is specified when creating a full text index on
86
+ PostgreSQL, the simple language is assumed.
87
+
88
+ * Errors when typecasting fails are now Sequel::Error::InvalidValue
89
+ instead of the more generic Sequel::Error.
90
+
91
+ * Specifying constraints now works correctly for all types of
92
+ arguments. Previously, it did not work unless a block or
93
+ interpolated string were used.
94
+
95
+ * Loading an association with the same name as a table in the FROM
96
+ clause no longer causes an error.
97
+
98
+ * When eagerly loading many_to_one associations where no objects have
99
+ an associated object, the negative lookup is now cached.
100
+
101
+ * String keys can now be used with Dataset#multi_insert, just like
102
+ they can be used for Dataset#insert.
103
+
104
+ * Dataset#join_table now generates the correct SQL when doing the
105
+ first join to a dataset where the first source is a dataset, when
106
+ an unqualified column is used in the conditions.
107
+
108
+ * Cascading associations after *_to_many associations can now be
109
+ eagerly loaded via eager_graph.
110
+
111
+ * Eagerly loading *_to_many associations that are cascaded behind a
112
+ many_to_one association now have their duplicates removed if a
113
+ cartesian product join is done.
114
+
115
+ * The SQLite adapter now uses string literals in all of the AS
116
+ clauses. While the SQL standard specifies that identifiers should
117
+ be used, SQLite documentation explicitly states that string
118
+ literals are expected (though it generally works with identifiers
119
+ by converting them implicitly).
120
+
121
+ * Database methods that modify the schema now remove the cached
122
+ schema entry.
123
+
124
+ * The hash keys that Database#schema returns when no table is
125
+ requested are now always supposed to be symbols.
126
+
127
+ * The generation of SQL for composite foreign keys on MySQL has been
128
+ fixed.
129
+
130
+ * A schema.rdoc file was added to the documentation explaining the
131
+ various parts of Sequel related to schema generation and
132
+ modification and how they interact
133
+ (http://sequel.rubyforge.org/rdoc/files/doc/schema_rdoc.html).
134
+
135
+ * The RDoc template for the website was changed from the default
136
+ template to the hanna template.
137
+
138
+ Backwards Compatibility
139
+ -----------------------
140
+
141
+ * The :numeric_precision and :max_chars schema entries have been
142
+ removed. Use the :db_type entry to determine this information,
143
+ if available.
144
+
145
+ * The SQLite adapter used to always return Time instances for
146
+ timestamp types, even if Sequel.datetime_class was DateTime. For
147
+ datetime types it always returned a DateTime instance. It
148
+ now returns an instance of Sequel.datetime_class in both cases.
149
+
150
+ * It's possible that the including of associations' orders when eager
151
+ loading via eager_graph could cause problems. You can use the
152
+ :order_eager_graph=>false option to not use the :order option when
153
+ eager loading via :eager_graph.
154
+
155
+ * There were small changes in SQL creation where the AS keyword is
156
+ now used explicitly. These should have no effect, but could break
157
+ tests for explicit SQL.
@@ -0,0 +1,166 @@
1
+ Performance Optimizations
2
+ -------------------------
3
+
4
+ * Fetching a large number of records with the PostgreSQL adapter is
5
+ significantly faster (up to 3-4 times faster than before).
6
+
7
+ * Instantiating model objects has been made much faster, as many
8
+ options (such as raise_on_save_failure) are now lazily loaded, and
9
+ hook methods are now much faster if no hooks have been defined for
10
+ that type of hook.
11
+
12
+ New Association Options
13
+ -----------------------
14
+
15
+ * The :eager_grapher option has been added allowing you to supply
16
+ your own block to implement eager loading via eager_graph.
17
+
18
+ * many_to_one and one_to_many associations now have a :primary_key
19
+ option, specifying the name of the column that the :key option
20
+ references.
21
+
22
+ * many_to_many associations now have :left_primary_key and
23
+ :right_primary_key options, specifying the columns that :left_key
24
+ and :right_key reference, respectively.
25
+
26
+ * many_to_many associations now have a :uniq option, that adds an
27
+ :after_load callback that makes the returned array of objects
28
+ unique.
29
+
30
+ Other New Features
31
+ ------------------
32
+
33
+ * Dataset#set_graph_aliases now allows you to supply a third argument
34
+ for each column you want graph into the dataset, allowing you to use
35
+ arbitrary SQL expressions that are graphed into the correct table:
36
+
37
+ ds.set_graph_aliases!(:a=>[:b, :c], :d=>[:e, :f, 42])
38
+ # SELECT b.c AS a, 42 AS d FROM ...
39
+ ds.first # => {:b=>{:c=>?}, :e=>{:f=>42}}
40
+
41
+ * Dataset#add_graph_aliases was added, that adds additional graph
42
+ aliases instead of replacing the existing ones (as
43
+ #set_graph_aliases does). It's basically the equivalent of
44
+ select_more for graphs.
45
+
46
+ * Dataset#join_table changed it's final argument from a symbol
47
+ specifying a table name to an option hash (with backwards
48
+ compatibility kept), and adds support for a :implicit_qualifier
49
+ option, which it uses instead of the last joined table to
50
+ qualify columns.
51
+
52
+ * Association's :after_load callbacks are now called when eager
53
+ loading via eager (but not when eager loading via eager_graph).
54
+
55
+ * Any expression can now be used as the argument to Symbol#like,
56
+ which means that you can pattern match columns to other columns.
57
+ Before, it always transformed the argument to a string.
58
+
59
+ :a.like(:b)
60
+ # 2.6.0: a LIKE 'b'
61
+ # 2.7.0: a LIKE b
62
+
63
+ * Array#sql_array was added, allowing you to specify that an array
64
+ in ruby be treated like an array in SQL. This is true anyway,
65
+ except for arrays of all two pairs, which are treated like hashes,
66
+ for specifying multiple conditions with the same key:
67
+
68
+ DB[:foo].filter([:a,:b] => [[1,2],[3,4]].sql_array)
69
+ # => SELECT * FROM foo WHERE ((a, b) IN ((1, 2), (3, 4)))
70
+
71
+ * ComplexExpression#== and #sql? were added, allowing for easier
72
+ testing.
73
+
74
+ * Full text searching on PostgreSQL now joins multiple columns with
75
+ a space, to prevent joining border words, and it works when there
76
+ is a match in one column but the other column is NULL.
77
+
78
+ Other Improvements
79
+ ------------------
80
+
81
+ * Instance methods added by creating associations are added to an
82
+ anonymous module included by the class, so they can be overridden
83
+ in the class while still allowing the use of super to get the
84
+ default behavior (this is similar to column accessor methods).
85
+
86
+ * Many improvements were added to support using multiple schemas in
87
+ PostgreSQL.
88
+
89
+ * Model::Validation::Errors objects are now more compatible with
90
+ Rails, by adding a #count method and making #on return nil if there
91
+ are no error messages for that attribute.
92
+
93
+ * Serialized columns in models are no longer typecast.
94
+
95
+ * Associations are now inherited when a model class is subclassed.
96
+
97
+ * Many improvements were made that should make adding custom
98
+ association types easier.
99
+
100
+ * A corner case in eager_graph where the wrong table name would be
101
+ used to qualify a column name has been fixed.
102
+
103
+ * Dataset's cached column information is no longer modified if #each
104
+ is called with an option that modifies the columns.
105
+
106
+ * You should now be able to connect to Oracle via the JDBC adapter,
107
+ and with the same support it has when using the oracle adapter.
108
+
109
+ * Model.association_reflections is now a public methods, so you can
110
+ grab a hash of all association reflections at once (keyed by
111
+ association name symbol).
112
+
113
+ * The :encoding/:charset option now works in the PostgreSQL adapter
114
+ if the postgres-pr driver is used.
115
+
116
+ * The numeric(x,y) type is now interpreted as decimal.
117
+
118
+ Backwards Compatibilty
119
+ ----------------------
120
+
121
+ * The first argument to Model#initialize must be a hash, you can no
122
+ longer use nil. For example, the following code will break if
123
+ :album is not in params:
124
+
125
+ Album.new(params[:album])
126
+
127
+ Additionally, Model#initialize does not call the block if the
128
+ second argument is true.
129
+
130
+ * The Sequel::Model.lazy_load_schema setting was removed. It should
131
+ no longer be necessary now that schema loading is relatively speedy,
132
+ and schemas can be loaded at startup and cached.
133
+
134
+ * The PostgreSQL adapter will default to using a unix socket in /tmp
135
+ if no host is specified. Before, a TCP/IP socket to localhost was
136
+ used if no host was specified. This change makes Sequel operate
137
+ similarly to the PostgreSQL command line tools.
138
+
139
+ * The ASSOCIATION_TYPES constant has changed from an array to a hash
140
+ and it has been moved. The RECIPROCAL_ASSOCIATIONS constant has
141
+ been removed. This is unlikely to matter unless you were using
142
+ custom association types.
143
+
144
+ * The PostgreSQL adapter now sets the PostgreSQL DateStyle, in order
145
+ to implement an optimization. To turn this off, set
146
+ Sequel::Postgres.use_iso_date_format = false.
147
+
148
+ * When using the PostgreSQL adapter, in many places the schema is
149
+ specified explicitly. If you do not specify a schema, a default
150
+ one is used (public by default). If you use a schema other than
151
+ public for your work, use Database#default_schema= to set it. For
152
+ any table outside of the default schema, you should specify the
153
+ schema explicitly, even if it is in the PostgreSQL search_path.
154
+
155
+ * Model::Validation::Errors#on now returns nil instead of [] if there
156
+ are no errors for an attribute.
157
+
158
+ * Hooks added to a superclass after a subclass has been created no
159
+ longer have an effect on the subclass.
160
+
161
+ * The Postgres.string_to_bool method has been removed.
162
+
163
+ * PostgreSQL full text searching now always defaults to using the
164
+ simple dictionary. If you want to use another dictionary, it must
165
+ be specified explicitly, both when searching and when creating a
166
+ full text index.
@@ -0,0 +1,171 @@
1
+ New Features
2
+ ------------
3
+
4
+ * Sequel now supports database stored procedures similar to its
5
+ support for prepared statements. The API is as follows:
6
+
7
+ DB[:table].call_sproc(:select, :mysp, 'param1', 'param2')
8
+ # or
9
+ sp = DB[:table].prepare_sproc(:select, :mysp)
10
+ sp.call('param1', 'param2')
11
+ sp.call('param3', 'param4')
12
+
13
+ This works with Model datasets as well, allowing them to return
14
+ model objects:
15
+
16
+ Album.call_sproc(:select, :new_albums)
17
+ #=> [#<Album ...>, #<Album ...>]
18
+
19
+ You can call a stored procedure directly on the Database object
20
+ if you want to, but the results and API are adapter dependent,
21
+ and you definitely shouldn't do it if the stored procedure returns
22
+ rows:
23
+
24
+ DB.call_sproc(:mysp, :args=>['param1', 'param2'])
25
+
26
+ Currently, the MySQL and JDBC adapters support stored procedures.
27
+ Other adapters may support them in a future version.
28
+
29
+ * The connection pool code can now remove connections if the
30
+ adapter raises a Sequel::DatabaseDisconnectError indicating that
31
+ the connection has been lost. When a query is attempted and
32
+ the adapter raises this error, the connection pool removes the
33
+ connection from the pool, and reraises the error. The Oracle and
34
+ PostgreSQL adapters currently support this, and other adapters may
35
+ support it in a future version.
36
+
37
+ * Whether to upcase or quote identifiers can now be set separately.
38
+ Previously, upcasing was done when quoting except when using SQLite,
39
+ PostgreSQL, or MySQL. Now, you can turn upcasing off while still
40
+ quoting. This may be necessary if you are using a MSSQL database
41
+ that has lower case table names that conflict with reserved words.
42
+ It also allows you to uppercase identifiers when using SQLite,
43
+ PostgreSQL, or MySQL, which may be beneficial in certain cases.
44
+
45
+ To turn upcasing on or off:
46
+
47
+ # Global
48
+ Sequel.upcase_identifiers = true
49
+ # Database
50
+ DB = Sequel.connect("postgres://...", :upcase_identifiers=>true)
51
+ DB.upcase_identifiers = false
52
+ # Dataset
53
+ ds = DB[:items]
54
+ ds.upcase_identifiers = true
55
+
56
+ * Options are now supported when altering a columns type:
57
+
58
+ DB.alter_table(:items) do
59
+ set_column_type :score, :integer, :unsigned=>true
60
+ set_column_type :score, :varchar, :size=>30
61
+ set_column_type :score, :enum, :elements=>['a', 'b']
62
+ end
63
+
64
+ * Standard conforming strings are now turned on by default in the
65
+ PostgreSQL adapter. This makes PostgreSQL not interpret backslash
66
+ escapes. This is the PostgreSQL recommended setting, which will be
67
+ the default setting in a future version of PostgreSQL. If you
68
+ don't want for force the use of standard strings, use:
69
+
70
+ Sequel::Postgres.force_standard_strings = false
71
+
72
+ You need to do that after you call Sequel.connect but before you
73
+ use the database for anything, since that setting is set on
74
+ initial connection.
75
+
76
+ * Sequel now raises an error if you attempt to use EXCEPT [ALL] or
77
+ INTERSECT [ALL] on a database that doesn't support it.
78
+
79
+ * Sequel now raises an error if you attempt to use DISTINCT ON with
80
+ MySQL or Oracle, which don't support it.
81
+
82
+ * A subadapter for the Progress RDBMS was added to the ODBC adapter.
83
+ To connect to a Progress database, use the :db_type=>'progress'
84
+ option. This adapter targets Progress 9.
85
+
86
+ * The ODBC adapter now supports transactions.
87
+
88
+ * The MSSQL shared adapter now supports multi_insert (for inserting
89
+ multiple rows at once), and unicode string literals.
90
+
91
+ Other Improvements
92
+ ------------------
93
+
94
+ * There were many improvements related to using schemas in databases.
95
+ Using schema-qualified tables should work in most if not all cases
96
+ now. Model associations, getting the schema, joins, and many other
97
+ parts of Sequel were modified to allow the use of schema-qualifed
98
+ tables.
99
+
100
+ * You can now use literal strings with placeholders as well as
101
+ subselects when using prepared statements. For example, the
102
+ following all work now:
103
+
104
+ DB[:items].filter("id = ?", :$i).call(:select, :i=>1)
105
+ DB[:items].filter(:id=>DB[:items].select(:id)\
106
+ .filter(:id=>:$i)).call(:select, :i=>1)
107
+ DB["SELECT * FROM items WHERE id = ?", :$i].call(:select, :i=>1)
108
+
109
+ * Model#initialize received a few more micro-optimizations.
110
+
111
+ * Model#refresh now clears the changed columns as well as the
112
+ associations.
113
+
114
+ * You can now drop columns inside a transaction when using SQLite.
115
+
116
+ * You can now submit multiple SQL queries at once in the MySQL
117
+ adapter:
118
+
119
+ DB['SELECT 1; SELECT 2'].all
120
+ #=> [{:"1"=>1, :"2"=>2}]
121
+
122
+ This may fix issues if you've seen a MySQL "commands out of sync"
123
+ message. Note that this doesn't work if you are connecting to
124
+ MySQL via JDBC.
125
+
126
+ * You can now use AliasedExpressions directly in table names given
127
+ to join_table:
128
+
129
+ DB.from(:i.as(:j)).join(:k.as(:l), :a=>:b)
130
+ #=> ... FROM i AS j INNER JOIN k AS l ON (l.a = j.b)
131
+
132
+ * Database#rename_table once again works on PostgreSQL. It was
133
+ broken in 2.7.0.
134
+
135
+ * The interval type is now treated as it's own type. It was
136
+ previously treated as an integer type.
137
+
138
+ * Subselects are now aliased correctly when using Oracle.
139
+
140
+ * UNION, INTERSECT, and EXCEPT statements now appear before ORDER
141
+ and LIMIT on most databases. If you use these constructs, please
142
+ test and make sure that they work correctly with your database.
143
+
144
+ * SQL EXCEPT clause now works on Oracle, which uses MINUS instead.
145
+
146
+ * Dataset#exists now returns a LiteralString, to make it easier to
147
+ use.
148
+
149
+ * The Sequel.odbc_mssql method was removed, as the odbc_mssql adapter
150
+ was removed in a previous version. Instead, use:
151
+
152
+ Sequel.odbc(..., :db_type=>'mssql')
153
+
154
+ Backwards Compatibilty
155
+ ----------------------
156
+
157
+ * The hash returned by Database#schema when no table name is provided
158
+ uses quoted strings instead of symbols as keys. The hash has a
159
+ default proc, so using the symbol will return the same value as
160
+ before, but if you use each to iterate through the hash, the keys
161
+ will be different. This was necessary to handle schema-qualified
162
+ tables.
163
+
164
+ * Database#table_exists? no longer checks the output of
165
+ Database#tables. If the table exists in the schema, it returns
166
+ true, otherwise, it does a query. This was necessary because
167
+ table_exists? accepts multiple formats for table names and
168
+ Database#tables is an array of symbols.
169
+
170
+ * When getting the schema on PostgreSQL, the default schema is now
171
+ used even if the :schema=>nil option is used.