| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- :- module(database, [find_random_numbers/3,
- update_random_numbers/3,
- find_fortunes/2]).
- :- use_module(library(odbc)).
- :- use_module(library(random)).
- % --------------------------------------------------
- find_random_numbers(_Connection, 0, []).
- find_random_numbers(Connection, N, Rows) :-
- with_statement(Connection, world_by_id, Statement, find_random_numbers_(Statement, N, Rows)).
- find_random_numbers_(_Statement, 0, []).
- find_random_numbers_(Statement, N, [Row|Rows]) :-
- N > 0,
- random_id(Id),
- odbc_execute(Statement, [Id], Row),
- N1 is N - 1,
- find_random_numbers_(Statement, N1, Rows).
- find_fortunes(Connection, Rows) :-
- with_statement(Connection, fortune, Statement, findall(Row, odbc_execute(Statement, [], Row), Rows)).
- update_random_numbers(_Connection, [], []).
- update_random_numbers(Connection, Rows0, Rows) :-
- with_statement(Connection, update_world, Statement, update_random_numbers_(Statement, Rows0, Rows)).
- update_random_numbers_(_Statement, [], []).
- update_random_numbers_(Statement, [row(Id0,_)|Rows0], [Row|Rows]) :-
- random_id(RandomNumber),
- Row = row(Id0, RandomNumber),
- odbc_execute(Statement, [RandomNumber, Id0]),
- update_random_numbers_(Statement, Rows0, Rows).
- % --------------------------------------------------
- query(world_by_id, 'SELECT id, randomNumber FROM World WHERE id = ?', [integer]).
- query(fortune, 'SELECT id, message FROM Fortune', []).
- query(update_world, 'UPDATE World SET randomNumber = ? WHERE id = ?', [integer, integer]).
- with_statement(Connection, Name, Statement, Goal) :-
- setup_call_cleanup(
- ( query(Name, Query, Params)
- , odbc_prepare(Connection, Query, Params, Statement)
- ),
- Goal,
- odbc_free_statement(Statement)
- ).
- random_id(N) :- random(1, 10001, N).
|