001/* 002// $Id: WithSetNode.java 482 2012-01-05 23:27:27Z jhyde $ 003// 004// Licensed to Julian Hyde under one or more contributor license 005// agreements. See the NOTICE file distributed with this work for 006// additional information regarding copyright ownership. 007// 008// Julian Hyde licenses this file to you under the Apache License, 009// Version 2.0 (the "License"); you may not use this file except in 010// compliance with the License. You may obtain a copy of the License at: 011// 012// http://www.apache.org/licenses/LICENSE-2.0 013// 014// Unless required by applicable law or agreed to in writing, software 015// distributed under the License is distributed on an "AS IS" BASIS, 016// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017// See the License for the specific language governing permissions and 018// limitations under the License. 019*/ 020package org.olap4j.mdx; 021 022import org.olap4j.type.Type; 023 024import java.io.PrintWriter; 025 026/** 027 * Parse tree node which declares a calculated set. Represented as the 028 * <code>WITH SET</code> clause of an MDX <code>SELECT</code> statement. 029 * 030 * @version $Id: WithSetNode.java 482 2012-01-05 23:27:27Z jhyde $ 031 * @author jhyde 032 */ 033public class WithSetNode implements ParseTreeNode { 034 035 private final ParseRegion region; 036 /** name of set */ 037 private final IdentifierNode name; 038 039 /** defining expression */ 040 private ParseTreeNode expression; 041 042 /** 043 * Creates a declaration of a named set. 044 * 045 * @param region Region of source code 046 * @param name Name of set 047 * @param expression Expression to calculate set 048 */ 049 public WithSetNode( 050 ParseRegion region, 051 IdentifierNode name, 052 ParseTreeNode expression) 053 { 054 this.region = region; 055 this.name = name; 056 this.expression = expression; 057 } 058 059 public ParseRegion getRegion() { 060 return region; 061 } 062 063 public void unparse(ParseTreeWriter writer) { 064 PrintWriter pw = writer.getPrintWriter(); 065 pw.print("SET "); 066 name.unparse(writer); 067 writer.indent(); 068 pw.println(" AS"); 069 expression.unparse(writer); 070 writer.outdent(); 071 } 072 073 /** 074 * Returns the name of the set. 075 * 076 * @return name of the set 077 */ 078 public IdentifierNode getIdentifier() { 079 return name; 080 } 081 082 /** 083 * Returns the expression which calculates the set. 084 * 085 * @return expression which calculates the set 086 */ 087 public ParseTreeNode getExpression() { 088 return expression; 089 } 090 091 /** 092 * Sets the expression which calculates the set. 093 * 094 * @param expression expression which calculates the set 095 */ 096 public void setExpression(ParseTreeNode expression) { 097 this.expression = expression; 098 } 099 100 public <T> T accept(ParseTreeVisitor<T> visitor) { 101 final T t = visitor.visit(this); 102 name.accept(visitor); 103 expression.accept(visitor); 104 return t; 105 } 106 107 public Type getType() { 108 // not an expression 109 throw new UnsupportedOperationException(); 110 } 111 112 public WithSetNode deepCopy() { 113 return new WithSetNode( 114 this.region, 115 this.name.deepCopy(), 116 this.expression.deepCopy()); 117 } 118} 119 120// End WithSetNode.java