Adding column names as option to map and foreach functions

This commit is contained in:
Maas-Maarten Zeeman
2011-11-21 20:56:19 +01:00
parent a082740cb6
commit 30c25d0611
2 changed files with 30 additions and 9 deletions

View File

@@ -70,22 +70,35 @@ foreach(F, Sql, Connection) ->
foreach_s(F, Statement).
%%
foreach_s(F, Statement) ->
foreach_s(F, Statement) when is_function(F, 1) ->
case try_step(Statement, 0) of
'$done' ->
ok;
'$done' -> ok;
Row when is_tuple(Row) ->
F(Row),
foreach_s(F, Statement)
end.
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.
%%
map_s(F, Statement) ->
map_s(F, Statement) when is_function(F, 1) ->
case try_step(Statement, 0) of
'$done' ->
[];
'$done' -> [];
Row when is_tuple(Row) ->
[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.
%%

View File

@@ -87,8 +87,6 @@ column_names_test() ->
ok.
foreach_test() ->
{ok, Db} = esqlite3:open(":memory:"),
ok = esqlite3:exec("begin;", Db),
@@ -130,6 +128,16 @@ map_test() ->
F = fun(Row) -> Row end,
[{"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.