Пример #1
0
        public virtual IRelationalCommandBuilder AddParameter(IRelationalParameter parameter)
        {
            Check.NotNull(parameter, nameof(parameter));

            _parameters.Add(parameter);

            return(this);
        }
Пример #2
0
        public virtual void AddParameter(IRelationalParameter relationalParameter)
        {
            Check.NotNull(relationalParameter, nameof(relationalParameter));

            if (relationalParameter.InvariantName == null ||
                _parameters.All(p => p.InvariantName != relationalParameter.InvariantName))
            {
                _parameters.Add(relationalParameter);
            }
        }
Пример #3
0
        public static void CopyFrom(this DbParameter @this, IRelationalParameter from, object value, string newParameterName)
        {
            @this.ParameterName = newParameterName;

            if (from is TypeMappedRelationalParameter)
            {
                var relationalTypeMappingProperty = typeof(TypeMappedRelationalParameter).GetProperty("RelationalTypeMapping", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

                if (relationalTypeMappingProperty != null)
                {
                    var relationalTypeMapping = (RelationalTypeMapping)relationalTypeMappingProperty.GetValue(from);

                    if (relationalTypeMapping.DbType.HasValue)
                    {
                        @this.DbType = relationalTypeMapping.DbType.Value;
                    }
                }
            }

            @this.Value = value ?? DBNull.Value;
        }
Пример #4
0
            public IRelationalCommandBuilder AddParameter(IRelationalParameter parameter)
            {
                _parameters.Add(parameter);

                return(this);
            }
Пример #5
0
 public static void CopyFrom(this DbParameter @this, IRelationalParameter from, object value)
 {
     CopyFrom(@this, from, value, from.InvariantName);
 }
        public static void CopyFrom(this DbParameter @this, IRelationalParameter from, object value, string newParameterName)
        {
            @this.ParameterName = newParameterName;

            @this.Value = value ?? DBNull.Value;
        }
        public static void CopyFrom(this DbParameter @this, IRelationalParameter from, object value)
        {
            @this.ParameterName = from.InvariantName;

            @this.Value = value ?? DBNull.Value;
        }
Пример #8
0
 public void AddParameter(IRelationalParameter relationalParameter) => _parameters.Add(relationalParameter);
 public void AddParameter(IRelationalParameter relationalParameter)
 {
     throw new NotImplementedException();
 }
        protected virtual void GenerateFromSql(
            [NotNull] string sql,
            [NotNull] Expression arguments,
            [NotNull] IReadOnlyDictionary <string, object> parameters)
        {
            Check.NotEmpty(sql, nameof(sql));
            Check.NotNull(arguments, nameof(arguments));
            Check.NotNull(parameters, nameof(parameters));

            string[] substitutions = null;

            // ReSharper disable once SwitchStatementMissingSomeCases
            switch (arguments.NodeType)
            {
            case ExpressionType.Parameter:
            {
                var parameterExpression = (ParameterExpression)arguments;

                object parameterValue;
                if (parameters.TryGetValue(parameterExpression.Name, out parameterValue))
                {
                    var argumentValues       = (object[])parameterValue;
                    var relationalParameters = new IRelationalParameter[argumentValues.Length];

                    substitutions = new string[argumentValues.Length];

                    _relationalCommandBuilder.AddCompositeParameter(
                        parameterExpression.Name,
                        builder =>
                        {
                            for (var i = 0; i < argumentValues.Length; i++)
                            {
                                var parameterName = _parameterNameGenerator.GenerateNext();

                                substitutions[i] = SqlGenerator.GenerateParameterName(parameterName);

                                builder.AddParameter(
                                    parameterName,
                                    substitutions[i]);
                            }
                        });
                }

                break;
            }

            case ExpressionType.Constant:
            {
                var constantExpression = (ConstantExpression)arguments;
                var argumentValues     = (object[])constantExpression.Value;

                substitutions = new string[argumentValues.Length];

                for (var i = 0; i < argumentValues.Length; i++)
                {
                    substitutions[i] = SqlGenerator.GenerateLiteral(argumentValues[i], _isUnicode);
                }

                break;
            }

            case ExpressionType.NewArrayInit:
            {
                var newArrayExpression = (NewArrayExpression)arguments;

                substitutions = new string[newArrayExpression.Expressions.Count];

                for (var i = 0; i < newArrayExpression.Expressions.Count; i++)
                {
                    var expression = newArrayExpression.Expressions[i].RemoveConvert();

                    // ReSharper disable once SwitchStatementMissingSomeCases
                    switch (expression.NodeType)
                    {
                    case ExpressionType.Constant:
                    {
                        substitutions[i]
                            = SqlGenerator
                              .GenerateLiteral(((ConstantExpression)expression).Value, _isUnicode);

                        break;
                    }

                    case ExpressionType.Parameter:
                    {
                        var parameter = (ParameterExpression)expression;

                        if (_parametersValues.ContainsKey(parameter.Name))
                        {
                            substitutions[i] = _sqlGenerationHelper.GenerateParameterName(parameter.Name);

                            _relationalCommandBuilder.AddParameter(
                                parameter.Name,
                                substitutions[i]);
                        }

                        break;
                    }
                    }
                }

                break;
            }
            }

            if (substitutions != null)
            {
                // ReSharper disable once CoVariantArrayConversion
                sql = string.Format(sql, substitutions);
            }

            _relationalCommandBuilder.AppendLines(sql);
        }