示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        private string Process(RequestScope request, object parameterObject)
        {
            SqlTagContext ctx           = new SqlTagContext();
            IList         localChildren = _children;

            ProcessBodyChildren(request, ctx, parameterObject, localChildren);

            // Builds a 'dynamic' ParameterMap
            ParameterMap map = new ParameterMap(request.DataExchangeFactory);

            map.Id = _statement.Id + "-InlineParameterMap";
            map.Initialize(_usePositionalParameters, request);
            map.Class = _statement.ParameterClass;

            // Adds 'dynamic' ParameterProperty
            IList parameters = ctx.GetParameterMappings();
            int   count      = parameters.Count;

            for (int i = 0; i < count; i++)
            {
                map.AddParameterProperty((ParameterProperty)parameters[i]);
            }
            request.ParameterMap = map;

            string dynSql = ctx.BodyText;

            // Processes $substitutions$ after DynamicSql
            if (SimpleDynamicSql.IsSimpleDynamicSql(dynSql))
            {
                dynSql = new SimpleDynamicSql(request, dynSql, _statement).GetSql(parameterObject);
            }
            return(dynSql);
        }
示例#2
0
        private string Process(RequestScope request, object parameterObject)
        {
            SqlTagContext ctx           = new SqlTagContext();
            IList         localChildren = this._children;

            this.ProcessBodyChildren(request, ctx, parameterObject, localChildren);
            ParameterMap map = new ParameterMap(request.DataExchangeFactory)
            {
                Id = this._statement.Id + "-InlineParameterMap"
            };

            map.Initialize(this._usePositionalParameters, request);
            map.Class = this._statement.ParameterClass;
            IList parameterMappings = ctx.GetParameterMappings();
            int   count             = parameterMappings.Count;

            for (int i = 0; i < count; i++)
            {
                map.AddParameterProperty((ParameterProperty)parameterMappings[i]);
            }
            request.ParameterMap = map;
            string bodyText = ctx.BodyText;

            if (SimpleDynamicSql.IsSimpleDynamicSql(bodyText))
            {
                bodyText = new SimpleDynamicSql(request, bodyText, this._statement).GetSql(parameterObject);
            }
            return(bodyText);
        }
示例#3
0
        /// <summary>
        /// 完成动态SQL语句中子语句的拼接 和 参数信息的取出
        /// </summary>
        /// <param name="request"></param>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        private string Process(RequestScope request, object parameterObject)
        {
            SqlTagContext     ctx           = new SqlTagContext();
            IList <ISqlChild> localChildren = children;

            ProcessBodyChildren(request, ctx, parameterObject, localChildren);

            #region 所有参数对应的属性类的集合信息放入到ParameterMap中
            // Builds a 'dynamic' ParameterMap
            ParameterMap parameterMap = new ParameterMap(
                statement.Id + "-InlineParameterMap",
                statement.ParameterClass.FullName,
                string.Empty,
                statement.ParameterClass,
                dataExchangeFactory.GetDataExchangeForClass(null),
                usePositionalParameters);

            // Adds 'dynamic' ParameterProperty
            IList parameters = ctx.GetParameterMappings();
            int   count      = parameters.Count;
            for (int i = 0; i < count; i++)
            {
                parameterMap.AddParameterProperty((ParameterProperty)parameters[i]);
            }
            request.ParameterMap = parameterMap;
            #endregion

            #region 完整的SQL语句
            string dynSql = ctx.BodyText;

            if (statement is Procedure)
            {
                dynSql = dynSql.Replace(MARK_TOKEN, string.Empty).Replace(COMMA_TOKEN, string.Empty).Trim();
            }

            // Processes $substitutions$ after DynamicSql
            if (SimpleDynamicSql.IsSimpleDynamicSql(dynSql))
            {
                dynSql = new SimpleDynamicSql(
                    dataExchangeFactory,
                    dbHelperParameterCache,
                    dynSql,
                    statement).GetSql(parameterObject);
            }
            #endregion

            return(dynSql);
        }
示例#4
0
        /// <summary>
        /// Builds the parameter properties.
        /// </summary>
        /// <param name="parameterMap">The parameter map.</param>
        /// <param name="parameterMapConfig">The parameter map config.</param>
        private void BuildParameterProperties(ParameterMap parameterMap, IConfiguration parameterMapConfig)
        {
            ConfigurationCollection parametersConfig = parameterMapConfig.Children.Find(ConfigConstants.ELEMENT_PARAMETER);

            for (int i = 0; i < parametersConfig.Count; i++)
            {
                IConfiguration    parameterConfig = parametersConfig[i];
                ParameterProperty property        = null;
                try
                {
                    property = ParameterPropertyDeSerializer.Deserialize(modelStore.DataExchangeFactory, parameterMap.Class,
                                                                         parameterConfig);
                }
                catch (Exception e)
                {
                    throw new DataMapperException("In ParameterMap (" + parameterMap.Id + ") can't build the parameter property: " + ConfigurationUtils.GetStringAttribute(parameterConfig.Attributes, ConfigConstants.ATTRIBUTE_PROPERTY) + ". Cause " + e.Message, e);
                }
                parameterMap.AddParameterProperty(property);
            }
        }