//TODO: add locale,and format options public IDictionary <string, BaseAssociationUpdateResult> BuildAssociationOptions(AttributeHolder dataMap, ApplicationMetadata application, IAssociationPrefetcherRequest request) { var associationsToFetch = AssociationHelper.BuildAssociationsToPrefetch(request, application.Schema); if (associationsToFetch.IsNone) { return(new Dictionary <string, BaseAssociationUpdateResult>()); } IDictionary <string, BaseAssociationUpdateResult> associationOptionsDictionary = new ConcurrentDictionary <string, BaseAssociationUpdateResult>(); var before = LoggingUtil.StartMeasuring(Log, "starting association options fetching for application {0} schema {1}", application.Name, application.Schema.Name); var associations = application.Schema.Associations; var tasks = new List <Task>(); var ctx = ContextLookuper.LookupContext(); #region associations foreach (var applicationAssociation in associations) { if (!associationsToFetch.ShouldResolve(applicationAssociation.AssociationKey)) { Log.Debug("ignoring association fetching: {0}".Fmt(applicationAssociation.AssociationKey)); continue; } //only resolve the association options for non lazy associations or lazy loaded with value set. SearchRequestDto search; if (!applicationAssociation.IsLazyLoaded()) { search = new SearchRequestDto(); } else if (dataMap != null && dataMap.GetAttribute(applicationAssociation.Target) != null) { //if the field has a value, fetch only this single element, for showing eventual extra label fields... ==> lookup with a selected value search = new SearchRequestDto(); var toAttribute = applicationAssociation.EntityAssociation.PrimaryAttribute().To; var prefilledValue = dataMap.GetAttribute(applicationAssociation.Target).ToString(); search.AppendSearchEntry(toAttribute, prefilledValue); } else { //lazy association with no default value continue; } var association = applicationAssociation; tasks.Add(Task.Factory.NewThread(c => { //this will avoid that one thread impacts any other, for ex: changing metadataid of the query var perThreadContext = ctx.ShallowCopy(); Quartz.Util.LogicalThreadContext.SetData("context", perThreadContext); var associationOptions = _associationOptionResolver.ResolveOptions(application, dataMap, association, search); associationOptionsDictionary.Add(association.AssociationKey, new BaseAssociationUpdateResult(associationOptions)); }, ctx)); } #endregion #region optionfields foreach (var optionField in application.Schema.OptionFields) { if (!associationsToFetch.ShouldResolve(optionField.AssociationKey)) { Log.Debug("ignoring association fetching: {0}".Fmt(optionField.AssociationKey)); continue; } if (optionField.ProviderAttribute == null) { //if there´s no provider, there´s nothing to do --> static list continue; } var field = optionField; tasks.Add(Task.Factory.NewThread(c => { Quartz.Util.LogicalThreadContext.SetData("context", c); var associationOptions = _dynamicOptionFieldResolver.ResolveOptions(application, field, dataMap); if (associationOptionsDictionary.ContainsKey(field.AssociationKey)) { associationOptionsDictionary.Remove(field.AssociationKey); } associationOptionsDictionary.Add(field.AssociationKey, new BaseAssociationUpdateResult(associationOptions)); }, ctx)); } #endregion Task.WaitAll(tasks.ToArray()); if (Log.IsDebugEnabled) { var keys = String.Join(",", associationOptionsDictionary.Keys.Where(k => associationOptionsDictionary[k].AssociationData != null)); Log.Debug(LoggingUtil.BaseDurationMessageFormat(before, "Finished execution of options fetching. Resolved collections: {0}", keys)); } return(associationOptionsDictionary); }
protected IEnumerable <AttributeHolder> FetchNew(long rowstamp, string entityName, SearchRequestDto searchDto = null) { var entityMetadata = MetadataProvider.Entity(entityName); var result = EntityRepository.Get(entityMetadata, rowstamp, searchDto); return(result); }
public Task <PaginatedFullStudies> SearchAsync([FromQuery] SearchRequestDto searchRequest) { return(_searchFullStudiesUseCase.GetPaginatedFullStudiesAsync(searchRequest)); }
protected List <SearchParameterUtils> GetSearchParameterUtilsList(EntityMetadata entityMetadata, SearchRequestDto searchRequestDto) { var searchParameterUtilsList = new List <SearchParameterUtils>(); if (searchRequestDto.ValuesDictionary != null) { var entityAttributes = entityMetadata.Schema.Attributes; foreach (var param in searchRequestDto.ValuesDictionary) { foreach (var entityAttribute in entityAttributes) { if (param.Key.StartsWith(entityAttribute.Name)) { searchParameterUtilsList.Add(new SearchParameterUtils(param.Key, param.Value.Value, entityAttribute.Type)); } } } } return(searchParameterUtilsList); }
public BindedEntityQuery CountRows(EntityMetadata entityMetadata, SearchRequestDto searchDto) { return(TemplateQueryBuild(entityMetadata, new InternalQueryRequest { SearchDTO = searchDto }, QueryCacheKey.QueryMode.Count)); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var baseWhereClause = DoBuildBaseWhereClause(entityName, searchDto); // if (queryMode.Equals(QueryCacheKey.QueryMode.Detail)) { // return ApplySpecificDetailClauses(entityName, baseWhereClause); // } return(baseWhereClause); }
private IEnumerable <dynamic> Query(EntityMetadata entityMetadata, BindedEntityQuery query, SearchRequestDto searchDTO) { //TODO: hack to avoid garbage data and limit size of list queries. var paginationData = PaginationData.GetInstance(searchDTO, entityMetadata); var rows = GetDao(entityMetadata).FindByNativeQuery(query.Sql, query.Parameters, paginationData, searchDTO.QueryAlias); return(rows); }
public static string RowstampWhereCondition(EntityMetadata entityMetadata, long rowstamp, SearchRequestDto searchDto) { var extraRowstamps = entityMetadata.Schema.Attributes.Where(s => s.Name.StartsWith("rowstamp") && !s.Name.Equals("rowstamp")); var sb = new StringBuilder(entityMetadata.Name + ".rowstamp > " + rowstamp); foreach (var extraRowstamp in extraRowstamps) { sb.Append(" or ").Append(entityMetadata.Name).Append("." + extraRowstamp.Name + " > ").Append(rowstamp); } foreach (var association in entityMetadata.Associations) { if (searchDto == null || searchDto.ProjectionFields == null || HasProjection(searchDto.ProjectionFields, association)) { sb.Append(" or ").Append(association.Qualifier).Append(".rowstamp > ").Append(rowstamp); } } return(sb.ToString()); }
public static string BuildSelectAttributesClause(EntityMetadata entityMetadata, QueryCacheKey.QueryMode queryMode , SearchRequestDto dto = null) { var buffer = new StringBuilder(); if (queryMode == QueryCacheKey.QueryMode.Count) { return(CountClause); } buffer.AppendFormat("select "); if (entityMetadata.FetchLimit() != null && queryMode == QueryCacheKey.QueryMode.Sync) { buffer.Append(string.Format(" top({0}) ", entityMetadata.FetchLimit())); } var attributes = entityMetadata.Attributes(NoCollections) as IList <EntityAttribute> ?? entityMetadata.Attributes(NoCollections).ToList(); var hasProjection = dto != null && dto.ProjectionFields.Count > 0; if (hasProjection) { foreach (ProjectionField field in dto.ProjectionFields) { if (field.Name.StartsWith("#")) { if (field.Name.StartsWith("#null")) { //this way we can map null attributes, that can be used for unions //see changeunionschema of hapag´s metadata.xml buffer.AppendFormat("null" + SelectSeparator); } //this is an unmapped attribute continue; } var result = LocateAttribute(entityMetadata, attributes, field); if (!field.Name.Contains('.') && result == null) { //this field is not mapped continue; } string aliasAttribute; if (result != null && result.Item1.Query != null) { aliasAttribute = AliasAttribute(entityMetadata, field.Alias, result.Item1, result.Item2); } else { aliasAttribute = AliasAttribute(entityMetadata, field); } buffer.AppendFormat(aliasAttribute + SelectSeparator); } } else { for (var i = 0; i < attributes.Count; i++) { var entityAttribute = attributes[i]; if (entityAttribute.Name.StartsWith("#null")) { //this way we can map null attributes, that can be used for unions //see changeunionschema of hapag´s metadata.xml buffer.AppendFormat("null" + SelectSeparator); } else { var aliasAttribute = AliasAttribute(entityMetadata, entityAttribute); buffer.AppendFormat(aliasAttribute + SelectSeparator); } } } return(buffer.ToString().Substring(0, buffer.Length - SelectSeparator.Count()) + " "); }
//needed to avoid "Fields" nesting in collectionData public SearchEntityResult GetAsRawDictionary([NotNull] EntityMetadata entityMetadata, [NotNull] SearchRequestDto searchDto, Boolean fetchMaxRowstamp = false) { if (entityMetadata == null) { throw new ArgumentNullException("entityMetadata"); } if (searchDto == null) { throw new ArgumentNullException("searchDto"); } var query = new EntityQueryBuilder().AllRows(entityMetadata, searchDto); var rows = Query(entityMetadata, query, searchDto); var enumerable = rows as dynamic[] ?? rows.ToArray(); Log.DebugFormat("returning {0} rows", enumerable.Count()); long?maxRowstamp = 0; IList <Dictionary <string, object> > list = new List <Dictionary <string, object> >(); foreach (var row in enumerable) { var dict = (IDictionary <string, object>)row; var item = new Dictionary <string, object>(); if (fetchMaxRowstamp) { if (dict.ContainsKey(RowStampUtil.RowstampColumnName)) { var rowstamp = RowStampUtil.Convert(dict[RowStampUtil.RowstampColumnName]); if (rowstamp > maxRowstamp) { maxRowstamp = rowstamp; } } } foreach (var column in dict) { item[FixKey(column.Key, entityMetadata)] = column.Value; } if (entityMetadata.Name == "relatedrecord") { item["hmachash"] = AuthUtils.HmacShaEncode(item["relatedreckey"].ToString()); } else if (entityMetadata.Name == "ticket" || entityMetadata.Name == "imac") { item["hmachash"] = AuthUtils.HmacShaEncode(item["ticketid"].ToString()); } else if (entityMetadata.IdFieldName != null && item.ContainsKey(entityMetadata.IdFieldName)) { //for compositions in general item["hmachash"] = AuthUtils.HmacShaEncode(item[entityMetadata.IdFieldName].ToString()); } list.Add(item); } return(new SearchEntityResult { MaxRowstampReturned = maxRowstamp == 0 ? null : maxRowstamp, ResultList = list, IdFieldName = entityMetadata.IdFieldName }); }
public IActionResult Search([FromBody] SearchRequestDto searchRequest) { var delay = searchRequest.Delay; return(Ok(_searchService.Search(searchRequest, delay))); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var entityMetadata = MetadataProvider.Entity(entityName); //double check return(entityMetadata.HasWhereClause ? entityMetadata.Schema.WhereClause : null); }
public CompositionPreFilterFunctionParameters(ApplicationSchemaDefinition appSchema, SearchRequestDto baseDto, AttributeHolder originalEntity, ApplicationCompositionCollectionSchema composition) : base(baseDto, composition, originalEntity) { _appSchema = appSchema; }
public IActionResult Index(SearchRequestDto searchRequestDto) // { var result = _searchService.Search(searchRequestDto); return(View(result.Data)); }
private IEnumerable <dynamic> Query(EntityMetadata entityMetadata, BindedEntityQuery query, long rowstamp, SearchRequestDto searchDto) { var sqlAux = query.Sql.Replace("1=1", RowStampUtil.RowstampWhereCondition(entityMetadata, rowstamp, searchDto)); var rows = GetDao(entityMetadata).FindByNativeQuery(sqlAux, query.Parameters, null, searchDto.QueryAlias); return(rows); }
public AssociationPreFilterFunctionParameters(ApplicationMetadata metadata, SearchRequestDto baseDto, ApplicationAssociationDefinition association, AttributeHolder originalEntity) : base(baseDto, association, originalEntity) { _metadata = metadata; }
public IReadOnlyList <AttributeHolder> Get([NotNull] EntityMetadata entityMetadata, long rowstamp, SearchRequestDto searchDto = null) { if (entityMetadata == null) { throw new ArgumentNullException("entityMetadata"); } if (searchDto == null) { searchDto = new SearchRequestDto(); } var query = new EntityQueryBuilder().AllRows(entityMetadata, searchDto); if (searchDto.QueryGeneratorService != null && entityMetadata is SlicedEntityMetadata) { var sliced = (SlicedEntityMetadata)entityMetadata; var customQuery = GenericSwMethodInvoker.Invoke <string>(sliced.AppSchema, searchDto.QueryGeneratorService, entityMetadata, searchDto); if (customQuery != null) { query.Sql = customQuery; } } var rows = Query(entityMetadata, query, rowstamp, searchDto); return(rows.Cast <IEnumerable <KeyValuePair <string, object> > >() .Select(r => BuildDataMap(entityMetadata, r)) .ToList()); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { if (_rowstamps.CurrentMode() == Rowstamps.RowstampMode.None) { return(null); } IDictionary <string, object> parameters = _rowstamps.GetParameters(); string sql = null; switch (_rowstamps.CurrentMode()) { case Rowstamps.RowstampMode.Both: sql = Both; break; case Rowstamps.RowstampMode.Lower: sql = Lower; break; case Rowstamps.RowstampMode.Upper: sql = Upper; break; } return(sql); }
/// <summary> /// Returns list of scale answer sets matches to search criteria. /// </summary> /// <param name="searchRequest"></param> /// <param name="token"></param> /// <returns></returns> public async Task <IList <ScaleAnswerSetResponseDto> > FindScaleAnswerSets(SearchRequestDto searchRequest, string token) { return(await this.healthLibraryDataProvider.FindScaleAnswerSets(searchRequest, token)); }
/// <summary> /// <see cref="ISearchService.Search(SearchRequestDto)"/> /// </summary> public object Search(SearchRequestDto searchRequest, bool delay) { return(_elasticSearchRepository.Search(searchRequest, delay)); }
/// <summary> /// Returns list of text media elements which matches to specified search criteria. /// </summary> /// <param name="searchRequest"></param> /// <param name="token"></param> /// <returns></returns> public async Task <IEnumerable <TextMediaElementResponseDto> > FindTextMediaElements( SearchRequestDto searchRequest, string token) { return(await this.healthLibraryDataProvider.FindTextMediaElements(searchRequest, token)); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { if (searchDto != null && searchDto.FilterFixedWhereClause != null) { return(searchDto.FilterFixedWhereClause); } return(null); }
/// <summary> /// Returns list of scale answer sets matches to search criteria. /// </summary> /// <param name="searchRequest"></param> /// <param name="token"></param> /// <returns></returns> public async Task <IList <QuestionElementResponseDto> > FindQuestionElements(SearchRequestDto searchRequest, string token) { return(await this.healthLibraryDataProvider.FindQuestionElements(searchRequest, token)); }
public string BuildWhereClause(string entityName, QueryCacheKey.QueryMode queryMode, SearchRequestDto searchDto = null) { var entity = MetadataProvider.Entity(entityName); if (!entity.Schema.Attributes.Any(a => a.Name.Equals("pluspcustomer"))) { return(null); } var property = MetadataProvider.GlobalProperty("multitenantprefix"); if (property == null) { return(null); } return(String.Format("{0}.pluspcustomer like '{1}'", entityName, property)); }
/// <summary> /// <see cref="ISearchService.Search(SearchRequestDto)"/> /// </summary> public object Search(SearchRequestDto searchRequest) { return(_elasticSearchRepository.Search(searchRequest)); }