in pkg/query/logical/measure/measure_plan_indexscan_local.go [53:132]
func (uis *unresolvedIndexScan) Analyze(s logical.Schema) (logical.Plan, error) {
projTags := make([]model.TagProjection, len(uis.projectionTags))
var projTagsRefs [][]*logical.TagRef
if len(uis.projectionTags) > 0 {
for i := range uis.projectionTags {
for _, tag := range uis.projectionTags[i] {
projTags[i].Family = tag.GetFamilyName()
projTags[i].Names = append(projTags[i].Names, tag.GetTagName())
}
}
var err error
projTagsRefs, err = s.CreateTagRef(uis.projectionTags...)
if err != nil {
return nil, err
}
}
var projField []string
var projFieldRefs []*logical.FieldRef
if len(uis.projectionFields) > 0 {
for i := range uis.projectionFields {
projField = append(projField, uis.projectionFields[i].Name)
}
var err error
projFieldRefs, err = s.CreateFieldRef(uis.projectionFields...)
if err != nil {
return nil, err
}
}
tr := timestamp.NewInclusiveTimeRange(uis.startTime, uis.endTime)
ms := s.(*schema)
if ms.measure.IndexMode {
query, err := inverted.BuildIndexModeQuery(uis.metadata.Name, uis.criteria, s)
if err != nil {
return nil, err
}
return &localIndexScan{
timeRange: tr,
schema: s,
projectionTags: projTags,
projectionFields: projField,
projectionTagsRefs: projTagsRefs,
projectionFieldsRefs: projFieldRefs,
metadata: uis.metadata,
query: query,
groupByEntity: uis.groupByEntity,
uis: uis,
l: logger.GetLogger("query", "measure", uis.metadata.Group, uis.metadata.Name, "local-index"),
}, nil
}
entityList := s.EntityList()
entityMap := make(map[string]int)
entity := make([]*modelv1.TagValue, len(entityList))
for idx, e := range entityList {
entityMap[e] = idx
// fill AnyEntry by default
entity[idx] = pbv1.AnyTagValue
}
query, entities, _, err := inverted.BuildQuery(uis.criteria, s, entityMap, entity)
if err != nil {
return nil, err
}
return &localIndexScan{
timeRange: tr,
schema: s,
projectionTags: projTags,
projectionFields: projField,
projectionTagsRefs: projTagsRefs,
projectionFieldsRefs: projFieldRefs,
metadata: uis.metadata,
query: query,
entities: entities,
groupByEntity: uis.groupByEntity,
uis: uis,
l: logger.GetLogger("query", "measure", uis.metadata.Group, uis.metadata.Name, "local-index"),
}, nil
}