8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/query_hook.rb', line 8
def compile_file_content(req)
<<PROLOG
#{req.}
#{req.content}
main(_):-
run_query('#{req.query.gsub('\\', '\\' * 3 )}').
run_query(Query):-
catch(findall(Result, (atom_to_term(Query, Term, Result), Term), ResultSet),
error(TypeError,_),
(handleQueryError(TypeError, Query), halt(100)) ),
prettyWriteResultSet(ResultSet).
handleQueryError(type_error(callable,_), Query):-
writef('ERROR: run_query/1: Expected Callable predicate but instead got %w\\n', [Query]).
handleQueryError(syntax_error(TypeSyntaxError), Query):-
writef('ERROR: run_query/1: Syntax Error: %w in %w\\n', [TypeSyntaxError, Query]).
handleQueryError(signal(_,Number), _):-
SignalStatus is 128 + Number,
halt(SignalStatus).
handleQueryError(GeneralError, Query):-
writef('ERROR: run_query/1: %w in \\'%w\\'\\n', [GeneralError, Query]).
prettyWriteResultSet([]):-
writeln('no.').
prettyWriteResultSet([OneResult]):-
prettyWriteOneResult(OneResult),
writeln('.').
prettyWriteResultSet([OneResult | ResultSet]):-
ResultSet \\= [],
prettyWriteOneResult(OneResult),
writeln(' ;'),
prettyWriteResultSet(ResultSet).
prettyWriteOneResult([]):-
write('yes').
prettyWriteOneResult([OneBinding]):-
writeBinding(OneBinding).
prettyWriteOneResult([OneBinding | OneResult]):-
OneResult \\= [],
writeBinding(OneBinding),
writeln(','),
prettyWriteOneResult(OneResult).
writeBinding(OneBinding):-
OneBinding=..[(=), VarName, Value],
writef('%w = %w', [VarName, Value]).
writeBinding(NotABinding):-
not(NotABinding=..[(=) | _ ]),
writef('ERROR: writeBinding/1: Expected Binding, but no equals was found in: %w\\n', [NotABinding]),
halt(101).
PROLOG
end
|