/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected override void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { // assemble the properties var buffer = new StringBuilder(); foreach (var value in values) buffer.AppendFormat("@{0},", commandContext.Command.AddParameter(value)); // append the query commandContext.QueryBuilder.AppendWhere(" [{0}].[id] IN ( SELECT [{1}].[id] FROM [{1}] WHERE [{1}].[name] = '{2}' AND [{1}].[value] IN ({3}) )", commandContext.QueryBuilder.RootTableName, pair.Table.Name, PropertyName, buffer.Trim()); }
/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected override void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { // add the table to the query commandContext.QueryBuilder.AddTable(context, pair.Table, commandContext.Command); // check for single or multiple values if (values.Count == 1) commandContext.QueryBuilder.AppendWhere(" [{0}].[{1}] = @{2}", pair.Table.Name, pair.Column.ColumnName, commandContext.Command.AddParameter(values[0])); else { // start the clause var buffer = new StringBuilder(); buffer.AppendFormat("[{0}].[{1}] IN (", pair.Table.Name, pair.Column.ColumnName); // loop through all the values foreach (var value in values) buffer.AppendFormat("@{0},", commandContext.Command.AddParameter(value)); // finish the clause commandContext.QueryBuilder.AppendWhere("{0})", buffer.Trim()); } }
/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> /// <exception cref="ArgumentNullException">Thrown if one of the parameters is null.</exception> public void ToWhereStatement(IMansionContext context, QueryCommandContext commandContext, IEnumerable<object> values) { // validate arguments if (context == null) throw new ArgumentNullException("context"); if (values == null) throw new ArgumentNullException("values"); if (commandContext == null) throw new ArgumentNullException("commandContext"); // check if there are any values var valueArray = values.ToArray(); if (valueArray.Length == 0) { commandContext.QueryBuilder.AppendWhere("1 = 0"); return; } // get the table in which the column exists from the schema var pair = commandContext.Schema.FindTableAndColumn(PropertyName); // invoke template method DoToWhereStatement(context, commandContext, pair, valueArray); }
/// <summary> /// Constructs a WHERE statements on this column for the given <paramref name="values"/>. /// </summary> /// <param name="context">The <see cref="IMansionContext"/>.</param> /// <param name="commandContext">The <see cref="QueryCommandContext"/>.</param> /// <param name="pair">The <see cref="TableColumnPair"/>.</param> /// <param name="values">The values on which to construct the where statement.</param> protected virtual void DoToWhereStatement(IMansionContext context, QueryCommandContext commandContext, TableColumnPair pair, IList<object> values) { throw new NotSupportedException(string.Format("Columns of type '{0}' do not support where mapping", GetType().Name)); }