ANN: Sequel 0.4.4.2 Released

S

Sharon Rosner

Sequel version 0.4.4.2 has just been released. Sequel is a lightweight
database access and ORM library for Ruby. Sequel provides thread
safety, connection pooling and a simple and expressive API for
constructing database queries and table schemas.

This release includes new schema manipulation functionality,
refactored error classes, compatibility with Ruby 1.9, support for
iteration inside block filters and a few other minor bug fixes and
improvements. Here's a list of the changes:

=== New schema manipulation functionality

Sequel includes a suite of new Database methods for changing the
database schema. The new methods are #add_column, #drop_column,
#add_index, #drop_index, #rename_column and #set_column_type. Usage is
pretty much self explanatory:

DB.add_column :items, :category, :text, :default => 'ruby'
DB.drop_column :items, :category
DB.rename_column :items, :cntr, :counter
DB.set_column_type :items, :counter, :integer
DB.add_index :items, :counter
DB.drop_index :items, :counter

There is also a new Database#alter_table method which lets you write
prettier code when changing the schema:

DB.alter_table :items do
DB.add_column :category, :text, :default => 'ruby'
DB.drop_column :category
DB.rename_column :cntr, :counter
DB.set_column_type :counter, :integer
DB.add_index :counter
DB.drop_index :counter
end

In addition to the table-related methods #create_table,
#create_table!, #drop_table and #table_exists? there's a new
#rename_table method:

DB.rename_table :items, :new_items

=== Better column definitions

The table creation functionality is improved and provides easier ways
to define indexes. Indexes on single columns no longer need to be
defined separately. Instead of this:

DB.create_table :items
text :name
index :name
end

You can now do this:

DB.create_table :items
text :name, :index => true
end

Also, if you want to create a unique index, there's a new #unique
method that takes care of that, so instead of this:

DB.create_table :items
...
index [:node_id, :session_id], :unique => true
end

You can do this:

DB.create_table :items
...
unique [:node_id, :session_id]
end

Note that if you define a UNIQUE constraint for a column, a unique
index is implicitly created, e.g.:

DB.create_table :items
text :name, :unique => true
end

The schema SQL generation code has also been improved to correctly
quote field names and default values (according to the adapter used).

=== New Sequel error classes

The old SequelError class has been renamed into Sequel::Error. New
error classes have been added for specific kinds of errors, all of
them descendants of Sequel::Error. For example,
Sequel::Error::InvalidDatabaseScheme is raised when an invalid
database scheme is specified (duh!).

=== Compatibility with Ruby 1.9

The new release of Sequel is compatible with Ruby 1.9. Be aware though
that ParseTree is currently not compatible with Ruby 1.9 and therefore
block filters cannot be used.

=== Support for iteration inside block filters

Sequel now supports iteration inside block filters. This means that
you can prepare arrays or hashes of values to compare against and
iterate over them to create query filters. Consider this for example:

# Hash containing minimal values for specific columns in the
dataset.
thresholds = {
:group_a => 90,
:group_b => 60,
:group_c => 90
}

In previous releases if you wanted to compare against each value in
thresholds you had to write it out:

nice = DB[:items].filter do
:group_a >= thresholds[:group_a]
:group_b >= thresholds[:group_b]
:group_c >= thresholds[:group_c]
end
nice.sql #=>
"SELECT * FROM specs WHERE ((measure_a >= 90) AND (measure_b >= 60)
AND (measure_c > 90))"

Now you can simply iterate over the hash:

nice = DB[:items].filter do
thresholds.each {|k, v| k >= v}
end
nice.sql #=>
"SELECT * FROM specs WHERE ((measure_a >= 90) AND (measure_b >= 60)
AND (measure_c > 90))"

Nice piece of Ruby magic!

=== Miscellanea

* Changed String#to_time to raise Error::InvalidValue if Time.parse
fails. Note: in MySQL it is possible to store invalid timestamp values
in timestamp columns. If such an invalid timestsamp value is
encountered, Sequel will raise Sequel::Error::InvalidValue.

* Fixed sync problem in connection_pool_spec.

=== More info

Sequel project page:
<http://code.google.com/p/ruby-sequel>

Sequel documentation:
<http://sequel.rubyforge.org>

Join the Sequel-talk group:
<http://groups.google.com/group/sequel-talk>

Install the gem:
sudo gem install sequel

Or check out the source and install manually:
svn co http://ruby-sequel.googlecode.com/svn/trunk sequel
cd sequel
rake install
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top