/odbc_adapter

An ActiveRecord ODBC adapter

Primary LanguageRubyMIT LicenseMIT

ODBCAdapter License

ActiveRecord Gem Version Branch Status
5.x ~> '5.0' master Build Status
4.x ~> '4.0' 4.2.x Build Status

Supported Databases

  • PostgreSQL 9
  • MySQL 5
  • Snowflake

You can also register your own adapter to get more support for your DBMS ODBCAdapter.register.

Installation

Ensure you have the ODBC driver installed on your machine. You will also need the driver for whichever database to which you want ODBC to connect.

Add this line to your application's Gemfile:

gem 'odbc_adapter'

And then execute:

$ bundle

Or install it yourself as:

$ gem install odbc_adapter

Usage

Configure your database.yml by either using the dsn option to point to a DSN that corresponds to a valid entry in your ~/.odbc.ini file:

development:
  adapter:  odbc
  dsn: MyDatabaseDSN

or by using the conn_str option and specifying the entire connection string:

development:
  adapter: odbc
  conn_str: "DRIVER={PostgreSQL ANSI};SERVER=localhost;PORT=5432;DATABASE=my_database;UID=postgres;"

ActiveRecord models that use this connection will now be connecting to the configured database using the ODBC driver.

Extending

Configure your own adapter by registering it in your application's bootstrap process. For example, you could add the following to a Rails application via config/initializers/custom_database_adapter.rb

ODBCAdapter.register(/custom/, ActiveRecord::ConnectionAdapters::ODBCAdapter) do
  # Overrides
end
development:
  adapter: odbc
  dsn: CustomDB

Testing

To run the tests, you'll need the ODBC driver as well as the connection adapter for each database against which you're trying to test. Then run DSN=MyDatabaseDSN bundle exec rake test and the test suite will be run by connecting to your database.

Contributing

Bug reports and pull requests are welcome on GitHub.

Prior Work

A lot of this work is based on OpenLink's ActiveRecord adapter which works for earlier versions of Rails. 5.0.x compatability work was completed by the Localytics team.