Пример #1
0
 public void Test2()
 {
     DataRuleContext context = new DataRuleContext(null, null) { ValueProvider = new NameValueCollectionValueProvider(new NameValueCollection()) };
     WhereClause[] clauses = new WhereClause[] {
         new WhereClause(){ FieldName="title", Operator = Operator.Contains, Value1= "title1",Logical = Logical.Or },
         new WhereClause(){ FieldName="title", Operator = Operator.Contains,Value1="title1",Logical = Logical.And },
         new WhereClause(){ FieldName="body", Operator = Operator.Contains,Value1="body1",Logical = Logical.Or },
         new WhereClause(){ FieldName="body", Operator = Operator.Contains,Value1="body2",Logical = Logical.Or },
         new WhereClause(){ FieldName="userkey", Operator = Operator.Contains,Value1="userkey1",Logical = Logical.Or }
     };
     var expression = WhereClauseToContentQueryHelper.Parse(clauses, context);
     var query = new TranslatedQueryMock();
     StringVisitor visitor = new StringVisitor(query);
     visitor.Visite(expression);
     Assert.AreEqual("((((((((title Conatins title1) OR (title Conatins title1))) AND (body Conatins body1))) OR (body Conatins body2))) OR (userkey Conatins userkey1))", query.ClauseText);
 }
Пример #2
0
 private static IWhereExpression GetExpression(IWhereExpression inner, WhereClause clause, Schema schema, IValueProvider valueProvider)
 {
     var value = ParameterizedFieldValue.GetFieldValue(clause.Value1, valueProvider);
     var fieldValue = Kooboo.CMS.Content.Models.Binder.TextContentBinder.DefaultBinder.ConvertToColumnType(schema, clause.FieldName, value);
     if (clause.Logical == Logical.Or && string.IsNullOrEmpty(value))
     {
         return null;
     }
     switch (clause.Operator)
     {
         case Operator.Equals:
             return new WhereEqualsExpression(inner, clause.FieldName, fieldValue);
         case Operator.NotEquals:
             return new WhereNotEqualsExpression(inner, clause.FieldName, fieldValue);
         case Operator.GreaterThan:
             return new WhereGreaterThanExpression(inner, clause.FieldName, fieldValue);
         case Operator.LessThan:
             return new WhereLessThanExpression(inner, clause.FieldName, fieldValue);
         case Operator.Contains:
             return new WhereContainsExpression(inner, clause.FieldName, fieldValue);
         case Operator.StartsWith:
             return new WhereStartsWithExpression(inner, clause.FieldName, fieldValue);
         case Operator.EndsWith:
             return new WhereEndsWithExpression(inner, clause.FieldName, fieldValue);
         case Operator.Between:
             var value2 = ParameterizedFieldValue.GetFieldValue(clause.Value2, valueProvider);
             var fieldValue2 = Kooboo.CMS.Content.Models.Binder.TextContentBinder.DefaultBinder.ConvertToColumnType(schema, clause.Value2, value2);
             return new WhereBetweenExpression(inner, clause.FieldName, fieldValue, fieldValue2);
         default:
             return null;
     }
 }
Пример #3
0
 private static IWhereExpression GetExpression(IWhereExpression inner, WhereClause clause, Schema schema, IValueProvider valueProvider)
 {
     var binder = EngineContext.Current.Resolve<ITextContentBinder>();
     var value = ParameterizedFieldValue.GetFieldValue(clause.Value1, valueProvider);
     var fieldValue = binder.ConvertToColumnType(schema, clause.FieldName, value);
     if (clause.Logical == Logical.Or && string.IsNullOrEmpty(value))
     {
         return null;
     }
     switch (clause.Operator)
     {
         case Operator.Equals:
             return new WhereEqualsExpression(inner, clause.FieldName, fieldValue);
         case Operator.NotEquals:
             return new WhereNotEqualsExpression(inner, clause.FieldName, fieldValue);
         case Operator.GreaterThan:
             return new WhereGreaterThanExpression(inner, clause.FieldName, fieldValue);
         case Operator.LessThan:
             return new WhereLessThanExpression(inner, clause.FieldName, fieldValue);
         case Operator.Contains:
             return new WhereContainsExpression(inner, clause.FieldName, fieldValue);
         case Operator.StartsWith:
             return new WhereStartsWithExpression(inner, clause.FieldName, fieldValue);
         case Operator.EndsWith:
             return new WhereEndsWithExpression(inner, clause.FieldName, fieldValue);
         case Operator.Between:
             var value2 = ParameterizedFieldValue.GetFieldValue(clause.Value2, valueProvider);
             var fieldValue2 = binder.ConvertToColumnType(schema, clause.Value2, value2);
             return new WhereBetweenExpression(inner, clause.FieldName, fieldValue, fieldValue2);
         case Operator.NotNull:
             return new AndAlsoExpression(new WhereNotEqualsExpression(inner, clause.FieldName, null), new WhereNotEqualsExpression(inner, clause.FieldName, ""));
         case Operator.IsNull:
             return new OrElseExpression(new WhereEqualsExpression(inner, clause.FieldName, null), new WhereEqualsExpression(inner, clause.FieldName, ""));
         default:
             return null;
     }
 }