public IAnalysisResult GetMember(GetMemberInput input) { SchemaColumn column = null; _columns.TryGetValue(input.Name, out column); return(column); }
public GetMemberOutput GetMemberById(GetMemberInput input) { var getMember = _memberManager.GetMemberByID(input.Id); GetMemberOutput output = Mapper.Map <Models.Member, GetMemberOutput>(getMember); return(output); }
public IAnalysisResult GetMember(GetMemberInput input) { IFunctionResult funcRes = null; _memberFunctions.TryGetValue(input.Name, out funcRes); return(funcRes); }
public IAnalysisResult GetMember(GetMemberInput input) { TestFunctionCollection collection = null; _collections.TryGetValue(input.Name, out collection); return(collection); }
public IAnalysisResult GetMember(GetMemberInput input) { if (_returns != null && _returns.Count == 1) { var typeRef = new TypeReference(_returns[0]); return(typeRef.GetMember(input)); } return(null); }
public IAnalysisResult GetMember(GetMemberInput input) { if (Children.Count == 1 && Children[Children.Keys[0]] is TypeReference) { return((Children[Children.Keys[0]] as TypeReference).GetMember(input)); } return(null); }
public IAnalysisResult GetMember(GetMemberInput input) { if (MemberDictionary.Count == 0 && MimicTableName != null) { return(null); } else { VariableDef varDef = null; MemberDictionary.TryGetValue(input.Name, out varDef); return(varDef); } }
/// <summary> /// 【扩展模块】带查询条件的分页查询方法 /// </summary> /// <remarks> /// 例子: /// 这是一个开发示例,目的了解API的开发机制<br/> /// 返回为分页过后的列表集合 /// </remarks> /// <param name="input">GetMemberInput DTO 函数</param> /// <returns>用户UserDto</returns> /// <response code="201">返回value字符串</response> /// <response code="400">如果id为空</response> /// <returns></returns> public async Task <PagedResultDto <MemberListDto> > GetPaged(GetMemberInput input) { var entity = new MemberListDto() { Name = "模块化测试接口" }; var entityListDtos = new List <MemberListDto>(); entityListDtos.Add(entity); return(new PagedResultDto <MemberListDto>(10, entityListDtos)); }
public IAnalysisResult GetMember(GetMemberInput input) { ProgramRegister progReg = null; if (_childRegisters != null) { _childRegisters.TryGetValue(input.Name, out progReg); } else { } return(progReg); }
/// <summary> /// 根据查询条件获取个人会员信息表分页列表 /// </summary> public async Task <PagedResultDto <MemberListDto> > GetPagedMembersAsync(GetMemberInput input) { var query = _memberRepositoryAsNoTrack; //TODO:根据传入的参数添加过滤条件 var memberCount = await query.CountAsync(); var members = await query.OrderBy(input.Sorting) .PageBy(input) .ToListAsync(); //var members = await query.OrderBy(input.Sorting).ToListAsync(); var memberListDtos = members.MapTo <List <MemberListDto> >(); return(new PagedResultDto <MemberListDto>( memberCount, memberListDtos )); }
public IAnalysisResult GetMember(GetMemberInput input) { string name = input.Name; // need to handle cases where the name is a function call. I think the only time this would happen is if name ends with ')' if (name.EndsWith(")")) { // try to get the function from the class int firstParen = name.IndexOf('('); if (firstParen > 0) { name = name.Substring(0, firstParen); } } //else //{ if (!string.IsNullOrWhiteSpace(TableName)) { // TODO: get the specified column from the database provider return(null); } else { MemberType memType = Analysis.MemberType.All; // TODO: there's probably a better way to do this var member = GetAnalysisMembers(memType, input).Where(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (member is AstNode4gl) { input.ProjectEntry = (member as AstNode4gl).SyntaxTree.ProjectEntry; input.DefiningProject = (member as AstNode4gl).SyntaxTree.ProjectEntry.ParentProject; } else if (member is VariableDef) { input.ProjectEntry = (member as VariableDef).SyntaxTree.ProjectEntry; input.DefiningProject = (member as VariableDef).SyntaxTree.ProjectEntry.ParentProject; } return(member); } //} }
public IAnalysisResult GetMember(GetMemberInput input) { return(null); }
public IAnalysisResult GetMember(GetMemberInput input) { return(GetFunction(input.Name)); }
public static IAnalysisResult GetValueByIndex(string exprText, int index, Genero4glAst ast, out IGeneroProject definingProject, out IProjectEntry projectEntry, out bool isDeferredFunction, FunctionProviderSearchMode searchInFunctionProvider = FunctionProviderSearchMode.NoSearch, bool isFunctionCallOrDefinition = false, bool getTypes = true, bool getVariables = true, bool getConstants = true) { isDeferredFunction = false; definingProject = null; projectEntry = null; //_functionProvider = functionProvider; //_databaseProvider = databaseProvider; //_programFileProvider = programFileProvider; AstNode containingNode = null; if (ast != null) { containingNode = GetContainingNode(ast.Body, index); ast.Body.SetNamespace(null); } IAnalysisResult res = null; int tmpIndex = 0; int bracketDepth = 0; bool doSearch = false; bool resetStartIndex = false; int startIndex = 0, endIndex = 0; bool noEndIndexSet = false; if (exprText == null) { return(null); } while (tmpIndex < exprText.Length) { if (resetStartIndex) { startIndex = tmpIndex; resetStartIndex = false; if (startIndex + 1 > exprText.Length) { break; } } doSearch = false; switch (exprText[tmpIndex]) { case '.': { if (bracketDepth == 0) { endIndex = tmpIndex - 1; if (endIndex >= startIndex) { // we have our 'piece' doSearch = true; } if (exprText[startIndex] == '.') { startIndex++; } } tmpIndex++; } break; case '[': if (noEndIndexSet) { noEndIndexSet = false; } else { if (bracketDepth == 0) { endIndex = tmpIndex - 1; } } bracketDepth++; tmpIndex++; break; case ']': { bracketDepth--; if (bracketDepth == 0) { if (exprText.Length <= tmpIndex + 1 || exprText[tmpIndex + 1] != '[') { // we have our first 'piece' doSearch = true; } else { noEndIndexSet = true; } } tmpIndex++; } break; default: { if (bracketDepth == 0 && (tmpIndex + 1 == exprText.Length)) { endIndex = tmpIndex; doSearch = true; } tmpIndex++; } break; } if (!doSearch) { continue; } // we can do our search var dotPiece = exprText.Substring(startIndex, (endIndex - startIndex) + 1); if (dotPiece.Contains('(')) { // remove the params piece int remIndex = dotPiece.IndexOf('('); dotPiece = dotPiece.Substring(0, remIndex); } bool lookForFunctions = isFunctionCallOrDefinition && (endIndex + 1 == exprText.Length); resetStartIndex = true; if (res != null) { if (ast != null) { var gmi = new GetMemberInput { Name = dotPiece, AST = ast, IsFunction = lookForFunctions }; IAnalysisResult tempRes = res.GetMember(gmi); if (gmi.DefiningProject != null && definingProject != gmi.DefiningProject) { definingProject = gmi.DefiningProject; } if (gmi.ProjectEntry != null && projectEntry != gmi.ProjectEntry) { projectEntry = gmi.ProjectEntry; } res = tempRes; if (tempRes == null) { res = null; break; } } else { res = null; break; } } else { IFunctionResult funcRes; if (!lookForFunctions) { if (SystemVariables.TryGetValue(dotPiece, out res) || SystemConstants.TryGetValue(dotPiece, out res) || SystemMacros.TryGetValue(dotPiece, out res)) { continue; } } else { if (SystemFunctions.TryGetValue(dotPiece, out funcRes)) { res = funcRes; continue; } if (ast != null && ast._functionProvider != null && ast._functionProvider.Name.Equals(dotPiece, StringComparison.OrdinalIgnoreCase)) { res = ast._functionProvider; continue; } } if (containingNode != null && containingNode is IFunctionResult) { IFunctionResult func = containingNode as IFunctionResult; if ((getVariables && func.Variables.TryGetValue(dotPiece, out res))) { continue; } if (!lookForFunctions) { // Check for local vars, types, and constants if ((getTypes && func.Types.TryGetValue(dotPiece, out res)) || (getConstants && func.Constants.TryGetValue(dotPiece, out res))) { continue; } List <Tuple <IAnalysisResult, IndexSpan> > limitedScopeVars; if ((getVariables && func.LimitedScopeVariables.TryGetValue(dotPiece, out limitedScopeVars))) { foreach (var item in limitedScopeVars) { if (item.Item2.IsInSpan(index)) { res = item.Item1; break; } } if (res != null) { continue; } } } } if (ast != null && ast.Body is IModuleResult) { IModuleResult mod = ast.Body as IModuleResult; if (!lookForFunctions) { // check for module vars, types, and constants (and globals defined in this module) if ((getVariables && (mod.Variables.TryGetValue(dotPiece, out res) || mod.GlobalVariables.TryGetValue(dotPiece, out res))) || (getTypes && (mod.Types.TryGetValue(dotPiece, out res) || mod.GlobalTypes.TryGetValue(dotPiece, out res))) || (getConstants && (mod.Constants.TryGetValue(dotPiece, out res) || mod.GlobalConstants.TryGetValue(dotPiece, out res)))) { continue; } // check for cursors in this module if (mod.Cursors.TryGetValue(dotPiece, out res)) { continue; } } else { // check for module functions if (mod.Functions.TryGetValue(dotPiece, out funcRes)) { // check for any function info collected at the project entry level, and update the function's documentation with that. if (ast._projEntry != null && ast._projEntry is IGeneroProjectEntry) { var commentInfo = (ast._projEntry as IGeneroProjectEntry).GetFunctionInfo(funcRes.Name); if (commentInfo != null) { funcRes.SetCommentDocumentation(commentInfo); } } res = funcRes; continue; } } } // TODO: this could probably be done more efficiently by having each GeneroAst load globals and functions into // dictionaries stored on the IGeneroProject, instead of in each project entry. // However, this does required more upkeep when changes occur. Will look into it... if (ast != null && ast.ProjectEntry != null && ast.ProjectEntry is IGeneroProjectEntry) { IGeneroProjectEntry genProj = ast.ProjectEntry as IGeneroProjectEntry; if (genProj.ParentProject != null && !genProj.FilePath.ToLower().EndsWith(".inc")) { bool found = false; foreach (var projEntry in genProj.ParentProject.ProjectEntries.Where(x => x.Value != genProj)) { if (projEntry.Value.Analysis != null && projEntry.Value.Analysis.Body != null) { projEntry.Value.Analysis.Body.SetNamespace(null); IModuleResult modRes = projEntry.Value.Analysis.Body as IModuleResult; if (modRes != null) { if (!lookForFunctions) { // check global vars, types, and constants // TODO: need option to enable/disable legacy linking if ((getVariables && (modRes.Variables.TryGetValue(dotPiece, out res) || modRes.GlobalVariables.TryGetValue(dotPiece, out res))) || (getTypes && (modRes.Types.TryGetValue(dotPiece, out res) || modRes.GlobalTypes.TryGetValue(dotPiece, out res))) || (getConstants && (modRes.Constants.TryGetValue(dotPiece, out res) || modRes.GlobalConstants.TryGetValue(dotPiece, out res)))) { found = true; break; } // check for cursors in this module if (modRes.Cursors.TryGetValue(dotPiece, out res)) { found = true; break; } } else { // check project functions if (modRes.Functions.TryGetValue(dotPiece, out funcRes)) { if (funcRes.AccessModifier == AccessModifier.Public) { res = funcRes; found = true; break; } } } } } } if (found) { continue; } } } // check for classes GeneroPackage package; if (Packages.TryGetValue(dotPiece, out package)) { res = package; continue; } /* TODO: * Need to check for: * 1) Temp tables */ // Nothing found yet... // If our containing node is at the function or globals level, we need to go deeper if (containingNode != null && (containingNode is GlobalsNode || containingNode is FunctionBlockNode || containingNode is ReportBlockNode)) { containingNode = GetContainingNode(containingNode, index); } // check for record field if (containingNode != null && (containingNode is DefineNode || containingNode is TypeDefNode)) { containingNode = GetContainingNode(containingNode, index); if (containingNode != null && (containingNode is VariableDefinitionNode || containingNode is TypeDefinitionNode) && containingNode.Children.Count == 1 && containingNode.Children[containingNode.Children.Keys[0]] is TypeReference) { var typeRef = containingNode.Children[containingNode.Children.Keys[0]] as TypeReference; while (typeRef != null && typeRef.Children.Count == 1) { if (typeRef.Children[typeRef.Children.Keys[0]] is RecordDefinitionNode) { var recNode = typeRef.Children[typeRef.Children.Keys[0]] as RecordDefinitionNode; VariableDef recField; if (recNode.MemberDictionary.TryGetValue(exprText, out recField)) { res = recField; break; } else { recField = recNode.MemberDictionary.Where(x => x.Value.LocationIndex < index) .OrderByDescending(x => x.Value.LocationIndex) .Select(x => x.Value) .FirstOrDefault(); if (recField != null) { typeRef = recField.Type; } else { break; } } } else if (typeRef.Children[typeRef.Children.Keys[0]] is TypeReference) { typeRef = typeRef.Children[typeRef.Children.Keys[0]] as TypeReference; } else { break; } } } } // try an imported module if (ast != null && ast.Body is IModuleResult && ast.ProjectEntry != null && ast.ProjectEntry != null) { if ((ast.Body as IModuleResult).FglImports.Contains(dotPiece)) { // need to get the ast for the other project entry var refProjKVP = (ast.ProjectEntry as IGeneroProjectEntry).ParentProject.ReferencedProjects.Values.FirstOrDefault( x => { var fn = Path.GetFileNameWithoutExtension(x.Directory); return(fn?.Equals(dotPiece, StringComparison.OrdinalIgnoreCase) ?? false); }); if (refProjKVP is IAnalysisResult) { definingProject = refProjKVP; res = refProjKVP as IAnalysisResult; continue; } IAnalysisResult sysImportMod; // check the system imports if (SystemImportModules.TryGetValue(dotPiece, out sysImportMod)) { res = sysImportMod; continue; } } } if (!lookForFunctions) { // try include files var foundInclude = false; if (ast?.ProjectEntry != null) { foreach (var includeFile in ast.ProjectEntry.GetIncludedFiles()) { if (includeFile.Analysis?.Body is IModuleResult) { var mod = includeFile.Analysis.Body as IModuleResult; if ((getTypes && (mod.Types.TryGetValue(dotPiece, out res) || mod.GlobalTypes.TryGetValue(dotPiece, out res))) || (getConstants && (mod.Constants.TryGetValue(dotPiece, out res) || mod.GlobalConstants.TryGetValue(dotPiece, out res)))) { foundInclude = true; break; } } } } if (foundInclude) { continue; } if (ast?._databaseProvider != null) { res = ast._databaseProvider.GetTable(dotPiece); if (res != null) { continue; } } } // Only do a public function search if the dotPiece is the whole text we're searching for // I.e. no namespaces if (lookForFunctions && dotPiece == exprText) { if (searchInFunctionProvider == FunctionProviderSearchMode.Search) { if (res == null && ast?._functionProvider != null) { // check for the function name in the function provider var funcs = ast._functionProvider.GetFunction(dotPiece); if (funcs != null) { res = funcs.FirstOrDefault(); if (res != null) { continue; } } } } else if (searchInFunctionProvider == FunctionProviderSearchMode.Deferred) { isDeferredFunction = true; } } if (res == null) { break; } } } return(res); }
internal IEnumerable <IAnalysisResult> GetAnalysisMembers(MemberType memberType, GetMemberInput input) { bool dummyDef; List <IAnalysisResult> members = new List <IAnalysisResult>(); if (Children.Count == 1) { // we have an array type or a record type definition var node = Children[Children.Keys[0]]; if (node is ArrayTypeReference) { return((node as ArrayTypeReference).GetAnalysisResults(memberType, input)); } else if (node is RecordDefinitionNode) { return((node as RecordDefinitionNode).GetAnalysisResults(input.AST)); } else if (node is DictionaryDefinitionNode) { return((node as DictionaryDefinitionNode).GetAnalysisResults(memberType, input)); } } else { if (!string.IsNullOrWhiteSpace(TableName)) { // TODO: return the table's columns int i = 0; } else if (_typeNameString != null && _typeNameString.Equals("string", StringComparison.OrdinalIgnoreCase)) { return(Genero4glAst.StringFunctions.Values.Where(x => input.AST.LanguageVersion >= x.MinimumLanguageVersion && input.AST.LanguageVersion <= x.MaximumLanguageVersion)); } else if (_typeNameString != null && _typeNameString.Equals("text", StringComparison.OrdinalIgnoreCase)) { return(Genero4glAst.TextFunctions.Values.Where(x => input.AST.LanguageVersion >= x.MinimumLanguageVersion && input.AST.LanguageVersion <= x.MaximumLanguageVersion)); } else if (_typeNameString != null && _typeNameString.Equals("byte", StringComparison.OrdinalIgnoreCase)) { return(Genero4glAst.ByteFunctions.Values.Where(x => input.AST.LanguageVersion >= x.MinimumLanguageVersion && input.AST.LanguageVersion <= x.MaximumLanguageVersion)); } else { if (ResolvedType != null && ResolvedType is TypeDefinitionNode && (ResolvedType as TypeDefinitionNode).TypeRef != null) { return((ResolvedType as TypeDefinitionNode).TypeRef.GetAnalysisMembers(memberType, input)); } var gmi = new GetMultipleMembersInput { AST = input.AST, MemberType = memberType, GetArrayTypeMembers = input.IsFunction }; // try to determine if the _typeNameString is a user defined type, in which case we need to call its GetMembers function IAnalysisResult udt = (input.AST as Genero4glAst).TryGetUserDefinedType(_typeNameString, LocationIndex); if (udt != null) { return(udt.GetMembers(gmi).Select(x => x.Var).Where(y => y != null)); } IGeneroProject definingProject; IProjectEntry projectEntry; if (input.AST.ProjectEntry != null) { foreach (var includedFile in input.AST.ProjectEntry.GetIncludedFiles()) { if (includedFile.Analysis != null) { var res = includedFile.Analysis.GetValueByIndex(_typeNameString, 1, null, null, null, false, out dummyDef, out definingProject, out projectEntry); if (res != null) { input.DefiningProject = definingProject; input.ProjectEntry = projectEntry; return(res.GetMembers(gmi).Select(x => x.Var).Where(y => y != null)); } } } // try to get the _typeNameString from types available in imported modules if (input.AST.ProjectEntry.ParentProject.ReferencedProjects.Count > 0) { foreach (var refProj in input.AST.ProjectEntry.ParentProject.ReferencedProjects.Values) { if (refProj is GeneroProject) { IProjectEntry dummyProj; udt = (refProj as GeneroProject).GetMemberOfType(_typeNameString, input.AST, false, true, false, false, out dummyProj); if (udt != null) { input.DefiningProject = refProj; input.ProjectEntry = dummyProj; return(udt.GetMembers(gmi).Select(x => x.Var).Where(y => y != null)); } } } } } // check for package class udt = input.AST.GetValueByIndex(_typeNameString, LocationIndex, input.AST._functionProvider, input.AST._databaseProvider, input.AST._programFileProvider, false, out dummyDef, out definingProject, out projectEntry); if (udt != null) { input.DefiningProject = definingProject; input.ProjectEntry = projectEntry; return(udt.GetMembers(gmi).Select(x => x.Var).Where(y => y != null)); } } } return(members); }
internal IEnumerable <IAnalysisResult> GetAnalysisResults(MemberType memberType, GetMemberInput input) { List <IAnalysisResult> results = new List <IAnalysisResult>(); if (Children.Count == 1) { // get the table's columns var node = Children[Children.Keys[0]]; if (node is TypeReference) { results.AddRange((node as TypeReference).GetAnalysisMembers(memberType, input)); } } results.AddRange(Genero4glAst.DictionaryFunctions.Values.Where(x => input.AST.LanguageVersion >= x.MinimumLanguageVersion && input.AST.LanguageVersion <= x.MaximumLanguageVersion)); return(results); }
public IAnalysisResult GetMember(GetMemberInput input) { return(Type.GetMember(input)); }
public IAnalysisResult GetMember(GetMemberInput input) { return(this.Children.Values.Cast <CreatedTableColumn>().FirstOrDefault(x => x.ColumnName.Name.Equals(input.Name, StringComparison.OrdinalIgnoreCase))); }