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)); }
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)); }