private Bamboo.Query.Predicates.Predicate CreatePredicate(object predicate) { if (predicate is Bamboo.Query.Query.AndPredicate) { Bamboo.Query.Query.AndPredicate andPredicate = (Bamboo.Query.Query.AndPredicate)predicate; return(new Bamboo.Query.Predicates.AndPredicate(CreatePredicate(andPredicate.A), CreatePredicate(andPredicate.B))); } else if (predicate is Bamboo.Query.Query.EqualsPredicate) { Bamboo.Query.Query.EqualsPredicate equalsPredicate = (Bamboo.Query.Query.EqualsPredicate)predicate; return(new Bamboo.Query.Predicates.EqualsPredicate(GetIndex(equalsPredicate.Column, this._node.ColumnCoordinates), equalsPredicate.Value)); } else if (predicate is Bamboo.Query.Query.GreaterThanPredicate) { Bamboo.Query.Query.GreaterThanPredicate greaterThanPredicate = (Bamboo.Query.Query.GreaterThanPredicate)predicate; return(new Bamboo.Query.Predicates.GreaterThanPredicate(GetIndex(greaterThanPredicate.Column, this._node.ColumnCoordinates), greaterThanPredicate.Value)); } else if (predicate is Bamboo.Query.Query.LessThanPredicate) { Bamboo.Query.Query.LessThanPredicate lessThanPredicate = (Bamboo.Query.Query.LessThanPredicate)predicate; return(new Bamboo.Query.Predicates.LessThanPredicate(GetIndex(lessThanPredicate.Column, this._node.ColumnCoordinates), lessThanPredicate.Value)); } else if (predicate is Bamboo.Query.Query.NotEqualsPredicate) { Bamboo.Query.Query.NotEqualsPredicate notEqualsPredicate = (Bamboo.Query.Query.NotEqualsPredicate)predicate; return(new Bamboo.Query.Predicates.NotEqualsPredicate(GetIndex(notEqualsPredicate.Column, this._node.ColumnCoordinates), notEqualsPredicate.Value)); } else if (predicate is Bamboo.Query.Query.OrPredicate) { Bamboo.Query.Query.OrPredicate orPredicate = (Bamboo.Query.Query.OrPredicate)predicate; return(new Bamboo.Query.Predicates.OrPredicate(CreatePredicate(orPredicate.A), CreatePredicate(orPredicate.B))); } else { throw new System.Exception("Invalid filter expression: " + predicate.GetType().FullName); } }
private static object ParseWherePredicate(System.Collections.ArrayList tokens, string from) { System.Text.StringBuilder Column = new System.Text.StringBuilder(); System.Text.StringBuilder Operator = new System.Text.StringBuilder(); System.Text.StringBuilder Value = new System.Text.StringBuilder(); System.Text.StringBuilder current = Column; for (int i = 0; i < tokens.Count; i++) { string token = (string)tokens[i]; if (token.Equals("=")) { Operator.Append(token); current = Value; } else if (token.Equals(">")) { Operator.Append(token); current = Value; } else if (token.Equals("<")) { Operator.Append(token); current = Value; } else if (token.Equals("<>")) { Operator.Append(token); current = Value; } else if (token.Equals("!=")) { Operator.Append(token); current = Value; } else { current.Append(token); } } object predicate = null; string column = Column.ToString(); string operator_ = Operator.ToString(); System.IComparable value = ParseAtom(Value.ToString()); if (operator_.Equals("=")) { predicate = new Bamboo.Query.Query.EqualsPredicate(CreateColumn(column, from), value); } else if (operator_.Equals(">")) { predicate = new Bamboo.Query.Query.GreaterThanPredicate(CreateColumn(column, from), value); } else if (operator_.Equals("<")) { predicate = new Bamboo.Query.Query.LessThanPredicate(CreateColumn(column, from), value); } else if (operator_.Equals("<>")) { predicate = new Bamboo.Query.Query.NotEqualsPredicate(CreateColumn(column, from), value); } else if (operator_.Equals("!=")) { predicate = new Bamboo.Query.Query.NotEqualsPredicate(CreateColumn(column, from), value); } else { throw new System.Exception("Invalid operator: " + operator_); } return(predicate); }