/* Generated By:JJTree: Do not edit this line. XMLTable.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package org.teiid.query.sql.lang;
import java.util.ArrayList;
import java.util.List;
import org.teiid.core.types.DataTypeManagerService;
import org.teiid.designer.query.sql.lang.IXMLTable;
import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version;
import org.teiid.query.parser.LanguageVisitor;
import org.teiid.query.parser.TeiidNodeFactory.ASTNodes;
import org.teiid.designer.runtime.version.spi.ITeiidServerVersion;
import org.teiid.query.sql.symbol.DerivedColumn;
import org.teiid.query.sql.symbol.XMLNamespaces;
import org.teiid.query.xquery.saxon.SaxonXQueryExpression;
/**
*
*/
public class XMLTable extends TableFunctionReference implements IXMLTable<LanguageVisitor> {
private List<XMLColumn> columns = new ArrayList<XMLColumn>();
private String xquery;
private List<DerivedColumn> passing = new ArrayList<DerivedColumn>();
private boolean usingDefaultColumn;
private XMLNamespaces namespaces;
private SaxonXQueryExpression xqueryExpression;
/**
* @param p
* @param id
*/
public XMLTable(ITeiidServerVersion p, int id) {
super(p, id);
}
/**
* @return passing
*/
public List<DerivedColumn> getPassing() {
return passing;
}
/**
* @param passing
*/
public void setPassing(List<DerivedColumn> passing) {
this.passing = passing;
}
/**
* @return xquery
*/
public String getXquery() {
return xquery;
}
/**
* @param xquery
*/
public void setXquery(String xquery) {
this.xquery = xquery;
}
/**
* @return using default column
*/
public boolean isUsingDefaultColumn() {
return usingDefaultColumn;
}
/**
* @param usingDefaultColumn the usingDefaultColumn to set
*/
public void setUsingDefaultColumn(boolean usingDefaultColumn) {
this.usingDefaultColumn = usingDefaultColumn;
}
/**
* @return columns
*/
public List<XMLColumn> getColumns() {
return columns;
}
/**
* @param columns
*/
public void setColumns(List<XMLColumn> columns) {
if (columns.isEmpty()) {
usingDefaultColumn = true;
XMLColumn xmlColumn = createASTNode(ASTNodes.XML_COLUMN);
xmlColumn.setName("OBJECT_VALUE"); //$NON-NLS-1$
xmlColumn.setType(DataTypeManagerService.DefaultDataTypes.XML.getId());
xmlColumn.setPath("."); //$NON-NLS-1$
columns.add(xmlColumn);
}
this.columns = columns;
}
/**
* @return namespaces
*/
public XMLNamespaces getNamespaces() {
return namespaces;
}
/**
* @param namespaces
*/
public void setNamespaces(XMLNamespaces namespaces) {
this.namespaces = namespaces;
}
/**
* @throws Exception
*/
public void compileXqueryExpression() throws Exception {
this.xqueryExpression = new SaxonXQueryExpression(xquery, namespaces, passing, this.columns);
}
/**
* @return saxon xquery expression
*/
public SaxonXQueryExpression getXQueryExpression() {
return xqueryExpression;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((this.columns == null) ? 0 : this.columns.hashCode());
result = prime * result + ((this.namespaces == null) ? 0 : this.namespaces.hashCode());
result = prime * result + ((this.passing == null) ? 0 : this.passing.hashCode());
result = prime * result + (this.usingDefaultColumn ? 1231 : 1237);
result = prime * result + ((this.xquery == null) ? 0 : this.xquery.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
XMLTable other = (XMLTable)obj;
if (this.columns == null) {
if (other.columns != null)
return false;
} else if (!this.columns.equals(other.columns))
return false;
if (this.namespaces == null) {
if (other.namespaces != null)
return false;
} else if (!this.namespaces.equals(other.namespaces))
return false;
if (this.passing == null) {
if (other.passing != null)
return false;
} else if (!this.passing.equals(other.passing))
return false;
if (this.usingDefaultColumn != other.usingDefaultColumn)
return false;
if (this.xquery == null) {
if (other.xquery != null)
return false;
} else if (!this.xquery.equals(other.xquery))
return false;
return true;
}
/** Accept the visitor. **/
@Override
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
}
@Override
public XMLTable clone() {
XMLTable clone = new XMLTable(getTeiidVersion(), this.id);
if(getColumns() != null)
clone.setColumns(cloneList(getColumns()));
if(getPassing() != null)
clone.setPassing(cloneList(getPassing()));
if(getNamespaces() != null)
clone.setNamespaces(getNamespaces().clone());
if(getXquery() != null)
clone.setXquery(getXquery());
clone.setUsingDefaultColumn(isUsingDefaultColumn());
if(getName() != null)
clone.setName(getName());
clone.setOptional(isOptional());
clone.setMakeInd(getMakeInd());
clone.setNoUnnest(isNoUnnest());
clone.setMakeDep(isMakeDep());
clone.setMakeNotDep(isMakeNotDep());
clone.setPreserve(isPreserve());
return clone;
}
}
/* JavaCC - OriginalChecksum=7e5530ab340020c0908e2b5c8b4448f3 (do not edit this line) */