private ITypeHandler ResolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Type parameterClassType, string propertyName, string propertyType, string dbType)
        {
            if (parameterClassType == null)
            {
                return(typeHandlerFactory.GetUnkownTypeHandler());
            }
            if (typeof(IDictionary).IsAssignableFrom(parameterClassType))
            {
                if ((propertyType == null) || (propertyType.Length == 0))
                {
                    return(typeHandlerFactory.GetUnkownTypeHandler());
                }
                try
                {
                    Type type = TypeUtils.ResolveType(propertyType);
                    return(typeHandlerFactory.GetTypeHandler(type, dbType));
                }
                catch (Exception exception)
                {
                    throw new ConfigurationException("Error. Could not set TypeHandler.  Cause: " + exception.Message, exception);
                }
            }
            if (typeHandlerFactory.GetTypeHandler(parameterClassType, dbType) != null)
            {
                return(typeHandlerFactory.GetTypeHandler(parameterClassType, dbType));
            }
            Type memberTypeForGetter = ObjectProbe.GetMemberTypeForGetter(parameterClassType, propertyName);

            return(typeHandlerFactory.GetTypeHandler(memberTypeForGetter, dbType));
        }
        /// <summary>
        /// Get a DataExchange object for the passed in Class
        /// </summary>
        /// <param name="clazz">The class to get a DataExchange object for</param>
        /// <returns>The IDataExchange object</returns>
        public IDataExchange GetDataExchangeForClass(Type clazz)
        {
            IDataExchange dataExchange = null;

            if (clazz == null)
            {
                dataExchange = _complexDataExchange;
            }
            else if (typeof(IList).IsAssignableFrom(clazz))
            {
                dataExchange = _listDataExchange;
            }
            else if (typeof(IDictionary).IsAssignableFrom(clazz))
            {
                dataExchange = _dictionaryDataExchange;
            }
            else if (_typeHandlerFactory.GetTypeHandler(clazz) != null)
            {
                dataExchange = _primitiveDataExchange;
            }
            else
            {
                dataExchange = new DotNetObjectDataExchange(clazz, this);
            }

            return(dataExchange);
        }
Example #3
0
        /// <summary>
        /// Get a DataExchange object for the passed in Class
        /// </summary>
        /// <param name="clazz">The class to get a DataExchange object for</param>
        /// <returns>The IDataExchange object</returns>
        public IDataExchange GetDataExchangeForClass(Type clazz)
        {
            IDataExchange dataExchange = null;

            if (clazz == null)
            {
                //为null取ComplexDataExchange对象类
                dataExchange = _complexDataExchange;
            }
            else if (typeof(IList).IsAssignableFrom(clazz))
            {
                //如果是IList类形式
                dataExchange = _listDataExchange;
            }
            else if (typeof(IDictionary).IsAssignableFrom(clazz))
            {
                //如果是IDictionary类型
                dataExchange = _dictionaryDataExchange;
            }
            else if (_typeHandlerFactory.GetTypeHandler(clazz) != null)
            {
                //去TypeHandlerFactory工厂中去取类对象
                dataExchange = _primitiveDataExchange;
            }
            else
            {
                //最终默认的数据交换类型
                dataExchange = new DotNetObjectDataExchange(clazz, this);
            }

            return(dataExchange);
        }
Example #4
0
        private void BuildDbParameters(AbstractRequestContext reqConetxt)
        {
            if (reqConetxt.CommandType == CommandType.StoredProcedure)
            {
                foreach (var sqlParameter in reqConetxt.Parameters.Values)
                {
                    var sourceParam = _dbProviderFactory.CreateParameter();
                    sourceParam.ParameterName = sqlParameter.Name;
                    sourceParam.Value         = sqlParameter.Value;

                    ITypeHandler typeHandler = (reqConetxt.ParameterMap?.GetParameter(sqlParameter.Name)?.Handler ?? sqlParameter.TypeHandler) ??
                                               (sqlParameter.ParameterType != null ? _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType) : null);
                    typeHandler?.SetParameter(sourceParam, sqlParameter.Value);

                    sqlParameter.SourceParameter = sourceParam;

                    InitSourceDbParameter(sourceParam, sqlParameter);
                }
            }
            else
            {
                reqConetxt.RealSql = _sqlParamAnalyzer.Replace(reqConetxt.RealSql, (paramName, nameWithPrefix) =>
                {
                    if (!reqConetxt.Parameters.TryGetValue(paramName, out var sqlParameter))
                    {
                        return(nameWithPrefix);
                    }

                    ITypeHandler typeHandler = (reqConetxt.ParameterMap?.GetParameter(paramName)?.Handler ?? sqlParameter.TypeHandler) ??
                                               _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType);

                    var sourceParam           = _dbProviderFactory.CreateParameter();
                    sourceParam.ParameterName = sqlParameter.Name;
                    typeHandler.SetParameter(sourceParam, sqlParameter.Value);
                    sqlParameter.SourceParameter = sourceParam;
                    InitSourceDbParameter(sourceParam, sqlParameter);
                    if (sqlParameter.Name != paramName)
                    {
                        return
                        ($"{reqConetxt.ExecutionContext.SmartSqlConfig.Database.DbProvider.ParameterPrefix}{sqlParameter.Name}");
                    }

                    return(nameWithPrefix);
                });
            }
        }
Example #5
0
        /// <summary>
        /// Resolve TypeHandler
        /// </summary>
        /// <param name="parameterClassType"></param>
        /// <param name="propertyName"></param>
        /// <param name="propertyType"></param>
        /// <param name="dbType"></param>
        /// <param name="typeHandlerFactory"></param>
        /// <returns></returns>
        private ITypeHandler ResolveTypeHandler(TypeHandlerFactory typeHandlerFactory,
                                                Type parameterClassType, string propertyName,
                                                string propertyType, string dbType)
        {
            ITypeHandler handler = null;

            if (parameterClassType == null)
            {
                handler = typeHandlerFactory.GetUnkownTypeHandler();
            }
            else if (typeof(IDictionary).IsAssignableFrom(parameterClassType))
            {
                if (propertyType == null || propertyType.Length == 0)
                {
                    handler = typeHandlerFactory.GetUnkownTypeHandler();
                }
                else
                {
                    try
                    {
                        Type typeClass = TypeUtils.ResolveType(propertyType);
                        handler = typeHandlerFactory.GetTypeHandler(typeClass, dbType);
                    }
                    catch (Exception e)
                    {
                        throw new ConfigurationException("Error. Could not set TypeHandler.  Cause: " + e.Message, e);
                    }
                }
            }
            else if (typeHandlerFactory.GetTypeHandler(parameterClassType, dbType) != null)
            {
                handler = typeHandlerFactory.GetTypeHandler(parameterClassType, dbType);
            }
            else
            {
                Type typeClass = ObjectProbe.GetMemberTypeForGetter(parameterClassType, propertyName);
                handler = typeHandlerFactory.GetTypeHandler(typeClass, dbType);
            }

            return(handler);
        }
Example #6
0
        private void BuildDbParameters(AbstractRequestContext reqConetxt)
        {
            var dbParameterNames = _sqlParamAnalyzer.Analyse(reqConetxt.RealSql);

            if (reqConetxt.CommandType == CommandType.StoredProcedure)
            {
                foreach (var sqlParameter in reqConetxt.Parameters.Values)
                {
                    var sourceParam = _dbProviderFactory.CreateParameter();
                    sourceParam.ParameterName    = sqlParameter.Name;
                    sourceParam.Value            = sqlParameter.Value;
                    sqlParameter.SourceParameter = sourceParam;
                    InitSourceDbParameter(sourceParam, sqlParameter);
                }
            }
            else
            {
                foreach (var paramName in dbParameterNames)
                {
                    var          parameter    = reqConetxt.ParameterMap?.GetParameter(paramName);
                    var          propertyName = paramName;
                    ITypeHandler typeHandler  = null;
                    if (parameter != null)
                    {
                        propertyName = parameter.Property;
                        typeHandler  = parameter.Handler;
                    }

                    if (!reqConetxt.Parameters.TryGetValue(propertyName, out var sqlParameter))
                    {
                        continue;
                    }

                    var sourceParam = _dbProviderFactory.CreateParameter();
                    sourceParam.ParameterName = paramName;

                    if (typeHandler == null)
                    {
                        typeHandler = sqlParameter.TypeHandler ??
                                      _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType);
                    }

                    typeHandler.SetParameter(sourceParam, sqlParameter.Value);
                    sqlParameter.SourceParameter = sourceParam;
                    InitSourceDbParameter(sourceParam, sqlParameter);
                }
            }
        }
 /// <summary>
 /// Initialize a the result property
 /// for AutoMapper
 /// </summary>
 /// <param name="setAccessor">An <see cref="ISetAccessor"/>.</param>
 /// <param name="typeHandlerFactory"></param>
 internal void Initialize(TypeHandlerFactory typeHandlerFactory, ISetAccessor setAccessor)
 {
     _setAccessor = setAccessor;
     _typeHandler = typeHandlerFactory.GetTypeHandler(setAccessor.MemberType);
 }
        public void GetEnumTypeHandler()
        {
            var typeHandler = _typeHandlerFactory.GetTypeHandler(_enumType);

            Assert.Equal(typeof(EnumTypeHandler <NumericalEnum>), typeHandler.GetType());
        }
Example #9
0
		/// <summary>
		/// Initialize a the result property
		/// for AutoMapper
		/// </summary>
        /// <param name="setAccessor">An <see cref="ISetAccessor"/>.</param>
		/// <param name="typeHandlerFactory"></param>
		internal void Initialize(TypeHandlerFactory typeHandlerFactory, ISetAccessor setAccessor )
		{
            _setAccessor = setAccessor;
            _typeHandler = typeHandlerFactory.GetTypeHandler(setAccessor.MemberType);
		}
Example #10
0
        public void TestEnumType()
        {
            var typeHandler = typeHandlerFactory.GetTypeHandler(enumType);

            Assert.NotNull(typeHandler);
        }