fix mysql

This commit is contained in:
anlicheng 2023-08-10 14:51:01 +08:00
parent 14df94975e
commit 4eefb7fc9f
3 changed files with 20 additions and 17 deletions

View File

@ -19,7 +19,7 @@ get_all_hosts() ->
case mysql_pool:get_all(mysql_iot, <<"SELECT uuid FROM host where uuid != ''">>) of case mysql_pool:get_all(mysql_iot, <<"SELECT uuid FROM host where uuid != ''">>) of
{ok, Hosts} -> {ok, Hosts} ->
lists:map(fun(#{<<"uuid">> := UUID}) -> UUID end, Hosts); lists:map(fun(#{<<"uuid">> := UUID}) -> UUID end, Hosts);
{error, _Reason} -> {error, _} ->
[] []
end. end.

View File

@ -30,10 +30,12 @@ get_all(Pool, Sql) when is_atom(Pool), is_binary(Sql) ->
get_all(Pool, Sql, Params) when is_atom(Pool), is_binary(Sql), is_list(Params) -> get_all(Pool, Sql, Params) when is_atom(Pool), is_binary(Sql), is_list(Params) ->
poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql, Params) end). poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql, Params) end).
-spec insert(Pool :: atom(), Table :: binary(), Fields :: map() | list(), boolean()) -> ok | {ok, InsertId :: integer()} | {error, Reason :: any()}. -spec insert(Pool :: atom(), Table :: binary(), Fields :: map() | list(), boolean()) ->
ok | {ok, InsertId :: integer()} | {error, Reason :: any()}.
insert(Pool, Table, Fields, FetchInsertId) when is_atom(Pool), is_binary(Table), is_list(Fields); is_map(Fields), is_boolean(FetchInsertId) -> insert(Pool, Table, Fields, FetchInsertId) when is_atom(Pool), is_binary(Table), is_list(Fields); is_map(Fields), is_boolean(FetchInsertId) ->
poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:insert(ConnPid, Table, Fields, FetchInsertId) end). poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:insert(ConnPid, Table, Fields, FetchInsertId) end).
-spec update_by(Pool :: atom(), UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
update_by(Pool, UpdateSql) when is_atom(Pool), is_binary(UpdateSql) -> update_by(Pool, UpdateSql) when is_atom(Pool), is_binary(UpdateSql) ->
poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql) end). poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql) end).

View File

@ -9,8 +9,6 @@
-module(mysql_provider). -module(mysql_provider).
-author("aresei"). -author("aresei").
-define(POOL_NAME, mysql_pool).
%% API %% API
-export([get_row/2, get_row/3, get_all/2, get_all/3]). -export([get_row/2, get_row/3, get_all/2, get_all/3]).
-export([update/4, update_by/2, update_by/3, insert/4]). -export([update/4, update_by/2, update_by/3, insert/4]).
@ -18,7 +16,7 @@
%% %%
-spec get_row(ConnPid :: pid(), Sql::binary()) -> {ok, Record::map()} | undefined. -spec get_row(ConnPid :: pid(), Sql::binary()) -> {ok, Record::map()} | undefined.
get_row(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) -> get_row(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) ->
lager:debug("[mysql_client] the get_row sql is: ~p", [Sql]), lager:debug("[mysql_client] get_row sql is: ~p", [Sql]),
case mysql:query(ConnPid, Sql) of case mysql:query(ConnPid, Sql) of
{ok, Names, [Row | _]} -> {ok, Names, [Row | _]} ->
{ok, maps:from_list(lists:zip(Names, Row))}; {ok, maps:from_list(lists:zip(Names, Row))};
@ -31,7 +29,7 @@ get_row(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) ->
-spec get_row(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined. -spec get_row(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined.
get_row(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) -> get_row(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) ->
lager:debug("[mysql_client] the get_row sql is: ~p, params: ~p", [Sql, Params]), lager:debug("[mysql_client] get_row sql is: ~p, params: ~p", [Sql, Params]),
case mysql:query(ConnPid, Sql, Params) of case mysql:query(ConnPid, Sql, Params) of
{ok, Names, [Row | _]} -> {ok, Names, [Row | _]} ->
{ok, maps:from_list(lists:zip(Names, Row))}; {ok, maps:from_list(lists:zip(Names, Row))};
@ -44,27 +42,28 @@ get_row(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Para
-spec get_all(ConnPid :: pid(), Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}. -spec get_all(ConnPid :: pid(), Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}.
get_all(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) -> get_all(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) ->
lager:debug("[mysql_client] the get_all sql is: ~p", [Sql]), lager:debug("[mysql_client] get_all sql is: ~p", [Sql]),
case mysql:query(ConnPid, Sql) of case mysql:query(ConnPid, Sql) of
{ok, Names, Rows} -> {ok, Names, Rows} ->
{ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)}; {ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)};
Error -> {error, Reason} ->
lager:warning("[mysql_client] get error: ~p", [Error]), lager:warning("[mysql_client] get error: ~p", [Reason]),
Error {error, Reason}
end. end.
-spec get_all(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}. -spec get_all(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}.
get_all(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) -> get_all(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) ->
lager:debug("[mysql_client] the get_all sql is: ~p, params: ~p", [Sql, Params]), lager:debug("[mysql_client] get_all sql is: ~p, params: ~p", [Sql, Params]),
case mysql:query(ConnPid, Sql, Params) of case mysql:query(ConnPid, Sql, Params) of
{ok, Names, Rows} -> {ok, Names, Rows} ->
{ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)}; {ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)};
Error -> {error, Reason} ->
lager:warning("[mysql_client] get error: ~p", [Error]), lager:warning("[mysql_client] get error: ~p", [Reason]),
{ok, []} {error, Reason}
end. end.
-spec insert(ConnPid :: pid(), Table :: binary(), Fields :: map() | list(), boolean()) -> ok | {ok, InsertId :: integer()} | {error, Reason :: any()}. -spec insert(ConnPid :: pid(), Table :: binary(), Fields :: map() | list(), boolean()) ->
ok | {ok, InsertId :: integer()} | {error, Reason :: any()}.
insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_boolean(FetchInsertId) -> insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_boolean(FetchInsertId) ->
insert(ConnPid, Table, maps:to_list(Fields), FetchInsertId); insert(ConnPid, Table, maps:to_list(Fields), FetchInsertId);
insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_list(Fields), is_boolean(FetchInsertId) -> insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_list(Fields), is_boolean(FetchInsertId) ->
@ -75,7 +74,7 @@ insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Ta
ValuesPlaceholder = iolist_to_binary(lists:join(<<", ">>, Placeholders)), ValuesPlaceholder = iolist_to_binary(lists:join(<<", ">>, Placeholders)),
Sql = <<"INSERT INTO ", Table/binary, "(", FieldSql/binary, ") VALUES(", ValuesPlaceholder/binary, ")">>, Sql = <<"INSERT INTO ", Table/binary, "(", FieldSql/binary, ") VALUES(", ValuesPlaceholder/binary, ")">>,
lager:debug("[mysql_client] the insert sql is: ~p, params: ~p", [Sql, Values]), lager:debug("[mysql_client] insert sql is: ~p, params: ~p", [Sql, Values]),
case mysql:query(ConnPid, Sql, Values) of case mysql:query(ConnPid, Sql, Values) of
ok -> ok ->
case FetchInsertId of case FetchInsertId of
@ -89,6 +88,7 @@ insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Ta
Error Error
end. end.
-spec update_by(ConnPid :: pid(), UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}.
update_by(ConnPid, UpdateSql) when is_pid(ConnPid), is_binary(UpdateSql) -> update_by(ConnPid, UpdateSql) when is_pid(ConnPid), is_binary(UpdateSql) ->
lager:debug("[mysql_client] updateBySql sql: ~p", [UpdateSql]), lager:debug("[mysql_client] updateBySql sql: ~p", [UpdateSql]),
case mysql:query(ConnPid, UpdateSql) of case mysql:query(ConnPid, UpdateSql) of
@ -110,7 +110,8 @@ update_by(ConnPid, UpdateSql, Params) when is_pid(ConnPid), is_binary(UpdateSql)
Error Error
end. end.
-spec update(ConnPid :: pid(), Sql :: binary(), Fields :: map(), WhereFields :: map()) -> {ok, AffectedRows::integer()} | {error, Reason::any()}. -spec update(ConnPid :: pid(), Sql :: binary(), Fields :: map(), WhereFields :: map()) ->
{ok, AffectedRows::integer()} | {error, Reason::any()}.
update(ConnPid, Table, Fields, WhereFields) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_map(WhereFields) -> update(ConnPid, Table, Fields, WhereFields) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_map(WhereFields) ->
%% set %% set
{SetKeys, SetVals} = kvs(Fields), {SetKeys, SetVals} = kvs(Fields),