private HqlResult ConvertToHql(string expression, string tableConfigId = null, Action <JsonLogic2HqlConverterContext> prepareContextAction = null) { // Parse json into hierarchical structure var rule = JObject.Parse(expression); // Create an evaluator with default operators. var evaluator = new JsonLogic2HqlConverter(); var context = new JsonLogic2HqlConverterContext(); if (!string.IsNullOrWhiteSpace(tableConfigId)) { WithUnitOfWork(() => { var tableConfig = _tableConfigStore.GetTableConfiguration(tableConfigId); DataTableHelper.FillVariablesResolvers(tableConfig.Columns, context); DataTableHelper.FillContextMetadata(tableConfig.Columns, context); }); } prepareContextAction?.Invoke(context); // Apply the rule to the data. var result = evaluator.Convert(rule, context); return(new HqlResult { Hql = result, Context = context }); }
private void AppendFilterCriteria <TEntity>(FilterCriteria filterCriteria, string filter) { if (string.IsNullOrWhiteSpace(filter)) { return; } // JsonLogic is converted to HQL var jsonLogic = JObject.Parse(filter); // convert json logic to HQL var context = new JsonLogic2HqlConverterContext(); var properties = _metadataProvider.GetProperties(typeof(TEntity)); DataTableHelper.FillVariablesResolvers(properties, context); DataTableHelper.FillContextMetadata(properties, context); var hql = _jsonLogic2HqlConverter.Convert(jsonLogic, context); filterCriteria.FilterClauses.Add(hql); foreach (var parameter in context.FilterParameters) { filterCriteria.FilterParameters.Add(parameter.Key, parameter.Value); } }
/// <summary> /// Fill metadata of the <see cref="JsonLogic2HqlConverterContext"/> with specified columns /// </summary> public static void FillContextMetadata(List <DataTableColumn> columns, JsonLogic2HqlConverterContext context) { context.FieldsMetadata = columns.ToDictionary( c => c.Name, c => { return(new PropertyMetadata { Name = c.Name, Label = c.Caption, Description = c.Description, DataType = c.StandardDataType, } as IPropertyMetadata); } ); }
public void NestedColumnResolver_Convert() { var expression = _nestedColumnResolver_expression; // Parse json into hierarchical structure var rule = JObject.Parse(expression); // Create an evaluator with default operators. var evaluator = new JsonLogic2HqlConverter(); var context = new JsonLogic2HqlConverterContext(); context.VariablesResolvers.Add("User_UserName", "User.UserName"); // Apply the rule to the data. var hql = evaluator.Convert(rule, context); // fill parameters using context Assert.Equal(@"(ent.User.UserName = :par1)", hql); Assert.Single(context.FilterParameters); Assert.Equal("admin", context.FilterParameters.FirstOrDefault().Value); }
/// <summary> /// Fill variable resolvers of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/> /// </summary> public static void FillVariablesResolvers(List <PropertyMetadataDto> properties, JsonLogic2HqlConverterContext context) { context.VariablesResolvers = properties.ToDictionary(c => c.Path, c => c.Path); }
/// <summary> /// Fill variable resolvers of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/> /// </summary> public static void FillVariablesResolvers(List <DataTableColumn> columns, JsonLogic2HqlConverterContext context) { context.VariablesResolvers = columns.ToDictionary(c => c.Name, c => c.PropertyName); }
/// <summary> /// Fill metadata of the <see cref="JsonLogic2HqlConverterContext"/> with columns of the specified <paramref name="tableConfig"/> /// </summary> public static void FillContextMetadata(List <PropertyMetadataDto> properties, JsonLogic2HqlConverterContext context) { context.FieldsMetadata = properties.ToDictionary( c => c.Path, c => new PropertyMetadata { Name = c.Path, Label = c.Label, Description = c.Description, DataType = c.DataType } as IPropertyMetadata ); }