plugin for sql
[afterthought.git] / sql.ml
1 (* To be cleaned up - prototype version *)
2
3 open Globals
4 open Xpath_syntax
5 open Printf
6
7 type sql = Select of command_spec
8   | Insert of command_spec
9   | Update of command_spec
10   | Delete of command_spec
11 and
12   command_spec = string list * string * expr option
13
14 let rec str_of_expr = function
15   | String_literal(s)->sprintf "\"%s\"" s
16   | Number_literal(f)->if (f=1.0) then "true" else if (f=0.0) then "false" else sprintf "%f" f
17   | Var(s)->s
18   | Equal(e1,e2) -> (str_of_expr e1) ^ "=" ^ (str_of_expr e2)
19   | NotEqual(e1,e2) -> (str_of_expr e1) ^ "!=" ^ (str_of_expr e2)
20   | Lower(e1,e2) -> (str_of_expr e1) ^ "<" ^ (str_of_expr e2)
21   | Greater(e1,e2) -> (str_of_expr e1) ^ ">" ^ (str_of_expr e2)
22   | LowerEqual(e1,e2) -> (str_of_expr e1) ^ "<=" ^ (str_of_expr e2)
23   | GreaterEqual(e1,e2) -> (str_of_expr e1) ^ ">=" ^ (str_of_expr e2)
24   | _ -> print "Expression type not supported yet";raise AftError
25   | Or(e1,e2) -> (str_of_expr e1) ^ " or " ^ (str_of_expr e2)
26   | And(e1,e2) -> (str_of_expr e1) ^ " and " ^ (str_of_expr e2)
27   
28   
29 let rec pretty_print_statement = function
30   | Select(colspec, tabspec, rowspec) -> 
31     let s_colspec = String.concat "," colspec in
32     let part1 = sprintf "Select %s from WHERE %s" s_colspec tabspec in
33     let part2 = match rowspec with
34       | None -> ""
35       | Some(expr) -> (str_of_expr(expr))
36     in
37       part1 ^ part2
38   | _ -> print "Statement type not supported yet";raise AftError