Inheritance: AstNode
Esempio n. 1
0
        public void Visit(SelectAll all)
        {
            all.Parent.Parent.Children.Remove(all.Parent);

            var tableMatches = Scope.Current.FindAll();

            foreach(var match in tableMatches)
            {
                var tableReferance = new TableMemberReference {
                    Member = match.TableVariable.Variable,
                    RowReference = new TableVariableRowReference { Id = match.TableAlias }
                };

                var arg = new SelectArg();
                arg.Children.Add(tableReferance);
                all.Parent.Parent.Children.Add(arg);
            }
        }
Esempio n. 2
0
        public void Visit(SelectArg arg)
        {
            var childDomArgs = new List<CodeDomArg>();
            foreach (var childArg in arg.Args)
            {
                var domArgs = VisitChild(childArg, new CodeDomArg() { Scope = _codeStack.Peek().Scope });
                childDomArgs.Add(domArgs);
            }

            var expression = childDomArgs[0].CodeExpression;
            var scope = childDomArgs[0].Scope;
            for (int x = 1; x < childDomArgs.Count; x++)
            {
                expression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(Helper)), "NullConcat", expression, childDomArgs[x].CodeExpression);
                scope = childDomArgs[x].Scope;
            }

            if (childDomArgs[0].ParentStatements.Count == 0 || arg.Args.Length > 1) //if no statements or more than one statement (arg + arg)
            {
                _codeStack.Peek()
                   .ParentStatements.Add(new CodeMethodInvokeExpression(new CodeTypeReferenceExpression("result"),
                       "AddColumn",
                       new CodePrimitiveExpression("(No column name)")));
            }
            else if(arg.Args.Length == 1) //only add column name
                _codeStack.Peek().ParentStatements.AddRange(childDomArgs[0].ParentStatements);

            foreach(var childDomArg in childDomArgs)
            {
                if (childDomArg.Tag != null)
                    _codeStack.Peek().Tag = childDomArg.Tag;
            }

            _codeStack.Peek().Scope = scope;
            _codeStack.Peek().CodeExpression = expression;
        }
Esempio n. 3
0
 public void Visit(SelectArg arg, CommonTree tree)
 {
     Parent(tree).Children.Add(arg);
     VisitChildren(tree);
 }