Module: Sequel

Defined in:
lib/sequel_core.rb,
lib/sequel_model.rb,
lib/sequel_core/sql.rb,
lib/sequel_model/base.rb,
lib/sequel_model/hooks.rb,
lib/sequel_core/dataset.rb,
lib/sequel_model/record.rb,
lib/sequel_model/schema.rb,
lib/sequel_core/database.rb,
lib/sequel_model/caching.rb,
lib/sequel_model/plugins.rb,
lib/sequel_core/migration.rb,
lib/sequel_core/deprecated.rb,
lib/sequel_core/exceptions.rb,
lib/sequel_core/schema/sql.rb,
lib/sequel_core/dataset/sql.rb,
lib/sequel_core/adapters/ado.rb,
lib/sequel_core/adapters/db2.rb,
lib/sequel_core/adapters/dbi.rb,
lib/sequel_core/object_graph.rb,
lib/sequel_core/pretty_table.rb,
lib/sequel_model/validations.rb,
lib/sequel_core/adapters/jdbc.rb,
lib/sequel_core/adapters/odbc.rb,
lib/sequel_core/dataset/query.rb,
lib/sequel_core/dataset/schema.rb,
lib/sequel_core/adapters/oracle.rb,
lib/sequel_core/adapters/sqlite.rb,
lib/sequel_core/database/schema.rb,
lib/sequel_core/dataset/callback.rb,
lib/sequel_core/schema/generator.rb,
lib/sequel_core/adapters/informix.rb,
lib/sequel_core/adapters/openbase.rb,
lib/sequel_core/adapters/postgres.rb,
lib/sequel_core/dataset/pagination.rb,
lib/sequel_core/adapters/jdbc/mysql.rb,
lib/sequel_core/dataset/convenience.rb,
lib/sequel_core/adapters/jdbc/sqlite.rb,
lib/sequel_core/adapters/shared/mssql.rb,
lib/sequel_core/adapters/shared/mysql.rb,
lib/sequel_core/adapters/shared/sqlite.rb,
lib/sequel_model/association_reflection.rb,
lib/sequel_core/adapters/shared/postgres.rb,
lib/sequel_core/dataset/prepared_statements.rb,
lib/sequel_core/adapters/mysql.rb

Overview

Top level module for Sequel

There are some class methods that are added via metaprogramming, one for each supported adapter. For example:

DB = Sequel.sqlite # Memory database
DB = Sequel.sqlite('blog.db')
DB = Sequel.postgres('database_name', :user=>'user', 
       :password=>'password', :host=>'host', :port=>5432, 
       :max_connections=>10)

If a block is given to these methods, it is passed the opened Database object, which is closed (disconnected) when the block exits. For example:

Sequel.sqlite('blog.db'){|db| puts db.users.count}

Sequel converts the column type tinyint to a boolean by default, you can override the conversion to use tinyint as an integer:

Sequel.convert_tinyint_to_bool = false

Sequel converts two digit years in Dates and DateTimes by default, so 01/02/03 is interpreted at January 2nd, 2003, and 12/13/99 is interpreted as December 13, 1999.. You can override this # to treat those dates as January 2nd, 0003 and December 13, 0099, respectively, by setting:

Sequel.convert_two_digit_years = false

Sequel can use either Time or DateTime for times returned from the database. It defaults to Time. To change it to DateTime, use:

Sequel.datetime_class = DateTime

Defined Under Namespace

Modules: ADO, DB2, DBI, Deprecation, Informix, JDBC, MSSQL, Migrator, MySQL, ODBC, OpenBase, Oracle, Plugins, Postgres, PrettyTable, SQL, SQLite, Schema Classes: ConnectionPool, Database, DatabaseError, Dataset, Error, LiteralString, Migration, Model, SingleThreadedPool

Constant Summary collapse

DATABASES =

Array of all databases to which Sequel has connected. If you are developing an application that can connect to an arbitrary number of databases, delete the database objects from this or they will not get garbage collected.

[]

Class Method Summary collapse

Class Method Details

.connect(*args, &block) ⇒ Object

Creates a new database object based on the supplied connection string and optional arguments. The specified scheme determines the database class used, and the rest of the string specifies the connection options. For example:

DB = Sequel.connect('sqlite:/') # Memory database
DB = Sequel.connect('sqlite://blog.db') # ./blog.db
DB = Sequel.connect('sqlite:///blog.db') # /blog.db
DB = Sequel.connect('postgres://user:password@host:port/database_name')
DB = Sequel.connect('sqlite:///blog.db', :max_connections=>10)

If a block is given, it is passed the opened Database object, which is closed when the block exits. For example:

Sequel.connect('sqlite://blog.db'){|db| puts db.users.count}

This is also aliased as Sequel.open.



67
68
69
# File 'lib/sequel_core.rb', line 67

def self.connect(*args, &block)
  Database.connect(*args, &block)
end

.Model(source) ⇒ Object

Lets you create a Model subclass with its dataset already set. source can be an existing dataset or a symbol (in which case it will create a dataset using the default database with source as the table name).

Example:

class Comment < Sequel::Model(:something)
  table_name # => :something
end


22
23
24
# File 'lib/sequel_model.rb', line 22

def self.Model(source)
  @models[source] ||= Class.new(Model).set_dataset(source)
end

.quote_identifiers=(value) ⇒ Object

Set whether to quote identifiers for all databases by default. By default, Sequel quotes identifiers in all SQL strings, so to turn that off:

Sequel.quote_identifiers = false


76
77
78
# File 'lib/sequel_core.rb', line 76

def self.quote_identifiers=(value)
  Database.quote_identifiers = value
end

.single_threaded=(value) ⇒ Object

Set whether to set the single threaded mode for all databases by default. By default, Sequel uses a threadsafe connection pool, which isn’t as fast as the single threaded connection pool. If your program will only have one thread, and speed is a priority, you may want to set this to true:

Sequel.single_threaded = true

Note that some database adapters (e.g. MySQL) have issues with single threaded mode if you try to perform more than one query simultaneously. For example, the following code will not work well in single threaded mode on MySQL:

DB[:items].each{|i| DB[:nodes].filter(:item_id=>i[:id]).each{|n| puts "#{i} #{n}"}}

Basically, you can’t issue another query inside a call to Dataset#each in single threaded mode. There is a fairly easy fix, just use Dataset#all inside Dataset#each for the outer query:

DB[:items].all{|i| DB[:nodes].filter(:item_id=>i[:id]).each{|n| puts "#{i} #{n}"}}

Dataset#all gets all of the returned objects before calling the block, so the query isn’t left open. Some of the adapters do this internally, and thus don’t have a problem issuing queries inside of Dataset#each.



102
103
104
# File 'lib/sequel_core.rb', line 102

def self.single_threaded=(value)
  Database.single_threaded = value
end

.use_parse_treeObject

Always returns false, since ParseTree support has been removed.



107
108
109
# File 'lib/sequel_core.rb', line 107

def self.use_parse_tree
  false
end

.use_parse_tree=(val) ⇒ Object

Raises an error if attempting to turn ParseTree support on (since it no longer exists). Otherwise, is a no-op.

Raises:



113
114
115
# File 'lib/sequel_core.rb', line 113

def self.use_parse_tree=(val)
  raise(Error, 'ParseTree support has been removed from Sequel') if val
end