Adding column names as option to map and foreach functions
This commit is contained in:
@@ -70,22 +70,35 @@ foreach(F, Sql, Connection) ->
|
|||||||
foreach_s(F, Statement).
|
foreach_s(F, Statement).
|
||||||
|
|
||||||
%%
|
%%
|
||||||
foreach_s(F, Statement) ->
|
foreach_s(F, Statement) when is_function(F, 1) ->
|
||||||
case try_step(Statement, 0) of
|
case try_step(Statement, 0) of
|
||||||
'$done' ->
|
'$done' -> ok;
|
||||||
ok;
|
|
||||||
Row when is_tuple(Row) ->
|
Row when is_tuple(Row) ->
|
||||||
F(Row),
|
F(Row),
|
||||||
foreach_s(F, Statement)
|
foreach_s(F, Statement)
|
||||||
|
end;
|
||||||
|
foreach_s(F, Statement) when is_function(F, 2) ->
|
||||||
|
ColumnNames = column_names(Statement),
|
||||||
|
case try_step(Statement, 0) of
|
||||||
|
'$done' -> ok;
|
||||||
|
Row when is_tuple(Row) ->
|
||||||
|
F(ColumnNames, Row),
|
||||||
|
foreach_s(F, Statement)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
map_s(F, Statement) ->
|
map_s(F, Statement) when is_function(F, 1) ->
|
||||||
case try_step(Statement, 0) of
|
case try_step(Statement, 0) of
|
||||||
'$done' ->
|
'$done' -> [];
|
||||||
[];
|
|
||||||
Row when is_tuple(Row) ->
|
Row when is_tuple(Row) ->
|
||||||
[F(Row) | map_s(F, Statement)]
|
[F(Row) | map_s(F, Statement)]
|
||||||
|
end;
|
||||||
|
map_s(F, Statement) when is_function(F, 2) ->
|
||||||
|
ColumnNames = column_names(Statement),
|
||||||
|
case try_step(Statement, 0) of
|
||||||
|
'$done' -> [];
|
||||||
|
Row when is_tuple(Row) ->
|
||||||
|
[F(ColumnNames, Row) | map_s(F, Statement)]
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|||||||
@@ -87,8 +87,6 @@ column_names_test() ->
|
|||||||
|
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach_test() ->
|
foreach_test() ->
|
||||||
{ok, Db} = esqlite3:open(":memory:"),
|
{ok, Db} = esqlite3:open(":memory:"),
|
||||||
ok = esqlite3:exec("begin;", Db),
|
ok = esqlite3:exec("begin;", Db),
|
||||||
@@ -131,6 +129,16 @@ map_test() ->
|
|||||||
|
|
||||||
[{"hello1",10},{"hello2",11},{"hello3",12},{"hello4",13}] = esqlite3:map(F, "select * from test_table", Db),
|
[{"hello1",10},{"hello2",11},{"hello3",12},{"hello4",13}] = esqlite3:map(F, "select * from test_table", Db),
|
||||||
|
|
||||||
|
%% Test that when the row-names are added..
|
||||||
|
Assoc = fun(Names, Row) ->
|
||||||
|
lists:zip(tuple_to_list(Names), tuple_to_list(Row))
|
||||||
|
end,
|
||||||
|
|
||||||
|
[[{one,"hello1"},{two,10}],
|
||||||
|
[{one,"hello2"},{two,11}],
|
||||||
|
[{one,"hello3"},{two,12}],
|
||||||
|
[{one,"hello4"},{two,13}]] = esqlite3:map(Assoc, "select * from test_table", Db),
|
||||||
|
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user