Exemplo n.º 1
0
        public ParameterTemplate AddParameter(string name, DbType dbType, object value)
        {
            name = _schemaProvider.NameParameter(name + _parameterSuffix);
            var parameterTemplate = new ParameterTemplate(name, dbType, 0);

            _parameters.Add(parameterTemplate, value);
            return(parameterTemplate);
        }
Exemplo n.º 2
0
        public ParameterTemplate AddParameter(object value, Column column)
        {
            string name = _schemaProvider.NameParameter("p" + Interlocked.Increment(ref _number) + _parameterSuffix);
            var    parameterTemplate = new ParameterTemplate(name, column);

            _parameters.Add(parameterTemplate, value);
            return(parameterTemplate);
        }
Exemplo n.º 3
0
        private static IDbDataParameter CreateParameter(IDbCommand command, ParameterTemplate parameterTemplate, object value, string suffix = "")
        {
            var parameter = command.CreateParameter();

            parameter.ParameterName = parameterTemplate.Name + suffix;
            parameter.DbType        = parameterTemplate.DbType;
            parameter.Value         = value;
            return(parameter);
        }
Exemplo n.º 4
0
        private IDbDataParameter CreateParameter(IDbCommand command, ParameterTemplate parameterTemplate, object value, string suffix = "")
        {
            var factory   = _createGetParameterFactoryFunc(command);
            var parameter = parameterTemplate.Column != null
                                ? factory.CreateParameter(parameterTemplate.Name + suffix,
                                                          parameterTemplate.Column)
                                : factory.CreateParameter(parameterTemplate.Name, parameterTemplate.DbType,
                                                          parameterTemplate.MaxLength);

            parameter.Value = FixObjectType(value);
            return(parameter);
        }
Exemplo n.º 5
0
 private static void RewriteSqlEqualityToInClause(IDbCommand command, ParameterTemplate parameterTemplate, StringBuilder builder)
 {
     if (command.CommandText.Contains("!= " + parameterTemplate.Name))
     {
         command.CommandText = command.CommandText.Replace("!= " + parameterTemplate.Name,
                                                           "NOT IN (" +
                                                           builder.ToString().Substring(1) +
                                                           ")");
     }
     else
     {
         command.CommandText = command.CommandText.Replace("= " + parameterTemplate.Name,
                                                           "IN (" +
                                                           builder.ToString().Substring(1) +
                                                           ")");
     }
 }
Exemplo n.º 6
0
        private static IEnumerable <IDbDataParameter> CreateParameterComplex(ParameterTemplate template, object value, IDbCommand command)
        {
            var range = value as IRange;

            if (range != null)
            {
                yield return(CreateSingleParameter(range.Start, command, template.Name + "_start", template.DbType));

                yield return(CreateSingleParameter(range.End, command, template.Name + "_end", template.DbType));

                SetBetweenInCommandText(command, template.Name);
            }
            else
            {
                var list = value as IEnumerable <object>;
                if (list != null)
                {
                    var builder = new StringBuilder();
                    var array   = list.ToArray();
                    for (int i = 0; i < array.Length; i++)
                    {
                        builder.AppendFormat(",{0}_{1}", template.Name, i);
                        yield return(CreateSingleParameter(array[i], command, template.Name + "_" + i, template.DbType));
                    }
                    if (command.CommandText.Contains("!= " + template.Name))
                    {
                        command.CommandText = command.CommandText.Replace("!= " + template.Name,
                                                                          "NOT IN (" + builder.ToString().Substring(1) + ")");
                    }
                    else
                    {
                        command.CommandText = command.CommandText.Replace("= " + template.Name,
                                                                          "IN (" + builder.ToString().Substring(1) + ")");
                    }
                }
                else
                {
                    yield return(CreateSingleParameter(value, command, template.Name, template.DbType));
                }
            }
        }
Exemplo n.º 7
0
        private IDbDataParameter CreateParameter(IDbCommand command, ParameterTemplate parameterTemplate, object value, string suffix = "")
        {
            var factory   = _createGetParameterFactoryFunc(command);
            var parameter = default(IDbDataParameter);

            if (parameterTemplate.Column != null)
            {
                parameter = factory.CreateParameter(parameterTemplate.Name + suffix,
                                                    parameterTemplate.Column);
            }
            else if (parameterTemplate.Type == ParameterType.NameOnly)
            {
                parameter = factory.CreateParameter(parameterTemplate.Name);
            }
            else
            {
                parameter = factory.CreateParameter(parameterTemplate.Name, parameterTemplate.DbType,
                                                    parameterTemplate.MaxLength);
            }
            parameter.Value = FixObjectType(value);
            return(parameter);
        }
Exemplo n.º 8
0
        private IEnumerable <IDbDataParameter> CreateParameters(IDbCommand command, ParameterTemplate parameterTemplate, object value)
        {
            if (value == null || TypeHelper.IsKnownType(value.GetType()) || parameterTemplate.DbType == DbType.Binary)
            {
                yield return(CreateParameter(command, parameterTemplate, value));
            }
            else
            {
                var range = value as IRange;
                if (range != null)
                {
                    yield return(CreateParameter(command, parameterTemplate, range.Start, "_start"));

                    yield return(CreateParameter(command, parameterTemplate, range.End, "_end"));

                    CommandBuilder.SetBetweenInCommandText(command, parameterTemplate.Name);
                }
                else
                {
                    var list = value as IEnumerable;
                    if (list != null)
                    {
                        var builder = new StringBuilder();
                        var array   = list.Cast <object>().ToArray();
                        for (int i = 0; i < array.Length; i++)
                        {
                            builder.AppendFormat(",{0}_{1}", parameterTemplate.Name, i);
                            yield return(CreateParameter(command, parameterTemplate, array[i], "_" + i));
                        }
                        RewriteSqlEqualityToInClause(command, parameterTemplate, builder);
                    }
                    else
                    {
                        yield return(CreateParameter(command, parameterTemplate, value));
                    }
                }
            }
        }
Exemplo n.º 9
0
        private static IDbDataParameter CreateSingleParameter(IDbParameterFactory parameterFactory, object value, ParameterTemplate template)
        {
            if (template.Column != null)
            {
                return(CreateSingleParameter(parameterFactory, value, template.Name, template.Column));
            }

            var parameter = default(IDbDataParameter);

            if (template.Type == ParameterType.NameOnly)
            {
                parameter = parameterFactory.CreateParameter(template.Name);
            }
            else
            {
                parameter = parameterFactory.CreateParameter(template.Name, template.DbType, template.MaxLength);
            }
            parameter.Value = CommandHelper.FixObjectType(value);
            return(parameter);
        }
Exemplo n.º 10
0
        private static IEnumerable <IDbDataParameter> CreateParameterComplex(IDbParameterFactory parameterFactory, ParameterTemplate template, object value, IDbCommand command)
        {
            if (template.Column != null && template.Column.IsBinary)
            {
                yield return(CreateSingleParameter(parameterFactory, value, template.Name, template.Column));
            }
            else
            {
                var str = value as string;
                if (str != null)
                {
                    yield return(CreateSingleParameter(parameterFactory, value, template.Name, template.Column));
                }
                else
                {
                    var range = value as IRange;
                    if (range != null)
                    {
                        yield return
                            (CreateSingleParameter(parameterFactory, range.Start, template.Name + "_start", template.Column));

                        yield return(CreateSingleParameter(parameterFactory, range.End, template.Name + "_end", template.Column));

                        SetBetweenInCommandText(command, template.Name);
                    }
                    else
                    {
                        var list = value as IEnumerable;
                        if (list != null)
                        {
                            var builder = new StringBuilder();
                            var array   = list.Cast <object>().ToArray();
                            for (int i = 0; i < array.Length; i++)
                            {
                                builder.AppendFormat(",{0}_{1}", template.Name, i);
                                yield return
                                    (CreateSingleParameter(parameterFactory, array[i], template.Name + "_" + i, template.Column));
                            }
                            if (command.CommandText.Contains("!= " + template.Name))
                            {
                                command.CommandText = command.CommandText.Replace("!= " + template.Name,
                                                                                  "NOT IN (" +
                                                                                  builder.ToString().Substring(1) + ")");
                            }
                            else
                            {
                                command.CommandText = command.CommandText.Replace("= " + template.Name,
                                                                                  "IN (" +
                                                                                  builder.ToString().Substring(1) +
                                                                                  ")");
                            }
                        }
                        else
                        {
                            yield return(CreateSingleParameter(parameterFactory, value, template));
                        }
                    }
                }
            }
        }
Exemplo n.º 11
0
        private static IEnumerable <IDbDataParameter> CreateParameters(IDbCommand command, ParameterTemplate parameterTemplate, object value)
        {
            var range = value as IRange;

            if (range != null)
            {
                yield return(CreateParameter(command, parameterTemplate, range.Start, "_start"));

                yield return(CreateParameter(command, parameterTemplate, range.End, "_end"));

                CommandBuilder.SetBetweenInCommandText(command, parameterTemplate.Name);
            }
            else
            {
                var list = value as IEnumerable;
                if (list != null)
                {
                    var builder = new StringBuilder();
                    var array   = list.Cast <object>().ToArray();
                    for (int i = 0; i < array.Length; i++)
                    {
                        builder.AppendFormat(",{0}_{1}", parameterTemplate.Name, i);
                        yield return(CreateParameter(command, parameterTemplate, array[i], "_" + i));
                    }
                    if (command.CommandText.Contains("!= " + parameterTemplate.Name))
                    {
                        command.CommandText = command.CommandText.Replace("!= " + parameterTemplate.Name,
                                                                          "NOT IN (" + builder.ToString().Substring(1) +
                                                                          ")");
                    }
                    else
                    {
                        command.CommandText = command.CommandText.Replace("= " + parameterTemplate.Name,
                                                                          "IN (" + builder.ToString().Substring(1) + ")");
                    }
                }
                else
                {
                    yield return(CreateParameter(command, parameterTemplate, value));
                }
            }
        }
Exemplo n.º 12
0
 private static void RewriteSqlEqualityToInClause(DatabaseSchema schema, IDbCommand command, ParameterTemplate parameterTemplate, StringBuilder builder)
 {
     if (command.CommandText.Contains("!= " + parameterTemplate.Name))
     {
         command.CommandText = command.CommandText.Replace("!= " + parameterTemplate.Name,
                                                           schema.Operators.NotIn + " (" +
                                                           builder.ToString().Substring(1) +
                                                           ")");
     }
     else
     {
         command.CommandText = command.CommandText.Replace("= " + parameterTemplate.Name,
                                                           schema.Operators.In + " (" +
                                                           builder.ToString().Substring(1) +
                                                           ")");
     }
 }