Esempio n. 1
0
        /// <summary>
        /// Gets a list of the property names to project during a query.
        /// </summary>
        /// <param name="parser">The WITSML parser.</param>
        /// <returns>A list of property names.</returns>
        protected override List <string> GetProjectionPropertyNames(WitsmlQueryParser parser)
        {
            if (OptionsIn.ReturnElements.IdOnly.Equals(parser.ReturnElements()))
            {
                if (typeof(IWellboreObject).IsAssignableFrom(typeof(T)))
                {
                    return new List <string> {
                               IdPropertyName, NamePropertyName, "UidWell", "NameWell", "UidWellbore", "NameWellbore"
                    }
                }
                ;

                if (typeof(IWellObject).IsAssignableFrom(typeof(T)))
                {
                    return new List <string> {
                               IdPropertyName, NamePropertyName, "UidWell", "NameWell"
                    }
                }
                ;

                return(new List <string> {
                    IdPropertyName, NamePropertyName
                });
            }

            return(null);
        }
        /// <summary>
        /// Queries the data store using the specified <see cref="WitsmlQueryParser" />.
        /// </summary>
        /// <param name="parser">The query parser.</param>
        /// <param name="objectMappingKey">The object mapping key.</param>
        /// <returns>The query results collection.</returns>
        /// <exception cref="WitsmlException"></exception>
        protected virtual List <T> QueryEntities(WitsmlQueryParser parser, string objectMappingKey)
        {
            if (OptionsIn.RequestObjectSelectionCapability.True.Equals(parser.RequestObjectSelectionCapability()))
            {
                Logger.DebugFormat("Requesting {0} query template.", objectMappingKey);
                var template = CreateQueryTemplate();
                return(template.AsList());
            }

            var returnElements = parser.ReturnElements();

            Logger.DebugFormat("Querying with return elements '{0}'", returnElements);

            try
            {
                Logger.DebugFormat("Querying {0} data object.", objectMappingKey);
                return(GetAll(parser));
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Error querying {0} data object: {1}", objectMappingKey, ex);

                if (ex is WitsmlException)
                {
                    throw;
                }

                throw new WitsmlException(ErrorCodes.ErrorReadingFromDataStore, ex);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Queries the data store with Mongo Bson filter and projection.
        /// </summary>
        /// <param name="parser">The parser.</param>
        /// <returns>The query results collection.</returns>
        /// <exception cref="WitsmlException"></exception>
        protected List <T> QueryEntities(WitsmlQueryParser parser)
        {
            try
            {
                if (OptionsIn.RequestObjectSelectionCapability.True.Equals(parser.RequestObjectSelectionCapability()))
                {
                    Logger.DebugFormat("Requesting {0} query template.", DbCollectionName);
                    var queryTemplate = CreateQueryTemplate();
                    return(queryTemplate.AsList());
                }

                var returnElements = parser.ReturnElements();
                Logger.DebugFormat("Querying with return elements '{0}'", returnElements);

                var fields  = GetProjectionPropertyNames(parser);
                var ignored = GetIgnoredElementNamesForQuery(parser);

                Logger.DebugFormat("Querying {0} MongoDb collection.", DbCollectionName);
                var query = new MongoDbQuery <T>(Container, GetCollection(), parser, fields, ignored);
                return(FilterRecurringElements(query));
            }
            catch (MongoException ex)
            {
                Logger.ErrorFormat("Error querying {0} MongoDb collection: {1}", DbCollectionName, ex);
                throw new WitsmlException(ErrorCodes.ErrorReadingFromDataStore, ex);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Executes this MongoDb query.
        /// </summary>
        /// <returns>The list of queried data object.</returns>
        public virtual List <T> Execute()
        {
            Logger.DebugFormat("Executing query for {0}", _parser.ObjectType);

            var returnElements = _parser.ReturnElements();

            Navigate(returnElements);

            // Build Mongo filter
            var filter   = BuildFilter();
            var query    = PrepareQuery(filter);
            var entities = new List <T>();

            // Format response using MongoDb projection, i.e. selecting specified fields only
            if (OptionsIn.ReturnElements.All.Equals(returnElements) ||
                OptionsIn.ReturnElements.HeaderOnly.Equals(returnElements) ||
                OptionsIn.ReturnElements.LatestChangeOnly.Equals(returnElements))
            {
                entities.AddRange(query.ToEnumerable());
            }
            else if (Context.IsProjection)
            {
                var projection = BuildProjection();

                if (projection != null)
                {
                    query = query.Project <T>(projection);
                }

                entities.AddRange(query.ToEnumerable());
            }

            Logger.DebugFormat("Executed query for {0}; Count: {1}", _parser.ObjectType, entities.Count);
            WitsmlOperationContext.Current.Warnings.AddRange(Context.Warnings);

            return(entities);
        }
Esempio n. 5
0
        /// <summary>
        /// Queries the data store using the specified <see cref="WitsmlQueryParser" />.
        /// </summary>
        /// <param name="parser">The query parser.</param>
        /// <param name="objectType">The object type.</param>
        /// <returns>The query results collection.</returns>
        /// <exception cref="WitsmlException"></exception>
        protected virtual List <T> QueryEntities(WitsmlQueryParser parser, string objectType)
        {
            //var mapping = GetMapping(objectType);

            if (OptionsIn.RequestObjectSelectionCapability.True.Equals(parser.RequestObjectSelectionCapability()))
            {
                Logger.DebugFormat("Requesting {0} query template.", objectType);
                var template = CreateQueryTemplate();
                return(template.AsList());
            }

            var returnElements = parser.ReturnElements();

            Logger.DebugFormat("Querying with return elements '{0}'", returnElements);

            try
            {
                //var fields = GetProjectionPropertyNames(parser);
                //var ignored = GetIgnoredElementNamesForQuery(parser);

                Logger.DebugFormat("Querying {0} data object.", objectType);

                //var query = new SqlQuery<T>(Container, GetDatabase(), mapping, parser, fields, ignored);
                //return query.Execute();

                return(GetAll(parser));
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("Error querying {0} data object: {1}", objectType, ex);

                if (ex is WitsmlException)
                {
                    throw;
                }
                throw new WitsmlException(ErrorCodes.ErrorReadingFromDataStore, ex);
            }
        }