diff --git a/psql/schema.go b/psql/schema.go index 78a7b5d..fbf2965 100644 --- a/psql/schema.go +++ b/psql/schema.go @@ -303,10 +303,18 @@ func (s *DBSchema) SetRel(child, parent string, rel *DBRel) error { sp := strings.ToLower(flect.Singularize(parent)) pp := strings.ToLower(flect.Pluralize(parent)) - s.rm[sc][sp] = rel - s.rm[sc][pp] = rel - s.rm[pc][sp] = rel - s.rm[pc][pp] = rel + if _, ok := s.rm[sc][sp]; !ok { + s.rm[sc][sp] = rel + } + if _, ok := s.rm[sc][pp]; !ok { + s.rm[sc][pp] = rel + } + if _, ok := s.rm[pc][sp]; !ok { + s.rm[pc][sp] = rel + } + if _, ok := s.rm[pc][pp]; !ok { + s.rm[pc][pp] = rel + } return nil } diff --git a/psql/update.go b/psql/update.go index 686367b..284ceee 100644 --- a/psql/update.go +++ b/psql/update.go @@ -151,8 +151,6 @@ func nestedUpdateRelColumnsMap(item kvitem) map[string]struct{} { sk := make(map[string]struct{}, len(item.items)) for _, v := range item.items { - //fmt.Println(">>", v._ctype > 0 && v.relCP.Type == RelOneToMany, v.relCP.Right.Col) - if v._ctype > 0 && v.relCP.Type == RelOneToMany { sk[v.relCP.Right.Col] = struct{}{} } diff --git a/qcode/qcode.go b/qcode/qcode.go index 13c0581..0a840c0 100644 --- a/qcode/qcode.go +++ b/qcode/qcode.go @@ -253,7 +253,6 @@ func (com *Compiler) Compile(query []byte, role string) (*QCode, error) { func (com *Compiler) compileQuery(qc *QCode, op *Operation, role string) error { id := int32(0) - parentID := int32(-1) if len(op.Fields) == 0 { return errors.New("invalid graphql no query found") @@ -275,7 +274,8 @@ func (com *Compiler) compileQuery(qc *QCode, op *Operation, role string) error { for i := range op.Fields { if op.Fields[i].ParentID == -1 { - st.Push(op.Fields[i].ID) + val := op.Fields[i].ID | (-1 << 16) + st.Push(val) } } @@ -288,7 +288,10 @@ func (com *Compiler) compileQuery(qc *QCode, op *Operation, role string) error { return fmt.Errorf("selector limit reached (%d)", maxSelectors) } - fid := st.Pop() + val := st.Pop() + fid := val & 0xFFFF + parentID := (val >> 16) & 0xFFFF + field := &op.Fields[fid] if _, ok := com.bl[field.Name]; ok { @@ -357,8 +360,8 @@ func (com *Compiler) compileQuery(qc *QCode, op *Operation, role string) error { } if len(f.Children) != 0 { - parentID = s.ID - st.Push(f.ID) + val := f.ID | (s.ID << 16) + st.Push(val) continue }