예제 #1
0
        /// <summary>
        /// 添加含有括号的条件
        /// </summary>
        /// <param name="relationType">关联运算符</param>
        /// <param name="condition">条件生成器</param>
        public virtual IConditionBuilder Block(RelationType relationType, IConditionBuilder condition)
        {
            if (condition == null)
            {
                return(this);
            }
            var conditionBuilder = condition as ConditionBuilder;

            if (conditionBuilder == null || conditionBuilder.ConditionAppendBuilder.ToString().Trim().Length < 6)
            {
                return(this);
            }
            if (!ConditionAppendBuilder.ToString().Trim()
                .EndsWith("WHERE", StringComparison.InvariantCultureIgnoreCase))
            {
                this.ConditionAppendBuilder.Append(GetRelation(relationType));
            }
            this.ConditionAppendBuilder.AppendFormat(" ({0}) ",
                                                     conditionBuilder.ConditionAppendBuilder.ToString().Remove(0, 6));
            if (conditionBuilder.ParamDictionary.Count > 0)
            {
                this.ParamDictionary.AddRange(conditionBuilder.ParamDictionary, true);
            }
            this.Length++;
            return(this);
        }
예제 #2
0
 private StatBuilderAdapter(
     IStatBuilder statBuilder, IConditionBuilder conditionBuilder, Func <IStat, IStat> statConverter)
 {
     _statBuilder      = statBuilder;
     _conditionBuilder = conditionBuilder;
     _statConverter    = statConverter;
 }
예제 #3
0
        public IThenBuilder If(IConditionBuilder condition)
        {
            IThenBuilder Resolve(ResolveContext context) =>
            new ThenBuilder($"if ({condition.Resolve(context)})", (current, _) => current);

            return(new ThenBuilder($"if ({condition})", (_, context) => Resolve(context)));
        }
        public static T Condition <T>(this T builder, IConditionBuilder b)
            where T : IConditionBuilderHolder
        {
            builder.ConditionBuilder = b;

            return(builder);
        }
        private string GetWhereConditionsForDataModel(DbContextAction contextAction, object dataModel)
        {
            var conditionCount      = 0;
            var tableName           = dataModel.GetThuriaDataModelTableName();
            var dataModelConditions = dataModel.GetThuriaDataModelConditions(contextAction);

            string whereCondition;

            lock (_conditionBuilderLock)
            {
                _conditionBuilder.Clear();
                foreach (var currentCondition in dataModelConditions)
                {
                    var propertyValue = currentCondition.Value;
                    if (propertyValue == null || propertyValue.Equals(propertyValue.GetType().GetDefaultData()))
                    {
                        continue;
                    }

                    if (conditionCount > 0)
                    {
                        _conditionBuilder = _conditionBuilder.WithAnd();
                    }

                    _conditionBuilder = _conditionBuilder.WithCondition(tableName, currentCondition.ColumnName, EqualityOperators.Equals, propertyValue);
                    conditionCount++;
                }

                whereCondition = _conditionBuilder.Build();
            }

            return(whereCondition);
        }
예제 #6
0
        public void Add([RegexPattern] string regex, T stat, IConditionBuilder condition)
        {
            var builder = ModifierBuilder
                          .WithStat(stat)
                          .WithCondition(condition);

            Add(regex, builder);
        }
 public IntermediateModifierEntry WithCondition(IConditionBuilder condition)
 {
     if (Condition != null && condition != null)
     {
         throw new InvalidOperationException(nameof(WithCondition) + " must not be called multiple times");
     }
     return(new IntermediateModifierEntry(Form, Stat, Value, condition));
 }
예제 #8
0
 /// <summary>
 /// 添加Sql语句条件,默认Or连接,允许你写任何不支持上面的方法,所有它会给你最大的灵活性
 /// </summary>
 /// <param name="builder">生成器</param>
 /// <param name="sql">Sql语句</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder OrAppendRaw(this IConditionBuilder builder, string sql, bool appendCondition)
 {
     if (appendCondition)
     {
         builder.AppendRaw(RelationType.Or, sql);
     }
     return(builder);
 }
예제 #9
0
        /*----------------------------------------------------------------------------------------*/
        /// <summary>
        /// Creates a new TerminatingCondition.
        /// </summary>
        /// <param name="last">The last condition builder in the condition chain.</param>
        /// <param name="predicate">A predicate delegate that determines the result of the condition.</param>
        public TerminatingCondition(IConditionBuilder <TRoot, TSubject> last, Predicate <TSubject> predicate)
        {
            Ensure.ArgumentNotNull(last, "last");
            Ensure.ArgumentNotNull(predicate, "predicate");

            _previous  = last;
            _predicate = predicate;
        }
예제 #10
0
 private IntermediateModifierEntry(IFormBuilder form, IStatBuilder stat, IValueBuilder value, 
     IConditionBuilder condition)
 {
     Form = form;
     Stat = stat;
     Value = value;
     Condition = condition;
 }
예제 #11
0
        /*----------------------------------------------------------------------------------------*/
        /// <summary>
        /// Creates a new ConditionBuilderBase.
        /// </summary>
        /// <param name="last">The previous builder in the conditional chain.</param>
        /// <param name="converter">A step converter delegate that translates from the previous step's output to this builder's subject.</param>
        protected ConditionBuilderBase(IConditionBuilder <TRoot, TPrevious> last, Func <TPrevious, TSubject> converter)
        {
            Ensure.ArgumentNotNull(last, "last");
            Ensure.ArgumentNotNull(converter, "converter");

            _last      = last;
            _converter = converter;
        }
 private static IntermediateModifierEntry CreateFilledEntry(
     IFormBuilder form           = null, IStatBuilder stat = null, IValueBuilder value = null,
     IConditionBuilder condition = null)
 => new IntermediateModifierEntry(
     form ?? Mock.Of <IFormBuilder>(),
     stat ?? Mock.Of <IStatBuilder>(),
     value ?? Mock.Of <IValueBuilder>(),
     condition ?? Mock.Of <IConditionBuilder>());
예제 #13
0
 /// <summary>
 /// 添加IsNotNull条件过滤
 /// </summary>
 /// <param name="builder">生成器</param>
 /// <param name="fieldName">字段名</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder OrIsNotNull(this IConditionBuilder builder, string fieldName, bool appendCondition)
 {
     if (!appendCondition)
     {
         return(builder);
     }
     builder.Append <string>(RelationType.Or, fieldName, SqlOperator.IsNotNull);
     return(builder);
 }
 /// <summary>
 /// SQL Statement Build Provider Constructor
 /// </summary>
 /// <param name="selectStatementBuilder">Select Statement Builder</param>
 /// <param name="insertStatementBuilder">Insert Statement Builder</param>
 /// <param name="updateStatementBuilder">Update Statement Builder</param>
 /// <param name="conditionBuilder">Condition Builder</param>
 public SqlStatementBuildProvider(ISelectStatementBuilder selectStatementBuilder,
                                  IInsertStatementBuilder insertStatementBuilder,
                                  IUpdateStatementBuilder updateStatementBuilder,
                                  IConditionBuilder conditionBuilder)
 {
     _selectStatementBuilder = selectStatementBuilder ?? throw new ArgumentNullException(nameof(selectStatementBuilder));
     _insertStatementBuilder = insertStatementBuilder ?? throw new ArgumentNullException(nameof(insertStatementBuilder));
     _updateStatementBuilder = updateStatementBuilder ?? throw new ArgumentNullException(nameof(updateStatementBuilder));
     _conditionBuilder       = conditionBuilder ?? throw new ArgumentNullException(nameof(conditionBuilder));
 }
예제 #15
0
        public static AndConditionBuilder And(this IConditionBuilder builder, IConditionBuilder rightBuilder)
        {
            var b = new AndConditionBuilder();

            ((IConditionBuildersHolder)b).ConditionBuilders.Add(builder);

            ((IConditionBuildersHolder)b).ConditionBuilders.Add(rightBuilder);

            return(b);
        }
        protected ValueBuilder ChanceToHitValue(
            IStatBuilder accuracyStat, IStatBuilder evasionStat, IConditionBuilder isBlinded)
        {
            var accuracy        = accuracyStat.Value;
            var evasion         = evasionStat.Value;
            var blindMultiplier = ValueFactory.If(isBlinded).Then(0.5).Else(1);

            return(100 * blindMultiplier * 1.15 * accuracy /
                   (accuracy + (evasion / 4).Select(d => Math.Pow(d, 0.8), v => $"{v}^0.8")));
        }
        public void Add(
            [RegexPattern] string regex, ValueBuilder multiplier, IConditionBuilder condition,
            string substitution = "")
        {
            var builder = ModifierBuilder
                          .WithValueConverter(v => v.Multiply(multiplier))
                          .WithCondition(condition);

            Add(regex, builder, substitution);
        }
예제 #18
0
 /// <summary>
 /// And 条件连接
 /// </summary>
 /// <param name="builder">生成器</param>
 /// <param name="condition">条件生成器</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder And(this IConditionBuilder builder,
                                     Action <IConditionBuilder> condition, bool appendCondition)
 {
     if (appendCondition)
     {
         var child = builder.Clone();
         condition.Invoke(child);
         return(builder.Block(RelationType.And, child));
     }
     return(builder);
 }
예제 #19
0
        private IValue BuildConditionToValue(IConditionBuilder condition, BuildParameters parameters)
        {
            var result = condition.Build(parameters);

            if (!result.HasValue)
            {
                throw new ParseException(
                          $"Can only use value conditions in {nameof(Count)}");
            }
            return(result.Value);
        }
예제 #20
0
            public IThenBuilder ElseIf(IConditionBuilder condition)
            {
                IThenBuilder Resolve(ResolveContext context)
                {
                    return(new ThenBuilder(
                               $"{this.Resolve(context)} else if ({condition.Resolve(context)})",
                               (current, _) => current));
                }

                return(new ThenBuilder($"{this} else if ({condition})",
                                       (_, context) => Resolve(context)));
            }
예제 #21
0
        public void Add(IFormBuilder form, IStatBuilder stat, IValueBuilder value, IConditionBuilder condition = null)
        {
            var builder = _modifierBuilder
                          .WithForm(form)
                          .WithStat(stat)
                          .WithValue(value);

            if (condition != null)
            {
                builder = builder.WithCondition(condition);
            }
            _data.Add(builder.Build());
        }
예제 #22
0
 /// <summary>
 /// 添加NotIn条件过滤
 /// </summary>
 /// <param name="builder">生成器</param>
 /// <param name="fieldName">字段名</param>
 /// <param name="childQuery">子查询,例如:select Id from User</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder OrNotIn(this IConditionBuilder builder, string fieldName, string childQuery, bool appendCondition)
 {
     if (!appendCondition)
     {
         return(builder);
     }
     if (string.IsNullOrWhiteSpace(childQuery))
     {
         return(builder);
     }
     builder.AppendRaw(RelationType.Or, string.Format(" {0} NOT IN ({1})", fieldName, childQuery));
     return(builder);
 }
예제 #23
0
        public void Constructor_GivenNullConditionBuilder_ShouldThrowException()
        {
            //---------------Set up test pack-------------------
            var insertStatementBuilder         = Substitute.For <IInsertStatementBuilder>();
            IConditionBuilder conditionBuilder = null;
            var actorProps = Props.Create <HeliumConstructInsertSqlQueryActor>(insertStatementBuilder, conditionBuilder);

            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            EventFilter.Exception(typeof(ArgumentNullException), contains: "Parameter name: conditionBuilder", checkInnerExceptions: true)
            .Expect(1, () => Sys.ActorOf(actorProps, "Test"));
            //---------------Test Result -----------------------
        }
예제 #24
0
 /// <summary>
 /// 添加尾匹配条件过滤
 /// </summary>
 /// <typeparam name="T">字段值类型</typeparam>
 /// <param name="builder">生成器</param>
 /// <param name="fieldName">字段名</param>
 /// <param name="value">字段值</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder OrEnds <T>(this IConditionBuilder builder, string fieldName, T value,
                                            bool appendCondition)
 {
     if (!appendCondition)
     {
         return(builder);
     }
     if (value == null)
     {
         return(builder);
     }
     builder.Append(RelationType.Or, fieldName, SqlOperator.Ends, value);
     return(builder);
 }
예제 #25
0
 /// <summary>
 /// 添加In条件过滤
 /// </summary>
 /// <typeparam name="T">字段值类型</typeparam>
 /// <param name="builder">生成器</param>
 /// <param name="fieldName">字段名</param>
 /// <param name="value">字段值</param>
 /// <param name="appendCondition">是否拼接条件</param>
 /// <returns></returns>
 public static IConditionBuilder In <T>(this IConditionBuilder builder, string fieldName, T[] value,
                                        bool appendCondition)
 {
     if (!appendCondition)
     {
         return(builder);
     }
     if (value == null)
     {
         return(builder);
     }
     builder.Append(RelationType.And, fieldName, SqlOperator.In, value);
     return(builder);
 }
 public SkillPreParseResult(
     SkillDefinition skillDefinition, SkillLevelDefinition levelDefinition, SkillDefinition mainSkillDefinition,
     ModifierSource.Local.Skill localSource, ModifierSource.Global globalSource, Entity modifierSourceEntity,
     IConditionBuilder isMainSkill, IConditionBuilder isActiveSkill)
 {
     SkillDefinition      = skillDefinition;
     LevelDefinition      = levelDefinition;
     MainSkillDefinition  = mainSkillDefinition;
     LocalSource          = localSource;
     GlobalSource         = globalSource;
     ModifierSourceEntity = modifierSourceEntity;
     IsMainSkill          = isMainSkill;
     IsActiveSkill        = isActiveSkill;
 }
예제 #27
0
        public IModifierBuilder WithCondition(IConditionBuilder condition)
        {
            if (condition == null)
            {
                throw new ArgumentNullException(nameof(condition));
            }
            if (Conditions != null)
            {
                throw new InvalidOperationException();
            }
            var ret = (ModifierBuilderStub)MemberwiseClone();

            ret.Conditions = new[] { condition };
            return(ret);
        }
        /// <summary>
        /// Adds a matcher with a form, value, stat and optionally a condition.
        /// </summary>
        public void Add([RegexPattern] string regex, IFormBuilder form, IValueBuilder value, IStatBuilder stat,
                        IConditionBuilder condition = null)
        {
            var builder = ModifierBuilder
                          .WithForm(form)
                          .WithStat(stat)
                          .WithValue(value);

            if (condition != null)
            {
                builder = builder.WithCondition(condition);
            }

            Add(regex, builder);
        }
예제 #29
0
        public static OrConditionBuilder Or(this OrConditionBuilder builder, IConditionBuilder rightBuilder)
        {
            if (rightBuilder is OrConditionBuilder) // Merge the condition builders
            {
                builder.Conditions(
                    ((IConditionBuildersHolder)rightBuilder).ConditionBuilders.ToArray()
                    );
            }
            else
            {
                builder.Conditions(rightBuilder);
            }

            return(builder);
        }
예제 #30
0
        private void Add(
            IStatBuilder stat, Form form, IValueBuilder value, IConditionBuilder condition,
            ModifierSource modifierSource)
        {
            var builder = _modifierBuilder
                          .WithStat(stat)
                          .WithForm(_builderFactories.FormBuilders.From(form))
                          .WithValue(value);

            if (condition != null)
            {
                builder = builder.WithCondition(condition);
            }
            var intermediateModifier = builder.Build();

            _modifiers.AddRange(intermediateModifier.Build(modifierSource, _modifierSourceEntity));
        }