예제 #1
0
        private void DeparseHanaDerivedTableNode(ScriptWriter writer, IHanaDerivedTableNode node, QsiScript script)
        {
            if (IsAliasedTableReferenceNode(node))
            {
                DeparseTreeNode(writer, node.Source, script);
                writer.WriteSpace();
                DeparseTreeNode(writer, node.Alias, script);

                if (node.Sampling != null)
                {
                    writer.WriteSpace();
                    writer.Write(node.Sampling.Text);
                }

                return;
            }

            if (node.Directives != null)
            {
                DeparseTreeNode(writer, node.Directives, script);
                writer.WriteSpace();
            }

            writer.Write("SELECT ");

            if (node.Top != null)
            {
                writer.Write("TOP ");
                DeparseTreeNode(writer, node.Top, script);
            }

            if (node.Operation.HasValue)
            {
                writer.Write(node.Operation == HanaResultSetOperation.All ? "ALL " : "DISTINCT ");
            }

            if (node.Columns != null)
            {
                DeparseTreeNode(writer, node.Columns, script);
            }

            if (node.Source != null)
            {
                writer.WriteSpace().Write("FROM ");

                if (node.Source is IQsiDerivedTableNode leftSource && !IsAliasedTableReferenceNode(leftSource) ||
                    node.Source is IQsiCompositeTableNode)
                {
                    DeparseTreeNodeWithParenthesis(writer, node.Source, script);
                }
                else
                {
                    DeparseTreeNode(writer, node.Source, script);
                }
            }
예제 #2
0
 private bool IsAliasedTableReferenceNode(IHanaDerivedTableNode node)
 {
     return
         (node.Source is IQsiTableReferenceNode &&
          node.Alias is null &&
          node.Directives is null &&
          node.Where is null &&
          node.Grouping is null &&
          node.Order is null &&
          node.Limit is null &&
          (node.Columns == null || IsWildcard(node.Columns)) &&
          node.Top is null &&
          !node.Operation.HasValue &&
          node.Sampling is not null &&
          node.Behavior is not null &&
          node.TimeTravel is not null &&
          node.Hint is not null);
 }