tblfmt
tblfmt copied to clipboard
streaming, buffered table encoder for result sets (ie from a database)
About tblfmt
Package tblfmt
provides streaming table encoders for result sets (ie, from a
database), creating tables like the following:
author_id | name | z
-----------+-----------------------+---
14 | a b c d |
15 | aoeu +|
| test +|
| |
16 | foo\bbar |
17 | a b \r +|
| a |
18 | 袈 袈 袈 |
19 | 袈 袈 袈+| a+
| |
(6 rows)
Additionally, there are standard encoders for JSON, CSV, HTML, unaligned and
other display variants supported by usql
.
Installing
Install in the usual Go fashion:
$ go get -u github.com/xo/tblfmt
Using
tblfmt
was designed for use by usql
and Go's native database/sql
types, but will handle any type with the following interface:
// ResultSet is the shared interface for a result set.
type ResultSet interface {
Next() bool
Scan(...interface{}) error
Columns() ([]string, error)
Close() error
Err() error
NextResultSet() bool
}
tblfmt
can be used similar to the following:
// _example/example.go
package main
import (
"log"
"os"
_ "github.com/lib/pq"
"github.com/xo/dburl"
"github.com/xo/tblfmt"
)
func main() {
db, err := dburl.Open("postgres://booktest:booktest@localhost")
if err != nil {
log.Fatal(err)
}
defer db.Close()
res, err := db.Query("select * from authors")
if err != nil {
log.Fatal(err)
}
defer res.Close()
enc, err := tblfmt.NewTableEncoder(
res,
// force minimum column widths
tblfmt.WithWidths(20, 20),
)
if err = enc.EncodeAll(os.Stdout); err != nil {
log.Fatal(err)
}
}
Which can produce output like the following:
╔══════════════════════╦═══════════════════════════╦═══╗
║ author_id ║ name ║ z ║
╠══════════════════════╬═══════════════════════════╬═══╣
║ 14 ║ a b c d ║ ║
║ 15 ║ aoeu ↵║ ║
║ ║ test ↵║ ║
║ ║ ║ ║
║ 2 ║ 袈 袈 袈 ║ ║
╚══════════════════════╩═══════════════════════════╩═══╝
(3 rows)
Please see the Go Reference for the full API.
Testing
Run using standard go test
:
$ go test -v