diff options
Diffstat (limited to 'generate.go')
| -rw-r--r-- | generate.go | 395 |
1 files changed, 0 insertions, 395 deletions
diff --git a/generate.go b/generate.go deleted file mode 100644 index f905d9d..0000000 --- a/generate.go +++ /dev/null @@ -1,395 +0,0 @@ -// Copyright 2017-2025 WIT.COM Inc. All rights reserved. -// Use of this source code is governed by the GPL 3.0 - -package main - -import ( - "fmt" - "os" - - "go.wit.com/log" -) - -// this file is named poorly. It has more than Sort() - -func (pb *Files) makeNewSortfile(pf *File) error { - wSort, _ := os.OpenFile(pf.Filebase+".sort.pb.go", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) - defer wSort.Close() - - headerSort(wSort, pf) - pf.syncLock(wSort) - if os.Getenv("PROTOBUF_REGRET") != "true" { - pf.addNewFunc(wSort) - } - - fmt.Fprintf(wSort, "// START SORT\n") - fmt.Fprintf(wSort, "\n") - - // add iterators for all the structs to be used - for _, msg := range pf.allMsg() { - funcdef := newScannerDefines(wSort, msg) - log.Printf("Adding %s\n", funcdef) - } - - // log.Printf("START COMPARE\n") - for _, msg := range pf.allMsg() { - PARENT := msg.Name - for _, v := range msg.Vars { - if !v.HasSort { - continue - } - if v.IsRepeated { - // can't work against slices - continue - } - if v.VarType != "string" { - continue - } - VARNAME := v.VarName - funcdef := msg.newSortType(wSort, PARENT, VARNAME) - log.Printf("Adding %s\n", funcdef) - } - } - - // add selectAll() functions for all the sort combinations that will be used - for _, s := range pf.ToSort { - // log.Printf("SORT: %-2d %20s %20s %20s %20s\n", i, s.MsgName, s.VarType, s.VarName, s.Lockname) - FRUIT := s.MsgName - APPLE := s.VarType - APPLES := s.VarName - LOCK := s.Lockname - - msg := pf.findMsg(s.MsgName) - if msg == nil { - return fmt.Errorf("failed to find struct %s", s.VarType) - } - - funcdef := msg.newScannerAll(wSort, FRUIT, APPLE, APPLES, LOCK) - log.Printf("Adding %s\n", funcdef) - } - - // log.Printf("START SELECT\n") - // make the sort iterators selectAll() - for _, s := range pf.ToSort { - PARENT := s.MsgName - CHILD := s.VarType - VARNAME := s.VarName - LOCK := s.Lockname - - msg := pf.findMsg(s.MsgName) - if msg == nil { - return fmt.Errorf("failed to find struct %s", s.VarType) - } - - funcdef := msg.addSelectAll(wSort, PARENT, CHILD, VARNAME, LOCK) - log.Printf("Adding %s\n", funcdef) - } - // log.Printf("END SELECT\n") - - // log.Printf("START SORT\n") - // make the SortBy() functions - for _, s := range pf.ToSort { - // var funcname string - PARENT := s.MsgName - VARNAME := s.VarName - - pmsg := pf.findMsg(s.MsgName) - if pmsg == nil { - return fmt.Errorf("failed to find struct %s", s.MsgName) - } - - msg := pf.findMsg(s.VarType) - if msg == nil { - return fmt.Errorf("failed to find struct %s", s.VarType) - } - - for _, v := range msg.Vars { - if v.IsRepeated { - // can't work against slices - continue - } - if v.HasSort { - // funcname := "func (x *" + FUNCTYPE + ") SortBy" + v.VarName + "(" + v.VarType + ") *[]iter" + s.VarType - // log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "fix", "", "", funcname) - // funcdef := "func (x *"+FRUIT+") SortBy"+COLOR+"() *"+APPLE+"Iterator" - - if v.VarType == "string" { - var sortby string - // func newSortBy(w io.Writer, STRUCT, ITER, SORTNAME, SORTBY, SELECT string) string { - if PARENT == VARNAME { - sortby = "SortBy" + v.VarName - sortname := "sort" + s.VarType + v.VarName - selectName := "selectAll" + VARNAME - funcdef := pmsg.newSortBy(wSort, PARENT, s.VarType, sortname, sortby, selectName, v.VarName) - log.Printf("Adding %s\n", funcdef) - - FRUITS := PARENT - FRUIT := s.VarType - SORTNAME := sortname - BRAND := v.VarName - funcdef = pmsg.addIterBy(wSort, FRUITS, FRUIT, BRAND, SORTNAME) - log.Printf("Adding %s\n", funcdef) - - funcname := "Sort" + v.VarName - STRUCT := PARENT - LOCK := s.Lockname - funcdef = pmsg.newSort(wSort, STRUCT, funcname, sortname, LOCK) - log.Printf("Adding %s\n", funcdef) - } else { - // deprecate this THIS DOES NOT MAKE SENSE TO DO - sortby = "Sort" + VARNAME + "By" + v.VarName - } - } else { - // funcdef := "func (x *" + FUNCTYPE + ") SortBy" + v.VarName + "(" + v.VarType + ") *[]iter" + s.VarType + " # can not do this yet" - } - } - } - } - - fmt.Fprintf(wSort, "\n") - fmt.Fprintf(wSort, "// END SORT\n") - - // make Len() and Append() - for _, msg := range pf.allMsg() { - PARENT := msg.Name - LOCK := msg.Lockname - - for _, v := range msg.Vars { - if v.IsRepeated { - VARNAME := v.VarName - // funcdef := "func (x *" + PARENT + ") Len" + VARNAME + "() int " + CHILD + " name:" + VARNAME - - if PARENT == VARNAME { - // special case - funcdef := msg.addLenFunc(wSort, PARENT, VARNAME, LOCK) // + " " + v.VarType + " name:" + v.VarName - funcdef += " # is special struct=varname" - log.Printf("Adding %s\n", funcdef) - } - if PARENT == VARNAME { - funcdef := msg.simpleAppend(wSort, PARENT, v.VarName, v.VarType) - log.Printf("Adding %s\n", funcdef) - - funcdef = msg.simpleClone(wSort, PARENT, v.VarName, v.VarType) - log.Printf("Adding %s\n", funcdef) - } - } - } - } - - // add All() - for _, s := range pf.ToSort { - PARENT := s.MsgName - CHILD := s.VarType - VARNAME := s.VarName - - // log.Printf("TO SORT IterAll() PARENT==VARNAME? PARENT=%s CHILD=%s VARNAME=%s (%v)\n", PARENT, CHILD, VARNAME, pf.ToSort) - pmsg := pf.findMsg(PARENT) - if pmsg == nil { - // log.Printf("FAILED TO ADD SORT pmsg=nil PARENT=%s CHILD=%s VARNAME=%s\n", PARENT, CHILD, VARNAME) - return fmt.Errorf("failed to find struct %s", s.MsgName) - } - - if PARENT == VARNAME { - funcdef := pmsg.addAllFunc(wSort, PARENT, CHILD, VARNAME) - log.Printf("Adding %s\n", funcdef) - - FRUITS := PARENT - FRUIT := CHILD - funcdef = pmsg.addIterAll(wSort, FRUITS, FRUIT) - log.Printf("Adding %s\n", funcdef) - } else { - // log.Printf("FAILED TO ADD SORT IterAll() PARENT != VARNAME PARENT=%s CHILD=%s VARNAME=%s\n", PARENT, CHILD, VARNAME) - } - - /* - // todo: figure out how to do more All() functions correction - var FUNCTYPE string - if PARENT == VARNAME { - FUNCTYPE = PARENT - } else { - FUNCTYPE = VARNAME - } - - if s.VarType+"s" == s.VarName { - funcname = "func (x *" + FUNCTYPE + ") All() *[]iter" + s.VarType - } else { - funcname = "func (x *" + FUNCTYPE + ") all" + s.VarName + "() *[]iter" + s.VarType - } - log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname) - */ - } - - // add Delete() - for _, s := range pf.ToSort { - PARENT := s.MsgName - CHILD := s.VarType - VARNAME := s.VarName - - pmsg := pf.findMsg(s.MsgName) - if pmsg == nil { - return fmt.Errorf("failed to find struct %s", s.MsgName) - } - - if PARENT == VARNAME { - funcdef := pmsg.addDeleteFunc(wSort, PARENT, VARNAME, CHILD) - log.Printf("Adding %s\n", funcdef) - } - } - - // add Find() Delete() Insert() - for _, s := range pf.ToSort { - PARENT := s.MsgName - VARNAME := s.VarName - - if PARENT != VARNAME { - // this does not conform to the autogenpb standard format - continue - } - // special case because of the enforced .proto format // ONLY SUPPORT THIS - - pmsg := pf.findMsg(s.MsgName) - if pmsg == nil { - return fmt.Errorf("failed to find struct %s", s.MsgName) - } - - msg := pf.findMsg(s.VarType) - if msg == nil { - return fmt.Errorf("failed to find struct %s", s.VarType) - } - - // find() - for _, v := range msg.Vars { - if !(v.VarType == "string" || (v.VarType == "int64")) { - continue - } - if v.IsRepeated { - continue - } - if v.HasUnique { - // funcname = "func (x *" + PARENT + ") Find" + VARNAME + "By" + v.VarName + "(a " + v.VarType + ") *" + s.VarType + "(using" + v.VarName + ")" - // log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname) - var FUNCNAME string - if PARENT == VARNAME { - // special case because of the enforced .proto format - FUNCNAME = "FindBy" + v.VarName - funcdef := pmsg.generateFindBy(wSort, FUNCNAME, PARENT, s, v) - log.Printf("Adding %s\n", funcdef) - - FRUITS := PARENT - FRUIT := s.VarType - APPLE := v.VarName - COLOR := v.VarType - funcdef = pmsg.insertBy(wSort, FRUITS, FRUIT, APPLE, COLOR) - log.Printf("Adding %s\n", funcdef) - } - } else { - if v.VarType == "string" { - // probably dumb. move to a database if you need this - // funcname = "func (x *" + PARENT + ") Find" + VARNAME + "By" + v.VarName + "(a string) []*" + s.VarType + " ???" - // log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname) - } - } - } - - // delete() functions - for _, v := range msg.Vars { - if v.VarType != "string" { - continue - } - if v.IsRepeated { - continue - } - if !v.HasUnique { - continue - } - // funcname := "func (x *" + PARENT + ") Delete" + VARNAME + "By" + v.VarName + "(" + v.VarType + ") bool" - // log.Printf(" %-2s %20s %20s %20s %s %s\n", "", "", "", "", "", funcname) - FRUIT := PARENT - APPLES := VARNAME - APPLE := v.VarName - COLOR := v.VarType - var FUNCNAME string - if PARENT == VARNAME { - // special case because of the enforced .proto format // ONLY USE CASE THAT MAKES SENSE - FUNCNAME = "DeleteBy" + v.VarName - var funcdef string - if argv.Delete { - funcdef = pmsg.deleteByWithCopy(wSort, FRUIT, APPLES, APPLE, COLOR, FUNCNAME, v.VarName) - } else { - funcdef = pmsg.deleteBy(wSort, FRUIT, APPLES, APPLE, COLOR, FUNCNAME, v.VarName) - } - log.Printf("Adding %s\n", funcdef) - } else { - // deprecate these - FUNCNAME = "Delete" + VARNAME + "By" + v.VarName - } - } - - // AppendBy() functions. todo: make Insert() for unique - var ucount int - for _, v := range msg.Vars { - if v.VarType != "string" { - continue - } - if v.IsRepeated { - continue - } - if !v.HasUnique { - continue - } - ucount += 1 - var FUNCNAME string - if PARENT == VARNAME { - // special case because of the enforced .proto format // ONLY SUPPORT THIS - FUNCNAME = "AppendBy" + v.VarName - funcdef := pmsg.simpleAppendBy(wSort, PARENT, FUNCNAME, VARNAME, v.VarName, s.VarType) - log.Printf("Adding %s\n", funcdef) - - FUNCNAME = "CloneBy" + v.VarName - funcdef = pmsg.simpleCloneBy(wSort, PARENT, FUNCNAME, VARNAME, v.VarName, s.VarType) - log.Printf("Adding %s\n", funcdef) - } - } - - // TODO: do this next // x *Repos) InsertPath( string) *Repo // returns existing record or new record if path != exists - if ucount == 1 { - for _, v := range msg.Vars { - if !v.HasUnique { - continue - } - //funcname = "func (x *" + PARENT + ") Insert(a *" + v.VarType + ") (*" + CHILD + ", isNew bool) // todo" - //log.Printf("%20s %s\n", "", funcdef) - } - } - if ucount > 1 { - //funcname = "func (x *" + PARENT + ") Insert(a *" + CHILD + ") (*" + CHILD + ", isNew bool) // todo" - //log.Printf("%20s %s\n", "", funcdef) - } - } - return nil -} - -func (pf *File) findMsg(s string) *MsgName { - if pf.Bases.Name == s { - return pf.Bases - } - if pf.Base.Name == s { - return pf.Base - } - for _, msg := range pf.MsgNames { - if msg.Name == s { - return msg - } - } - return nil -} - -func (pf *File) allMsg() []*MsgName { - var all []*MsgName - all = append(all, pf.Bases) - all = append(all, pf.Base) - for _, msg := range pf.MsgNames { - all = append(all, msg) - } - return all -} |
