From 46751f0b28dd5610633ec5b5b563176b7c3bb98a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 31 Jan 2015 15:45:40 -0800 Subject: [PATCH] Add database query function, and some re-factoring --- pkg/utils/database/doc.go | 1 - pkg/utils/database/tiedot/database.go | 45 ++++++++++++++----- pkg/utils/database/tiedot/database_test.go | 14 +++--- .../tiedot/{structure.go => structs.go} | 2 +- 4 files changed, 42 insertions(+), 20 deletions(-) delete mode 100644 pkg/utils/database/doc.go rename pkg/utils/database/tiedot/{structure.go => structs.go} (86%) diff --git a/pkg/utils/database/doc.go b/pkg/utils/database/doc.go deleted file mode 100644 index 636bab89a..000000000 --- a/pkg/utils/database/doc.go +++ /dev/null @@ -1 +0,0 @@ -package database diff --git a/pkg/utils/database/tiedot/database.go b/pkg/utils/database/tiedot/database.go index 2b693e79b..30ad60c21 100644 --- a/pkg/utils/database/tiedot/database.go +++ b/pkg/utils/database/tiedot/database.go @@ -1,20 +1,27 @@ -package database +package tiedot import ( + "encoding/json" + "fmt" + "github.com/HouzuoGuo/tiedot/db" ) -func NewDatabase() *Database { - return &Database{} +func NewDatabase(dirname string) (*Database, error) { + data := Database{} + data.setdbdir(dirname) + if err := data.setDBhandle(); err != nil { + return &Database{}, err + } + return &data, nil } func (data *Database) setdbdir(dirname string) { data.DBdir = dirname } -func (data *Database) GetDBHandle(dirname string) error { +func (data *Database) setDBhandle() error { var err error - data.setdbdir(dirname) data.DBhandle, err = db.OpenDB(data.DBdir) if err != nil { return err @@ -28,7 +35,7 @@ func (data *Database) InitCollection(colls ...string) { } } -func (data *Database) GetCollections() []string { +func (data *Database) GetAllCollections() []string { var colls []string for _, name := range data.DBhandle.AllCols() { colls = append(colls, name) @@ -40,12 +47,28 @@ func (data *Database) getCollectionHandle(coll string) *db.Col { return data.DBhandle.Use(coll) } -func (data *Database) GetCollectionData(coll string, docid int) (map[string]interface{}, error) { - collHandle := data.getCollectionHandle(coll) - return collHandle.Read(docid) -} - func (data *Database) InsertToCollection(coll string, model map[string]interface{}) (docid int, err error) { collHandle := data.getCollectionHandle(coll) return collHandle.Insert(model) } + +func (data *Database) InsertIndexToCollection(coll string, indexes []string) error { + collHandle := data.getCollectionHandle(coll) + return collHandle.Index(indexes) +} + +func (data *Database) QueryDB(coll string, queryByte []byte) (map[int]struct{}, error) { + if len(queryByte) <= 0 { + return nil, fmt.Errorf("Invalid query string") + } + + var query interface{} + json.Unmarshal(queryByte, &query) + + queryResult := make(map[int]struct{}) // query result (document IDs) goes into map keys + err := db.EvalQuery(query, data.getCollectionHandle(coll), &queryResult) + if err != nil { + return nil, err + } + return queryResult, nil +} diff --git a/pkg/utils/database/tiedot/database_test.go b/pkg/utils/database/tiedot/database_test.go index 9361bb092..c10c25858 100644 --- a/pkg/utils/database/tiedot/database_test.go +++ b/pkg/utils/database/tiedot/database_test.go @@ -1,4 +1,4 @@ -package database +package tiedot import ( "os" @@ -14,9 +14,9 @@ type MySuite struct{} var _ = Suite(&MySuite{}) func (s *MySuite) Testing(c *C) { - d := NewDatabase() - d.GetDBHandle("/tmp/testdata") + d, err := NewDatabase("/tmp/testdata") defer os.RemoveAll("/tmp/testdata") + c.Assert(err, IsNil) d.InitCollection("Matrix") @@ -26,11 +26,11 @@ func (s *MySuite) Testing(c *C) { "language": "Go", } - docId, err1 := d.InsertToCollection("Matrix", data) + _, err1 := d.InsertToCollection("Matrix", data) c.Assert(err1, IsNil) - retdata, err2 := d.GetCollectionData("Matrix", docId) - + var indexes []string + indexes = []string{"version", "url", "language"} + err2 := d.InsertIndexToCollection("Matrix", indexes) c.Assert(err2, IsNil) - c.Assert(data, DeepEquals, retdata) } diff --git a/pkg/utils/database/tiedot/structure.go b/pkg/utils/database/tiedot/structs.go similarity index 86% rename from pkg/utils/database/tiedot/structure.go rename to pkg/utils/database/tiedot/structs.go index e1a5849d8..416a8aa64 100644 --- a/pkg/utils/database/tiedot/structure.go +++ b/pkg/utils/database/tiedot/structs.go @@ -1,4 +1,4 @@ -package database +package tiedot import ( "github.com/HouzuoGuo/tiedot/db"