Eu tenho essa consulta sql para construir uma tabela no Sqlite3, estou usando uma string multilinha que funciona bem.
let create_blog_table db =
let sql =
"
CREATE TABLE IF NOT EXISTS blog(
id INTEGER PRIMARY KEY AUTOINCREMENT,
author TEXT NOT NULL,
content TEXT NOT NULL);
"
in
match exec db sql with Rc.OK -> () | _ -> failwith "Error creating table"
Mas quando executo dune fmt
(com o ocamlformat instalado) resulta no seguinte:
let create_blog_table db =
let sql =
"\n\
\ CREATE TABLE IF NOT EXISTS blog(\n\
\ id INTEGER PRIMARY KEY AUTOINCREMENT,\n\
\ author TEXT NOT NULL,\n\
\ content TEXT NOT NULL);\n\
\ "
in
match exec db sql with Rc.OK -> () | _ -> failwith "Error creating table"
Essa formatação é necessária ou desejável por algum motivo?
Se não, posso dizer para não fazer isso?
Encontrei a regra, break-string-literals
mas ela só permite auto
ounever
.ocamlformato
profile = default
version = 0.26.0
break-string-literals=auto
Exatamente para esse propósito, OCaml oferece uma string literal entre aspas que é delimitada por
{|
e|}
, por exemplo,E ocamlformat não tocará em nada dentro da string literal citada, permitindo que você o formate da maneira que desejar.
Também é importante notar que construir instruções SQL é muito mais fácil com a extrapolação de strings oferecida por ppx_string . Por exemplo, suponha que você não queira codificar os nomes das tabelas e colunas em cada instrução e vinculá-las a variáveis,
A configuração
never
para--break-string-literals
mantém sua formatação.No que diz respeito ao seu exemplo, com
--break-string-literals
definido comoauto
, o recuo pode ser mantido. Parece desnecessário apenas porque seu código começou bem recuado. Ajuda que a formatação exata da sua string não seja crucial neste caso.