We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent e7b5677 commit 01ace9eCopy full SHA for 01ace9e
git/blobs.go
@@ -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 blobsRelation struct {
10
+ r *git.Repository
11
+}
12
13
+func newBlobsRelation(r *git.Repository) sql.PhysicalRelation {
14
+ return &blobsRelation{r: r}
15
16
17
+func (blobsRelation) Resolved() bool {
18
+ return true
19
20
21
+func (blobsRelation) Name() string {
22
+ return blobsRelationName
23
24
25
+func (blobsRelation) Schema() sql.Schema {
26
+ return sql.Schema{
27
+ sql.Field{"hash", sql.String},
28
+ sql.Field{"size", sql.BigInteger},
29
+ }
30
31
32
+func (r *blobsRelation) TransformUp(f func(sql.Node) sql.Node) sql.Node {
33
+ return f(r)
34
35
36
+func (r *blobsRelation) TransformExpressionsUp(f func(sql.Expression) sql.Expression) sql.Node {
37
+ return r
38
39
40
+func (r blobsRelation) RowIter() (sql.RowIter, error) {
41
+ bIter, err := r.r.Blobs()
42
+ if err != nil {
43
+ return nil, err
44
45
+ iter := &blobIter{i: bIter}
46
+ return iter, nil
47
48
49
+func (blobsRelation) Children() []sql.Node {
50
+ return []sql.Node{}
51
52
53
+type blobIter struct {
54
+ i *git.BlobIter
55
56
57
+func (i *blobIter) Next() (sql.Row, error) {
58
+ blob, err := i.i.Next()
59
60
61
62
63
+ return blobToRow(blob), nil
64
65
66
+func blobToRow(c *git.Blob) sql.Row {
67
+ return sql.NewMemoryRow(
68
+ c.Hash.String(),
69
+ c.Size,
70
+ )
71
git/blobs_test.go
@@ -0,0 +1,40 @@
+ "testing"
+ "github.com/stretchr/testify/assert"
+ "gopkg.in/src-d/go-git.v4/fixtures"
+func TestBlobsRelation(t *testing.T) {
+ assert := assert.New(t)
+ f := fixtures.Basic().One()
+ r, err := git.NewFilesystemRepository(f.DotGit().Base())
+ assert.Nil(err)
+ db := NewDatabase("foo", r)
+ assert.NotNil(db)
+ relations := db.Relations()
+ rel, ok := relations[blobsRelationName]
+ assert.True(ok)
+ assert.NotNil(rel)
+ assert.Equal(blobsRelationName, rel.Name())
+ assert.Equal(0, len(rel.Children()))
+ iter, err := rel.RowIter()
+ assert.NotNil(iter)
+ row, err := iter.Next()
+ assert.NotNil(row)
+ fields := row.Fields()
+ assert.NotNil(fields)
+ assert.IsType("", fields[0])
+ assert.IsType(int64(0), fields[1])
git/database.go
@@ -10,6 +10,7 @@ const (
referencesRelationName = "references"
commitsRelationName = "commits"
tagsRelationName = "tags"
+ blobsRelationName = "blobs"
treeEntriesRelationName = "tree_entries"
)
@@ -19,6 +20,7 @@ type Database struct {
tr sql.PhysicalRelation
rr sql.PhysicalRelation
ter sql.PhysicalRelation
+ br sql.PhysicalRelation
}
func NewDatabase(name string, r *git.Repository) sql.Database {
@@ -27,6 +29,7 @@ func NewDatabase(name string, r *git.Repository) sql.Database {
cr: newCommitsRelation(r),
rr: newReferencesRelation(r),
tr: newTagsRelation(r),
+ br: newBlobsRelation(r),
ter: newTreeEntriesRelation(r),
@@ -40,6 +43,7 @@ func (d *Database) Relations() map[string]sql.PhysicalRelation {
commitsRelationName: d.cr,
tagsRelationName: d.tr,
referencesRelationName: d.rr,
+ blobsRelationName: d.br,
treeEntriesRelationName: d.ter,
0 commit comments