Skip to content

Commit 60a18df

Browse files
authored
cmd: use database/sql API (#109)
1 parent 985834a commit 60a18df

File tree

3 files changed

+37
-42
lines changed

3 files changed

+37
-42
lines changed

cmd/gitql/query.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ func (c *CmdQuery) Execute(args []string) error {
1414
return err
1515
}
1616

17-
schema, rowIter, err := c.executeQuery(c.Args.SQL)
17+
rows, err := c.executeQuery(c.Args.SQL)
1818
if err != nil {
1919
return err
2020
}
2121

22-
return c.printQuery(schema, rowIter, c.Format)
22+
return c.printQuery(rows, c.Format)
2323
}

cmd/gitql/query_base.go

Lines changed: 33 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,84 @@
11
package main
22

33
import (
4-
"io"
4+
"database/sql"
55
"os"
66
"path/filepath"
77

88
"github.com/gitql/gitql"
9-
gitqlgit "github.com/gitql/gitql/git"
9+
"github.com/gitql/gitql/git"
1010
"github.com/gitql/gitql/internal/format"
11-
"github.com/gitql/gitql/sql"
1211

13-
"srcd.works/go-git.v4"
12+
gogit "srcd.works/go-git.v4"
13+
"srcd.works/go-git.v4/utils/ioutil"
1414
)
1515

1616
type cmdQueryBase struct {
1717
cmd
1818

1919
Path string `short:"p" long:"path" description:"Path where the git repository is located"`
2020

21-
db sql.Database
22-
e *gitql.Engine
21+
db *sql.DB
22+
name string
2323
}
2424

2525
func (c *cmdQueryBase) buildDatabase() error {
2626
c.print("opening %q repository...\n", c.Path)
2727

2828
var err error
29-
r, err := git.PlainOpen(c.Path)
29+
r, err := gogit.PlainOpen(c.Path)
3030
if err != nil {
3131
return err
3232
}
3333

34-
name := filepath.Base(filepath.Join(c.Path, ".."))
35-
36-
c.db = gitqlgit.NewDatabase(name, r)
37-
c.e = gitql.New()
38-
c.e.AddDatabase(c.db)
39-
40-
return nil
34+
c.name = filepath.Base(filepath.Join(c.Path, ".."))
35+
gitql.DefaultEngine.AddDatabase(git.NewDatabase(c.name, r))
36+
c.db, err = sql.Open(gitql.DriverName, "")
37+
return err
4138
}
4239

43-
func (c *cmdQueryBase) executeQuery(sql string) (sql.Schema, sql.RowIter, error) {
44-
c.print("executing %q at %q\n", sql, c.db.Name())
45-
46-
return c.e.Query(sql)
40+
func (c *cmdQueryBase) executeQuery(sql string) (*sql.Rows, error) {
41+
c.print("executing %q at %q\n", sql, c.name)
42+
return c.db.Query(sql)
4743
}
4844

49-
func (c *cmdQueryBase) printQuery(schema sql.Schema, iter sql.RowIter, formatId string) error {
45+
func (c *cmdQueryBase) printQuery(rows *sql.Rows, formatId string) (err error) {
46+
defer ioutil.CheckClose(rows, &err)
47+
5048
f, err := format.NewFormat(formatId, os.Stdout)
5149
if err != nil {
5250
return err
5351
}
52+
defer ioutil.CheckClose(f, &err)
5453

55-
headers := []string{}
56-
for _, f := range schema {
57-
headers = append(headers, f.Name)
54+
cols, err := rows.Columns()
55+
if err != nil {
56+
return err
5857
}
5958

60-
if err := f.WriteHeader(headers); err != nil {
59+
if err := f.WriteHeader(cols); err != nil {
6160
return err
6261
}
6362

63+
vals := make([]interface{}, len(cols))
64+
valPtrs := make([]interface{}, len(cols))
65+
for i := 0; i < len(cols); i++ {
66+
valPtrs[i] = &vals[i]
67+
}
68+
6469
for {
65-
row, err := iter.Next()
66-
if err == io.EOF {
70+
if !rows.Next() {
6771
break
6872
}
69-
if err != nil {
70-
return err
71-
}
7273

73-
dataRow := make([]interface{}, len(row))
74-
for i := range row {
75-
dataRow[i] = interface{}(row[i])
74+
if err := rows.Scan(valPtrs...); err != nil {
75+
return err
7676
}
7777

78-
if err := f.Write(dataRow); err != nil {
78+
if err := f.Write(vals); err != nil {
7979
return err
8080
}
8181
}
8282

83-
if err := iter.Close(); err != nil {
84-
_ = f.Close()
85-
return err
86-
}
87-
88-
return f.Close()
83+
return rows.Err()
8984
}

cmd/gitql/shell.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ func (c *CmdShell) Execute(args []string) error {
6666

6767
rl.Terminal.Print(fmt.Sprintf("\n--> Executing query: %s\n\n", query))
6868

69-
schema, rowIter, err := c.executeQuery(query)
69+
rows, err := c.executeQuery(query)
7070
if err != nil {
7171
red("ERROR: %v\n\n", err)
7272
continue
7373
}
7474

75-
if err := c.printQuery(schema, rowIter, "pretty"); err != nil {
75+
if err := c.printQuery(rows, "pretty"); err != nil {
7676
red("ERROR: %v\n\n", err)
7777
continue
7878
}

0 commit comments

Comments
 (0)