예제 #1
0
        public void Visit(SelectAll all)
        {
            all.Parent.Parent.Children.Remove(all.Parent);

            var tableMatches = Scope.Current.FindAll();

            if (tableMatches.Length == 0) //only has a dynamic object and we can't tell the property names till runtime. Compile error.
            {
                Errors.Add(new SelectNoColumnsFound(new Semantic.LineInfo(all.Line.Line, all.Line.CharacterPosition)));
            }

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

                var arg = new SelectArg();
                arg.Children.Add(tableReferance);
                all.Parent.Parent.Children.Add(arg);
            }
        }
예제 #2
0
        public void Visit(SelectArg arg)
        {
            var selectInfo = new SelectArgsInfo();

            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 (arg.Args.Length > 1) //more than one statement (arg + arg)
            {
                selectInfo.ColumnName = null;
            }
            else if (arg.Args.Length == 1 && childDomArgs[0].Tag != null) //only add column name
            {
                selectInfo.ColumnName = ((SelectArgsInfo)childDomArgs[0].Tag).ColumnName;
            }

            foreach (var childDomArg in childDomArgs)
            {
                if (childDomArg.Tag != null && ((SelectArgsInfo)childDomArg.Tag).IsPickStatement)
                {
                    selectInfo.IsPickStatement = true;
                }
            }

            if (arg.As != null)
            {
                selectInfo.ColumnName = arg.As.Alias;
            }

            _codeStack.Peek().Tag            = selectInfo;
            _codeStack.Peek().Scope          = scope;
            _codeStack.Peek().CodeExpression = expression;
        }
예제 #3
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;
        }
예제 #4
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);
            }
        }
예제 #5
0
 public void Visit(SelectArg arg, CommonTree tree)
 {
     Parent(tree).Children.Add(arg);
     SetLine(arg, tree);
     VisitChildren(tree);
 }