mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-11 15:21:02 +00:00
save inputdefinition as protobuf to file
This commit is contained in:
parent
7c28e2c3f3
commit
fdacca3147
6 changed files with 223 additions and 96 deletions
45
handler.go
45
handler.go
|
|
@ -131,7 +131,7 @@ func NewRouter(handler *Handler) *mux.Router {
|
|||
|
||||
router.HandleFunc("/index/{index}/input-definition/{input-definition}", handler.handleGetDefinition).Methods("GET")
|
||||
router.HandleFunc("/index/{index}/input-definition/{input-definition}", handler.handlePostDefinition).Methods("POST")
|
||||
router.HandleFunc("/index/{index}input-definition/{input-definition}", handler.handleDeleteDefinition).Methods("DELETE")
|
||||
router.HandleFunc("/index/{index}/input-definition/{input-definition}", handler.handleDeleteDefinition).Methods("DELETE")
|
||||
|
||||
return router
|
||||
}
|
||||
|
|
@ -1515,6 +1515,9 @@ func (h *Handler) handlePostDefinition(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
fmt.Println(req.Frames)
|
||||
fmt.Println(req.Fields)
|
||||
|
||||
// Find index.
|
||||
index := h.Holder.Index(indexName)
|
||||
if index == nil {
|
||||
|
|
@ -1544,19 +1547,53 @@ func (h *Handler) handlePostDefinition(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func (h *Handler) handleGetDefinition(w http.ResponseWriter, r *http.Request) {
|
||||
indexName := mux.Vars(r)["index"]
|
||||
inputDefName := mux.Vars(r)["input-definition"]
|
||||
|
||||
//Find index.
|
||||
index := h.Holder.Index(indexName)
|
||||
if index == nil {
|
||||
if err := json.NewEncoder(w).Encode(deleteIndexResponse{}); err != nil {
|
||||
h.logger().Printf("response encoding error: %s", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
inputDef := index.inputDefinition(inputDefName)
|
||||
res, err := json.Marshal(inputDef)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
fmt.Println("RESPONSE", string(res))
|
||||
}
|
||||
|
||||
func (h *Handler) handleDeleteDefinition(w http.ResponseWriter, r *http.Request) {
|
||||
indexName := mux.Vars(r)["index"]
|
||||
inputDefName := mux.Vars(r)["input-definition"]
|
||||
|
||||
// Find index.
|
||||
index := h.Holder.Index(indexName)
|
||||
if index == nil {
|
||||
if err := json.NewEncoder(w).Encode(deleteIndexResponse{}); err != nil {
|
||||
h.logger().Printf("response encoding error: %s", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Delete frame from the index.
|
||||
if err := index.DeleteInputDefinition(inputDefName); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
type postInputDefinition struct {
|
||||
Frames []InputFrame `json:"frames,omitempty"`
|
||||
Fields []Field `json:"fields,omitempty"`
|
||||
Fields []Field `json:"fields,omitempty"`
|
||||
}
|
||||
|
||||
type InputFrame struct {
|
||||
Name string
|
||||
Name string
|
||||
Options FrameOptions
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ func (h *Holder) Open() error {
|
|||
|
||||
index, err := h.newIndex(h.IndexPath(filepath.Base(fi.Name())), filepath.Base(fi.Name()))
|
||||
if err == ErrName {
|
||||
|
||||
h.logger().Printf("ERROR opening index: %s, err=%s", fi.Name(), err)
|
||||
continue
|
||||
} else if err != nil {
|
||||
|
|
|
|||
39
index.go
39
index.go
|
|
@ -171,12 +171,13 @@ func (i *Index) openFrames() error {
|
|||
}
|
||||
|
||||
for _, fi := range fis {
|
||||
if !fi.IsDir() {
|
||||
if !fi.IsDir() || fi.Name() == ".input-definitions" {
|
||||
continue
|
||||
}
|
||||
|
||||
fr, err := i.newFrame(i.FramePath(filepath.Base(fi.Name())), filepath.Base(fi.Name()))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return ErrName
|
||||
}
|
||||
if err := fr.Open(); err != nil {
|
||||
|
|
@ -345,6 +346,8 @@ func (i *Index) Frame(name string) *Frame {
|
|||
|
||||
func (i *Index) frame(name string) *Frame { return i.frames[name] }
|
||||
|
||||
func (i *Index) inputDefinition(name string) *InputDefinition { return i.inputDefinitions[name] }
|
||||
|
||||
// Frames returns a list of all frames in the index.
|
||||
func (i *Index) Frames() []*Frame {
|
||||
i.mu.Lock()
|
||||
|
|
@ -383,9 +386,11 @@ func (i *Index) CreateInputDefinition(name string, frames []InputFrame, field []
|
|||
return i.createInputDefinition(name, frames, field)
|
||||
}
|
||||
|
||||
func (i *Index) createInputDefinition(name string, frames []InputFrame, field []Field) (*InputDefinition, error) {
|
||||
func (i *Index) createInputDefinition(name string, frames []InputFrame, fields []Field) (*InputDefinition, error) {
|
||||
if name == "" {
|
||||
return nil, errors.New("input-definition name required")
|
||||
} else if len(frames) == 0 || len(fields) == 0 {
|
||||
return nil, errors.New("frames and fields are required")
|
||||
}
|
||||
|
||||
// Initialize input definition.
|
||||
|
|
@ -399,6 +404,8 @@ func (i *Index) createInputDefinition(name string, frames []InputFrame, field []
|
|||
return nil, err
|
||||
}
|
||||
|
||||
inputDef.frames = frames
|
||||
inputDef.fields = fields
|
||||
if err = inputDef.saveMeta(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -495,7 +502,7 @@ func (i *Index) newInputDefinition(path, name string) (*InputDefinition, error)
|
|||
return nil, err
|
||||
}
|
||||
f.LogOutput = i.LogOutput
|
||||
f.Stats = i.Stats.WithTags(fmt.Sprintf("frame:%s", name))
|
||||
f.Stats = i.Stats.WithTags(fmt.Sprintf("input-definition:%s", name))
|
||||
f.broadcaster = i.broadcaster
|
||||
return f, nil
|
||||
}
|
||||
|
|
@ -527,6 +534,32 @@ func (i *Index) DeleteFrame(name string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// DeleteFrame removes a frame from the index.
|
||||
func (i *Index) DeleteInputDefinition(name string) error {
|
||||
i.mu.Lock()
|
||||
defer i.mu.Unlock()
|
||||
|
||||
// Ignore if input definition doesn't exist.
|
||||
f := i.inputDefinition(name)
|
||||
if f == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
//if err := f.Close(); err != nil {
|
||||
// return err
|
||||
//}
|
||||
|
||||
// Delete input definition file.
|
||||
if err := os.Remove(filepath.Join(i.InputDefPath(), name)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Remove reference.
|
||||
delete(i.inputDefinitions, name)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type indexSlice []*Index
|
||||
|
||||
func (p indexSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package pilosa
|
||||
|
||||
import (
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/pilosa/pilosa/internal"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
|
@ -14,8 +16,8 @@ type InputDefinition struct {
|
|||
broadcaster Broadcaster
|
||||
Stats StatsClient
|
||||
LogOutput io.Writer
|
||||
frames []Frame
|
||||
fields []Field
|
||||
frames []InputFrame
|
||||
fields []Field
|
||||
}
|
||||
|
||||
func NewInputDefinition(path, index, name string) (*InputDefinition, error) {
|
||||
|
|
@ -46,9 +48,9 @@ func (i *InputDefinition) Open() error {
|
|||
return err
|
||||
}
|
||||
|
||||
//if err := i.loadMeta(); err != nil {
|
||||
// return err
|
||||
//}
|
||||
if err := i.loadMeta(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}(); err != nil {
|
||||
|
|
@ -57,18 +59,70 @@ func (i *InputDefinition) Open() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (i *InputDefinition) loadMeta() error {
|
||||
var pb internal.InputDefinition
|
||||
buf, err := ioutil.ReadFile(filepath.Join(i.path, i.name))
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
if err := proto.Unmarshal(buf, &pb); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// Copy metadata fields.
|
||||
i.name = pb.Name
|
||||
i.frames = pb.Frames
|
||||
i.fields = pb.InputDefinitionFields
|
||||
return nil
|
||||
}
|
||||
|
||||
//saveMeta writes meta data for the frame.
|
||||
func (f *InputDefinition) saveMeta() error {
|
||||
func (i *InputDefinition) saveMeta() error {
|
||||
// Marshal metadata.
|
||||
//buf, err := proto.Marshal(&internal.InputDefinitionMeta{
|
||||
// Frames: f.
|
||||
//})
|
||||
//if err != nil {
|
||||
// return err
|
||||
//}
|
||||
var frames []*internal.Frame
|
||||
for _, fr := range i.frames {
|
||||
frameMeta := &internal.FrameMeta{
|
||||
RowLabel: fr.Options.RowLabel,
|
||||
InverseEnabled: fr.Options.InverseEnabled,
|
||||
CacheType: fr.Options.CacheType,
|
||||
CacheSize: fr.Options.CacheSize,
|
||||
TimeQuantum: string(fr.Options.TimeQuantum),
|
||||
}
|
||||
frame := &internal.Frame{Name: fr.Name, Meta: frameMeta}
|
||||
frames = append(frames, frame)
|
||||
}
|
||||
|
||||
var fields []*internal.InputDefinitionField
|
||||
for _, field := range i.fields {
|
||||
var actions []*internal.Action
|
||||
for _, action := range field.Actions {
|
||||
actionMeta := &internal.Action{
|
||||
Frame: action.Frame,
|
||||
ValueDestination: action.ValueDestination,
|
||||
ValueMap: action.ValueMap,
|
||||
RowID: action.RowID,
|
||||
}
|
||||
actions = append(actions, actionMeta)
|
||||
}
|
||||
|
||||
fieldMeta := &internal.InputDefinitionField{
|
||||
Name: field.Name,
|
||||
PrimaryKey: field.PrimaryKey,
|
||||
Actions: actions,
|
||||
}
|
||||
fields = append(fields, fieldMeta)
|
||||
}
|
||||
buf, err := proto.Marshal(&internal.InputDefinition{
|
||||
Name: i.name,
|
||||
Frames: frames,
|
||||
InputDefinitionFields: fields,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write to meta file.
|
||||
if err := ioutil.WriteFile(filepath.Join(f.path, f.name), []byte(""), 0666); err != nil {
|
||||
if err := ioutil.WriteFile(filepath.Join(i.path, i.name), buf, 0666); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +138,7 @@ type InputDefinitionMeta struct {
|
|||
type Field struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
PrimaryKey bool `json:"primaryKey,omitempty"`
|
||||
Actions []Action `json:"action,omitempty"`
|
||||
Actions []Action `json:"actions,omitempty"`
|
||||
}
|
||||
|
||||
type Action struct {
|
||||
|
|
|
|||
|
|
@ -272,9 +272,9 @@ func (m *InputDefinition) GetInputDefinitionFields() []*InputDefinitionField {
|
|||
}
|
||||
|
||||
type InputDefinitionField struct {
|
||||
Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
|
||||
PrimaryKey bool `protobuf:"varint,2,opt,name=PrimaryKey,proto3" json:"PrimaryKey,omitempty"`
|
||||
Meta *Action `protobuf:"bytes,3,opt,name=Meta" json:"Meta,omitempty"`
|
||||
Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
|
||||
PrimaryKey bool `protobuf:"varint,2,opt,name=PrimaryKey,proto3" json:"PrimaryKey,omitempty"`
|
||||
Actions []*Action `protobuf:"bytes,3,rep,name=Actions" json:"Actions,omitempty"`
|
||||
}
|
||||
|
||||
func (m *InputDefinitionField) Reset() { *m = InputDefinitionField{} }
|
||||
|
|
@ -282,9 +282,9 @@ func (m *InputDefinitionField) String() string { return proto.Compact
|
|||
func (*InputDefinitionField) ProtoMessage() {}
|
||||
func (*InputDefinitionField) Descriptor() ([]byte, []int) { return fileDescriptorPrivate, []int{15} }
|
||||
|
||||
func (m *InputDefinitionField) GetMeta() *Action {
|
||||
func (m *InputDefinitionField) GetActions() []*Action {
|
||||
if m != nil {
|
||||
return m.Meta
|
||||
return m.Actions
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -1008,15 +1008,17 @@ func (m *InputDefinitionField) MarshalTo(dAtA []byte) (int, error) {
|
|||
}
|
||||
i++
|
||||
}
|
||||
if m.Meta != nil {
|
||||
dAtA[i] = 0x1a
|
||||
i++
|
||||
i = encodeVarintPrivate(dAtA, i, uint64(m.Meta.Size()))
|
||||
n13, err := m.Meta.MarshalTo(dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
if len(m.Actions) > 0 {
|
||||
for _, msg := range m.Actions {
|
||||
dAtA[i] = 0x1a
|
||||
i++
|
||||
i = encodeVarintPrivate(dAtA, i, uint64(msg.Size()))
|
||||
n, err := msg.MarshalTo(dAtA[i:])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i += n
|
||||
}
|
||||
i += n13
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
|
@ -1474,9 +1476,11 @@ func (m *InputDefinitionField) Size() (n int) {
|
|||
if m.PrimaryKey {
|
||||
n += 2
|
||||
}
|
||||
if m.Meta != nil {
|
||||
l = m.Meta.Size()
|
||||
n += 1 + l + sovPrivate(uint64(l))
|
||||
if len(m.Actions) > 0 {
|
||||
for _, e := range m.Actions {
|
||||
l = e.Size()
|
||||
n += 1 + l + sovPrivate(uint64(l))
|
||||
}
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
|
@ -3691,7 +3695,7 @@ func (m *InputDefinitionField) Unmarshal(dAtA []byte) error {
|
|||
m.PrimaryKey = bool(v != 0)
|
||||
case 3:
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Meta", wireType)
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Actions", wireType)
|
||||
}
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
|
|
@ -3715,10 +3719,8 @@ func (m *InputDefinitionField) Unmarshal(dAtA []byte) error {
|
|||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
if m.Meta == nil {
|
||||
m.Meta = &Action{}
|
||||
}
|
||||
if err := m.Meta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
m.Actions = append(m.Actions, &Action{})
|
||||
if err := m.Actions[len(m.Actions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
|
|
@ -4412,57 +4414,57 @@ var (
|
|||
func init() { proto.RegisterFile("private.proto", fileDescriptorPrivate) }
|
||||
|
||||
var fileDescriptorPrivate = []byte{
|
||||
// 820 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0x23, 0x45,
|
||||
0x10, 0x66, 0xec, 0xb1, 0xb1, 0x2b, 0x4a, 0xe2, 0x6d, 0x02, 0x9a, 0x8d, 0x22, 0x2b, 0x6a, 0x21,
|
||||
0x36, 0xe4, 0x90, 0xc3, 0x72, 0x41, 0xbb, 0x1c, 0x60, 0xe3, 0xac, 0xd6, 0x82, 0x2c, 0xd0, 0x8e,
|
||||
0xf6, 0x88, 0xd4, 0xb1, 0x0b, 0x18, 0x65, 0x3c, 0x33, 0x4c, 0xf7, 0x24, 0x6b, 0x0e, 0x3c, 0x07,
|
||||
0x12, 0x57, 0xae, 0xbc, 0x07, 0x47, 0xae, 0xdc, 0x50, 0xb8, 0xf0, 0x18, 0xa8, 0xab, 0x7b, 0x7e,
|
||||
0x3c, 0xb6, 0xb3, 0xca, 0xde, 0xa6, 0xbe, 0xfa, 0xfb, 0xaa, 0xba, 0xaa, 0x6c, 0xd8, 0x4e, 0xb3,
|
||||
0xf0, 0x5a, 0x6a, 0x3c, 0x49, 0xb3, 0x44, 0x27, 0xac, 0x17, 0xc6, 0x1a, 0xb3, 0x58, 0x46, 0xfc,
|
||||
0x6b, 0xe8, 0x8f, 0xe3, 0x19, 0xbe, 0x3e, 0x47, 0x2d, 0xd9, 0x21, 0x6c, 0x9d, 0x26, 0x51, 0x3e,
|
||||
0x8f, 0xbf, 0x92, 0x97, 0x18, 0x05, 0xde, 0xa1, 0x77, 0xd4, 0x17, 0x75, 0xc8, 0x58, 0x5c, 0x84,
|
||||
0x73, 0xfc, 0x36, 0x97, 0xb1, 0xce, 0xe7, 0x41, 0xcb, 0x5a, 0xd4, 0x20, 0xfe, 0x87, 0x07, 0xfd,
|
||||
0xe7, 0x99, 0x9c, 0x23, 0x45, 0xdc, 0x87, 0x9e, 0x48, 0x6e, 0xea, 0xe1, 0x4a, 0x99, 0x7d, 0x04,
|
||||
0x3b, 0xe3, 0xf8, 0x1a, 0x33, 0x85, 0x67, 0xb1, 0xbc, 0x8c, 0x70, 0x46, 0xe1, 0x7a, 0xa2, 0x81,
|
||||
0xb2, 0x03, 0xe8, 0x9f, 0xca, 0xe9, 0x8f, 0x78, 0xb1, 0x48, 0x31, 0x68, 0x53, 0x90, 0x0a, 0x28,
|
||||
0xb5, 0x93, 0xf0, 0x67, 0x0c, 0xfc, 0x43, 0xef, 0x68, 0x5b, 0x54, 0x40, 0x93, 0x6f, 0x67, 0x95,
|
||||
0x2f, 0x87, 0x9d, 0xf1, 0x3c, 0x4d, 0x32, 0x2d, 0x50, 0xa5, 0x49, 0xac, 0x90, 0x0d, 0xa0, 0x7d,
|
||||
0x96, 0x65, 0x8e, 0xae, 0xf9, 0xe4, 0xbf, 0xc0, 0xe0, 0x59, 0x94, 0x4c, 0xaf, 0x46, 0x52, 0x4b,
|
||||
0x81, 0x3f, 0xe5, 0xa8, 0x34, 0xdb, 0x83, 0x0e, 0x35, 0xce, 0xd9, 0x59, 0xc1, 0xa0, 0x54, 0xbc,
|
||||
0xeb, 0x8c, 0x15, 0x0c, 0x4a, 0xfe, 0xc4, 0xde, 0x17, 0x56, 0x30, 0xe8, 0x24, 0x0a, 0xa7, 0x96,
|
||||
0xb5, 0x2f, 0xac, 0xc0, 0x18, 0xf8, 0xaf, 0x42, 0xbc, 0x71, 0x54, 0xe9, 0x9b, 0x8f, 0xe1, 0x41,
|
||||
0x2d, 0xbf, 0xa3, 0xf9, 0x01, 0x74, 0x45, 0x72, 0x33, 0x1e, 0xa9, 0xc0, 0x3b, 0x6c, 0x1f, 0xf9,
|
||||
0xc2, 0x49, 0xd4, 0x10, 0x7a, 0x31, 0xa3, 0x6a, 0x91, 0xaa, 0x02, 0xf8, 0x43, 0xe8, 0x50, 0x77,
|
||||
0x4c, 0x95, 0x95, 0xaf, 0xf9, 0xe4, 0xbf, 0x79, 0xf0, 0xe0, 0x5c, 0xbe, 0x26, 0x1a, 0xaa, 0x4c,
|
||||
0xf3, 0x02, 0xfa, 0x25, 0x48, 0xd6, 0x5b, 0x8f, 0x8f, 0x4f, 0x8a, 0xf1, 0x39, 0x59, 0xb1, 0xaf,
|
||||
0x90, 0xb3, 0x58, 0x67, 0x0b, 0x51, 0x39, 0xef, 0x7f, 0x06, 0x3b, 0xcb, 0x4a, 0xc3, 0xe1, 0x0a,
|
||||
0x17, 0x45, 0xa7, 0xaf, 0x70, 0x61, 0x7a, 0x72, 0x2d, 0xa3, 0xdc, 0xf6, 0xcf, 0x17, 0x56, 0x78,
|
||||
0xd2, 0xfa, 0xd4, 0xe3, 0xdf, 0x01, 0x3b, 0xcd, 0x50, 0x6a, 0xa4, 0x00, 0xe7, 0xa8, 0x94, 0xfc,
|
||||
0x01, 0x37, 0xbf, 0x82, 0xed, 0x6c, 0xab, 0xde, 0xd9, 0x03, 0xe8, 0x8f, 0x95, 0x9b, 0x2d, 0x7a,
|
||||
0x89, 0x9e, 0xa8, 0x00, 0x7e, 0x0c, 0x6c, 0x84, 0x11, 0x6a, 0x74, 0xeb, 0x70, 0x47, 0x7c, 0x3e,
|
||||
0x29, 0xb8, 0xbc, 0xd9, 0x96, 0x3d, 0x02, 0xdf, 0x6c, 0x02, 0x51, 0xd9, 0x7a, 0xfc, 0x5e, 0xd5,
|
||||
0xba, 0x72, 0xed, 0x04, 0x19, 0xf0, 0xb0, 0x08, 0xea, 0xb6, 0xe7, 0x0d, 0x05, 0xae, 0x19, 0xb3,
|
||||
0x22, 0x55, 0xbb, 0x99, 0xaa, 0xdc, 0x47, 0x97, 0xea, 0xf3, 0xa2, 0xd6, 0xb7, 0x4d, 0xc5, 0x47,
|
||||
0x0e, 0x35, 0xe3, 0xfa, 0xd2, 0x68, 0xad, 0x0f, 0x7d, 0x6f, 0x2e, 0xb9, 0xc9, 0xe3, 0x3f, 0xcf,
|
||||
0xa5, 0xbc, 0x5f, 0x98, 0x46, 0xe7, 0xcc, 0x91, 0x29, 0x06, 0xcb, 0x6d, 0x58, 0x29, 0xb3, 0x47,
|
||||
0xd0, 0xa5, 0xac, 0x2a, 0xf0, 0x69, 0x76, 0x77, 0x1b, 0x6c, 0x84, 0x53, 0x9b, 0x75, 0x72, 0x43,
|
||||
0xde, 0xb1, 0xeb, 0x64, 0x25, 0x76, 0x06, 0x83, 0x71, 0x9c, 0xe6, 0x7a, 0x84, 0xdf, 0x87, 0x71,
|
||||
0xa8, 0xc3, 0x24, 0x56, 0x41, 0x97, 0x42, 0x3d, 0xac, 0x33, 0x5a, 0xb2, 0x10, 0x2b, 0x2e, 0xfc,
|
||||
0x77, 0x0f, 0x76, 0x1b, 0xe0, 0x86, 0xa2, 0x0b, 0xbe, 0xad, 0xbb, 0xf9, 0x5e, 0xc0, 0xfb, 0x8d,
|
||||
0x78, 0xcf, 0x43, 0x8c, 0x66, 0x2a, 0x68, 0x93, 0xdf, 0x70, 0x23, 0x39, 0x32, 0x13, 0xeb, 0x9d,
|
||||
0x79, 0x0a, 0x7b, 0xeb, 0x14, 0x6b, 0xa9, 0x0e, 0x01, 0xbe, 0xc9, 0xc2, 0xb9, 0xcc, 0x16, 0x5f,
|
||||
0xe2, 0xc2, 0xdd, 0xee, 0x1a, 0xc2, 0x3e, 0x5c, 0x1a, 0xc7, 0x41, 0x45, 0xe8, 0x8b, 0x29, 0x35,
|
||||
0xc9, 0xce, 0xc0, 0xdf, 0x1e, 0x74, 0x2d, 0x50, 0x8d, 0x9a, 0x57, 0x9f, 0xea, 0x63, 0x18, 0xbc,
|
||||
0x32, 0x57, 0x60, 0x84, 0x4a, 0x87, 0xb1, 0x34, 0x96, 0x6e, 0x16, 0x57, 0x70, 0xf6, 0x04, 0x7a,
|
||||
0x84, 0x9d, 0xcb, 0x74, 0xb5, 0x0f, 0x36, 0xcb, 0x49, 0x61, 0x60, 0xef, 0x53, 0x69, 0x6f, 0xb2,
|
||||
0xd3, 0x05, 0x2d, 0xce, 0x31, 0x09, 0xfb, 0x4f, 0x61, 0x7b, 0xc9, 0xe1, 0x9e, 0x37, 0xeb, 0xa0,
|
||||
0xb8, 0x13, 0x4b, 0x3d, 0xbd, 0x7b, 0xe3, 0x8e, 0x56, 0x26, 0xc5, 0xd5, 0xdb, 0x84, 0xb9, 0x04,
|
||||
0x78, 0x99, 0xcc, 0x70, 0xa2, 0xa5, 0xce, 0x95, 0x79, 0xa3, 0x17, 0x89, 0xd2, 0xc5, 0x1b, 0x99,
|
||||
0x6f, 0xba, 0x84, 0x5a, 0xea, 0x72, 0x7b, 0x49, 0x60, 0x1f, 0xc3, 0xbb, 0x94, 0x0a, 0x8b, 0x69,
|
||||
0xd9, 0x6d, 0x2c, 0x97, 0x28, 0xf4, 0xfc, 0x29, 0x6c, 0x9f, 0x46, 0xb9, 0xd2, 0x98, 0xb9, 0x2c,
|
||||
0xc7, 0xd0, 0x31, 0x39, 0x8b, 0xdf, 0x82, 0xbd, 0xca, 0xb3, 0xa2, 0x22, 0xac, 0xc9, 0xb3, 0xc1,
|
||||
0x9f, 0xb7, 0x43, 0xef, 0xaf, 0xdb, 0xa1, 0xf7, 0xcf, 0xed, 0xd0, 0xfb, 0xf5, 0xdf, 0xe1, 0x3b,
|
||||
0x97, 0x5d, 0xfa, 0xff, 0xf1, 0xc9, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x74, 0xd0, 0x83,
|
||||
0x90, 0x08, 0x00, 0x00,
|
||||
// 823 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4f, 0x6f, 0x1b, 0x45,
|
||||
0x14, 0x67, 0xed, 0xb5, 0x6b, 0xbf, 0x28, 0x89, 0x3b, 0x04, 0xb4, 0x8d, 0x22, 0x2b, 0x9a, 0x03,
|
||||
0x0d, 0x3e, 0xf8, 0x50, 0x2e, 0xa8, 0xe5, 0x00, 0xb5, 0x5d, 0xd5, 0x02, 0x17, 0x18, 0x47, 0x3d,
|
||||
0x22, 0x4d, 0xec, 0x07, 0xac, 0xb2, 0xde, 0x35, 0x3b, 0xb3, 0x4e, 0xcd, 0x81, 0xcf, 0x81, 0xc4,
|
||||
0x95, 0x2b, 0xdf, 0x83, 0x23, 0x57, 0x6e, 0x28, 0x5c, 0xf8, 0x18, 0x68, 0xfe, 0xed, 0xae, 0xd7,
|
||||
0x76, 0xaa, 0xf4, 0x36, 0xef, 0xf7, 0xfe, 0xfd, 0xe6, 0xcd, 0x7b, 0x6f, 0x17, 0x0e, 0x97, 0x69,
|
||||
0xb8, 0xe2, 0x12, 0xfb, 0xcb, 0x34, 0x91, 0x09, 0x69, 0x85, 0xb1, 0xc4, 0x34, 0xe6, 0x11, 0xfd,
|
||||
0x1a, 0xda, 0xe3, 0x78, 0x8e, 0x6f, 0x26, 0x28, 0x39, 0x39, 0x87, 0x83, 0x41, 0x12, 0x65, 0x8b,
|
||||
0xf8, 0x2b, 0x7e, 0x85, 0x51, 0xe0, 0x9d, 0x7b, 0x17, 0x6d, 0x56, 0x86, 0x94, 0xc5, 0x65, 0xb8,
|
||||
0xc0, 0x6f, 0x33, 0x1e, 0xcb, 0x6c, 0x11, 0xd4, 0x8c, 0x45, 0x09, 0xa2, 0x7f, 0x78, 0xd0, 0x7e,
|
||||
0x91, 0xf2, 0x05, 0xea, 0x88, 0xa7, 0xd0, 0x62, 0xc9, 0x4d, 0x39, 0x5c, 0x2e, 0x93, 0x8f, 0xe0,
|
||||
0x68, 0x1c, 0xaf, 0x30, 0x15, 0x38, 0x8a, 0xf9, 0x55, 0x84, 0x73, 0x1d, 0xae, 0xc5, 0x2a, 0x28,
|
||||
0x39, 0x83, 0xf6, 0x80, 0xcf, 0x7e, 0xc4, 0xcb, 0xf5, 0x12, 0x83, 0xba, 0x0e, 0x52, 0x00, 0xb9,
|
||||
0x76, 0x1a, 0xfe, 0x8c, 0x81, 0x7f, 0xee, 0x5d, 0x1c, 0xb2, 0x02, 0xa8, 0xf2, 0x6d, 0x6c, 0xf3,
|
||||
0xa5, 0x70, 0x34, 0x5e, 0x2c, 0x93, 0x54, 0x32, 0x14, 0xcb, 0x24, 0x16, 0x48, 0x3a, 0x50, 0x1f,
|
||||
0xa5, 0xa9, 0xa5, 0xab, 0x8e, 0xf4, 0x17, 0xe8, 0x3c, 0x8f, 0x92, 0xd9, 0xf5, 0x90, 0x4b, 0xce,
|
||||
0xf0, 0xa7, 0x0c, 0x85, 0x24, 0x27, 0xd0, 0xd0, 0x85, 0xb3, 0x76, 0x46, 0x50, 0xa8, 0xbe, 0xbc,
|
||||
0xad, 0x8c, 0x11, 0x14, 0xaa, 0xfd, 0x35, 0x7b, 0x9f, 0x19, 0x41, 0xa1, 0xd3, 0x28, 0x9c, 0x19,
|
||||
0xd6, 0x3e, 0x33, 0x02, 0x21, 0xe0, 0xbf, 0x0e, 0xf1, 0xc6, 0x52, 0xd5, 0x67, 0x3a, 0x86, 0x87,
|
||||
0xa5, 0xfc, 0x96, 0xe6, 0x87, 0xd0, 0x64, 0xc9, 0xcd, 0x78, 0x28, 0x02, 0xef, 0xbc, 0x7e, 0xe1,
|
||||
0x33, 0x2b, 0xe9, 0x82, 0xe8, 0x17, 0x53, 0xaa, 0x9a, 0x56, 0x15, 0x00, 0x7d, 0x04, 0x0d, 0x5d,
|
||||
0x1d, 0x75, 0xcb, 0xc2, 0x57, 0x1d, 0xe9, 0x6f, 0x1e, 0x3c, 0x9c, 0xf0, 0x37, 0x9a, 0x86, 0xc8,
|
||||
0xd3, 0xbc, 0x84, 0x76, 0x0e, 0x6a, 0xeb, 0x83, 0x27, 0xbd, 0xbe, 0x6b, 0x9f, 0xfe, 0x96, 0x7d,
|
||||
0x81, 0x8c, 0x62, 0x99, 0xae, 0x59, 0xe1, 0x7c, 0xfa, 0x19, 0x1c, 0x6d, 0x2a, 0x15, 0x87, 0x6b,
|
||||
0x5c, 0xbb, 0x4a, 0x5f, 0xe3, 0x5a, 0xd5, 0x64, 0xc5, 0xa3, 0xcc, 0xd4, 0xcf, 0x67, 0x46, 0x78,
|
||||
0x5a, 0xfb, 0xd4, 0xa3, 0xdf, 0x01, 0x19, 0xa4, 0xc8, 0x25, 0xea, 0x00, 0x13, 0x14, 0x82, 0xff,
|
||||
0x80, 0xfb, 0x5f, 0xc1, 0x54, 0xb6, 0x56, 0xae, 0xec, 0x19, 0xb4, 0xc7, 0xc2, 0xf6, 0x96, 0x7e,
|
||||
0x89, 0x16, 0x2b, 0x00, 0xda, 0x03, 0x32, 0xc4, 0x08, 0x25, 0xda, 0x71, 0xb8, 0x23, 0x3e, 0x9d,
|
||||
0x3a, 0x2e, 0x6f, 0xb7, 0x25, 0x8f, 0xc1, 0x57, 0x93, 0xa0, 0xa9, 0x1c, 0x3c, 0x79, 0xbf, 0x28,
|
||||
0x5d, 0x3e, 0x76, 0x4c, 0x1b, 0xd0, 0xd0, 0x05, 0xb5, 0xd3, 0xf3, 0x96, 0x0b, 0xee, 0x68, 0x33,
|
||||
0x97, 0xaa, 0x5e, 0x4d, 0x95, 0xcf, 0xa3, 0x4d, 0xf5, 0xb9, 0xbb, 0xeb, 0xbb, 0xa6, 0xa2, 0x43,
|
||||
0x8b, 0xaa, 0x76, 0x7d, 0xa5, 0xb4, 0xc6, 0x47, 0x9f, 0xf7, 0x5f, 0xb9, 0xca, 0xe3, 0x3f, 0xcf,
|
||||
0xa6, 0xbc, 0x5f, 0x98, 0x4a, 0xe5, 0xd4, 0x92, 0x71, 0x8d, 0x65, 0x27, 0x2c, 0x97, 0xc9, 0x63,
|
||||
0x68, 0xea, 0xac, 0x22, 0xf0, 0x75, 0xef, 0x1e, 0x57, 0xd8, 0x30, 0xab, 0x56, 0xe3, 0x64, 0x9b,
|
||||
0xbc, 0x61, 0xc6, 0xc9, 0x48, 0x64, 0x04, 0x9d, 0x71, 0xbc, 0xcc, 0xe4, 0x10, 0xbf, 0x0f, 0xe3,
|
||||
0x50, 0x86, 0x49, 0x2c, 0x82, 0xa6, 0x0e, 0xf5, 0xa8, 0xcc, 0x68, 0xc3, 0x82, 0x6d, 0xb9, 0xd0,
|
||||
0xdf, 0x3d, 0x38, 0xae, 0x80, 0x7b, 0x2e, 0xed, 0xf8, 0xd6, 0xee, 0xe6, 0x7b, 0x09, 0x1f, 0x54,
|
||||
0xe2, 0xbd, 0x08, 0x31, 0x9a, 0x8b, 0xa0, 0xae, 0xfd, 0xba, 0x7b, 0xc9, 0x69, 0x33, 0xb6, 0xdb,
|
||||
0x99, 0xae, 0xe0, 0x64, 0x97, 0x62, 0x27, 0xd5, 0x2e, 0xc0, 0x37, 0x69, 0xb8, 0xe0, 0xe9, 0xfa,
|
||||
0x4b, 0x5c, 0xdb, 0xdd, 0x5d, 0x42, 0x48, 0x0f, 0x1e, 0x7c, 0x31, 0x33, 0x05, 0x33, 0x9c, 0x3a,
|
||||
0x05, 0x27, 0xa3, 0x60, 0xce, 0x80, 0xfe, 0xed, 0x41, 0xd3, 0x9c, 0x8b, 0x86, 0xf3, 0xca, 0xbd,
|
||||
0xdd, 0x83, 0xce, 0x6b, 0xb5, 0x0b, 0x86, 0x28, 0x64, 0x18, 0x73, 0x65, 0x69, 0x3b, 0x72, 0x0b,
|
||||
0x27, 0x4f, 0xa1, 0xa5, 0xb1, 0x09, 0x5f, 0x6e, 0x57, 0xc3, 0x64, 0xe9, 0x3b, 0x03, 0xb3, 0xa5,
|
||||
0x72, 0x7b, 0x95, 0x5d, 0xef, 0x51, 0xb7, 0x94, 0xb5, 0x70, 0xfa, 0x0c, 0x0e, 0x37, 0x1c, 0xee,
|
||||
0xb9, 0xb9, 0xce, 0xdc, 0xb6, 0xd8, 0xa8, 0xec, 0xdd, 0x73, 0x77, 0xb1, 0xd5, 0x2f, 0xf6, 0xbe,
|
||||
0x55, 0x98, 0x72, 0x80, 0x57, 0xc9, 0x1c, 0xa7, 0x92, 0xcb, 0x4c, 0xa8, 0x97, 0x7a, 0x99, 0x08,
|
||||
0xe9, 0x5e, 0x4a, 0x9d, 0xf5, 0x3e, 0x94, 0x5c, 0xe6, 0x33, 0xac, 0x05, 0xf2, 0x31, 0x3c, 0xd0,
|
||||
0xa9, 0xd0, 0xbd, 0xcf, 0x71, 0x65, 0xc4, 0x98, 0xd3, 0xd3, 0x67, 0x70, 0x38, 0x88, 0x32, 0x21,
|
||||
0x31, 0xb5, 0x59, 0x7a, 0xd0, 0x50, 0x39, 0xdd, 0x17, 0xe1, 0xa4, 0xf0, 0x2c, 0xa8, 0x30, 0x63,
|
||||
0xf2, 0xbc, 0xf3, 0xe7, 0x6d, 0xd7, 0xfb, 0xeb, 0xb6, 0xeb, 0xfd, 0x73, 0xdb, 0xf5, 0x7e, 0xfd,
|
||||
0xb7, 0xfb, 0xde, 0x55, 0x53, 0xff, 0x85, 0x7c, 0xf2, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe2,
|
||||
0x37, 0x53, 0x60, 0x96, 0x08, 0x00, 0x00,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ message InputDefinition {
|
|||
message InputDefinitionField {
|
||||
string Name = 1;
|
||||
bool PrimaryKey = 2;
|
||||
Action Meta = 3;
|
||||
repeated Action Actions = 3;
|
||||
}
|
||||
|
||||
message Action {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue