Module DBI
In: lib/dbi.rb
lib/dbi/base_classes.rb
lib/dbi/base_classes/database.rb
lib/dbi/base_classes/driver.rb
lib/dbi/base_classes/statement.rb
lib/dbi/binary.rb
lib/dbi/columninfo.rb
lib/dbi/exceptions.rb
lib/dbi/handles.rb
lib/dbi/handles/database.rb
lib/dbi/handles/driver.rb
lib/dbi/handles/statement.rb
lib/dbi/row.rb
lib/dbi/sql.rb
lib/dbi/sql/preparedstatement.rb
lib/dbi/sql_type_constants.rb
lib/dbi/trace.rb
lib/dbi/types.rb
lib/dbi/typeutil.rb
lib/dbi/utils.rb
lib/dbi/utils/date.rb
lib/dbi/utils/tableformatter.rb
lib/dbi/utils/time.rb
lib/dbi/utils/timestamp.rb
lib/dbi/utils/xmlformatter.rb

$Id: utils.rb,v 1.5 2006/01/29 06:14:19 djberg96 Exp $

Methods

Classes and Modules

Module DBI::SQL
Module DBI::Type
Module DBI::Utils
Class DBI::BaseDatabase
Class DBI::BaseDriver
Class DBI::BaseStatement
Class DBI::Binary
Class DBI::ColumnInfo
Class DBI::DataError
Class DBI::DatabaseError
Class DBI::DatabaseHandle
Class DBI::Date
Class DBI::DriverHandle
Class DBI::Error
Class DBI::Handle
Class DBI::HandleTracer
Class DBI::IntegrityError
Class DBI::InterfaceError
Class DBI::InternalError
Class DBI::NotImplementedError
Class DBI::NotSupportedError
Class DBI::OperationalError
Class DBI::ProgrammingError
Class DBI::Row
Class DBI::StatementHandle
Class DBI::Time
Class DBI::Timestamp
Class DBI::TypeUtil
Class DBI::Warning

Constants

VERSION = "0.4.5"
DEFAULT_TRACE_MODE = 2   Module functions (of DBI)
DEFAULT_TRACE_OUTPUT = STDERR
SQL_FETCH_NEXT = 1   Constants for fetch_scroll
SQL_FETCH_PRIOR = 2
SQL_FETCH_FIRST = 3
SQL_FETCH_LAST = 4
SQL_FETCH_ABSOLUTE = 5
SQL_FETCH_RELATIVE = 6
SQL_CHAR = 1   SQL type constants
SQL_NUMERIC = 2
SQL_DECIMAL = 3
SQL_INTEGER = 4
SQL_SMALLINT = 5
SQL_FLOAT = 6
SQL_REAL = 7
SQL_DOUBLE = 8
SQL_DATE = 9
SQL_TIME = 10
SQL_TIMESTAMP = 11
SQL_VARCHAR = 12
SQL_BOOLEAN = 13
SQL_LONGVARCHAR = -1
SQL_BINARY = -2
SQL_VARBINARY = -3
SQL_LONGVARBINARY = -4
SQL_BIGINT = -5
SQL_TINYINT = -6
SQL_BIT = -7
SQL_BLOB = -10  
 TODO
 Find types for these (XOPEN?)
SQL_ARRAY =
SQL_CLOB = -11
SQL_OTHER = 100   SQL_DISTINCT = SQL_OBJECT = SQL_NULL =
SQL_TYPE_NAMES = { SQL_BIT => 'BIT', SQL_TINYINT => 'TINYINT', SQL_SMALLINT => 'SMALLINT', SQL_INTEGER => 'INTEGER', SQL_BIGINT => 'BIGINT', SQL_FLOAT => 'FLOAT', SQL_REAL => 'REAL', SQL_DOUBLE => 'DOUBLE', SQL_NUMERIC => 'NUMERIC', SQL_DECIMAL => 'DECIMAL', SQL_CHAR => 'CHAR', SQL_VARCHAR => 'VARCHAR', SQL_LONGVARCHAR => 'LONG VARCHAR', SQL_DATE => 'DATE', SQL_TIME => 'TIME', SQL_TIMESTAMP => 'TIMESTAMP', SQL_BINARY => 'BINARY', SQL_VARBINARY => 'VARBINARY', SQL_LONGVARBINARY => 'LONG VARBINARY', SQL_BLOB => 'BLOB', SQL_CLOB => 'CLOB', SQL_OTHER => nil, SQL_BOOLEAN => 'BOOLEAN', }   SQL_REF = SQL_STRUCT =

Public Class methods

Returns a list (of String) of the currently available drivers on your system in ‘dbi:driver:’ format.

This currently does not work for rubygems installations, please see DBI.collect_drivers for reasons.

[Source]

# File lib/dbi.rb, line 192
        def available_drivers
            drivers = []
            collect_drivers.each do |key, value|
                drivers.push("dbi:#{key}:")
            end 
            return drivers
        end

Return a list (of String) of the available drivers.

NOTE:This is non-functional for gem installations, due to the nature of how it currently works. A better solution for this will be provided in DBI 0.6.0.

[Source]

# File lib/dbi.rb, line 173
        def collect_drivers
            drivers = { }
            # FIXME rewrite this to leverage require and be more intelligent
            path = File.join(File.dirname(__FILE__), "dbd", "*.rb")
            Dir[path].each do |f|
                if File.file?(f)
                    driver = File.basename(f, ".rb")
                    drivers[driver] = f
                end
            end

            return drivers
        end

Establish a database connection.

Format goes as such: "dbi:Driver:database_conn_args"

  • "dbi" is the literal string "dbi". Case is unimportant.
  • "Driver" is the case-dependent name of your database driver class. The file "dbd/#{Driver}" will be required. If you are using rubygems to control your DBDs and DBI, you must make the gem‘s file path available via the "gem" command before this will work.
  • database_conn_args can be:
    • The database name.
    • A more complex key/value association (to indicate host, etc). This is driver dependent; you should consult your DBD documentation.

[Source]

# File lib/dbi.rb, line 133
        def connect(driver_url, user=nil, auth=nil, params=nil, &p)
            dr, db_args = _get_full_driver(driver_url)
            dh = dr[0] # driver-handle
            dh.convert_types = @@convert_types
            @@last_connection = dh.connect(db_args, user, auth, params, &p)
        end

Return the current status of type conversion at this level. This status will be propogated to any new DatabaseHandles created.

[Source]

# File lib/dbi.rb, line 108
    def self.convert_types
        @@convert_types
    end

Set the current status of type conversion at this level. This status will be propogated to any new DatabaseHandles created.

[Source]

# File lib/dbi.rb, line 114
    def self.convert_types=(bool)
        @@convert_types = bool
    end

Attempt to collect the available data sources to the driver, specified in DBI.connect format.

The result is heavily dependent on the driver‘s ability to enumerate these sources, and results will vary.

[Source]

# File lib/dbi.rb, line 205
        def data_sources(driver)
            db_driver, = parse_url(driver)
            db_driver = load_driver(db_driver)
            dh = @@driver_map[db_driver][0]
            dh.data_sources
        end

Attempt to disconnect all database handles. If a driver is provided, disconnections will happen under that scope. Otherwise, all loaded drivers (and their handles) will be attempted.

[Source]

# File lib/dbi.rb, line 217
        def disconnect_all( driver = nil )
            if driver.nil?
                @@driver_map.each {|k,v| v[0].disconnect_all}
            else
                db_driver, = parse_url(driver)
                @@driver_map[db_driver][0].disconnect_all
            end
        end

Return the last connection attempted.

[Source]

# File lib/dbi.rb, line 102
    def self.last_connection
        @@last_connection
    end

Enable tracing mode. Requires that ‘dbi/trace’ be required before it does anything.

As of 0.4.0, this mode does not do anything either way, so this currently just throws an InterfaceError. This issue is expected to be resolved in the next release.

[Source]

# File lib/dbi.rb, line 160
        def trace(mode=nil, output=nil)
            # FIXME trace
            raise InterfaceError, "the trace module has been removed until it actually works."
            @@trace_mode   = mode   || @@trace_mode   || DBI::DEFAULT_TRACE_MODE
            @@trace_output = output || @@trace_output || DBI::DEFAULT_TRACE_OUTPUT
        end

[Validate]