Example #1
0
        public override SearchParameterQueryGeneratorContext VisitBinary(BinaryExpression expression, SearchParameterQueryGeneratorContext context)
        {
            NullableDecimalColumn valueColumn;
            NullableDecimalColumn nullCheckColumn;

            switch (expression.FieldName)
            {
            case FieldName.Number:
                valueColumn = nullCheckColumn = V1.NumberSearchParam.SingleValue;
                break;

            case SqlFieldName.NumberLow:
                valueColumn = nullCheckColumn = V1.NumberSearchParam.LowValue;
                break;

            case SqlFieldName.NumberHigh:
                valueColumn     = V1.NumberSearchParam.HighValue;
                nullCheckColumn = V1.NumberSearchParam.LowValue;
                break;

            default:
                throw new ArgumentOutOfRangeException(expression.FieldName.ToString());
            }

            AppendColumnName(context, nullCheckColumn, expression).Append(" IS NOT NULL AND ");
            return(VisitSimpleBinary(expression.BinaryOperator, context, valueColumn, expression.ComponentIndex, expression.Value));
        }
        public override SearchParameterQueryGeneratorContext VisitBinary(BinaryExpression expression, SearchParameterQueryGeneratorContext context)
        {
            DateTime2Column column;

            switch (expression.FieldName)
            {
            case FieldName.DateTimeStart:
                column = VLatest.DateTimeSearchParam.StartDateTime;
                break;

            case FieldName.DateTimeEnd:
                column = VLatest.DateTimeSearchParam.EndDateTime;
                break;

            case SqlFieldName.DateTimeIsLongerThanADay:
                // we don't want to use a parameter here because we want the query plan to use the filtered index based on this field
                AppendColumnName(context, VLatest.DateTimeSearchParam.IsLongerThanADay, expression).Append(" = ").Append((bool)expression.Value ? '1' : '0');
                return(context);

            default:
                throw new ArgumentOutOfRangeException(expression.FieldName.ToString());
            }

            return(VisitSimpleBinary(expression.BinaryOperator, context, column, expression.ComponentIndex, ((DateTimeOffset)expression.Value).UtcDateTime));
        }
Example #3
0
        public override SearchParameterQueryGeneratorContext VisitString(StringExpression expression, SearchParameterQueryGeneratorContext context)
        {
            context.StringBuilder.Append(V1.StringSearchParam.TextOverflow, context.TableAlias).Append(expression.ComponentIndex + 1);

            StringColumn column;

            switch (expression.FieldName)
            {
            case FieldName.String:
                column = V1.StringSearchParam.Text;
                context.StringBuilder.Append(" IS NULL AND ");
                break;

            case SqlFieldName.TextOverflow:
                column = V1.StringSearchParam.TextOverflow;
                switch (expression.StringOperator)
                {
                case StringOperator.StartsWith:
                case StringOperator.NotStartsWith:
                case StringOperator.Equals:
                    if (expression.Value.Length <= V1.StringSearchParam.Text.Metadata.MaxLength)
                    {
                        column = V1.StringSearchParam.Text;
                    }

                    break;
                }

                context.StringBuilder.Append(" IS NOT NULL AND ");
                break;

            default:
                throw new ArgumentOutOfRangeException(expression.FieldName.ToString());
            }

            return(VisitSimpleString(expression, context, column, expression.Value));
        }
 public override SearchParameterQueryGeneratorContext VisitMissingSearchParameter(MissingSearchParameterExpression expression, SearchParameterQueryGeneratorContext context)
 {
     return(expression.AcceptVisitor(GetSearchParameterQueryGenerator(expression), context));
 }
        public override SearchParameterQueryGeneratorContext VisitString(StringExpression expression, SearchParameterQueryGeneratorContext context)
        {
            Debug.Assert(expression.StringOperator == StringOperator.Equals, "Only equals is supported");

            switch (expression.FieldName)
            {
            case FieldName.TokenSystem:
                if (context.Model.TryGetSystemId(expression.Value, out var systemId))
                {
                    return(VisitSimpleBinary(BinaryOperator.Equal, context, VLatest.TokenSearchParam.SystemId, expression.ComponentIndex, systemId));
                }

                AppendColumnName(context, VLatest.TokenSearchParam.SystemId, expression)
                .Append(" IN (SELECT ")
                .Append(VLatest.System.SystemId, null)
                .Append(" FROM ").Append(VLatest.System)
                .Append(" WHERE ")
                .Append(VLatest.System.Value, null)
                .Append(" = ")
                .Append(context.Parameters.AddParameter(VLatest.System.Value, expression.Value))
                .Append(")");

                return(context);

            case FieldName.TokenCode:
                VisitSimpleString(expression, context, VLatest.TokenSearchParam.Code, expression.Value);
                break;

            default:
                throw new InvalidOperationException();
            }

            return(context);
        }
 public override SearchParameterQueryGeneratorContext VisitMissingField(MissingFieldExpression expression, SearchParameterQueryGeneratorContext context)
 {
     return(VisitMissingFieldImpl(expression, context, FieldName.TokenSystem, VLatest.TokenSearchParam.SystemId));
 }