protected override void GenerateInternal(Module module) { ResultClassName = ClassNameBase + "Result"; var resultType = GenerateResultClass(GetPropertyGroups(module)); if (resultType == null) { ResultClassName = "object"; m_voidResult = true; } else { var codeUnit = SyntaxEx.CompilationUnit( SyntaxEx.NamespaceDeclaration(Wiki.EntitiesNamespace, resultType), "System", "System.Linq", "System.Globalization", "System.Xml.Linq", "LinqToWiki", "LinqToWiki.Internals"); Wiki.Files.Add(ClassNameBase, codeUnit); } m_listResult = module.ListResult; GenerateMethod(module); }
protected override void GenerateInternal(Module module) { m_selectClassName = ClassNameBase + "Select"; m_whereClassName = ClassNameBase + "Where"; m_orderByClassName = ClassNameBase + "OrderBy"; var parameters = module.Parameters.ToList(); var sortParameters = RemoveAndReturnByNames(parameters, "sort", "dir"); var methodParameters = parameters.RemoveAndReturn(p => p.Required); // don't belong anywhere, are used in a special way RemoveAndReturnByNames(parameters, "continue", "offset", "limit", "prop"); var whereParameters = parameters; var selectClass = GenerateSelect(module.PropertyGroups, module.Name == "revisions"); var whereClass = GenerateWhere(whereParameters); var orderByClass = GenerateOrderBy(sortParameters, module.PropertyGroups.SelectMany(g => g.Properties)); var codeUnit = SyntaxEx.CompilationUnit( SyntaxEx.NamespaceDeclaration(Wiki.EntitiesNamespace, selectClass, whereClass, orderByClass), "System", "System.Globalization", "System.Xml.Linq", "LinqToWiki", "LinqToWiki.Collections", "LinqToWiki.Internals"); Wiki.Files.Add(ClassNameBase, codeUnit); string queryTypeName = "WikiQuery"; var queryTypeGenericParameters = new List <string> { m_whereClassName, m_selectClassName }; if (orderByClass != null) { queryTypeName += "Sortable"; queryTypeGenericParameters.Insert(1, m_orderByClassName); } if (module.Generator) { queryTypeName += "Generator"; queryTypeGenericParameters.Insert(0, Wiki.Names.Page); } m_queryType = SyntaxEx.GenericName(queryTypeName, queryTypeGenericParameters); SortType?sortType = null; var dirParameter = sortParameters.SingleOrDefault(p => p.Name == "dir"); if (dirParameter != null) { var type = (EnumParameterType)dirParameter.Type; if (type.Values.Any(x => x == "ascending")) { sortType = SortType.Ascending; } else if (type.Values.Any(x => x == "newer")) { sortType = SortType.Newer; } } GenerateMethod(module, methodParameters, m_selectClassName, m_selectProps, MethodClassName, false, sortType); }