コード例 #1
0
        public static QsiColumnNode VisitColumnParseNode(ColumnParseNode node)
        {
            var columnNode = new QsiColumnReferenceNode
            {
                Name = IdentifierVisitor.Visit(node)
            };

            PTree.RawNode[columnNode] = node;

            return(columnNode);
        }
コード例 #2
0
        public QsiColumnNode VisitSelectScalarExpression(SelectScalarExpression selectScalarExpression)
        {
            QsiExpressionNode      expression = null;
            QsiColumnReferenceNode column     = null;

            if (selectScalarExpression.Expression is ColumnReferenceExpression columnReferenceExpression)
            {
                column = new QsiColumnReferenceNode
                {
                    Name = IdentifierVisitor.CreateQualifiedIdentifier(columnReferenceExpression.MultiPartIdentifier)
                };

                if (selectScalarExpression.ColumnName == null)
                {
                    SqlServerTree.PutFragmentSpan(column, selectScalarExpression);
                    return(column);
                }
            }
            else
            {
                expression = ExpressionVisitor.VisitScalarExpression(selectScalarExpression.Expression);
            }

            return(TreeHelper.Create <QsiDerivedColumnNode>(n =>
            {
                if (column != null)
                {
                    n.Column.SetValue(column);
                }
                else if (expression != null)
                {
                    n.Expression.SetValue(expression);
                }

                var columnName = selectScalarExpression.ColumnName;

                if (columnName != null)
                {
                    if (columnName.Identifier == null)
                    {
                        n.Alias.SetValue(new QsiAliasNode
                        {
                            Name = new QsiIdentifier(columnName.Value, false)
                        });
                    }
                    else
                    {
                        n.Alias.SetValue(CreateAliasNode(columnName.Identifier));
                    }
                }

                SqlServerTree.PutFragmentSpan(n, selectScalarExpression);
            }));
        }
コード例 #3
0
        public QsiActionNode VisitInsertSpecificiation(InsertSpecification insertSpecification)
        {
            var node      = new QsiDataInsertActionNode();
            var tableNode = TableVisitor.VisitTableReference(insertSpecification.Target);

            if (tableNode is not QsiTableReferenceNode tableReferenceNode)
            {
                throw new QsiException(QsiError.Syntax);
            }

            node.Target.SetValue(tableReferenceNode);

            if (!ListUtility.IsNullOrEmpty(insertSpecification.Columns))
            {
                node.Columns = insertSpecification.Columns
                               .Select(ExpressionVisitor.VisitColumnReferenceExpression)
                               .Select(c => c.Column.Value switch
                {
                    QsiColumnReferenceNode columnReferenceNode => columnReferenceNode.Name,
                    QsiAllColumnNode allColumnNode => allColumnNode.Path,
                    _ => throw new QsiException(QsiError.Syntax)
                })
コード例 #4
0
 public SelectorPair(QsiColumnReferenceNode column)
 {
     Column     = column;
     Expression = null;
 }