示例#1
0
        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"));
        }
示例#2
0
        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"));
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }