Packages
krug
0.3.6
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.StringUtil
alias Krug.MapUtil
alias Krug.EtsUtil
alias Krug.DateUtil
def load_from_cache(sql,params) do
EtsUtil.new(:krug_base_ecto_dao_sql_tables_cache,"public")
EtsUtil.read_from_cache(:krug_sql_tables_cache,extract_table_name(sql))
|> extract_key_par_list(sql,params)
end
def put_cache(sql,params,resultset) do
EtsUtil.new(:krug_base_ecto_dao_sql_tables_cache,"public")
table = extract_table_name(sql)
list_new = EtsUtil.read_from_cache(:krug_base_ecto_dao_sql_tables_cache,table)
|> replace_key_par_in_list(sql,params,resultset,0)
EtsUtil.store_in_cache(:krug_base_ecto_dao_sql_tables_cache,table,list_new)
resultset
end
def clear_cache(sql) do
EtsUtil.new(:krug_base_ecto_dao_sql_tables_cache,"public")
EtsUtil.remove_from_cache(:krug_base_ecto_dao_sql_tables_cache,extract_table_name(sql))
end
defp replace_key_par_in_list(list,sql,params,resultset,counter) do
cond do
(nil == list or counter >= length(list))
-> append_new_resultset_params_in_list(list,sql,params,resultset)
(list |> Enum.at(counter) |> MapUtil.get(:sql) != sql)
-> replace_key_par_in_list(list,sql,params,resultset,counter + 1)
(list |> Enum.at(counter) |> MapUtil.get(:params) != params)
-> replace_key_par_in_list(list,sql,params,resultset,counter + 1)
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,sql,params) do
cond do
(nil == list or length(list) == 0) -> nil
(list |> hd() |> MapUtil.get(:sql) == sql
and list |> hd() |> MapUtil.get(:params) == params)
-> list |> hd() |> MapUtil.get(:resultset)
true -> extract_key_par_list(list |> tl(),sql,params)
end
end
defp append_new_resultset_params_in_list(list,sql,params,resultset) do
map = %{
sql: sql,
params: params,
resultset: resultset,
lastusedtime: DateUtil.get_date_time_now_millis()
}
cond do
(nil == list or length(list) == 0) -> [map]
true -> [map | list] |> remove_old_cache_results()
end
end
defp remove_old_cache_results(list) do
cond do
(length(list) < 4) -> list
true -> Enum.sort(list, &(&1.lastusedtime > &2.lastusedtime))
|> Enum.slice(0,4)
end
end
defp extract_table_name(sql) do
sql = sql |> StringUtil.trim() |> StringUtil.replace("("," ") |> StringUtil.replace(" "," ")
split_string = cond do
(sql |> String.contains?("insert into ")) -> "insert into "
(sql |> String.contains?("update ")) -> "update "
true -> " from "
end
sql |> StringUtil.split(split_string) |> Enum.at(1) |> StringUtil.split(" ") |> Enum.at(0)
end
end