Packages

MySQL native client is written in Erlang and provides API that is very close to Connector/C library.

Current section

Files

Jump to
mysql_client test cursor_eunit.erl
Raw

test/cursor_eunit.erl

%%
%% Copyright (C) 2010-2014 by krasnop@bellsouth.net (Alexei Krasnopolski)
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% @hidden
%% @since 2011-05-08
%% @copyright 2010-2014 Alexei Krasnopolski
%% @author Alexei Krasnopolski <krasnop@bellsouth.net> [http://crasnopolski.com/]
%% @version {@version}
%% @doc This module is running unit tests for statements command of MySQL protocol.
-module(cursor_eunit).
%%
%% Include files
%%
-include_lib("eunit/include/eunit.hrl").
-include("client_records.hrl").
-include("mysql_types.hrl").
-include("test.hrl").
%%
%% Import modules
%%
-import(helper_statement, []).
%%
%% Exported Functions
%%
-export([]).
%%
%% API Functions
%%
cursor_test_() ->
[
%% DEBUG
%% { setup, fun testing:do_start/0, fun testing:do_stop/1, [
%% GUBED
{ foreachx,
fun do_setup/1,
fun testing:do_cleanup/2,
[
{{plain, cursor_new}, fun cursor_new/2},
{{plain, cursor_error}, fun cursor_error/2},
{{plain, cursor_next}, fun cursor_next/2},
{{plain, cursor_get}, fun cursor_get/2},
{{plain, cursor_size}, fun cursor_size/2},
{{plain, cursor_set}, fun cursor_set/2},
{{plain, cursor_reset}, fun cursor_reset/2},
{{plain, cursor_skip}, fun cursor_skip/2},
{{plain, cursor_back}, fun cursor_back/2},
{{plain, cursor_foreach}, fun cursor_foreach/2}
]
}
%% DEBUG
%% ]}
%% GUBED
].
do_setup(X) ->
Pid = testing:do_setup(X),
Connection = datasource:get_connection(Pid),
Result = connection:execute_query(Connection, "SELECT * FROM all_in_one WHERE persist_id > 10 LIMIT 27"),
datasource:return_connection(Pid, Connection),
Result.
%%
%% Local Functions
%%
cursor_next(_X, Result) -> fun() ->
{M,[_R|_] = _RS} = Result,
% ?debug_Fmt("~p L=~p ~n", [R, length(RS)]),
?assert(is_record(M, metadata)),
?assertEqual(30, M#metadata.field_count),
Cursor = cursor:new(Result),
?assertEqual(11, cursor:get(Cursor, "persist_id")),
?assertEqual(547732, cursor:get(Cursor, "int_col")),
?assertEqual(11, cursor:get(Cursor, "persist_id")),
?assertEqual(547732, cursor:get(Cursor, "int_col")),
cursor:next(Cursor),
?assertEqual(12, cursor:get(Cursor, "persist_id")),
?assertEqual("Varchar value", cursor:get(Cursor, "varchar_col")),
?PASSED
end.
cursor_get(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
cursor:next(Cursor),
?assertEqual(12, cursor:get(Cursor, "persist_id")),
?assertEqual("Varchar value", cursor:get(Cursor, "varchar_col")),
?assertEqual(null, cursor:get(Cursor, "decimal_34_14_col")),
?assertEqual(12, cursor:get(Cursor, 1)),
?assertEqual("Varchar value", cursor:get(Cursor, 3)),
?assertEqual(null, cursor:get(Cursor, 4)),
?PASSED
end.
cursor_size(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
?assertEqual(27, cursor:size(Cursor)),
?PASSED
end.
cursor_skip(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
cursor:skip(Cursor, 4),
?assertEqual({mysql_time,false,1983,3,25,0,0,0,0}, cursor:get(Cursor, 6)),
?PASSED
end.
cursor_back(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
cursor:set(Cursor, 7),
cursor:back(Cursor),
cursor:back(Cursor),
?assertEqual({mysql_time,false,1983,3,25,0,0,0,0}, cursor:get(Cursor, 6)),
?PASSED
end.
cursor_set(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
cursor:set(Cursor, 7),
?assertEqual({mysql_time,false,1980,12,25,23,55,0,0}, cursor:get(Cursor, 8)),
?PASSED
end.
cursor_reset(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
cursor:set(Cursor, 7),
?assertEqual({mysql_time,false,1980,12,25,23,55,0,0}, cursor:get(Cursor, 8)),
cursor:reset(Cursor),
?assertEqual(11, cursor:get(Cursor, "persist_id")),
?assertEqual(547732, cursor:get(Cursor, "int_col")),
?PASSED
end.
cursor_foreach(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
L = cursor:foreach(Cursor, "varchar_col"),
?assertEqual("Varchar value", lists:nth(2, L)),
L1 = cursor:foreach(Cursor, "persist_id"),
?assertEqual(lists:seq(11, 37), L1),
?PASSED
end.
cursor_new(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
?assertEqual(27, cursor:size(Cursor)),
cursor:new(cursorName, Result),
?assertEqual(27, cursor:size(cursorName)),
?PASSED
end.
cursor_error(_X, Result) -> fun() ->
Cursor = cursor:new(Result),
Cursor ! {self(), sizze},
Response = receive
Resp -> Resp
end,
?assertEqual(unknown_operation, Response),
Self = self(),
spawn(fun() -> ?assertEqual(access_forbidden, cursor:size(Cursor)), Self ! continue end),
receive
continue -> ok
end,
?PASSED
end.