public PropertyGraphModel Transform(PropertyGraphModel graph) { var result = graph; if (WhereClause != null) { result = WhereClause.Transform(result); } if (CalculateClause != null) { result = CalculateClause.Transform(result); } if (SelectPropsClause != null) { result = SelectPropsClause.Transform(result); } if (GroupByClause != null) { result = GroupByClause.Transform(result); } if (LayoutClause != null) { result = LayoutClause.Transform(result); } result.ClearIfEmpty(); return(result); }
private SelectPropsClause ParseSelectPropsClause(ParseTreeNode node) { var result = new SelectPropsClause(); foreach (var prop in node.ChildNodes) { string alias = null; if (prop.ChildNodes[1].ChildNodes.Count > 0) { alias = prop.ChildNodes[1].ChildNodes[1].ChildNodes[0].Token.ValueString; } if (string.Equals(prop.ChildNodes[0]?.Term?.Name, "wildcardIdentifier", StringComparison.InvariantCultureIgnoreCase)) { if (prop.ChildNodes[0].ChildNodes.Count == 1) { result.AddProp( ParseWildcardIdentifier(prop.ChildNodes[0], alias) ); } else { ParseEdgeIdentifier(prop.ChildNodes[0], alias, result); } } else { result.AddProp( ParseSelectExpression(prop.ChildNodes[0], alias) ); } } return(result); }
private void ParseEdgeIdentifier(ParseTreeNode id, string alias, SelectPropsClause result) { //edge prop string firstToken = id.ChildNodes[0].Token.ValueString.ToLower(); if (firstToken == "edge" || firstToken == "edges") { if (id.ChildNodes.Count == 2) { result.AddEdgeFilter(WildcardOrName(id.ChildNodes[1]), alias); return; } if (id.ChildNodes.Count == 3) { result.AddEdgePropFilter(WildcardOrName(id.ChildNodes[1]), WildcardOrName(id.ChildNodes[2]), alias); return; } } throw new GraphQuerySyntaxError("unknown property identifier"); }