Packages
krug
2.0.36
2.0.36
2.0.35
2.0.34
2.0.33
2.0.32
2.0.31
2.0.30
2.0.29
2.0.27
2.0.26
2.0.25
2.0.24
2.0.23
2.0.22
2.0.20
2.0.19
2.0.18
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.1
2.0.0
1.1.53
1.1.52
1.1.50
1.1.49
1.1.48
1.1.47
1.1.46
1.1.45
1.1.44
1.1.43
1.1.42
1.1.41
1.1.40
1.1.39
1.1.38
1.1.37
1.1.36
1.1.35
1.1.34
1.1.33
1.1.32
1.1.31
1.1.30
1.1.29
1.1.28
1.1.27
1.1.26
1.1.25
1.1.24
1.1.23
1.1.22
1.1.21
1.1.20
1.1.19
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.12
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
A Utilitary package functionalities modules for improve a secure performatic development.
Current section
Files
Jump to
Current section
Files
lib/krug/ecto/base.ecto.dao.sql.cache.ex
defmodule Krug.BaseEctoDAOSqlCache do
@moduledoc false
alias Krug.MapUtil
alias Krug.EtsUtil
alias Krug.DateUtil
def load_from_cache(ets_key,table_name,normalized_sql,params) do
EtsUtil.read_from_cache(ets_key,table_name)
|> extract_key_par_list(normalized_sql,params)
end
def put_cache(ets_key,table_name,normalized_sql,params,resultset,cache_objects_per_table) do
list_new = EtsUtil.read_from_cache(ets_key,table_name)
|> replace_key_par_in_list(normalized_sql,params,resultset,0,cache_objects_per_table)
EtsUtil.store_in_cache(ets_key,table_name,list_new)
resultset
end
def clear_cache(ets_key,table_name) do
EtsUtil.remove_from_cache(ets_key,table_name)
end
defp replace_key_par_in_list(list,normalized_sql,params,resultset,counter,cache_objects_per_table) do
cond do
(nil == list or Enum.empty?(list))
-> [new_resultset_param_map(normalized_sql,params,resultset)]
(counter >= length(list))
-> append_resultset_params_in_list(list,normalized_sql,params,resultset,cache_objects_per_table)
true -> replace_key_par_in_list2(list,normalized_sql,params,resultset,counter,cache_objects_per_table)
end
end
defp replace_key_par_in_list2(list,normalized_sql,params,resultset,counter,cache_objects_per_table) do
cache_result = list |> Enum.at(counter)
cond do
(cache_result |> MapUtil.get(:sql) != normalized_sql)
-> replace_key_par_in_list(list,normalized_sql,params,
resultset,counter + 1,cache_objects_per_table)
(cache_result |> MapUtil.get(:params) != params)
-> replace_key_par_in_list(list,normalized_sql,params,
resultset,counter + 1,cache_objects_per_table)
true -> replace_resultset_at_list(list,counter,resultset)
end
end
defp replace_resultset_at_list(list,position,resultset) do
map = list |> Enum.at(position) |> MapUtil.replace(:resultset,resultset)
map = map |> MapUtil.replace(:lastusedtime,DateUtil.get_date_time_now_millis())
List.replace_at(list,position,map)
end
defp extract_key_par_list(list,normalized_sql,params) do
cond do
(nil == list) -> nil
true -> extract_key_par_list2(list,normalized_sql,params)
end
end
defp extract_key_par_list2(list,normalized_sql,params) do
cond do
(Enum.empty?(list)) -> nil
true -> extract_key_par_list3(list,normalized_sql,params)
end
end
defp extract_key_par_list3(list,normalized_sql,params) do
map = list |> hd()
cond do
(map |> MapUtil.get(:sql) != normalized_sql)
-> list |> tl() |> extract_key_par_list2(normalized_sql,params)
(map |> MapUtil.get(:params) != params)
-> list |> tl() |> extract_key_par_list2(normalized_sql,params)
true -> map |> MapUtil.get(:resultset)
end
end
defp new_resultset_param_map(normalized_sql,params,resultset) do
%{
sql: normalized_sql,
params: params,
resultset: resultset,
lastusedtime: DateUtil.get_date_time_now_millis()
}
end
defp append_resultset_params_in_list(list,normalized_sql,params,resultset,cache_objects_per_table) do
[new_resultset_param_map(normalized_sql,params,resultset) | list]
|> remove_old_cache_results(cache_objects_per_table)
end
defp remove_old_cache_results(list,cache_objects_per_table) do
cond do
(length(list) < cache_objects_per_table) -> list
true -> Enum.sort(list, &(&1.lastusedtime > &2.lastusedtime))
|> Enum.slice(0,cache_objects_per_table)
end
end
end