Skip to content

Commit 2fda359

Browse files
authored
git: add objects table, closes #54 (#77)
1 parent ed13c31 commit 2fda359

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed

git/database.go

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
tagsTableName = "tags"
1414
blobsTableName = "blobs"
1515
treeEntriesTableName = "tree_entries"
16+
objectsTableName = "objects"
1617
)
1718

1819
type Database struct {
@@ -22,6 +23,7 @@ type Database struct {
2223
rr sql.Table
2324
ter sql.Table
2425
br sql.Table
26+
or sql.Table
2527
}
2628

2729
func NewDatabase(name string, r *git.Repository) sql.Database {
@@ -32,6 +34,7 @@ func NewDatabase(name string, r *git.Repository) sql.Database {
3234
tr: newTagsTable(r),
3335
br: newBlobsTable(r),
3436
ter: newTreeEntriesTable(r),
37+
or: newObjectsTable(r),
3538
}
3639
}
3740

@@ -46,5 +49,6 @@ func (d *Database) Tables() map[string]sql.Table {
4649
referencesTableName: d.rr,
4750
blobsTableName: d.br,
4851
treeEntriesTableName: d.ter,
52+
objectsTableName: d.or,
4953
}
5054
}

git/database_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ func TestDatabase_Tables(t *testing.T) {
3838
treeEntriesTableName,
3939
tagsTableName,
4040
blobsTableName,
41+
objectsTableName,
4142
}
4243
sort.Strings(expected)
4344

git/objects.go

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package git
2+
3+
import (
4+
"github.com/gitql/gitql/sql"
5+
6+
"gopkg.in/src-d/go-git.v4"
7+
)
8+
9+
type objectsTable struct {
10+
r *git.Repository
11+
}
12+
13+
func newObjectsTable(r *git.Repository) sql.Table {
14+
return &objectsTable{r: r}
15+
}
16+
17+
func (objectsTable) Resolved() bool {
18+
return true
19+
}
20+
21+
func (objectsTable) Name() string {
22+
return objectsTableName
23+
}
24+
25+
func (objectsTable) Schema() sql.Schema {
26+
return sql.Schema{
27+
sql.Field{"id", sql.String},
28+
sql.Field{"type", sql.String},
29+
}
30+
}
31+
32+
func (r *objectsTable) TransformUp(f func(sql.Node) sql.Node) sql.Node {
33+
return f(r)
34+
}
35+
36+
func (r *objectsTable) TransformExpressionsUp(f func(sql.Expression) sql.Expression) sql.Node {
37+
return r
38+
}
39+
40+
func (r objectsTable) RowIter() (sql.RowIter, error) {
41+
oIter, err := r.r.Objects()
42+
if err != nil {
43+
return nil, err
44+
}
45+
iter := &objectIter{i: oIter}
46+
return iter, nil
47+
}
48+
49+
func (objectsTable) Children() []sql.Node {
50+
return []sql.Node{}
51+
}
52+
53+
type objectIter struct {
54+
i *git.ObjectIter
55+
}
56+
57+
func (i *objectIter) Next() (sql.Row, error) {
58+
o, err := i.i.Next()
59+
if err != nil {
60+
return nil, err
61+
}
62+
63+
return objectToRow(o), nil
64+
}
65+
66+
func objectToRow(o git.Object) sql.Row {
67+
return sql.NewMemoryRow(
68+
o.ID().String(),
69+
o.Type().String(),
70+
)
71+
}

git/objects_test.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package git
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gitql/gitql/sql"
7+
8+
"github.com/stretchr/testify/assert"
9+
"gopkg.in/src-d/go-git.v4/fixtures"
10+
)
11+
12+
func TestObjectsTable_Name(t *testing.T) {
13+
assert := assert.New(t)
14+
15+
f := fixtures.Basic().One()
16+
table := getTable(assert, f, objectsTableName)
17+
assert.Equal(objectsTableName, table.Name())
18+
}
19+
20+
func TestObjectsTable_Children(t *testing.T) {
21+
assert := assert.New(t)
22+
23+
f := fixtures.Basic().One()
24+
table := getTable(assert, f, objectsTableName)
25+
assert.Equal(0, len(table.Children()))
26+
}
27+
28+
func TestObjectsTable_RowIter(t *testing.T) {
29+
assert := assert.New(t)
30+
31+
f := fixtures.Basic().One()
32+
table := getTable(assert, f, objectsTableName)
33+
34+
rows, err := sql.NodeToRows(table)
35+
assert.Nil(err)
36+
assert.Len(rows, 31)
37+
38+
schema := table.Schema()
39+
for idx, row := range rows {
40+
err := schema.CheckRow(row)
41+
assert.Nil(err, "row %d doesn't conform to schema", idx)
42+
}
43+
}

0 commit comments

Comments
 (0)