mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-06 10:57:51 +00:00
get fields
This commit is contained in:
parent
046fb9b97e
commit
505363d8ed
4 changed files with 94 additions and 2 deletions
22
frame.go
22
frame.go
|
|
@ -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()
|
||||
|
|
|
|||
23
handler.go
23
handler.go
|
|
@ -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{}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
3
index.go
3
index.go
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue