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); } }
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); }