7 module Cxx
= Gen.Make
(Gen_cxx
)
8 module Caml
= Gen.Make
(Gen_caml
)
9 module Xml_gen
= Gen.Make
(Gen_xml
)
10 module Java
= Gen.Make
(Gen_java
)
11 module CSharp
= Gen.Make
(Gen_csharp
)
15 sqlgg [-gen none] ddl.sql -gen cxx dml.sql
17 let generate = ref None
18 let name = ref "sqlgg"
22 match (String.lowercase s
) with
23 | "cxx" | "c++" | "cpp" -> Some
Cxx.process
24 | "caml" | "ocaml" | "ml" -> Some
Caml.process
25 | "xml" -> Some
Xml_gen.process
26 | "java" -> Some
Java.process
27 | "csharp" | "c#" | "cs" -> Some
CSharp.process
29 | _
-> failwith
(sprintf
"Unknown output language: %s" s
)
31 let set_params_mode s
=
33 match String.lowercase s
with
34 | "named" -> Some
Gen.Named
35 | "unnamed" -> Some
Gen.Unnamed
36 | "oracle" -> Some
Gen.Oracle
37 | "postgresql" -> Some
Gen.PostgreSQL
39 | _
-> failwith
(sprintf
"Unknown params mode: %s" s
)
43 let l = match input
with Some ch
-> Main.get_statements ch
| None
-> [] in
49 | "-" -> run (Some stdin
)
50 | filename
-> Main.with_channel filename
run
55 | Some f
-> f
!name (List.enum
l)
58 let s1 = sprintf
"SQL Guided (code) Generator ver. %s\n" Sqlgg_config.version
in
59 let s2 = sprintf
"Usage: %s <options> <file.sql> [<file2.sql> ...]\n" (Filename.basename
Sys.executable_name
) in
60 let s3 = "Options are:" in
63 let show_version () = print_endline
Sqlgg_config.version
67 let work s
= l := each_input s
:: !l in
70 "-version", Arg.Unit
show_version, " Show version";
71 "-gen", Arg.String
set_out, "cxx|caml|java|xml|csharp|none Set output language (default: none)";
72 "-name", Arg.String
(fun x
-> name := x
), "<identifier> Set output module name (default: sqlgg)";
73 "-params", Arg.String
set_params_mode, "named|unnamed|oracle|postgresql|none Output query parameters substitution (default: none)";
74 "-debug", Arg.Int
(fun x
-> Sqlgg_config.debug_level
:= x
), "<N> set debug level";
75 "-no-header", Arg.Unit
(fun () -> Sqlgg_config.gen_header
:= false), "do not put version header in generated output";
76 "-show-tables", Arg.Unit
Tables.print
, " Show all current tables";
77 "-show-table", Arg.String
Tables.print1
, "<name> Show specified table";
78 "-", Arg.Unit
(fun () -> work "-"), " Read sql from stdin";
79 "-test", Arg.Unit
Test.run, " Run unit tests";
82 Arg.parse
args work usage_msg;
84 | [] -> if Array.length
Sys.argv
= 1 then Arg.usage
args usage_msg; 0
87 begin Error.log
"Errors encountered, no code generated"; 1 end
89 begin generate & List.concat
& List.rev
& l; 0 end
95 exn
-> Error.logs
(Printexc.to_string exn
); 2
97 let () = exit
(main ())