public IQsiDefinitionNode VisitViewStatementBody(ViewStatementBody viewStatementBody) { if (viewStatementBody is not(CreateViewStatement or CreateOrAlterViewStatement)) { throw TreeHelper.NotSupportedTree(viewStatementBody); } var node = new SqlServerViewDefinitionNode { IsAlter = viewStatementBody is CreateOrAlterViewStatement, IsMaterialiazed = viewStatementBody.IsMaterialized, WithCheckOption = viewStatementBody.WithCheckOption, ViewOptions = viewStatementBody.ViewOptions?.Select(option => option.OptionKind.ToString()).ToArray(), Identifier = IdentifierVisitor.CreateQualifiedIdentifier(viewStatementBody.SchemaObjectName) }; if (ListUtility.IsNullOrEmpty(viewStatementBody.Columns)) { node.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration()); } else { var columnsDeclaration = new QsiColumnsDeclarationNode(); columnsDeclaration.Columns.AddRange(TableVisitor.CreateSequentialColumnNodes(viewStatementBody.Columns)); node.Columns.SetValue(columnsDeclaration); } node.Source.SetValue(TableVisitor.VisitSelectStatement(viewStatementBody.SelectStatement)); SqlServerTree.PutFragmentSpan(node, viewStatementBody); return(node); }
public QsiExpressionNode VisitEventDeclarationCompareFunctionParameter(EventDeclarationCompareFunctionParameter eventDeclarationCompareFunctionParameter) { return(TreeHelper.Create <QsiInvokeExpressionNode>(n => { n.Member.SetValue(TreeHelper.CreateFunction(SqlServerKnownFunction.EventDeclarationCompare)); if (eventDeclarationCompareFunctionParameter.Name != null) { n.Parameters.Add(TreeHelper.Create <QsiTableExpressionNode>(tn => { tn.Table.SetValue(new QsiTableReferenceNode { Identifier = IdentifierVisitor.CreateQualifiedIdentifier(eventDeclarationCompareFunctionParameter.Name.MultiPartIdentifier) }); })); } if (eventDeclarationCompareFunctionParameter.EventValue != null) { n.Parameters.Add(VisitScalarExpression(eventDeclarationCompareFunctionParameter.EventValue)); } if (eventDeclarationCompareFunctionParameter.SourceDeclaration != null) { n.Parameters.Add(VisitSourceDeclaration(eventDeclarationCompareFunctionParameter.SourceDeclaration)); } SqlServerTree.PutFragmentSpan(n, eventDeclarationCompareFunctionParameter); })); }
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); })); }
public QsiColumnNode VisitSelectStarExpression(SelectStarExpression selectStarExpression) { return(TreeHelper.Create <QsiAllColumnNode>(n => { if (selectStarExpression.Qualifier != null) { n.Path = IdentifierVisitor.CreateQualifiedIdentifier(selectStarExpression.Qualifier); } SqlServerTree.PutFragmentSpan(n, selectStarExpression); })); }
public QsiTableNode VisitNamedTableReference(NamedTableReference namedTableReference) { var tableNode = new QsiTableReferenceNode { Identifier = IdentifierVisitor.CreateQualifiedIdentifier(namedTableReference.SchemaObject) }; SqlServerTree.PutFragmentSpan(tableNode, namedTableReference.SchemaObject); if (namedTableReference.Alias == null) { return(tableNode); } return(TreeHelper.Create <QsiDerivedTableNode>(n => { n.Columns.SetValue(TreeHelper.CreateAllColumnsDeclaration()); n.Source.SetValue(tableNode); n.Alias.SetValue(CreateAliasNode(namedTableReference.Alias)); SqlServerTree.PutFragmentSpan(n, namedTableReference); })); }