]> matita.cs.unibo.it Git - helm.git/commitdiff
- interpreter: the queries are printed before execution
authorFerruccio Guidi <ferruccio.guidi@unibo.it>
Wed, 10 Mar 2004 17:44:27 +0000 (17:44 +0000)
committerFerruccio Guidi <ferruccio.guidi@unibo.it>
Wed, 10 Mar 2004 17:44:27 +0000 (17:44 +0000)
- generator  : a bug in the generation of isfalse clauses was fixed

helm/ocaml/mathql_generator/mQueryGenerator.ml
helm/ocaml/mathql_interpreter/mQIConn.ml
helm/ocaml/mathql_interpreter/mQIConn.mli
helm/ocaml/mathql_interpreter/mQIMySql.ml
helm/ocaml/mathql_interpreter/mQIMySql.mli
helm/ocaml/mathql_interpreter/mQIPostgres.ml
helm/ocaml/mathql_interpreter/mQIPostgres.mli
helm/ocaml/mathql_interpreter/mQIProperty.ml

index 7175eb6153179519a714a1dc22075a75d6bb48c0..f66c42b6c05a62b9a263ca5e5dd4764ddf0905ef 100644 (file)
@@ -81,7 +81,13 @@ let compose cl =
       M.Property(true,M.RefineExact,[n],[],(cons false c),[],[],false,(M.Const ""))
    in   
    let property_only n cl =
-      let cll = List.map (cons true) cl in
+      let rec build = function
+         | []      -> []
+        | c :: tl ->
+           let r = (cons true) c in
+           if r = [] then build tl else r :: build tl 
+      in
+      let cll = build cl in
       M.Property(false,M.RefineExact,[n],[],!univ,cll,[],false,(M.Proj(None,(M.AVar "obj"))))
    in
    let rec aux = function 
index e138109b023cd123ab02f22079dfa7ba84fb4ab4..d4a0b067fd5c336fcdee15b6124fa13fe1bb9150 100644 (file)
@@ -114,11 +114,11 @@ let close handle =
       | Postgres_C c -> MQIPostgres.close c
       | No_C         -> ()
 
-let exec handle table cols ct cfl =
+let exec handle out table cols ct cfl =
    match pgc handle with
-      | MySQL_C c    -> MQIMySql.exec c table cols ct cfl
-      | Postgres_C c -> MQIPostgres.exec c table cols ct cfl
-      | No_C         -> [], ""
+      | MySQL_C c    -> MQIMySql.exec (c, out) table cols ct cfl
+      | Postgres_C c -> MQIPostgres.exec (c, out) table cols ct cfl
+      | No_C         -> []
 
 let connected handle =
    pgc handle <> No_C  
index c57674cc2126ba583ee6836e6acca6dd4441f943..f13448834114c91a0b0d798230a436064dc814c0 100644 (file)
@@ -36,10 +36,10 @@ type handle
 val init      : ?flags:(flag list) -> ?log:(string -> unit) -> unit -> handle
 val close     : handle -> unit
 val connected : handle -> bool
-val exec      : handle -> 
+val exec      : handle -> (MQITypes.query -> unit) ->  
                 MQITypes.table -> MQITypes.columns ->
                 string MQITypes.con_true -> string MQITypes.con_false -> 
-               MQITypes.result * MQITypes.query
+               MQITypes.result
 
 val init_if_connected : ?flags:(flag list) -> ?log:(string -> unit) -> unit -> handle
 
index 3f8d2aa782f2dac0afcd56891476da1089b6b0c4..e5cb01e4641f7489cabb48842a00062f11ea748c 100644 (file)
@@ -43,32 +43,31 @@ let quote s =
    in
    "'" ^ quote_aux s ^ "'"
 
-let exec c q = 
+let exec (c, out) q = 
    let g = function None -> "" | Some v -> v in
    let f a = List.map g (Array.to_list a) in
-   Mysql.map ~f:f (Mysql.exec c q), q
+   out q; Mysql.map ~f:f (Mysql.exec c q)
 
 let exec c table cols ct cfl =
-   let rec iter f sep = function
-      | []           -> ""
+   let rec iter f last sep = function
+      | []           -> last
       | [head]       -> f head 
-      | head :: tail -> f head ^ sep ^ iter f sep tail
+      | head :: tail -> f head ^ sep ^ iter f last sep tail
    in
-   let pg_cols = iter (fun x -> x) ", " cols in
-   let pg_msval v = iter quote ", " v in
+   let pg_cols = iter (fun x -> x) "" ", " cols in
+   let pg_msval v = iter quote "" ", " v in
    let pg_con (pat, col, v) = 
       if col <> "" then 
          let f s = col ^ " regexp " ^ quote ("^" ^ s ^ "$") in
-         if pat then "(" ^ iter f " or " v ^ ")"
+         if pat then "(" ^ iter f "0" " or " v ^ ")"
          else match v with 
             | [s] -> col ^ " = " ^ (quote s)     
             | v   -> col ^ " in (" ^ pg_msval v ^ ")"
       else "1"
    in
-   let pg_cons l = iter pg_con " and " l in
-   let pg_cons_not l =
-    match l with [] -> "1"  | _ -> "not (" ^ pg_cons l ^ ")" in
-   let pg_cons_not_l ll = iter pg_cons_not " and " ll in
+   let pg_cons l = iter pg_con "1" " and " l in
+   let pg_cons_not l = "not (" ^ pg_cons l ^ ")" in
+   let pg_cons_not_l ll = iter pg_cons_not "1" " and " ll in
    let pg_where = match ct, cfl with
       | [], []  -> ""
       | lt, []  -> " where " ^ pg_cons lt
@@ -76,10 +75,10 @@ let exec c table cols ct cfl =
       | lt, llf -> " where " ^ pg_cons lt ^ " and " ^ pg_cons_not_l llf
    in
    if cols = [] then
-      let r, q = exec c ("select count(source) from " ^ table ^ pg_where) in
+      let r = exec c ("select count(source) from " ^ table ^ pg_where) in
       match r with
-         | [[s]] when int_of_string s > 0 -> [[]], q
-         | _                              -> [], q
+         | [[s]] when int_of_string s > 0 -> [[]]
+         | _                              -> []
    else
       exec c ("select " ^ pg_cols ^ " from " ^ table ^ pg_where ^ 
             " order by " ^ List.hd cols ^ " asc")
index c0102090ae14c0d026b979c16347332753c1e8e4..36e8f18d904efb0aaff0f6e6142ebd709891ca40 100644 (file)
@@ -30,7 +30,7 @@ val init  : unit -> Mysql.dbd
 
 val close : Mysql.dbd -> unit
 
-val exec  : Mysql.dbd -> 
+val exec  : Mysql.dbd * (MQITypes.query -> unit) ->
             MQITypes.table -> MQITypes.columns ->
             string MQITypes.con_true -> string MQITypes.con_false -> 
-           MQITypes.result * MQITypes.query
+           MQITypes.result
index 932fcc503990eea00c427de6449fa42ee466d998..916f787321daf86eada1f1224d1cd0be2efcc383 100644 (file)
@@ -45,29 +45,28 @@ let quote s =
    in
    "'" ^ quote_aux s ^ "'"
 
-let exec c q = (c#exec q)#get_list, q
+let exec (c, out) q = out q; (c#exec q)#get_list
 
 let exec c table cols ct cfl =
-   let rec iter f sep = function
-      | []           -> ""
+   let rec iter f last sep = function
+      | []           -> last
       | [head]       -> f head 
-      | head :: tail -> f head ^ sep ^ iter f sep tail
+      | head :: tail -> f head ^ sep ^ iter f last sep tail
    in
-   let pg_cols = iter (fun x -> x) ", " cols in
-   let pg_msval v = iter quote ", " v in
+   let pg_cols = iter (fun x -> x) "" ", " cols in
+   let pg_msval v = iter quote "" ", " v in
    let pg_con (pat, col, v) = 
       if col <> "" then 
          let f s = col ^ " ~ " ^ quote ("^" ^ s ^ "$") in
-         if pat then "(" ^ iter f " or " v ^ ")"
+         if pat then "(" ^ iter f "false" " or " v ^ ")"
          else match v with 
             | [s] -> col ^ " = " ^ (quote s)     
             | v   -> col ^ " in (" ^ pg_msval v ^ ")"
       else "true"
    in
-   let pg_cons l = iter pg_con " and " l in
-   let pg_cons_not l =
-    match l with [] -> "true"  | _ -> "not (" ^ pg_cons l ^ ")" in
-   let pg_cons_not_l ll = iter pg_cons_not " and " ll in
+   let pg_cons l = iter pg_con "true" " and " l in
+   let pg_cons_not l = "not (" ^ pg_cons l ^ ")" in
+   let pg_cons_not_l ll = iter pg_cons_not "true" " and " ll in
    let pg_where = match ct, cfl with
       | [], []  -> ""
       | lt, []  -> " where " ^ pg_cons lt
@@ -75,10 +74,10 @@ let exec c table cols ct cfl =
       | lt, llf -> " where " ^ pg_cons lt ^ " and " ^ pg_cons_not_l llf
    in
    if cols = [] then
-      let r, q = exec c ("select count(source) from " ^ table ^ pg_where) in
+      let r = exec c ("select count(source) from " ^ table ^ pg_where) in
       match r with
-         | [[s]] when int_of_string s > 0 -> [[]], q
-         | _                              -> [], q
+         | [[s]] when int_of_string s > 0 -> [[]]
+         | _                              -> []
    else
       exec c ("select " ^ pg_cols ^ " from " ^ table ^ pg_where ^ 
             " order by " ^ List.hd cols ^ " asc")
index afc75b051084c71fd2ad7582ed0eb117b5acec44..cbbf3929dbdddde9d77ac522a1db6fd1b5d86b14 100644 (file)
@@ -30,9 +30,7 @@ val init  : unit -> Postgres.connection
 
 val close : Postgres.connection -> unit
 
-val exec  : Postgres.connection -> 
+val exec  : Postgres.connection * (MQITypes.query -> unit) -> 
             MQITypes.table -> MQITypes.columns ->
            string MQITypes.con_true -> string MQITypes.con_false ->
-           MQITypes.result * MQITypes.query
-
-
+           MQITypes.result
index fa966a06c8de9c55aa8a3f98d981828bac1519a9..60a003a3213891a8391da74fb550e0ee72a622b3 100644 (file)
@@ -83,9 +83,9 @@ let exec_single h mc ct cfl el table =
    let cons_false = List.map mk_con cfl in
    let other_cols = List.map (fun (p, _) -> conv p) el in 
    let cols = if first = "" then other_cols else first :: other_cols in
-   let result, q = C.exec h (C.resolve h table) cols cons_true cons_false in
-   if C.set h C.Queries then C.log h (q ^ "\n");
-   pg_result false first el result 
+   let out q = if C.set h C.Queries then C.log h (q ^ "\n") in
+   let r = C.exec h out (C.resolve h table) cols cons_true cons_false in
+   pg_result false first el r
    
 let deadline = 100