sql.hrl 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. -ifndef(MEKAO_HRL).
  2. -define(MEKAO_HRL, true).
  3. -include("metainfo.hrl").
  4. % MEKAO SQL
  5. -record(sql_select, {table,columns,where,order_by}).
  6. -record(sql_insert, {table,columns,values,returning}).
  7. -record(sql_update, {table,set,where,returning}).
  8. -record(sql_delete, {table,where,returning}).
  9. -record(sql_settings, {placeholder,returning,is_null = fun(X) -> X == undefined end}).
  10. -spec insert(entity(), table(), s()) -> {ok, b_query()} | {error, empty_insert}.
  11. -spec select_pk(selector(), table(), s()) -> {ok, b_query()} | {error, pk_miss}.
  12. -spec select(selector(), table(), s()) -> {ok, b_query()}.
  13. -spec update_pk(selector(), table(), s()) -> {ok, b_query()} | {error, pk_miss} | {error, empty_update}.
  14. -spec update_pk_diff( Old :: entity(), New :: entity(), table(), s()) -> {ok, b_query()} | {error, pk_miss} | {error, empty_update}.
  15. -spec update(entity(), selector(), table(), s()) -> {ok, b_query()} | {error, empty_update}.
  16. -spec delete_pk(selector(), table(), s()) -> {ok, b_query()} | {error, pk_miss}.
  17. -spec delete(selector(), table(), s()) -> {ok, b_query()}.
  18. -spec prepare_insert(entity(), table(), s()) -> p_query().
  19. -spec prepare_select(selector(), table(), s()) -> p_query().
  20. -spec prepare_delete(selector(), table(), s()) -> p_query().
  21. -spec prepare_update(entity(), selector(), table(), s()) -> p_query().
  22. -spec returning(insert | update | delete, table(), s()) -> iolist().
  23. -spec build(p_query()) -> b_query().
  24. -type b_query() :: 'query'(iolist()).
  25. -type table() :: #table{}.
  26. -type column() :: #column{}.
  27. -type s() :: #sql_settings{}.
  28. -type entity() :: tuple() | list().
  29. -type selector() :: tuple() | list(predicate(term())).
  30. -type predicate(Value) :: Value | { '$predicate', '=' | '<>' | '>' | '>=' | '<' | '<=', Value}.
  31. -type 'query'(Body) :: #query{body :: Body}.
  32. -type p_query() :: 'query'( #sql_insert{}
  33. | #sql_select{}
  34. | #sql_update{}
  35. | #sql_delete{}
  36. ).
  37. -export_type([
  38. table/0, column/0, s/0,
  39. p_query/0, b_query/0,
  40. predicate/1
  41. ]).
  42. -endif.