res = [],
res_vars = [],
res_pos = 0,
- server_host_used = false}).
+ server_host_used = false,
+ used_vars = []}).
-define(QUERY_RECORD, "sql_query").
S = erl_syntax:string_value(Arg),
Pos = erl_syntax:get_pos(Arg),
ParseRes = parse(S, Pos),
- if
- ParseRes#state.server_host_used ->
- ok;
- true ->
- add_warning(Pos, no_server_host)
- end,
- set_pos(make_sql_query(ParseRes), Pos);
+ UnusedVars =
+ case ParseRes#state.server_host_used of
+ {true, SHVar} ->
+ case ?USE_NEW_SCHEMA of
+ true -> [];
+ false -> [SHVar]
+ end;
+ false ->
+ add_warning(
+ Pos, no_server_host),
+ []
+ end,
+ set_pos(
+ add_unused_vars(
+ make_sql_query(ParseRes),
+ UnusedVars),
+ Pos);
_ ->
throw({error, erl_syntax:get_pos(Form),
"?SQL argument must be "
false ->
add_warning(Pos, no_server_host)
end,
- ParseRes2 =
+ {ParseRes2, UnusedVars} =
filter_upsert_sh(Table, ParseRes),
set_pos(
- make_sql_upsert(Table, ParseRes2, Pos),
+ add_unused_vars(
+ make_sql_upsert(Table, ParseRes2, Pos),
+ UnusedVars
+ ),
Pos);
_ ->
throw({error, erl_syntax:get_pos(Form),
false ->
add_warning(Pos, no_server_host)
end,
- ParseRes2 =
+ {ParseRes2, UnusedVars} =
filter_upsert_sh(Table, ParseRes),
set_pos(
- make_sql_insert(Table, ParseRes2),
+ add_unused_vars(
+ make_sql_insert(Table, ParseRes2),
+ UnusedVars
+ ),
Pos);
_ ->
throw({error, erl_syntax:get_pos(Form),
State4 =
case Type of
host ->
- State3 = State2#state{server_host_used = true},
+ State3 =
+ State2#state{server_host_used = {true, Name},
+ used_vars = [Name | State2#state.used_vars]},
case ?USE_NEW_SCHEMA of
true ->
Convert =
State2#state{'query' = [{var, Var} | State2#state.'query'],
args = [Convert | State2#state.args],
params = [Var | State2#state.params],
- param_pos = State2#state.param_pos + 1}
+ param_pos = State2#state.param_pos + 1,
+ used_vars = [Name | State2#state.used_vars]}
end,
parse1(S1, [], State4);
parse1([C | S], Acc, State) ->
true ->
ParseRes;
false ->
- lists:filter(
- fun({Field, _Match, _ST}) ->
- Field /= "server_host" orelse Table == "route"
- end, ParseRes)
+ lists:foldr(
+ fun({Field, _Match, ST} = P, {Acc, Vars}) ->
+ if
+ Field /= "server_host" orelse Table == "route" ->
+ {[P | Acc], Vars};
+ true ->
+ {Acc, ST#state.used_vars ++ Vars}
+ end
+ end, {[], []}, ParseRes)
end.
+add_unused_vars(Tree, []) ->
+ Tree;
+add_unused_vars(Tree, Vars) ->
+ erl_syntax:block_expr(
+ lists:map(fun erl_syntax:variable/1, Vars) ++ [Tree]).
+
-ifdef(ENABLE_PT_WARNINGS).
add_warning(Pos, Warning) ->