Namespace based annotation of data type master
Sapan Bhatia [Sat, 12 Feb 2011 01:36:24 +0000 (20:36 -0500)]
acls/simple2.acl
python_dict.ml
sql.ml

index 6106250..d46cf27 100644 (file)
@@ -1,3 +1,3 @@
-/X -> {
+/sql:X[foo=2] -> {
   1.0
 }
index 5dac380..9db1158 100644 (file)
@@ -7,9 +7,12 @@ open Python
 open Globals
 open Sql
 
+type binding = DictBinding | SqlBinding | UnknownBinding
+
+exception UnknownBindingException
+
 let rec squash prefix = function
     | Slash(Root, e) ->
-        print "Root squash";
         squash "" e
     | Slash(e1, e2) ->
         (squash prefix e1) ^ "." ^ (squash prefix e2)
@@ -63,29 +66,38 @@ let rec fqe prefix = function
   | And(e1, e2) -> And(fqe prefix e1, fqe prefix e2)
   | l -> l
 
-let rec cond_to_sql_expr = function
-    | Slash(Root,e) -> cond_to_sql_expr e
-    | Condition(e, expr) ->
-        let prefix = squash "" e in
-            Select(["*"],prefix,Some(fqe "" expr))
-    | e -> 
-       Select(["*"],squash "" e,None)
-
 let rec cond_to_expr = function
     | Slash(Root,e) -> cond_to_expr e
     | Condition(e, expr) ->
         let prefix = squash "" e in
-            fqe prefix expr
+            let ns,var = 
+              try 
+                let ns_sep = String.index prefix ':' in
+                let ns = String.sub prefix 0 (ns_sep) in
+                let len = String.length prefix in
+                let var = String.sub prefix (ns_sep+1) (len-ns_sep-1) in
+                let binding = if (ns="sql") then SqlBinding else if (ns="dict") then DictBinding else UnknownBinding
+                in
+                    binding,var
+              with Not_found -> 
+                DictBinding,prefix
+            in
+            (
+            match ns with
+                DictBinding -> Expr(fqe var expr)
+                | SqlBinding -> Sql(Select(["*"],var,Some(fqe "" expr)))
+                | _ -> print "Name: %s\n" prefix;raise UnknownBindingException
+            )
     | e -> 
-       Var (squash "" e) 
+       Expr(Var (squash "" e))
 
 let rec from_aft acl =
   let rec from_aft' l =
       match l with 
         | Filter(x) -> Return(Expr(fqe "" x))
         | INF(path, True(l'), False(l'')) ->
-            let cond = cond_to_sql_expr path in
-              If (Sql(cond), from_aft(l'), from_aft(l''))
+            let cond = cond_to_expr path in
+              If (cond, from_aft(l'), from_aft(l''))
         | PatternMatch(_) -> print "Expression not reduced";raise AftError
   in
     from_aft' acl 
diff --git a/sql.ml b/sql.ml
index 080d07d..b2477ab 100644 (file)
--- a/sql.ml
+++ b/sql.ml
@@ -29,10 +29,10 @@ let rec str_of_expr = function
 let rec pretty_print_statement = function
   | Select(colspec, tabspec, rowspec) -> 
     let s_colspec = String.concat "," colspec in
-    let part1 = sprintf "Select %s from WHERE %s" s_colspec tabspec in
+    let part1 = sprintf "Select %s from %s" s_colspec tabspec in
     let part2 = match rowspec with
       | None -> ""
-      | Some(expr) -> (str_of_expr(expr))
+      | Some(expr) -> sprintf " WHERE %s" (str_of_expr(expr))
     in
       part1 ^ part2
   | _ -> print "Statement type not supported yet";raise AftError