Awesome work! thank you! On May 3, 1:13 pm, Jeremy Evans <[email protected]> wrote: > Sequel 3.11.0 has been released and should be available on the gem > mirrors. > > = New Features > > * A few new features were added to query logging. Sequel now > includes execution time when logging queries. Queries that > raise exceptions are now logged at ERROR level. You can now > set the log_warn_duration attribute on the Database instance > and queries that take longer than that will be logged at WARN > level. By using different log levels, you can now only log > queries that raise errors, or only log queries that take a long > time. > > # The default - Log all successful queries at INFO level > DB.log_warn_duration = nil > > # Log all successful queries at WARN level > DB.log_warn_duration = 0 > > # Log successful queries that take the database more than half a > # second at WARN level, other successful queries at INFO level > DB.log_warn_duration = 0.5 > > All adapters included with Sequel have been modified to support > the new logging API. The previous API is still available, so > any external adapters should still work, though switching to the > new logging API is encouraged. > > * Sequel::Model now has a require_modification flag. If not set > explicitly, it is enabled by default if the dataset provides an > accurate number of rows matched by an update or delete statement. > When this setting is enabled, Sequel will raise an exception if > you attempt to update or delete a model object and it doesn't end > up affecting exactly one row. For example: > > DB.create_table(:as){primary_key :id} > class A < Sequel::Model; end > a = A.create > > # delete object from database > a.delete > > a.require_modification = false > a.save # no error! > a.delete # no error! > > a.require_modification = true > a.save # Sequel::NoExistingObject exception raised > a.delete # Sequel::NoExistingObject exception raised > > Like many other Sequel::Model settings, this can be set on a > global, per class, and per instance level: > > Sequel::Model.require_modification = false # global > Album.require_modification = true # class > album.require_modification = false # instance > > * An instance_filters plugin was added to the list of built in > plugins, allowing you to add arbitrary filters when updating or > destroying an instance. This allows you to continue using models > when previously you would have had to drop down to using datasets > to get the desired behavior: > > class Item < Sequel::Model > plugin :instance_filters > end > > # These are two separate objects that represent the same > # database row. > i1 = Item.first(:id=>1, :delete_allowed=>false) > i2 = Item.first(:id=>1, :delete_allowed=>false) > > # Add an instance filter to the object. This filter is in effect > # until the object is successfully updated or deleted. > i1.instance_filter(:delete_allowed=>true) > > # Attempting to delete the object where the filter doesn't > # match any rows raises an error. > i1.delete # raises Sequel::Error > > # The other object that represents the same row has no > # instance filters, and can be updated normally. > i2.update(:delete_allowed=>true) > > # Even though the filter is now still in effect, since the > # database row has been updated to allow deleting, > # delete now works. > i1.delete > > * An :after_connect database option is now supported. If provided, > the option value should be a proc that takes a single argument. > It will be called with the underlying connection object before > connection object is added to the connection pool, allowing you > to set per connection options in a thread-safe manner. > > This is useful for customizations you want set on every connection > that Sequel doesn't already support. For example, on PostgreSQL > if you wanted to set the schema search_path on every connection: > > DB = Sequel.postgres('dbname', :after_connect=>(proc do |conn| > conn.execute('SET search_path TO schema1,schema2') > end)) > > * A :test database option is now supported. If set to true, it > automatically calls test_connection to make sure a connection can > be made before returning a Database instance. For backwards > compatibility reasons, this is not set to true by default, but it > is possible that the default will change in a future version of > Sequel. > > * The Dataset#select_append method was added, which always appends > to the existing selected columns. It operates identically to > select_more, except in the case that no columns are currently > selected: > > ds = DB[:a] > # SELECT * FROM items > ds.select_more({:id=>DB[:b].select(:a_id)}.as(:in_b)) > # SELECT id IN (SELECT a_id FROM b) AS in_b FROM a > ds.select_append({:id=>DB[:b].select(:a_id)}.as(:in_b)) > # SELECT *, id IN (SELECT a_id FROM b) AS in_b FROM a > > * The Dataset#provides_accurate_rows_matched? method was added which > allows you to see if the dataset will return the actual number of > rows matched/affected by an update or delete call. > > * Sequel will now emulate DISTINCT ON support using GROUP BY on > MySQL. On MySQL, GROUP BY is similar to DISTINCT ON, except that > the order of returned rows is not deterministic. > > * Support for connecting to Microsoft SQL Server using the JTDS JDBC > driver was added to the jdbc adapter. > > * JDNI connection strings are now supported in the JDBC adapter. > > * The JDBC adapter should now work in situations where driver > auto-loading has problems, just as when using Tomcat or Trinidad. > > * Sequel's JDBC adapter schema parsing now supports a :scale option, > useful for numeric/decimal columns. > > * Sequel's schema parsing on Microsoft SQL Server now supports > :column_size and :scale options. > > * When connecting to SQLite, a Database#sqlite_version method is > available that gives you the SQLite version as an integer (e.g. > 30613 for 3.6.13). > > = Other Improvements > > * Sequel no longer raises an error if you give Dataset#filter or > related method an empty argument such as {}, [], or ''. This allows > code such as the following to work: > > h = {} > h[:name] = name if name > h[:number] = number if number > ds = ds.filter(h) > > Before, this would raise an error if both name and number were > nil. > > * Numeric and decimal columns with a 0 scale are now treated as > integer columns by the model typecasting code, since such columns > cannot store non-integer values. > > * Calling Database#disconnect when using the single threaded > connection pool no longer raises an error if there is no current > connection. > > * When using the :ignore_index_errors options to > Database#create_table, correctly swallow errors raised by Sequel > due to the adapter not supporting the given index type. > > * The JDBC adapter no longer leaks ResultSets when retrieving > metadata. > > * You can now connect to PostgreSQL when using ruby 1.9 with the > -Ku switch. > > * When using the native MySQL adapter, only tinyint(1) columns are > now returned as booleans when using the convert_tinyint_to_bool > setting (the default). Previously, all tinyint columns would > be converted to booleans if the setting was enabled. > > * Correctly handle inserts returning the autogenerated keys when > using MySQL JDBC Driver version 5.1.12 with the jdbc adapter. > > * The native MySQL adapter now supports :config_default_group and > :config_local_infile options. > > * When connecting to SQLite, you can provide the :auto_vacuum, > :foreign_keys, :synchronous, and :temp_store options for > making the appropriate PRAGMA setting on the database in a > thread-safe manner. The previous thread-unsafe PRAGMA setting > methods are available, but their use is discouraged. > > * Sequel will not enable savepoints when connecting to SQLite > unless the version is 3.6.8 or greater. > > * Using limit with distinct now works correctly on Microsoft SQL > Server. > > * Database#rename_table now works correctly on Microsoft SQL Server. > > * If you specify an explicit :provider when using the ADO adapter, > transactions will now work correctly. The default :provider uses > a new native connection for each query, so it cannot work with > transactions, or things like temporary tables. > > * If you specify an explicit :provider when connecting to Microsoft > SQL Server using the ADO adapter (e.g. SQLNCLI10 or SQLNCLI), > Sequel is now able to provide an accurate number of rows modified > and deleted. > > * Using set_column_allow_null with a decimal column with a precision > and scale now works correctly when connecting to Microsoft SQL > Server. > > * You can now connect to Microsoft SQL Server using the dbi adapter. > > * Sequel now recognizes the NUMBER database type as a synonym for > NUMERIC and DECIMAL, which may help some Oracle users. > > * Transactions can now be rolled back correctly when connecting to > Oracle via JDBC. > > * The active_model plugin now supports ActiveModel 3.0.0beta2. > > * Many documentation improvements were made, including the addition > of a dataset basics guide, an association basics guide, an expanded > virtual row guide, and the separation of the Sequel::Dataset RDoc > page into sections. Additional, the RDoc class/method > documentation now contains links to the appropriate guides. > > = Backwards Compatibility > > * When connecting to SQLite, Sequel now automatically sets the > foreign_keys PRAGMA to true, which will make SQLite 3.6.19+ use > database enforced foreign key constraints. If you do not want > the database to enforce the foreign key constraints, you should > use the :foreign_keys=>false option when connecting to the > database. > > * Sequel no longer creates #{plugin_name}_opts class, instance, and > dataset methods for each plugin loaded. No built-in plugin used > them, and I couldn't find an external plugin that did either. > > * The Model#associations method is no longer available if the > default Associations plugin is not loaded due to the > SEQUEL_NO_ASSOCIATIONS constant or environment variable being set. > > * DISTINCT ON support is turned off by default, and only enabled when > using PostgreSQL, since that appears to be the only database that > supports it. Previously, it was enabled by default and most common > adapters turned it off. > > Thanks, > Jeremy > > -- > You received this message because you are subscribed to the Google Groups > "sequel-talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group > athttp://groups.google.com/group/sequel-talk?hl=en.
-- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sequel-talk?hl=en.
