mruby-odbc を作った

mruby でそれなりにデータベースにアクセスできるようにしたいなーと思って、作った。

qtkmz/mruby-odbc

ODBC API っぽさを残しつつ、基本的なインタフェースでデータベースとやり取りができるようにしています。今の所、インタフェースは最低限実装しています。この後は、prepared statement など実装していく予定です。

env = ODBC::Env.new
env.set_attr ODBC::Env::ODBC_VERSION, ODBC::Env::VERSION_3

conn = ODBC::Conn.new env
conn.connect 'DSN=myodbc'

stmt = ODBC::Stmt.new conn
stmt.execute 'DROP TABLE IF EXISTS foo'
stmt.execute <<END_OF_SQL
CREATE TABLE foo (
  id int,
  name text
)
END_OF_SQL

stmt = ODBC::Stmt.new conn
stmt.execute "insert into foo values(1, 'aaa')"
stmt.execute "insert into foo values(2, 'bbb')"
stmt.execute "insert into foo values(3, 'ccc')"
stmt.execute "insert into foo values(4, 'ddd')"
stmt.execute "insert into foo values(5, 'eee')"

rs = stmt.execute 'SELECT * FROM foo'
rs.each do |row|
  d = []
  rs.num_result_cols.times do |i|
    d << row[i + 1]
  end
  puts d.join(',')
end

conn.close
env.close

これで、ODBC API を持つデータベースに mruby でアクセスすることができるようになります。
例えば、SQLite3, MySQL, PostgreSQL などにアクセスできます。

あと、SQL Server にもアクセスできるぽいです。

Linux の Microsoft ODBC Driver 11 for SQL Server へようこそ.aspx)