func (q *Query) generateIndex(filters []*dbox.Filter) (output []int, e error) { var n int = 0 for { tdread, e := q.reader.Read() if e != nil && e != io.EOF { break } n++ tm := toolkit.M{} for i, v := range tdread { tolower := strings.ToLower(q.headerColumn[i].name) tm.Set(tolower, v) if q.headerColumn[i].dataType == "int" { tm[tolower] = cast.ToInt(v, cast.RoundingAuto) } else if q.headerColumn[i].dataType == "float" { tm[tolower] = cast.ToF64(v, (len(v) - (strings.IndexAny(v, "."))), cast.RoundingAuto) } } match := dbox.MatchM(tm, filters) if (len(filters) == 0 || match) && len(tm) > 0 { output = append(output, n) } if e == io.EOF { break } } e = q.resetReader() return }
func (w *QueryCondition) getCondition(dataCheck toolkit.M) bool { resBool := true if len(w.Find) > 0 { resBool = dbox.MatchM(dataCheck, w.Find) } return resBool }