public void Visit(AccessColumnNode node)
        {
            var identifier = _currentScope.ContainsAttribute(MetaAttributes.ProcessedQueryId)
                ? _currentScope[MetaAttributes.ProcessedQueryId]
                : _identifier;

            var tableSymbol = _currentScope.ScopeSymbolTable.GetSymbol <TableSymbol>(identifier);

            (ISchema Schema, ISchemaTable Table, string TableName)tuple;
            if (!string.IsNullOrEmpty(node.Alias))
            {
                tuple = tableSymbol.GetTableByAlias(node.Alias);
            }
            else
            {
                tuple = tableSymbol.GetTableByColumnName(node.Name);
            }

            var column = tuple.Table.Columns.SingleOrDefault(f => f.ColumnName == node.Name);

            AddAssembly(column.ColumnType.Assembly);
            node.ChangeReturnType(column.ColumnType);

            var accessColumn = new AccessColumnNode(column.ColumnName, tuple.TableName, column.ColumnType, node.Span);

            Nodes.Push(accessColumn);
        }
        public override void Visit(AccessMethodNode node)
        {
            if (node.IsAggregateMethod)
            {
                Nodes.Pop();

                var wordNode    = node.Arguments.Args[0] as WordNode;
                var accessGroup = new AccessColumnNode("none", string.Empty, typeof(Group), TextSpan.Empty);
                var args        = new List <Node> {
                    accessGroup, wordNode
                };
                args.AddRange(node.Arguments.Args.Skip(1));
                var extractFromGroup = new AccessMethodNode(
                    new FunctionToken(node.Method.Name, TextSpan.Empty),
                    new ArgsListNode(args.ToArray()), node.ExtraAggregateArguments, node.CanSkipInjectSource, node.Method, node.Alias);
                Nodes.Push(extractFromGroup);
            }
            else if (_fields.Select(f => f.Expression.ToString()).Contains(node.ToString()))
            {
                Nodes.Push(new AccessColumnNode(node.ToString(), string.Empty, node.ReturnType, TextSpan.Empty));
            }
            else
            {
                base.Visit(node);
            }
        }
 public override void Visit(AccessColumnNode node)
 {
     if (_aliases.ContainsKey(node.Alias))
     {
         base.Visit(new AccessColumnNode(NamingHelper.ToColumnName(node.Alias, node.Name), _aliases[node.Alias],
                                         node.ReturnType, TextSpan.Empty));
     }
     else
     {
         base.Visit(node);
     }
 }
        public void Visit(AccessColumnNode node)
        {
            var identifier = _currentScope.ContainsAttribute(MetaAttributes.ProcessedQueryId)
                ? _currentScope[MetaAttributes.ProcessedQueryId]
                : _identifier;

            var tableSymbol = _currentScope.ScopeSymbolTable.GetSymbol <TableSymbol>(identifier);

            (ISchema Schema, ISchemaTable Table, string TableName)tuple;
            if (!string.IsNullOrEmpty(node.Alias))
            {
                tuple = tableSymbol.GetTableByAlias(node.Alias);
            }
            else
            {
                tuple = tableSymbol.GetTableByColumnName(node.Name);
            }

            ISchemaColumn column;

            try
            {
                column = tuple.Table.GetColumnByName(node.Name);
            }
            catch (InvalidOperationException)
            {
                column = null;
            }

            if (column == null)
            {
                PrepareAndThrowUnknownColumnExceptionMessage(node.Name, tuple.Table.Columns);
            }

            AddAssembly(column.ColumnType.Assembly);
            node.ChangeReturnType(column.ColumnType);

            var accessColumn = new AccessColumnNode(column.ColumnName, tuple.TableName, column.ColumnType, node.Span);

            Nodes.Push(accessColumn);
        }
 public void Visit(AccessColumnNode node)
 {
     node.Accept(_visitor);
 }
예제 #6
0
 public virtual void Visit(AccessColumnNode node)
 {
     node.Accept(Visitor);
 }
예제 #7
0
 public override void Visit(AccessColumnNode node)
 {
     Nodes.Push(new AccessColumnNode(NamingHelper.ToColumnName(node.Alias, node.Name), string.Empty,
                                     node.ReturnType, TextSpan.Empty));
 }
예제 #8
0
 public virtual void Visit(AccessColumnNode node)
 {
     Nodes.Push(new AccessColumnNode(node.Name, node.Alias, node.ReturnType, node.Span));
 }
예제 #9
0
 public void Visit(AccessColumnNode node)
 {
 }
예제 #10
0
 public override void Visit(AccessColumnNode node)
 {
     base.Visit(new AccessColumnNode(NamingHelper.ToColumnName(node.Alias, node.Name), _alias, node.ReturnType,
                                     node.Span));
 }