Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class ConditionBuilder<TContext> : IConditionBuilder where TContext : FieldSearchContext
- {
- public virtual bool QuotedValues { get; set; } = true;
- public abstract string OperatorSymbol { get; }
- public string BuildCondition(SearchCondition searchCondition)
- {
- var conditionBuilder = new StringBuilder();
- var context = searchCondition.GetContext<TContext>();
- conditionBuilder.Append(context.FieldId);
- conditionBuilder.Append(OperatorSymbol);
- conditionBuilder.Append(GetValue(context));
- return conditionBuilder.ToString();
- }
- public abstract bool CanHandle(FilterAction filterAction);
- public abstract object GetValue(TContext context);
- }
- public class TextLikeConditionBuilder : ConditionBuilder<TextContext>
- {
- public override string OperatorSymbol => " LIKE ";
- public override bool CanHandle(FilterAction action) => action == FilterAction.TextLike;
- public override object GetValue(TextContext context)
- {
- if (context.Text == null)
- {
- return null;
- }
- return string.Concat("%", context.Text, "%");
- }
- }
- public class TextEqualsConditionBuilder : ConditionBuilder<TextContext>
- {
- public override string OperatorSymbol => " = ";
- public override bool CanHandle(FilterAction action) => action == FilterAction.TextEqual;
- public override object GetValue(TextContext context)
- {
- if (context.Text == null)
- {
- return null;
- }
- return "'" + context.Text + "'";
- }
- }
- public interface IDelimitedIdentifier
- {
- string Delimit(string input);
- }
- internal class SqlServerDelimitedIdentifier : IDelimitedIdentifier
- {
- public string Delimit(string input)
- {
- return "[" + input.Replace("]", "]]") + "]";
- }
- }
- internal class OracleDelimitedIdentifier : IDelimitedIdentifier
- {
- public string Delimit(string input)
- {
- return """ + input + """;
- }
- }
- public abstract class ConditionBuilder<TContext> : IConditionBuilder where TContext : FieldSearchContext
- {
- public virtual bool QuotedValues { get; set; } = true;
- public abstract string OperatorSymbol { get; }
- public string BuildCondition(SearchCondition searchCondition)
- {
- var conditionBuilder = new StringBuilder();
- var context = searchCondition.GetContext<TContext>();
- conditionBuilder.Append(SanitizeFieldId(context.FieldId));
- conditionBuilder.Append(OperatorSymbol);
- conditionBuilder.Append(GetValue(context));
- return conditionBuilder.ToString();
- }
- public abstract bool CanHandle(FilterAction filterAction);
- public abstract object GetValue(TContext context);
- protected virtual string SanitizeFieldId(string fieldId)
- {
- return _delimitedIdentifier.Delimit(fieldId);
- }
- }
- public class SanitizedFieldConditionBuilder<TContext> : ConditionBuilder<TContext> where TContext : FieldSearchContextBase
- {
- private readonly ConditionBuilder<TContext> _baseConditionBuilder;
- private readonly IDelimitedIdentifier _delimitedIdentifier;
- public SanitizedFieldConditionBuilder(ConditionBuilder<TContext> baseConditionBuilder, IDelimitedIdentifier delimitedIdentifier)
- {
- QuotedValues = false;
- _baseConditionBuilder = baseConditionBuilder;
- _delimitedIdentifier = delimitedIdentifier;
- }
- public override string OperatorSymbol => _baseConditionBuilder.OperatorSymbol;
- public override bool CanHandle(SearchFilterAction action) => _baseConditionBuilder.CanHandle(action);
- public override object GetValue(TContext context) => _baseConditionBuilder.GetValue(context);
- protected override string SanitizeFieldId(string fieldId)
- {
- return _delimitedIdentifier.Delimit(fieldId);
- }
- }
- public static class ConditionBuilderExtensions
- {
- public static SanitizedFieldConditionBuiler<TContext> SanitizeField<TContext>(this ConditionBuilder<TContext> source, IColumnSanitizer columnSanitizer) where TContext : FieldSearchContext
- {
- return new SanitizedFieldConditionBuiler<TContext>(source, columnSanitizer);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var conditionBuilders = new List<IConditionBuilder>()
- {
- new TextEqualsConditionBuilder().SanitizeField(new SqlSanitizer()),
- new TextLikeConditionBuilder().SanitizeField(new SqlSanitizer())
- };
- }
- }
- public abstract class ConditionBuilder<TContext> : IConditionBuilder where TContext : FieldSearchContext
- {
- private readonly IDelimitedIdentifier DelimitedIdentifier;
- public virtual bool QuotedValues { get; set; } = true;
- public abstract string OperatorSymbol { get; }
- protected ConditionBuilder(IDelimitedIdentifier delimitedIdentifier)
- {
- DelimitedIdentifier = delimitedIdentifier;
- }
- public string BuildCondition(SearchCondition searchCondition)
- {
- var conditionBuilder = new StringBuilder();
- var context = searchCondition.GetContext<TContext>();
- conditionBuilder.Append(DelimitedIdentifier.Delimit(context.FieldId));
- conditionBuilder.Append(OperatorSymbol);
- conditionBuilder.Append(GetValue(context));
- return conditionBuilder.ToString();
- }
- public abstract bool CanHandle(FilterAction filterAction);
- public abstract object GetValue(TContext context);
- }
- public class TextLikeConditionBuilder : ConditionBuilder<TextContext>
- {
- public TextLikeConditionBuilder(IDelimitedIdentifier delimitedIdentifier) : base(delimitedIdentifier)
- {
- }
- public override string OperatorSymbol => " LIKE ";
- public override bool CanHandle(FilterAction action) => action == FilterAction.TextLike;
- public override object GetValue(TextContext context)
- {
- if (context.Text == null)
- {
- return null;
- }
- return string.Concat("%", context.Text, "%");
- }
- }
- public class TextEqualsConditionBuilder : ConditionBuilder<TextContext>
- {
- public TextEqualsConditionBuilder(IDelimitedIdentifier delimitedIdentifier) : base(delimitedIdentifier)
- {
- }
- public override string OperatorSymbol => " = ";
- public override bool CanHandle(FilterAction action) => action == FilterAction.TextEqual;
- public override object GetValue(TextContext context)
- {
- if (context.Text == null)
- {
- return null;
- }
- return "'" + context.Text + "'";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement