get fields

This commit is contained in:
Linh Vo 2017-09-26 10:57:22 -05:00
parent 046fb9b97e
commit 505363d8ed
4 changed files with 94 additions and 2 deletions

View file

@ -425,7 +425,7 @@ func (f *Frame) CreateField(field *Field) error {
defer f.mu.Unlock()
// Ensure frame supports fields.
if f.rangeEnabled {
if !f.rangeEnabled {
return ErrFrameFieldsNotAllowed
}
@ -435,10 +435,28 @@ func (f *Frame) CreateField(field *Field) error {
return err
}
f.schema = schema
f.saveSchema()
return nil
}
// GetFields list all the fields.
func (f *Frame) GetFields() (*FrameSchema, error) {
//f.mu.Lock()
//defer f.mu.Unlock()
// Ensure frame supports fields.
if !f.RangeEnabled() {
return nil, nil
}
err := f.loadSchema()
if err != nil {
return nil, err
}
fmt.Println("HERE")
fmt.Printf("%+v\n", f.schema)
return f.schema, nil
}
// DeleteField deletes an existing field on the schema.
func (f *Frame) DeleteField(name string) error {
f.mu.Lock()

View file

@ -118,6 +118,7 @@ func NewRouter(handler *Handler) *mux.Router {
router.HandleFunc("/index/{index}/frame/{frame}/restore", handler.handlePostFrameRestore).Methods("POST")
router.HandleFunc("/index/{index}/frame/{frame}/time-quantum", handler.handlePatchFrameTimeQuantum).Methods("PATCH")
router.HandleFunc("/index/{index}/frame/{frame}/field/{field}", handler.handlePostFrameField).Methods("POST")
router.HandleFunc("/index/{index}/frame/{frame}/fields", handler.handleGetFrameField).Methods("GET")
router.HandleFunc("/index/{index}/frame/{frame}/field/{field}", handler.handleDeleteFrameField).Methods("DELETE")
router.HandleFunc("/index/{index}/frame/{frame}/views", handler.handleGetFrameViews).Methods("GET")
router.HandleFunc("/index/{index}/frame/{frame}/view/{view}", handler.handleDeleteView).Methods("DELETE")
@ -841,6 +842,28 @@ func (h *Handler) handleDeleteFrameField(w http.ResponseWriter, r *http.Request)
}
}
func (h *Handler) handleGetFrameField(w http.ResponseWriter, r *http.Request) {
indexName := mux.Vars(r)["index"]
frameName := mux.Vars(r)["frame"]
index := h.Holder.index(indexName)
frame := index.frame(frameName)
schema, err := frame.GetFields()
fmt.Printf("%+v\n", schema)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Encode response.
if err := json.NewEncoder(w).Encode(getFrameFieldsResponse{Fields: schema.Fields}); err != nil {
h.logger().Printf("response encoding error: %s", err)
}
}
type getFrameFieldsResponse struct {
Fields []*Field `json:"fields,omitempty"`
}
type deleteFrameFieldRequest struct{}
type deleteFrameFieldResponse struct{}

View file

@ -32,6 +32,7 @@ import (
"github.com/pilosa/pilosa/internal"
"github.com/pilosa/pilosa/pql"
"github.com/pilosa/pilosa/test"
"fmt"
)
func TestHandlerPanics(t *testing.T) {
@ -976,6 +977,7 @@ func TestHandler_Frame_DeleteField(t *testing.T) {
t.Run("OK", func(t *testing.T) {
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
fmt.Println(f.RangeEnabled())
if err != nil {
t.Fatal(err)
} else if err := f.CreateField(&pilosa.Field{Name: "x", Type: pilosa.FieldTypeInt, Min: 0, Max: 100}); err != nil {
@ -1030,6 +1032,52 @@ func TestHandler_Frame_DeleteField(t *testing.T) {
})
}
func TestHandler_Frame_GetFields(t *testing.T) {
hldr := test.MustOpenHolder()
defer hldr.Close()
s := test.NewServer()
s.Handler.Holder = hldr.Holder
defer s.Close()
t.Run("OK", func(t *testing.T) {
idx := hldr.MustCreateIndexIfNotExists("i", pilosa.IndexOptions{})
f, err := idx.CreateFrameIfNotExists("f", pilosa.FrameOptions{RangeEnabled: true})
fmt.Println(f.RangeEnabled())
if err != nil {
t.Fatal(err)
} else if err := f.CreateField(&pilosa.Field{Name: "x", Type: pilosa.FieldTypeInt, Min: 1, Max: 100}); err != nil {
t.Fatal(err)
}
fmt.Println(f.RangeEnabled())
resp, err := http.Get(s.URL+"/index/i/frame/f/fields")
if err != nil {
t.Fatal(err)
}
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
if err != nil {
t.Fatal(err)
} else if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected status code: %d", resp.StatusCode)
}
//var fields []pilosa.Field
//if err = json.NewDecoder(resp.Body).Decode(&fields); err != nil {
// t.Fatal(err)
//}
//if fields[0].Name != "x" {
// t.Fatalf("expected field's name: x, actuall name: %v", fields[0].Name)
//}
//
//
//if field := f.Field("x"); field != nil {
// t.Fatalf("expected nil field, got: %#v", field)
//}
})
}
// Ensure the handler can backup a fragment and then restore it.
func TestHandler_Fragment_BackupRestore(t *testing.T) {
hldr := test.MustOpenHolder()

View file

@ -476,6 +476,9 @@ func (i *Index) createFrame(name string, opt FrameOptions) (*Frame, error) {
return nil, err
}
f.rangeEnabled = opt.RangeEnabled
fmt.Println("CREATE FRAME", opt.RangeEnabled)
// Set schema & save.
f.schema = &FrameSchema{
Fields: opt.Fields,