mysql_tests.erl 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. %% @doc This module performs test to an actual database.
  2. -module(mysql_tests).
  3. -include_lib("eunit/include/eunit.hrl").
  4. -define(user, "otptest").
  5. -define(password, "otptest").
  6. -define(create_table_t, <<"CREATE TABLE t ("
  7. " id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,"
  8. " bl BLOB,"
  9. " tx TEXT NOT NULL," %% No default value
  10. " f FLOAT,"
  11. " dc DECIMAL(5,3),"
  12. " ti TIME,"
  13. " ts TIMESTAMP,"
  14. " da DATE,"
  15. " c CHAR(2)"
  16. ") ENGINE=InnoDB">>).
  17. connect_test() ->
  18. {ok, Pid} = mysql:connect([{user, ?user}, {password, ?password}]),
  19. ?assertEqual(ok, mysql:disconnect(Pid)).
  20. query_test_() ->
  21. {setup,
  22. fun () ->
  23. {ok, Pid} = mysql:connect([{user, ?user}, {password, ?password}]),
  24. ok = mysql:query(Pid, <<"DROP DATABASE IF EXISTS otptest">>),
  25. ok = mysql:query(Pid, <<"CREATE DATABASE otptest">>),
  26. ok = mysql:query(Pid, <<"USE otptest">>),
  27. ok = mysql:query(Pid, ?create_table_t),
  28. Pid
  29. end,
  30. fun (Pid) ->
  31. ok = mysql:query(Pid, "DROP TABLE t;"),
  32. mysql:disconnect(Pid)
  33. end,
  34. {with, [fun basic_queries/1, fun text_protocol/1, fun binary_protocol/1]}}.
  35. basic_queries(Pid) ->
  36. %% warning count
  37. ?assertEqual(ok, mysql:query(Pid, <<"DROP TABLE IF EXISTS foo">>)),
  38. ?assertEqual(1, mysql:warning_count(Pid)),
  39. %% SQL parse error
  40. ?assertMatch({error, {1064, <<"42000">>, <<"You have an erro", _/binary>>}},
  41. mysql:query(Pid, <<"FOO">>)),
  42. %% Simple resultset with various types
  43. ?assertEqual({ok, [<<"i">>, <<"s">>], [[42, <<"foo">>]]},
  44. mysql:query(Pid, <<"SELECT 42 AS i, 'foo' AS s;">>)),
  45. ok.
  46. text_protocol(Pid) ->
  47. ok = mysql:query(Pid, <<"INSERT INTO t (bl, f, dc, ti, ts, da, c)"
  48. " VALUES ('blob', 3.14, 3.14, '00:22:11',"
  49. " '2014-11-03 00:22:24', '2014-11-03',"
  50. " NULL)">>),
  51. ?assertEqual(1, mysql:warning_count(Pid)), %% tx has no default value
  52. ?assertEqual(1, mysql:insert_id(Pid)), %% auto_increment starts from 1
  53. ?assertEqual(1, mysql:affected_rows(Pid)),
  54. %% select
  55. ?assertEqual({ok, [<<"id">>, <<"bl">>, <<"tx">>, <<"f">>, <<"dc">>,
  56. <<"ti">>, <<"ts">>, <<"da">>, <<"c">>],
  57. [[1, <<"blob">>, <<>>, 3.14, 3.14, {0, 22, 11},
  58. {{2014, 11, 03}, {00, 22, 24}}, {2014, 11, 03}, null]]},
  59. mysql:query(Pid, <<"SELECT * FROM t">>)),
  60. ok.
  61. binary_protocol(Pid) ->
  62. {ok, Stmt} = mysql:prepare(Pid, <<"SELECT * FROM t">>),
  63. {ok, Cols, Rows} = mysql:query(Pid, Stmt, []),
  64. io:format("Cols: ~p~nRows: ~p~n", [Cols, Rows]),
  65. todo.