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); }
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); }
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); }
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); }
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) + ")"); } }
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)); } } }
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); }
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)); } } } }
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); }
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)); } } } } }
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)); } } }
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) + ")"); } }