private void Init() { _start = 0; _end = 0; // for instance, only manage index for one field query using 'equal' if (_classInfo.HasIndex() && _query.HasCriteria() && ((IInternalConstraint)_query.GetCriteria()).CanUseIndex()) { var fields = _query.GetAllInvolvedFields(); if (fields.IsEmpty()) { _useIndex = false; } else { var fieldIds = GetAllInvolvedFieldIds(fields); _classInfoIndex = _classInfo.GetIndexForAttributeIds(fieldIds); if (_classInfoIndex != null) { _useIndex = true; } } } // Keep the detail _details = GetDetails(); }
/// <summary> /// Take the fields of the index and take value from the query /// </summary> /// <param name="index"> The index </param> /// <returns> The key of the index </returns> protected virtual IOdbComparable ComputeIndexKey(ClassInfoIndex index) { var attributesNames = ClassInfo.GetAttributeNames(index.AttributeIds); var constraint = Query.GetCriteria(); var values = ((IInternalConstraint)constraint).GetValues(); return(IndexTool.BuildIndexKey(index.Name, values, attributesNames)); }