15 type token
= Sql_parser.token
16 type result
= RA.Scheme.t
* Stmt.Raw.params
17 let rule = Sql_lexer.parse_rule
18 let input = Sql_parser.input
21 module P
= Parser_utils.Make
(T_SQL_parser
)
25 (try Some
(Std.input_file filename
) with exn
-> None
)
27 | None
-> Error.log
"cannot open file : %s" filename
29 let lexbuf = Lexing.from_string s
in
31 match (try Sql_lexer.ruleStatement
Props.empty
lexbuf with exn
-> None
) with
32 | Some x
-> lines (x
::l
)
35 let all = lines [] >> List.rev
in
36 (* parse in direct order *)
37 let parse1 (stmt
,props
) =
40 let (s
,ps
) = P.parse_buf_exn
(Lexing.from_string stmt
) in
42 print_endline
(Show.show
<Stmt.Raw.params
>(ps
))
46 print_endline
(Printexc.to_string exn
)
53 (fun (str,props) -> match P.parse_string str with
54 | Some ((k,n,placeholders) as stmt) ->
55 (*Error.logs (Show.show<Stmt.Raw.parsed> stmt); *)
56 Some
(k
,n
,placeholders
,props
,str
)
57 | None
-> Error.log
"Failed to parse : %s" str
; None
)
61 Gen.process
(Stmt.resolve
stmts)
64 (* match P.parse_file filename with
65 | None -> print_endline "none"
67 Error.logs (Show.show<Stmt.t list> stmts);
71 Error.log
"SQL to C++ Code Generator Version %s (%s)" Version.version
(Version.revision
>> S.explode
>> L.take
8 >> S.implode
);
73 Error.log
" Usage: %s file_with_statements.sql" (Filename.basename
Sys.executable_name
);
75 Error.log
" Parse given file (treating content as SQL statements) and emit corresponding code to stdout"
78 match Array.to_list
Sys.argv
with
79 | _
::[file
] -> work file
82 let _ = Printexc.print
main ()