protected override void DeparseCompositeTableNode(ScriptWriter writer, IQsiCompositeTableNode node, QsiScript script) { switch (node) { case SqlServerBinaryTableNode sqlServerBinaryTableNode: { string binaryTableType; switch (sqlServerBinaryTableNode.BinaryTableType) { case SqlServerBinaryTableType.Except: binaryTableType = " EXCEPT "; break; case SqlServerBinaryTableType.Intersect: binaryTableType = " INTERSECT "; break; case SqlServerBinaryTableType.Union: binaryTableType = " UNION "; break; default: throw new NotSupportedException(sqlServerBinaryTableNode.BinaryTableType.ToString()); } DeparseTreeNode(writer, sqlServerBinaryTableNode.Left.Value, script); writer.Write(binaryTableType); DeparseTreeNode(writer, sqlServerBinaryTableNode.Right.Value, script); break; } default: base.DeparseCompositeTableNode(writer, node, script); break; } }
protected virtual async ValueTask <QsiTableStructure> BuildRecursiveCompositeTableStructure(TableCompileContext context, IQsiDerivedTableNode table, IQsiCompositeTableNode source) { context.ThrowIfCancellationRequested(); var declaredTable = new QsiTableStructure { Type = QsiTableType.Derived, Identifier = new QsiQualifiedIdentifier(table.Alias.Name) }; int sourceOffset = 0; var structures = new List <QsiTableStructure>(source.Sources.Length); if (table.Columns.Any(c => c is not IQsiAllColumnNode)) { foreach (var columnNode in table.Columns.Cast <IQsiSequentialColumnNode>()) { var column = declaredTable.NewColumn(); column.Name = columnNode.Alias.Name; } }