viking-sequel 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3134 -0
- data/COPYING +19 -0
- data/README.rdoc +723 -0
- data/Rakefile +193 -0
- data/bin/sequel +196 -0
- data/doc/advanced_associations.rdoc +644 -0
- data/doc/cheat_sheet.rdoc +218 -0
- data/doc/dataset_basics.rdoc +106 -0
- data/doc/dataset_filtering.rdoc +158 -0
- data/doc/opening_databases.rdoc +296 -0
- data/doc/prepared_statements.rdoc +104 -0
- data/doc/reflection.rdoc +84 -0
- data/doc/release_notes/1.0.txt +38 -0
- data/doc/release_notes/1.1.txt +143 -0
- data/doc/release_notes/1.3.txt +101 -0
- data/doc/release_notes/1.4.0.txt +53 -0
- data/doc/release_notes/1.5.0.txt +155 -0
- data/doc/release_notes/2.0.0.txt +298 -0
- data/doc/release_notes/2.1.0.txt +271 -0
- data/doc/release_notes/2.10.0.txt +328 -0
- data/doc/release_notes/2.11.0.txt +215 -0
- data/doc/release_notes/2.12.0.txt +534 -0
- data/doc/release_notes/2.2.0.txt +253 -0
- data/doc/release_notes/2.3.0.txt +88 -0
- data/doc/release_notes/2.4.0.txt +106 -0
- data/doc/release_notes/2.5.0.txt +137 -0
- data/doc/release_notes/2.6.0.txt +157 -0
- data/doc/release_notes/2.7.0.txt +166 -0
- data/doc/release_notes/2.8.0.txt +171 -0
- data/doc/release_notes/2.9.0.txt +97 -0
- data/doc/release_notes/3.0.0.txt +221 -0
- data/doc/release_notes/3.1.0.txt +406 -0
- data/doc/release_notes/3.10.0.txt +286 -0
- data/doc/release_notes/3.2.0.txt +268 -0
- data/doc/release_notes/3.3.0.txt +192 -0
- data/doc/release_notes/3.4.0.txt +325 -0
- data/doc/release_notes/3.5.0.txt +510 -0
- data/doc/release_notes/3.6.0.txt +366 -0
- data/doc/release_notes/3.7.0.txt +179 -0
- data/doc/release_notes/3.8.0.txt +151 -0
- data/doc/release_notes/3.9.0.txt +233 -0
- data/doc/schema.rdoc +36 -0
- data/doc/sharding.rdoc +113 -0
- data/doc/virtual_rows.rdoc +205 -0
- data/lib/sequel.rb +1 -0
- data/lib/sequel/adapters/ado.rb +90 -0
- data/lib/sequel/adapters/ado/mssql.rb +30 -0
- data/lib/sequel/adapters/amalgalite.rb +176 -0
- data/lib/sequel/adapters/db2.rb +139 -0
- data/lib/sequel/adapters/dbi.rb +113 -0
- data/lib/sequel/adapters/do.rb +188 -0
- data/lib/sequel/adapters/do/mysql.rb +49 -0
- data/lib/sequel/adapters/do/postgres.rb +91 -0
- data/lib/sequel/adapters/do/sqlite.rb +40 -0
- data/lib/sequel/adapters/firebird.rb +283 -0
- data/lib/sequel/adapters/informix.rb +77 -0
- data/lib/sequel/adapters/jdbc.rb +587 -0
- data/lib/sequel/adapters/jdbc/as400.rb +58 -0
- data/lib/sequel/adapters/jdbc/h2.rb +133 -0
- data/lib/sequel/adapters/jdbc/mssql.rb +57 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +78 -0
- data/lib/sequel/adapters/jdbc/oracle.rb +50 -0
- data/lib/sequel/adapters/jdbc/postgresql.rb +108 -0
- data/lib/sequel/adapters/jdbc/sqlite.rb +55 -0
- data/lib/sequel/adapters/mysql.rb +421 -0
- data/lib/sequel/adapters/odbc.rb +143 -0
- data/lib/sequel/adapters/odbc/mssql.rb +42 -0
- data/lib/sequel/adapters/openbase.rb +64 -0
- data/lib/sequel/adapters/oracle.rb +131 -0
- data/lib/sequel/adapters/postgres.rb +504 -0
- data/lib/sequel/adapters/shared/mssql.rb +490 -0
- data/lib/sequel/adapters/shared/mysql.rb +498 -0
- data/lib/sequel/adapters/shared/oracle.rb +195 -0
- data/lib/sequel/adapters/shared/postgres.rb +830 -0
- data/lib/sequel/adapters/shared/progress.rb +44 -0
- data/lib/sequel/adapters/shared/sqlite.rb +389 -0
- data/lib/sequel/adapters/sqlite.rb +224 -0
- data/lib/sequel/adapters/utils/stored_procedures.rb +84 -0
- data/lib/sequel/connection_pool.rb +99 -0
- data/lib/sequel/connection_pool/sharded_single.rb +84 -0
- data/lib/sequel/connection_pool/sharded_threaded.rb +211 -0
- data/lib/sequel/connection_pool/single.rb +29 -0
- data/lib/sequel/connection_pool/threaded.rb +150 -0
- data/lib/sequel/core.rb +293 -0
- data/lib/sequel/core_sql.rb +241 -0
- data/lib/sequel/database.rb +1079 -0
- data/lib/sequel/database/schema_generator.rb +327 -0
- data/lib/sequel/database/schema_methods.rb +203 -0
- data/lib/sequel/database/schema_sql.rb +320 -0
- data/lib/sequel/dataset.rb +32 -0
- data/lib/sequel/dataset/actions.rb +441 -0
- data/lib/sequel/dataset/features.rb +86 -0
- data/lib/sequel/dataset/graph.rb +254 -0
- data/lib/sequel/dataset/misc.rb +119 -0
- data/lib/sequel/dataset/mutation.rb +64 -0
- data/lib/sequel/dataset/prepared_statements.rb +227 -0
- data/lib/sequel/dataset/query.rb +709 -0
- data/lib/sequel/dataset/sql.rb +996 -0
- data/lib/sequel/exceptions.rb +51 -0
- data/lib/sequel/extensions/blank.rb +43 -0
- data/lib/sequel/extensions/inflector.rb +242 -0
- data/lib/sequel/extensions/looser_typecasting.rb +21 -0
- data/lib/sequel/extensions/migration.rb +239 -0
- data/lib/sequel/extensions/named_timezones.rb +61 -0
- data/lib/sequel/extensions/pagination.rb +100 -0
- data/lib/sequel/extensions/pretty_table.rb +82 -0
- data/lib/sequel/extensions/query.rb +52 -0
- data/lib/sequel/extensions/schema_dumper.rb +271 -0
- data/lib/sequel/extensions/sql_expr.rb +122 -0
- data/lib/sequel/extensions/string_date_time.rb +46 -0
- data/lib/sequel/extensions/thread_local_timezones.rb +48 -0
- data/lib/sequel/metaprogramming.rb +9 -0
- data/lib/sequel/model.rb +120 -0
- data/lib/sequel/model/associations.rb +1514 -0
- data/lib/sequel/model/base.rb +1069 -0
- data/lib/sequel/model/default_inflections.rb +45 -0
- data/lib/sequel/model/errors.rb +39 -0
- data/lib/sequel/model/exceptions.rb +21 -0
- data/lib/sequel/model/inflections.rb +162 -0
- data/lib/sequel/model/plugins.rb +70 -0
- data/lib/sequel/plugins/active_model.rb +59 -0
- data/lib/sequel/plugins/association_dependencies.rb +103 -0
- data/lib/sequel/plugins/association_proxies.rb +41 -0
- data/lib/sequel/plugins/boolean_readers.rb +53 -0
- data/lib/sequel/plugins/caching.rb +141 -0
- data/lib/sequel/plugins/class_table_inheritance.rb +214 -0
- data/lib/sequel/plugins/composition.rb +138 -0
- data/lib/sequel/plugins/force_encoding.rb +72 -0
- data/lib/sequel/plugins/hook_class_methods.rb +126 -0
- data/lib/sequel/plugins/identity_map.rb +116 -0
- data/lib/sequel/plugins/instance_filters.rb +98 -0
- data/lib/sequel/plugins/instance_hooks.rb +57 -0
- data/lib/sequel/plugins/lazy_attributes.rb +77 -0
- data/lib/sequel/plugins/many_through_many.rb +208 -0
- data/lib/sequel/plugins/nested_attributes.rb +206 -0
- data/lib/sequel/plugins/optimistic_locking.rb +81 -0
- data/lib/sequel/plugins/rcte_tree.rb +281 -0
- data/lib/sequel/plugins/schema.rb +66 -0
- data/lib/sequel/plugins/serialization.rb +166 -0
- data/lib/sequel/plugins/single_table_inheritance.rb +74 -0
- data/lib/sequel/plugins/subclasses.rb +45 -0
- data/lib/sequel/plugins/tactical_eager_loading.rb +61 -0
- data/lib/sequel/plugins/timestamps.rb +87 -0
- data/lib/sequel/plugins/touch.rb +118 -0
- data/lib/sequel/plugins/typecast_on_load.rb +72 -0
- data/lib/sequel/plugins/validation_class_methods.rb +405 -0
- data/lib/sequel/plugins/validation_helpers.rb +223 -0
- data/lib/sequel/sql.rb +1020 -0
- data/lib/sequel/timezones.rb +161 -0
- data/lib/sequel/version.rb +12 -0
- data/lib/sequel_core.rb +1 -0
- data/lib/sequel_model.rb +1 -0
- data/spec/adapters/firebird_spec.rb +407 -0
- data/spec/adapters/informix_spec.rb +97 -0
- data/spec/adapters/mssql_spec.rb +403 -0
- data/spec/adapters/mysql_spec.rb +1019 -0
- data/spec/adapters/oracle_spec.rb +286 -0
- data/spec/adapters/postgres_spec.rb +969 -0
- data/spec/adapters/spec_helper.rb +51 -0
- data/spec/adapters/sqlite_spec.rb +432 -0
- data/spec/core/connection_pool_spec.rb +808 -0
- data/spec/core/core_sql_spec.rb +417 -0
- data/spec/core/database_spec.rb +1662 -0
- data/spec/core/dataset_spec.rb +3827 -0
- data/spec/core/expression_filters_spec.rb +595 -0
- data/spec/core/object_graph_spec.rb +296 -0
- data/spec/core/schema_generator_spec.rb +159 -0
- data/spec/core/schema_spec.rb +830 -0
- data/spec/core/spec_helper.rb +56 -0
- data/spec/core/version_spec.rb +7 -0
- data/spec/extensions/active_model_spec.rb +76 -0
- data/spec/extensions/association_dependencies_spec.rb +127 -0
- data/spec/extensions/association_proxies_spec.rb +50 -0
- data/spec/extensions/blank_spec.rb +67 -0
- data/spec/extensions/boolean_readers_spec.rb +92 -0
- data/spec/extensions/caching_spec.rb +250 -0
- data/spec/extensions/class_table_inheritance_spec.rb +252 -0
- data/spec/extensions/composition_spec.rb +194 -0
- data/spec/extensions/force_encoding_spec.rb +117 -0
- data/spec/extensions/hook_class_methods_spec.rb +470 -0
- data/spec/extensions/identity_map_spec.rb +202 -0
- data/spec/extensions/inflector_spec.rb +181 -0
- data/spec/extensions/instance_filters_spec.rb +55 -0
- data/spec/extensions/instance_hooks_spec.rb +133 -0
- data/spec/extensions/lazy_attributes_spec.rb +153 -0
- data/spec/extensions/looser_typecasting_spec.rb +39 -0
- data/spec/extensions/many_through_many_spec.rb +884 -0
- data/spec/extensions/migration_spec.rb +332 -0
- data/spec/extensions/named_timezones_spec.rb +72 -0
- data/spec/extensions/nested_attributes_spec.rb +396 -0
- data/spec/extensions/optimistic_locking_spec.rb +100 -0
- data/spec/extensions/pagination_spec.rb +99 -0
- data/spec/extensions/pretty_table_spec.rb +91 -0
- data/spec/extensions/query_spec.rb +85 -0
- data/spec/extensions/rcte_tree_spec.rb +205 -0
- data/spec/extensions/schema_dumper_spec.rb +357 -0
- data/spec/extensions/schema_spec.rb +127 -0
- data/spec/extensions/serialization_spec.rb +209 -0
- data/spec/extensions/single_table_inheritance_spec.rb +96 -0
- data/spec/extensions/spec_helper.rb +91 -0
- data/spec/extensions/sql_expr_spec.rb +89 -0
- data/spec/extensions/string_date_time_spec.rb +93 -0
- data/spec/extensions/subclasses_spec.rb +52 -0
- data/spec/extensions/tactical_eager_loading_spec.rb +65 -0
- data/spec/extensions/thread_local_timezones_spec.rb +45 -0
- data/spec/extensions/timestamps_spec.rb +150 -0
- data/spec/extensions/touch_spec.rb +155 -0
- data/spec/extensions/typecast_on_load_spec.rb +69 -0
- data/spec/extensions/validation_class_methods_spec.rb +984 -0
- data/spec/extensions/validation_helpers_spec.rb +438 -0
- data/spec/integration/associations_test.rb +281 -0
- data/spec/integration/database_test.rb +26 -0
- data/spec/integration/dataset_test.rb +963 -0
- data/spec/integration/eager_loader_test.rb +734 -0
- data/spec/integration/model_test.rb +130 -0
- data/spec/integration/plugin_test.rb +814 -0
- data/spec/integration/prepared_statement_test.rb +213 -0
- data/spec/integration/schema_test.rb +361 -0
- data/spec/integration/spec_helper.rb +73 -0
- data/spec/integration/timezone_test.rb +55 -0
- data/spec/integration/transaction_test.rb +122 -0
- data/spec/integration/type_test.rb +96 -0
- data/spec/model/association_reflection_spec.rb +175 -0
- data/spec/model/associations_spec.rb +2633 -0
- data/spec/model/base_spec.rb +418 -0
- data/spec/model/dataset_methods_spec.rb +78 -0
- data/spec/model/eager_loading_spec.rb +1391 -0
- data/spec/model/hooks_spec.rb +240 -0
- data/spec/model/inflector_spec.rb +26 -0
- data/spec/model/model_spec.rb +593 -0
- data/spec/model/plugins_spec.rb +236 -0
- data/spec/model/record_spec.rb +1500 -0
- data/spec/model/spec_helper.rb +97 -0
- data/spec/model/validations_spec.rb +153 -0
- data/spec/rcov.opts +6 -0
- data/spec/spec_config.rb.example +10 -0
- 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.
|