/// <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); } }
/// <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); } }
/// <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); }
/// <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); } }