private static IASTNode MakeIdent(IASTNode source, string text)
 {
     var ident = source.DupNode();
     ident.Type = HqlSqlWalker.IDENT;
     ident.Text = text;
     return ident;
 }
Beispiel #2
0
        private IASTNode Expand()
        {
            IList <IASTNode> parameters = ParameterDetector.LocateParameters(_tree, new HashSet <string>(_map.Keys));
            var nodeMapping             = new Dictionary <IASTNode, IEnumerable <IASTNode> >();

            foreach (IASTNode param in parameters)
            {
                IASTNode      paramName  = param.GetChild(0);
                List <string> aliases    = _map[paramName.Text];
                var           astAliases = new List <IASTNode>();

                foreach (string alias in aliases)
                {
                    IASTNode astAlias     = param.DupNode();
                    IASTNode astAliasName = paramName.DupNode();
                    astAliasName.Text = alias;
                    astAlias.AddChild(astAliasName);

                    astAliases.Add(astAlias);
                }

                nodeMapping.Add(param, astAliases);
            }

            return(DuplicateTree(_tree, nodeMapping));
        }
        private static IASTNode MakeIdent(IASTNode source, string text)
        {
            var ident = source.DupNode();

            ident.Type = HqlSqlWalker.IDENT;
            ident.Text = text;
            return(ident);
        }
        private static IASTNode DuplicateTree(IASTNode ast)
        {
            var thisNode = ast.DupNode();

            foreach (var child in ast)
            {
                thisNode.AddChild(DuplicateTree(child));
            }
            return(thisNode);
        }
        private void TransformUnshardedAverageNode(IASTNode average)
        {
            var star = average.DupNode();

            star.Type = HqlSqlWalker.ROW_STAR;
            star.Text = "*";

            var count = average.DupNode();

            count.Type = HqlSqlWalker.COUNT;
            count.Text = "count";
            count.AddChild(star);

            while (average.Parent.Type != HqlSqlWalker.SELECT)
            {
                average = average.Parent;
            }
            average.AddSibling(count);
        }
        private static IASTNode DuplicateTree(IASTNode ast, IDictionary<IASTNode, IASTNode> nodeMapping)
        {
            IASTNode candidate;

            if (nodeMapping.TryGetValue(ast, out candidate))
            {
                return candidate;
            }

            var dup = ast.DupNode();

            foreach (var child in ast)
            {
                dup.AddChild(DuplicateTree(child, nodeMapping));
            }

            return dup;
        }
        private static IASTNode DuplicateTree(IASTNode ast, IDictionary <IASTNode, IASTNode> nodeMapping)
        {
            IASTNode candidate;

            if (nodeMapping.TryGetValue(ast, out candidate))
            {
                return(candidate);
            }

            var dup = ast.DupNode();

            foreach (var child in ast)
            {
                dup.AddChild(DuplicateTree(child, nodeMapping));
            }

            return(dup);
        }
        private static IASTNode DuplicateTree(IASTNode ast, IDictionary <IASTNode, IEnumerable <IASTNode> > nodeMapping)
        {
            IASTNode thisNode = ast.DupNode();

            foreach (IASTNode child in ast)
            {
                IEnumerable <IASTNode> candidate;

                if (nodeMapping.TryGetValue(child, out candidate))
                {
                    foreach (IASTNode replacement in candidate)
                    {
                        thisNode.AddChild(replacement);
                    }
                }
                else
                {
                    thisNode.AddChild(DuplicateTree(child, nodeMapping));
                }
            }

            return(thisNode);
        }
		private static IASTNode DuplicateTree(IASTNode ast, IDictionary<IASTNode, IEnumerable<IASTNode>> nodeMapping)
		{
			IASTNode thisNode = ast.DupNode();

			foreach (IASTNode child in ast)
			{
				IEnumerable<IASTNode> candidate;

				if (nodeMapping.TryGetValue(child, out candidate))
				{
					foreach (IASTNode replacement in candidate)
					{
						thisNode.AddChild(replacement);
					}
				}
				else
				{
					thisNode.AddChild(DuplicateTree(child, nodeMapping));
				}
			}

			return thisNode;
		}
 public UnfinishedNodeCopy(IASTNode node, Action <IASTNode> transformer)
 {
     this.Node        = node.DupNode();
     this.Children    = GetChildren(node);
     this.Transformer = transformer;
 }