3 * implementazione del'interprete MathQL
16 * inizializzazione della connessione al database
18 let init () = Dbconn.init ();;
21 * esecuzione di una query
26 * output: string list list; risultato internto formato da uri + contesto.
28 let rec execute_ex q =
30 MQSelect (apvar, alist, abool) ->
31 select_ex apvar (execute_ex alist) abool
32 | MQUsedBy (alist, asvar) ->
33 use_ex (execute_ex alist) asvar "refObj"
34 | MQUse (alist, asvar) ->
35 use_ex (execute_ex alist) asvar "backPointer"
36 | MQPattern (apreamble, apattern, ext, afragid) ->
37 pattern_ex apreamble apattern ext afragid
39 union_ex (execute_ex l1) (execute_ex l2)
40 | MQIntersect (l1, l2) ->
41 intersect_ex (execute_ex l1) (execute_ex l2)
45 * converte il risultato interno di una query (uri + contesto)
46 * in un risultato di sole uri
49 * l: string list list;
54 * il tipo del risultato mantenuto internamente e' diverso dal tipo di risultato
55 * restituito in output poiche', mentre chi effettua le query vuole come risultato
56 * solo le eventuali uri che soddisfano le query stesse, internamente ad una uri
57 * sono associati anche i valori delle variabili che ancora non sono state valutate
58 * perche', ad esempio, si trovano in altri rami dell'albero.
61 * SELECT x IN USE PATTERN "cic:/**.con" POSITION $a WHERE $a IS MainConclusion
62 * L'albero corrispondente a questa query e':
68 * PATTERN $a $a MainConclusion
70 * Nel momento in cui si esegue il ramo USE non sono noti i vincoli sullla variabile $a
71 * percui e' necessario considerare, oltre alle uri, i valori della variabile per i quali
72 * la uri puo' far parte del risultato.
88 MQList qq -> xres_to_res (execute_ex qq)
92 * chiusura della connessione al database
94 let close () = Dbconn.close ();;