diff --git a/planner/build_scan_secondary.go b/planner/build_scan_secondary.go index feb71038b..1b2a34487 100644 --- a/planner/build_scan_secondary.go +++ b/planner/build_scan_secondary.go @@ -1027,6 +1027,11 @@ func (this *builder) eqJoinFilter(fl *base.Filter, alias string) (bool, expressi func (this *builder) getIndexFilters(entry *indexEntry, node *algebra.KeyspaceTerm, baseKeyspace *base.BaseKeyspace, id expression.Expression) (err error) { + // special case, if the span is an empty span, no need to proceed + if isSpecialSpan(entry.spans, plan.RANGE_EMPTY_SPAN) { + return nil + } + alias := node.Alias() useCBO := this.useCBO && this.keyspaceUseCBO(alias) advisorValidate := this.advisorValidate() diff --git a/planner/spans_term.go b/planner/spans_term.go index 53fbbc6f1..0f4da33cb 100644 --- a/planner/spans_term.go +++ b/planner/spans_term.go @@ -554,6 +554,19 @@ func setSpecialSpan(rg *plan.Range2) { } } +func isSpecialSpan(sspans SargSpans, flag uint32) bool { + if tspans, ok := sspans.(*TermSpans); ok { + spans := tspans.spans + if len(spans) == 1 { + rgs := spans[0].Ranges + if len(rgs) == 1 { + return (rgs[0].Flags & flag) != 0 + } + } + } + return false +} + func ConvertSpans2ToSpan(spans2 plan.Spans2, total int) (plan.Spans, bool) { exact := true spans := make(plan.Spans, 0, len(spans2))