public IndexData AddObject(IndexData indexData, Oid obj, string[] attributes) { StringBinaryTree BT = getStorageData(indexData); FieldInfo[] objFields = obj.GetType().GetFields(); foreach (String attribute in attributes) { if (objFields.Count(p => p.Name == attribute) != 1) { throw new WrongAttributeException(obj.GetType(), attribute, "Nie odnaleziono podanego atrybutu w wskazanym obiekcie"); } else if (objFields.Single(p => p.Name == attribute).GetValue(obj).GetType() != typeof(string)) { throw new WrongTypeToIndexException(objFields.Single(p => p.Name == attribute).GetType(), string.Format("Unnsupported type of attribiute {0}", attribute)); } } foreach (String attribute in attributes) { string attributeValue = objFields.Where(p => p.Name == attribute).Single().GetValue(obj).ToString(); BT.AddToBTvalue(obj, attribute, attributeValue); } return(BT); }
public Guid[] FindObjects(IndexData indexData, Type OIDClass, bool complexExtension, out int?readedObjects) { int ro; StringBinaryTree BT = getStorageData(indexData); List <Guid> ret = BT.GetObjectsFromBT(OIDClass, out ro); readedObjects = ro; if (complexExtension) { foreach (Type t in BT.GetObjectsTypesFromBT().Where(t => t != OIDClass)) { bool found = false; Type baseType = t.BaseType; while (baseType != null && !found) { if (baseType == OIDClass) { ret.AddRange(BT.GetObjectsFromBT(OIDClass, out ro)); readedObjects += ro; found = true; } baseType = baseType.BaseType; } } } return(ret.Distinct().ToArray()); }
public Guid[] FindObjects(IndexData indexData, Type OIDClass, bool complexExtension, string[] attributes, object[] values, CompareType[] compareTypes, out int?readedObjects) { if (compareTypes.Count() != attributes.Count() || attributes.Count() != values.Count()) { throw new ArgumentException( "Liczności tbalic z atrybutami, porównaniami oraz wartościami musza być identyczne!"); } readedObjects = 0; int ro; StringBinaryTree BT = getStorageData(indexData); List <Guid> ret = null; for (int i = 0; i < attributes.Count(); i++) { List <Guid> foundOIDs = BT.GetObjectsFromBT(OIDClass, attributes[i], values[i].ToString(), compareTypes[i], out ro); readedObjects += ro; if (complexExtension) { foreach (Type t in BT.GetObjectsTypesFromBT().Where(t => t != OIDClass)) { bool found = false; Type baseType = t.BaseType; while (baseType != null && !found) { if (baseType == OIDClass) { foundOIDs.AddRange(BT.GetObjectsFromBT(OIDClass, attributes[i], values[i].ToString(), compareTypes[i], out ro)); readedObjects += ro; found = true; } baseType = baseType.BaseType; } } } if (ret == null) { ret = foundOIDs.Distinct().ToList(); } else { ret = ret.Intersect(foundOIDs.Distinct()).ToList(); } } return(ret.ToArray()); }
public Guid[] GetIndexedObjects(IndexData indexData, int?packageSize, int skipItemsCount) { StringBinaryTree BT = getStorageData(indexData); return(BT.GetObjectsFromBT()); }