public override BooleanClause[] VisitBooleanClauses(BooleanClause[] clauses) { List <BooleanClause> newList = null; clauses = new BooleanClauseOptimizer().VisitBooleanClauses(clauses); int index = 0; int count = clauses.Length; while (index < count) { var visitedClause = VisitBooleanClause(clauses[index]); if (newList != null) { newList.Add(visitedClause); } else if (visitedClause != clauses[index]) { newList = new List <BooleanClause>(); for (int i = 0; i < index; i++) { newList.Add(clauses[i]); } newList.Add(visitedClause); } index++; } return(newList != null?newList.ToArray() : clauses); }
public override BooleanClause[] VisitBooleanClauses(BooleanClause[] clauses) { List <BooleanClause> newList = null; clauses = new BooleanClauseOptimizer().VisitBooleanClauses(clauses); // optimize to IN clause if possible var simpleTerms = GetTermIfEverythingIsTermQuery(clauses); if (simpleTerms != null) { if (CompileToInClause(simpleTerms)) { return(clauses); } } int index = 0; int count = clauses.Length; _sql.Append("("); while (index < count) { if (index > 0) { _sql.Append(" " + GetSqlOperator(clauses[index - 1], clauses[index]) + " "); } if (clauses[index].GetOccur() == BooleanClause.Occur.MUST_NOT) { _sql.Append("NOT "); } var visitedClause = VisitBooleanClause(clauses[index]); if (newList != null) { newList.Add(visitedClause); } else if (visitedClause != clauses[index]) { newList = new List <BooleanClause>(); for (int i = 0; i < index; i++) { newList.Add(clauses[i]); } newList.Add(visitedClause); } index++; } _sql.Append(")"); return(newList != null?newList.ToArray() : clauses); }
/*todo*/public override BooleanClause[] VisitBooleanClauses(BooleanClause[] clauses) { List<BooleanClause> newList = null; clauses = new BooleanClauseOptimizer().VisitBooleanClauses(clauses); int index = 0; int count = clauses.Length; while (index < count) { var visitedClause = VisitBooleanClause(clauses[index]); if (newList != null) { newList.Add(visitedClause); } else if (visitedClause != clauses[index]) { newList = new List<BooleanClause>(); for (int i = 0; i < index; i++) newList.Add(clauses[i]); newList.Add(visitedClause); } index++; } return newList != null ? newList.ToArray() : clauses; }