fix more infinite recursion when registering models
This commit is contained in:
parent
e6a83d12e3
commit
cd72703068
32
registry.go
32
registry.go
@ -111,7 +111,7 @@ func makeRef(idx int, modelName string, fieldName string, ht reflect.Type) Refer
|
|||||||
panic("model name was empty")
|
panic("model name was empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseTags(t reflect.Type, v reflect.Value, lastParsed string) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) {
|
func parseTags(t reflect.Type, v reflect.Value, lastParsed string, eqCount int) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) {
|
||||||
coll := ""
|
coll := ""
|
||||||
refs := make(map[string]Reference)
|
refs := make(map[string]Reference)
|
||||||
idcs := make(map[string][]InternalIndex)
|
idcs := make(map[string][]InternalIndex)
|
||||||
@ -130,9 +130,15 @@ func parseTags(t reflect.Type, v reflect.Value, lastParsed string) (map[string][
|
|||||||
switch ft.Kind() {
|
switch ft.Kind() {
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
ft = ft.Elem()
|
ft = ft.Elem()
|
||||||
if _, ok := tags.Get("ref"); ok == nil && lastParsed != ft.String() {
|
count := eqCount
|
||||||
|
if lastParsed != ft.String() {
|
||||||
|
count = 0
|
||||||
|
} else {
|
||||||
|
count = count + 1
|
||||||
|
}
|
||||||
|
if /*_, ok := tags.Get("ref"); ok != nil && */ count < 3 {
|
||||||
if ft.Kind() == reflect.Struct {
|
if ft.Kind() == reflect.Struct {
|
||||||
ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem(), ft.String())
|
ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem(), ft.String(), count)
|
||||||
for k, vv := range ii2 {
|
for k, vv := range ii2 {
|
||||||
idcs[sft.Name+"."+k] = vv
|
idcs[sft.Name+"."+k] = vv
|
||||||
}
|
}
|
||||||
@ -285,7 +291,7 @@ func (r TModelRegistry) Model(mdl ...any) {
|
|||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
panic("A model must embed the Document struct!")
|
panic("A model must embed the Document struct!")
|
||||||
}
|
}
|
||||||
inds, refs, gfs, coll := parseTags(t, v, "")
|
inds, refs, gfs, coll := parseTags(t, v, "", 0)
|
||||||
if coll == "" {
|
if coll == "" {
|
||||||
panic(fmt.Sprintf("a Document needs to be given a collection name! (passed type: %s)", n))
|
panic(fmt.Sprintf("a Document needs to be given a collection name! (passed type: %s)", n))
|
||||||
}
|
}
|
||||||
@ -342,7 +348,23 @@ func innerWatch(coll *mongo.Collection) {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var uid = data["documentKey"].(bson.M)["_id"]
|
var uid any
|
||||||
|
|
||||||
|
docKey := data["documentKey"]
|
||||||
|
|
||||||
|
switch docKey.(type) {
|
||||||
|
case bson.M:
|
||||||
|
uid = docKey.(bson.M)["_id"]
|
||||||
|
case bson.D:
|
||||||
|
for _, vv := range docKey.(bson.D) {
|
||||||
|
if vv.Key == "_id" {
|
||||||
|
uid = vv.Value
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//var uid = data["documentKey"].(bson.M)["_id"]
|
||||||
|
|
||||||
if data["operationType"] == "insert" {
|
if data["operationType"] == "insert" {
|
||||||
counterColl := DB.Collection(COUNTER_COL)
|
counterColl := DB.Collection(COUNTER_COL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user