Example #1
0
        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;
            }
        }
Example #2
0
        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;
                }
            }