Ejemplo n.º 1
0
        public void QueryConditionWithDateTimeTests(
            QueryConditionType conditionType,
            string expectedConditionStringFormat)
        {
            var columnToCheck = "DateOfBirth";
            var expectedValue = new DateTime(2000, 1, 1);

            var condition = new QueryConditionBuilder()
                            .DeclareCondition(columnToCheck, conditionType, expectedValue)
                            .Build();

            var actualConditionStringBuilder = new StringBuilder();
            var actualQueryParameters        = new List <QueryParameter>();

            condition.AppendTo(actualConditionStringBuilder, actualQueryParameters);

            string expectedQueryParameterName = $"{columnToCheck}0";

            string expectedConditionString = string.Format(expectedConditionStringFormat, expectedQueryParameterName);

            Assert.Equal(expectedConditionString, actualConditionStringBuilder.ToString());
            Assert.Single(actualQueryParameters);
            var actualQueryParam = actualQueryParameters.First();

            Assert.Equal(expectedQueryParameterName, actualQueryParam.ParameterName);
            Assert.Equal(expectedValue.ToString("s"), actualQueryParam.Value);
        }
Ejemplo n.º 2
0
        public void QueryConditionWithDifferentTypesTests(
            string columnToCheck,
            QueryConditionType conditionType,
            object expectedValue,
            string expectedConditionStringFormat)
        {
            var condition = new QueryConditionBuilder()
                            .DeclareCondition(columnToCheck, conditionType, expectedValue)
                            .Build();

            var actualConditionStringBuilder = new StringBuilder();
            var actualQueryParameters        = new List <QueryParameter>();

            condition.AppendTo(actualConditionStringBuilder, actualQueryParameters);

            string expectedQueryParameterName = $"{columnToCheck}0";

            string expectedConditionString = string.Format(expectedConditionStringFormat, expectedQueryParameterName);

            Assert.Equal(expectedConditionString, actualConditionStringBuilder.ToString());
            Assert.Single(actualQueryParameters);
            var actualQueryParam = actualQueryParameters.First();

            Assert.Equal(expectedQueryParameterName, actualQueryParam.ParameterName);
            Assert.Equal(expectedValue, actualQueryParam.Value);
        }
        /// <summary>
        /// Declares a new <see cref="QueryCondition"/> with the passed parameters.
        /// This is only possible, if <see cref="DeclareCondition(string, QueryConditionType, object)"/> or
        /// <see cref="DeclareConditionNode(QueryConditionNodeType, Func{QueryConditionBuilder}, Func{QueryConditionBuilder})"/>
        /// have not yet been called.
        /// </summary>
        /// <param name="columnToCheck">the column to check against</param>
        /// <param name="conditionType">how should the column be compared against the compareValue</param>
        /// <param name="compareValue">the value used for comparing with the value in the column</param>
        /// <returns>a reference of itself</returns>
        public QueryConditionBuilder DeclareCondition(
            string columnToCheck,
            QueryConditionType conditionType,
            object compareValue)
        {
            if (this.QueryCondition != null)
            {
                throw new InvalidOperationException("Can't declare more than 1 condition on this layer");
            }
            else if (string.IsNullOrEmpty(columnToCheck))
            {
                throw new ArgumentNullException(nameof(columnToCheck));
            }
            else if (compareValue == null)
            {
                throw new ArgumentNullException(nameof(compareValue));
            }

            this.QueryCondition = new QueryCondition()
            {
                ColumnToCheck = columnToCheck,
                CompareValue  = compareValue,
                ConditionType = conditionType
            };

            return(this);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds when condition to case statement of select.
        /// </summary>
        /// <param name="queryCase">Case statement of select.</param>
        /// <param name="sourceTableAlias">Alias of table in left expression.</param>
        /// <param name="sourceColumnAlias">Alias of column in left expression.</param>
        /// <param name="conditionType">Type of comparison condition.</param>
        /// <param name="rightExpressionValue">Value of right expression.</param>
        /// <param name="thenValue">Value that is returned in then statement.</param>
        public static void AddWhenCondition(QueryCase queryCase, string sourceTableAlias, string sourceColumnAlias,
                                            QueryConditionType conditionType, object rightExpressionValue, object thenValue)
        {
            var whenCondition = new QueryCondition(conditionType)
            {
                LeftExpression = new QueryColumnExpression(sourceTableAlias, sourceColumnAlias)
            };

            whenCondition.RightExpressions.Add(Column.Const(rightExpressionValue));
            queryCase.AddWhenItem(whenCondition, Column.Parameter(thenValue));
        }
Ejemplo n.º 5
0
 public ConditionParam(QueryConditionType type, object value, bool isUse)
 {
     _conditionType = type;
     _value         = value;
     _isUse         = isUse;
 }