private bool IsDeletingStations(WitsmlQueryParser parser) { var range = GetQueryIndexRange(parser); if (range.Start.HasValue || range.End.HasValue) { return(true); } var element = parser.Element(); return(element.Elements().Any(e => e.Name.LocalName == "trajectoryStation")); }
private bool IsDeletingGeologyIntervals(WitsmlQueryParser parser) { var range = GetQueryIndexRange(parser); if (range.Start.HasValue || range.End.HasValue) { return(true); } var element = parser.Element(); return(element.Elements().Any(e => e.Name.LocalName == "geologyInterval")); }
/// <summary> /// Executes this MongoDb query. /// </summary> /// <returns>The list of queried data object.</returns> public List <T> Execute() { Logger.DebugFormat("Executing query for {0}", _parser.ObjectType); var returnElements = _parser.ReturnElements(); var entities = new List <T>(); // Check if to project fields Context.IsProjection = OptionsIn.ReturnElements.IdOnly.Equals(returnElements) || OptionsIn.ReturnElements.Requested.Equals(returnElements) || OptionsIn.ReturnElements.DataOnly.Equals(returnElements) || OptionsIn.ReturnElements.StationLocationOnly.Equals(returnElements); if (Context.Fields == null) { Context.Fields = new List <string>(); } var element = _parser.Element(); // Navigate the root element and create filter and projection fields Navigate(element); // Build Mongo filter var filter = BuildFilter(); var results = _collection.Find(filter ?? "{}"); // Format response using MongoDb projection, i.e. selecting specified fields only if (OptionsIn.ReturnElements.All.Equals(returnElements) || OptionsIn.ReturnElements.HeaderOnly.Equals(returnElements)) { entities.AddRange(results.ToList()); } else if (Context.IsProjection) { var projection = BuildProjection(); if (projection != null) { results = results.Project <T>(projection); } entities.AddRange(results.ToList()); } Logger.DebugFormat("Executed query for {0}; Count: {1}", _parser.ObjectType, entities.Count); WitsmlOperationContext.Current.Warnings.AddRange(Context.Warnings); return(entities); }
/// <summary> /// Executes partial delete. /// </summary> /// <param name="entity">The entity.</param> /// <param name="uri">The URI.</param> /// <param name="updates">The updates.</param> public void PartialDelete(T entity, EtpUri uri, Dictionary <string, object> updates) { Logger.DebugFormat($"Partial deleting data object: {uri}"); _entityFilter = MongoDbUtility.GetEntityFilter <T>(uri, _idPropertyName); _entity = entity; Context.Update = Update(updates, uri.ObjectId); BuildPartialDelete(_parser.Element()); LogUpdateFilter(_entityFilter, Context.Update); _collection.UpdateOne(_entityFilter, Context.Update); // Remove recurring elements after all update because of the position being used in field path RemoveArrayElementsByDepth(); WitsmlOperationContext.Current.Warnings.AddRange(Context.Warnings); }