Erlang MySQL driver
Erlang Perl
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
ebin
include
priv
src fixing unicode bug Dec 14, 2009
support
t
.gitignore
Makefile
README.markdown

README.markdown

This fork is no longer maintained. Active development has moved to:

https://github.com/Eonblast/Emysql

Usage

Start the application

application:start(emysql).

Add a pool

emysql:add_pool(PoolName, PoolSize, Username, Password, Host, Port, Database, Encoding) -> ok | {error, pool_already_exists}
PoolName = atom()
PoolSize = integer()
Username = string()
Password = string()
Host = string()
Port = integer()
Database = string()
Encoding = atom()

emysql:add_pool(mypoolname, 1, "username", "mypassword", "localhost", 3306, "mydatabase", utf8).

Record Types

-record(ok_packet, {seq_num, affected_rows, insert_id, status, warning_count, msg}).
-record(error_packet, {seq_num, code, msg}).
-record(result_packet, {seq_num, field_list, rows, extra}).

Executing SQL statements

emysql:execute(PoolName, Statement) -> result_packet() | ok_packet() | error_packet()
PoolName = atom()
Statement = string() | binary()

emysql:execute(mypoolname, <<"SELECT * from mytable">>).
#result_packet{field_list=[...], rows=[...]}

emysql:execute(mypoolname, <<"UPDATE mytable SET bar = 'baz' WHERE id = 1">>).
#ok_packet{affected_rows=1}

Executing prepared statements

emysql:prepare(StmtName, Statement) -> ok
StmtName = atom()
Statement = binary() | string()

emysql:prepare(my_stmt, <<"SELECT * from mytable WHERE id = ?">>).
ok

emysql:execute(StmtName, Args) -> result_packet() | ok_packet() | error_packet()
StmtName = atom()
Args = [term()]

emysql:execute(my_stmt, [1]).
#result_packet{field_list=[...], rows=[...]}

Converting Row Data To Records

emysql_util:as_record(ResultPacket, RecordName, Fields) -> Result
ResultPacket = result_packet()
RecordName = atom() (the name of the record to generate)
Fields = atom()
Result = [record()]

-module(fetch_example).
-record(foo, {bar, baz, bat}).

fetch_foo() ->
   Result = emysql:execute(pool1, <<"select bar, baz, bat from foo">>),
   Recs = emysql_util:as_record(Result, foo, record_info(fields, foo)),
   [begin
      io:format("foo: ~p, ~p, ~p~n", [Foo#foo.bar, Foo#foo.baz, Foo#foo.bat])
    end || Foo <- Recs].

TODO:

  • decrementing pool size could close sockets that are in use
  • spawn individual conn_mgr gen_server processes for each pool
  • allow row results to be returned as binary