service.pl 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. :- module(service, [random_number/1,
  2. random_numbers/2,
  3. random_numbers_cached/2,
  4. fortunes/1]).
  5. :- use_module(database).
  6. :- use_module(library(odbc)).
  7. :- table random_numbers_cached/2.
  8. % --------------------------------------------------
  9. random_number(Row) :-
  10. with_connection(Connection, database:find_random_numbers(Connection, 1, [Row])).
  11. random_number(Row) :-
  12. with_connection(Connection, database:find_random_numbers(Connection, 1, [Row])).
  13. random_numbers(0, []).
  14. random_numbers(N, Rows) :-
  15. N > 0,
  16. with_connection(Connection, database:find_random_numbers(Connection, N, Rows)).
  17. random_numbers_cached(N, Rows) :-
  18. random_numbers(N, Rows).
  19. fortunes(Rows) :-
  20. with_connection(Connection, database:find_fortunes(Connection, Rows0)),
  21. Rows1 = [row(0, 'Additional fortune added at request time.')|Rows0],
  22. maplist(fortune_to_pair, Rows1, Pairs),
  23. keysort(Pairs, SortedPairs),
  24. pairs_values(SortedPairs, Rows).
  25. update(0, []).
  26. update(N, Rows) :-
  27. N > 0,
  28. with_connection(Connection, (
  29. database:find_random_numbers(Connection, N, Rows0),
  30. database:update_random_numbers(Connection, Rows0, Rows)
  31. )).
  32. % --------------------------------------------------
  33. fortune_to_pair(row(Id, Message), Message-row(Id, Message)).
  34. with_connection(Connection, Goal) :-
  35. setup_call_cleanup(
  36. odbc_connect('benchmark', Connection, []),
  37. Goal,
  38. odbc_disconnect(Connection)
  39. ).