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