public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable) { if (mySingleValueIndex.ContainsKey(myIComparable)) { yield return mySingleValueIndex[myIComparable]; } yield break; }
public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable) { if (mySingleValueIndex is IRangeIndex<IComparable, long>) { //use the range funtionality foreach (var aVertexID in ((ISingleValueRangeIndex<IComparable, long>)mySingleValueIndex).LowerThan(myIComparable, false)) { yield return aVertexID; } } else { //stupid, but works foreach (var aVertexID in mySingleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) < 0).Select(kv => kv.Value)) { yield return aVertexID; } } yield break; }
public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable) { var regexpression = new Regex((String)myIComparable); foreach (var aKV in mySingleValueIndex) { if (regexpression.IsMatch((String)aKV.Key)) { yield return aKV.Value; } } yield break; }
public void Load(TransactionToken myTransaction, SecurityToken mySecurity) { var maxID = Int64.MinValue; var vertices = _vertexStore.GetVerticesByTypeID(mySecurity, myTransaction, (long)BaseTypes.Index); foreach (var indexVertex in vertices) { var def = BaseGraphStorageManager.CreateIndexDefinition(indexVertex); var vertexType = def.VertexType; var indexID = def.ID; maxID = Math.Max(maxID, def.ID); var typeClass = def.IndexTypeName ?? GetBestMatchingIndexName(def.IsSingle, def.IsRange, def.IsVersioned); var parameter = (_indexPluginParameter.ContainsKey(typeClass)) ? _indexPluginParameter[typeClass].PluginParameter : null; var options = (indexVertex.GetAllUnstructuredProperties() == null) ? null : indexVertex.GetAllUnstructuredProperties().Select(_ => new KeyValuePair<String, object>(_.Item1, _.Item2)); parameter = FillOptions(parameter, options); var index = _pluginManager.GetAndInitializePlugin<IIndex<IComparable, Int64>>(typeClass, parameter, indexID); _indices.Add(indexID, index); if (def.Name == "IndexDotName") _ownIndex = index as ISingleValueIndex<IComparable, Int64>; } _idManager[(long)BaseTypes.Index].SetToMaxID(maxID); RebuildIndices(_vertexTypeManager.ExecuteManager.GetVertexType((long)BaseTypes.BaseType, myTransaction, mySecurity), myTransaction, mySecurity, true); RebuildIndices(_vertexTypeManager.ExecuteManager.GetVertexType((long)BaseTypes.VertexType, myTransaction, mySecurity), myTransaction, mySecurity, true); RebuildIndices(_vertexTypeManager.ExecuteManager.GetVertexType((long)BaseTypes.EdgeType, myTransaction, mySecurity), myTransaction, mySecurity, true); RebuildIndices(_vertexTypeManager.ExecuteManager.GetVertexType((long)BaseTypes.Index, myTransaction, mySecurity), myTransaction, mySecurity, true); }
public override IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, IComparable myIComparable) { return mySingleValueIndex.Where(kv => kv.Key.CompareTo(myIComparable) != 0).Select(kv => kv.Value); }
/// <summary> /// Extract values from a single value index /// </summary> /// <param name="mySingleValueIndex">The interesting index</param> /// <param name="myIComparable">The interesting key</param> /// <returns>An enumerable of vertexIDs</returns> public abstract IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, Int64> mySingleValueIndex, IComparable myIComparable);
/// <summary> /// Extract values from a single value index /// </summary> /// <param name="mySingleValueIndex">The interesting index</param> /// <param name="myConstant">The interesting range</param> /// <returns>An enumerable of vertexIDs</returns> private IEnumerable<long> GetSingleIndexValues(ISingleValueIndex<IComparable, long> mySingleValueIndex, RangeLiteralExpression myConstant) { if (mySingleValueIndex is IRangeIndex<IComparable, long>) { //use the range funtionality foreach (var aVertexID in ((ISingleValueRangeIndex<IComparable, long>)mySingleValueIndex) .InRange(myConstant.Lower, myConstant.Upper, myConstant.IncludeBorders, myConstant.IncludeBorders)) { yield return aVertexID; } } else { //stupid, but works if (myConstant.IncludeBorders) { foreach (var aVertexID in mySingleValueIndex .Where(kv => (kv.Key.CompareTo(myConstant.Lower) >= 0) && (kv.Key.CompareTo(myConstant.Upper) <= 0)) .Select(kv => kv.Value)) { yield return aVertexID; } } else { foreach (var aVertexID in mySingleValueIndex .Where(kv => (kv.Key.CompareTo(myConstant.Lower) > 0) && (kv.Key.CompareTo(myConstant.Upper) < 0)) .Select(kv => kv.Value)) { yield return aVertexID; } } } yield break; }