Fix regeneration of multi-file dependencies
[hcoop/domtool2.git] / src / main-dbtool.sml
index 98e6e03..d9765a9 100644 (file)
 
 (* Driver for dbtool *)
 
+fun badArgs () =
+    print "Invalid command-line arguments.  See documentation at:\n\thttp://wiki.hcoop.net/MemberManual/Databases\n"
+
 val _ =
     case CommandLine.arguments () of
-       [] => print "Invalid command-line arguments\n"
+       [] => badArgs ()
       | dbtype :: rest =>
        case Dbms.lookup dbtype of
            NONE => print ("Unknown database type " ^ dbtype ^ ".\n")
-         | _ =>
+         | SOME {getpass, ...} =>
            case rest of
-               ["adduser"] => Main.requestDbUser dbtype
-             | _ => print "Invalid command-line arguments\n"
+               ["adduser"] =>
+               let
+                   val pass = case getpass of
+                                  NONE => SOME NONE
+                                | SOME f =>
+                                  case f () of
+                                      Client.Passwd pass => SOME (SOME pass)
+                                    | Client.Aborted => SOME NONE
+                                    | Client.Error => NONE
+               in
+                   case pass of
+                       NONE => ()
+                     | SOME pass => Main.requestDbUser {dbtype = dbtype, passwd = pass}
+               end
+             | ["passwd"] =>
+               let
+                   val pass = case getpass of
+                                  NONE => NONE
+                                | SOME f =>
+                                  case f () of
+                                      Client.Passwd pass => SOME pass
+                                    | _ => NONE
+               in
+                   case pass of
+                       NONE => ()
+                     | SOME pass => Main.requestDbPasswd {dbtype = dbtype, passwd = pass}
+               end
+             | ["createdb", dbname] =>
+               if Dbms.validDbname dbname then
+                   Main.requestDbTable {dbtype = dbtype, dbname = dbname}
+               else
+                   print ("Invalid database name " ^ dbname ^ ".\n")
+             | ["dropdb", dbname] =>
+               if Dbms.validDbname dbname then
+                   Main.requestDbDrop {dbtype = dbtype, dbname = dbname}
+               else
+                   print ("Invalid database name " ^ dbname ^ ".\n")
+             | ["grant", dbname] =>
+               if Dbms.validDbname dbname then
+                   Main.requestDbGrant {dbtype = dbtype, dbname = dbname}
+               else
+                   print ("Invalid database name " ^ dbname ^ ".\n")
+             | _ => badArgs ()