public static LucQuery Create(NodeQuery nodeQuery) { NodeQueryParameter[] parameters; var result = new LucQuery(); result.TraceInfo.BeginCrossCompilingTime(); SortField[] sortFields; string oldQueryText; try { var compiler = new SnLucCompiler(); var compiledQueryText = compiler.Compile(nodeQuery, out parameters); sortFields = (from order in nodeQuery.Orders select new SortField( GetFieldNameByPropertyName(order.PropertyName), GetSortType(order.PropertyName), //SortField.STRING, order.Direction == OrderDirection.Desc)).ToArray(); oldQueryText = compiler.CompiledQuery.ToString(); oldQueryText = oldQueryText.Replace("[*", "[ ").Replace("*]", " ]").Replace("{*", "{ ").Replace("*}", " }"); result.TraceInfo.InputText = oldQueryText; } finally { result.TraceInfo.FinishCrossCompilingTime(); } result.TraceInfo.BeginParsingTime(); Query newQuery; try { newQuery = new SnLucParser().Parse(oldQueryText); } finally { result.TraceInfo.FinishParsingTime(); } result.Query = newQuery; // compiler.CompiledQuery, result.User = nodeQuery.User; result.SortFields = sortFields; result.StartIndex = nodeQuery.Skip; result.PageSize = nodeQuery.PageSize; result.Top = nodeQuery.Top; result.EnableAutofilters = false; result.EnableLifespanFilter = false; return result; }
public static LucQuery Parse(string luceneQueryText) { var result = new LucQuery(); result.TraceInfo.InputText = luceneQueryText; result.TraceInfo.BeginParsingTime(); var parser = new SnLucParser(); Query query; try { var replacedText = LucQueryTemplateReplacer.ReplaceTemplates(luceneQueryText); query = parser.Parse(replacedText); } finally { result.TraceInfo.FinishParsingTime(); } //Run EmptyTermVisitor if the parser created empty query term. if (parser.ParseEmptyQuery) { var visitor = new EmptyTermVisitor(); result.Query = visitor.Visit(query); } else { result.Query = query; } var sortFields = new List<SortField>(); foreach (var control in parser.Controls) { switch (control.Name) { case SnLucLexer.Keywords.Select: result.Projection = control.Value; break; case SnLucLexer.Keywords.Top: result.Top = Convert.ToInt32(control.Value); break; case SnLucLexer.Keywords.Skip: result.Skip = Convert.ToInt32(control.Value); break; case SnLucLexer.Keywords.Sort: sortFields.Add(CreateSortField(control.Value, false)); break; case SnLucLexer.Keywords.ReverseSort: sortFields.Add(CreateSortField(control.Value, true)); break; case SnLucLexer.Keywords.Autofilters: result.EnableAutofilters = control.Value == SnLucLexer.Keywords.On; break; case SnLucLexer.Keywords.Lifespan: result.EnableLifespanFilter = control.Value == SnLucLexer.Keywords.On; break; case SnLucLexer.Keywords.CountOnly: result.CountOnly = true; break; } } result.SortFields = sortFields.ToArray(); return result; }