The sqlfmt formats PostgreSQL statements in .go
files into a consistent style.
Unformatted SQL in a .go
file
package main
import (
"database/sql"
)
func sendSQL() int {
var id int
var db *sql.DB
db.QueryRow(`
select xxx ,xxx ,xxx
, case
when xxx is null then xxx
else true
end as xxx
from xxx as xxx join xxx on xxx = xxx join xxx as xxx on xxx = xxx
left outer join xxx as xxx
on xxx = xxx
where xxx in ( select xxx from ( select xxx from xxx ) as xxx where xxx = xxx )
and xxx in ($2, $3) order by xxx`).Scan(&id)
return id
}
The above will be formatted into the following:
package main
import (
"database/sql"
)
func sendSQL() int {
var id int
var db *sql.DB
db.QueryRow(`
SELECT
xxx
, xxx
, xxx
, CASE
WHEN xxx IS NULL THEN xxx
ELSE true
END AS xxx
FROM xxx AS xxx
JOIN xxx
ON xxx = xxx
JOIN xxx AS xxx
ON xxx = xxx
LEFT OUTER JOIN xxx AS xxx
ON xxx = xxx
WHERE xxx IN (
SELECT
xxx
FROM (
SELECT
xxx
FROM xxx
) AS xxx
WHERE xxx = xxx
)
AND xxx IN ($2, $3)
ORDER BY
xxx`).Scan(&id)
return id
}
run git clone and go build -o sqlfmt
- Provide flags and input files or directory
$ sqlfmt -w input_file.go
-l
Do not print reformatted sources to standard output.
If a file's formatting is different from src, print its name
to standard output.
-d
Do not print reformatted sources to standard output.
If a file's formatting is different than src, print diffs
to standard output.
-w
Do not print reformatted sources to standard output.
If a file's formatting is different from src, overwrite it
with gofmt style.
-distance
Write the distance from the edge to the begin of SQL statements
-
The
sqlfmt
is only able to format SQL statements that are surrounded with back quotes and values inQueryRow
,Query
,Exec
functions from the"database/sql"
package.The following SQL statements will be formatted:
func sendSQL() int { var id int var db *sql.DB db.QueryRow(`select xxx from xxx`).Scan(&id) return id }
The following SQL statements will NOT be formatted:
// values in fmt.Println() are not formatting targets func sendSQL() int { fmt.Println(`select * from xxx`) } // nor are statements surrounded with double quotes func sendSQL() int { var id int var db *sql.DB db.QueryRow("select xxx from xxx").Scan(&id) return id }
-
IS DISTINCT FROM
-
WITHIN GROUP
-
DISTINCT ON(xxx)
-
select(array)
-
Comments after commna such as
select xxxx, --comment xxxx
-
Nested square brackets or braces such as
[[xx], xx]
- Currently being formatted into this:
[[ xx], xx]
- Ideally, it should be formatted into this:
[[xx], xx]
- Currently being formatted into this:
-
Nested functions such as
sum(average(xxx))
- Currently being formatted into this:
SUM( AVERAGE(xxx))
- Ideally, it should be formatted into this:
SUM(AVERAGE(xxx))
- Currently being formatted into this:
- Refactor
- Turn it into a plug-in or an extension for editors
Thank you for thinking of contributing to the sqlfmt! Pull Requests are welcome!
- Fork ([https://github.com/kanmu/go-sqlfmt))
- Create a feature branch
- Commit your changes
- Rebase your local changes against the master branch
- Create new Pull Request
MIT