internal static string BuildSql(IContext context, string oldSql, Segment segment)
        {
            var    data1 = ParamsUtil.GetParamData(context, segment.Args.ElementAt(0)).Data;
            var    data2 = ParamsUtil.GetParamData(context, segment.Args.ElementAt(1)).Data;
            string start = ValueGetter.Builder(data1, false);
            string size  = ValueGetter.Builder(data2, false);

            return(string.Concat(string.Intern("limit "), start, SqlKeyWorld.Split3, size));
        }
        public string GetRealText(string str, IContext context)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(string.Empty);
            }

            var paramInfos = ParamsUtil.GetParams(context, str);

            return(ParamsUtil.ApplyParams(str, paramInfos.Item1, paramInfos.Item2));
        }
        internal static string BuildSql(IContext context, string oldSql, Segment segment)
        {
            var    data     = ParamsUtil.GetParamData(context, segment.Args.ElementAt(0)).Data;
            var    isArray  = ReflectUtil.ReflectUtil.IsArray(data);
            string inParams = ValueGetter.Builder(data, isArray);

            if (!string.IsNullOrEmpty(inParams))
            {
                return(string.Concat(segment.Args.ElementAt(1), SqlKeyWorld.WhiteSpace, SqlKeyWorld.In, "(", inParams, ")"));
            }

            return(SegmentUtil.GetContent(oldSql, segment));
        }
Esempio n. 4
0
        public static Delegate GetDelegate(IContext context, string eval, object data)
        {
            var usedParams = ParamsUtil.GetParams(context, eval).Item1.ParamsToDictionary(true);
            var count      = usedParams.Count;

            if (count > 0)
            {
                for (var i = count - 1; i >= 0; i--)
                {
                    var item = usedParams.ElementAt(i);
                    if (!item.Key.Contains(SqlKeyWorld.Spot))
                    {
                        continue;
                    }

                    usedParams.Remove(item.Key);
                    var newKey = item.Key.Replace(SqlKeyWorld.Spot, SqlKeyWorld.Underline);
                    eval = eval.Replace(item.Key, newKey);
                    usedParams.Add(newKey, item.Value);
                }
            }

            Delegate @delegate;

            if (data != null)
            {
                var paramTypes = new Dictionary <string, Type>();
                paramTypes.Add(Data, data.GetType());
                @delegate = LambdaEngine.ExpressionBuilder.Build(eval, usedParams, paramTypes);
            }
            else
            {
                @delegate = LambdaEngine.ExpressionBuilder.Build(eval, usedParams);
            }

            return(@delegate);
        }
        public ParamInfo GetParamInfo(IContext context, string dataStr)
        {
            var key      = dataStr.Substring(1, dataStr.Length - 1);
            var keyArray = dataStr.Split('_');
            var realKey  = keyArray[1];
            var data     = SqlEnginerConfig.GetGlobalDatas(realKey);

            if (data == null)
            {
                throw new ArgumentNullException(string.Concat("不存在", realKey, "全局对象!"));
            }

            var    queryParams = context.Params;
            object outData;

            if (!queryParams.TryGetValue(key, out outData))
            {
                var convertData = ParamsUtil.CovnertParam(data, queryParams, realKey);
                if (convertData != data)
                {
                    queryParams.Add(key, convertData);
                    data = convertData;
                }
            }
            else
            {
                data = outData;
            }

            return(new ParamInfo
            {
                Type = ParamType.Global,
                Name = key,
                Data = data
            });
        }
        internal static string BuildSql(IContext context, string oldSql, Segment segment)
        {
            var data = ParamsUtil.GetParamData(context, segment.Args.ElementAt(0)).Data;
            IEnumerable <object> datas = data as IEnumerable <object>;

            if (datas == null)
            {
                datas = data.ToString().Split(SqlKeyWorld.Split3);
            }

            var content = SegmentUtil.GetContent(oldSql, segment);

            content = SegmentUtil.BuildContent(context, oldSql, content, segment);
            var paramStrs = content.Trim().Split(SqlKeyWorld.Split4);
            var lenData   = datas.Count();
            var template  = paramStrs[0];
            var split     = string.Empty;

            if (paramStrs.Length > 1)
            {
                split = paramStrs[1];
            }

            StringBuilder sb = new StringBuilder();

            for (var i = 0; i < lenData; i++)
            {
                sb.Append(string.Format(template, datas.ElementAt(i)));
                if (i != lenData - 1)
                {
                    sb.Append(split);
                }
            }

            return(sb.ToString());
        }