Skip to content

Commit

Permalink
git: add objects table, closes #54 (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
ajnavarro authored Dec 2, 2016
1 parent ed13c31 commit 2fda359
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 0 deletions.
4 changes: 4 additions & 0 deletions git/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const (
tagsTableName = "tags"
blobsTableName = "blobs"
treeEntriesTableName = "tree_entries"
objectsTableName = "objects"
)

type Database struct {
Expand All @@ -22,6 +23,7 @@ type Database struct {
rr sql.Table
ter sql.Table
br sql.Table
or sql.Table
}

func NewDatabase(name string, r *git.Repository) sql.Database {
Expand All @@ -32,6 +34,7 @@ func NewDatabase(name string, r *git.Repository) sql.Database {
tr: newTagsTable(r),
br: newBlobsTable(r),
ter: newTreeEntriesTable(r),
or: newObjectsTable(r),
}
}

Expand All @@ -46,5 +49,6 @@ func (d *Database) Tables() map[string]sql.Table {
referencesTableName: d.rr,
blobsTableName: d.br,
treeEntriesTableName: d.ter,
objectsTableName: d.or,
}
}
1 change: 1 addition & 0 deletions git/database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func TestDatabase_Tables(t *testing.T) {
treeEntriesTableName,
tagsTableName,
blobsTableName,
objectsTableName,
}
sort.Strings(expected)

Expand Down
71 changes: 71 additions & 0 deletions git/objects.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package git

import (
"github.com/gitql/gitql/sql"

"gopkg.in/src-d/go-git.v4"
)

type objectsTable struct {
r *git.Repository
}

func newObjectsTable(r *git.Repository) sql.Table {
return &objectsTable{r: r}
}

func (objectsTable) Resolved() bool {
return true
}

func (objectsTable) Name() string {
return objectsTableName
}

func (objectsTable) Schema() sql.Schema {
return sql.Schema{
sql.Field{"id", sql.String},
sql.Field{"type", sql.String},
}
}

func (r *objectsTable) TransformUp(f func(sql.Node) sql.Node) sql.Node {
return f(r)
}

func (r *objectsTable) TransformExpressionsUp(f func(sql.Expression) sql.Expression) sql.Node {
return r
}

func (r objectsTable) RowIter() (sql.RowIter, error) {
oIter, err := r.r.Objects()
if err != nil {
return nil, err
}
iter := &objectIter{i: oIter}
return iter, nil
}

func (objectsTable) Children() []sql.Node {
return []sql.Node{}
}

type objectIter struct {
i *git.ObjectIter
}

func (i *objectIter) Next() (sql.Row, error) {
o, err := i.i.Next()
if err != nil {
return nil, err
}

return objectToRow(o), nil
}

func objectToRow(o git.Object) sql.Row {
return sql.NewMemoryRow(
o.ID().String(),
o.Type().String(),
)
}
43 changes: 43 additions & 0 deletions git/objects_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package git

import (
"testing"

"github.com/gitql/gitql/sql"

"github.com/stretchr/testify/assert"
"gopkg.in/src-d/go-git.v4/fixtures"
)

func TestObjectsTable_Name(t *testing.T) {
assert := assert.New(t)

f := fixtures.Basic().One()
table := getTable(assert, f, objectsTableName)
assert.Equal(objectsTableName, table.Name())
}

func TestObjectsTable_Children(t *testing.T) {
assert := assert.New(t)

f := fixtures.Basic().One()
table := getTable(assert, f, objectsTableName)
assert.Equal(0, len(table.Children()))
}

func TestObjectsTable_RowIter(t *testing.T) {
assert := assert.New(t)

f := fixtures.Basic().One()
table := getTable(assert, f, objectsTableName)

rows, err := sql.NodeToRows(table)
assert.Nil(err)
assert.Len(rows, 31)

schema := table.Schema()
for idx, row := range rows {
err := schema.CheckRow(row)
assert.Nil(err, "row %d doesn't conform to schema", idx)
}
}

0 comments on commit 2fda359

Please sign in to comment.