Erlang MySQL driver
Erlang Perl
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ebin prexing modules with 'e' Sep 9, 2009
include adding old password support Oct 12, 2009
priv
src fixing unicode bug Dec 14, 2009
support
t updating tests to not use parameterized modules Oct 7, 2009
.gitignore updating gitignore Oct 20, 2009
Makefile updating install target Sep 21, 2009
README.markdown updating readme Mar 21, 2011

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