Package org.teiid.query.sql.symbol

Source Code of org.teiid.query.sql.symbol.XMLQuery

package org.teiid.query.sql.symbol;

import java.util.ArrayList;
import java.util.List;

import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.EquivalenceUtil;
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.visitor.SQLStringVisitor;
import org.teiid.query.xquery.saxon.SaxonXQueryExpression;

public class XMLQuery implements Expression {
 
    private XMLNamespaces namespaces;
    private String xquery;
    private List<DerivedColumn> passing = new ArrayList<DerivedColumn>();
    private Boolean emptyOnEmpty;
   
    private SaxonXQueryExpression xqueryExpression;
   
    @Override
    public Class<?> getType() {
      return DataTypeManager.DefaultDataClasses.XML;
    }
   
    public Boolean getEmptyOnEmpty() {
    return emptyOnEmpty;
  }
   
    public void setEmptyOnEmpty(Boolean emptyOnEmpty) {
    this.emptyOnEmpty = emptyOnEmpty;
  }
   
    @Override
    public boolean isResolved() {
      return xqueryExpression != null;
    }
   
    public List<DerivedColumn> getPassing() {
    return passing;
  }
   
    //TODO: display the analysis record info
    public void compileXqueryExpression() throws QueryResolverException {
      this.xqueryExpression = new SaxonXQueryExpression(xquery, namespaces, passing, null);
      this.xqueryExpression.useDocumentProjection(null, new AnalysisRecord(false, false));
    }
   
    public SaxonXQueryExpression getXQueryExpression() {
    return xqueryExpression;
  }
   
    public void setPassing(List<DerivedColumn> passing) {
    this.passing = passing;
  }
   
    public String getXquery() {
    return xquery;
  }
   
    public void setXquery(String xquery) {
    this.xquery = xquery;
  }
   
    public XMLNamespaces getNamespaces() {
    return namespaces;
  }
   
    public void setNamespaces(XMLNamespaces namespaces) {
    this.namespaces = namespaces;
  }
   
  @Override
  public void acceptVisitor(LanguageVisitor visitor) {
    visitor.visit(this);
  }

  @Override
  public XMLQuery clone() {
    XMLQuery clone = new XMLQuery();
    if (this.namespaces != null) {
      clone.namespaces = this.namespaces.clone();
    }
    if (this.passing != null) {
      for (DerivedColumn col : this.passing) {
        clone.passing.add(col.clone());
      }
    }
    clone.xquery = this.xquery;
    if (this.xqueryExpression != null) {
      clone.xqueryExpression = this.xqueryExpression.clone();
    }
    clone.emptyOnEmpty = this.emptyOnEmpty;
    return clone;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == this) {
      return true;
    }
    if (!(obj instanceof XMLQuery)) {
      return false;
    }
    XMLQuery other = (XMLQuery)obj;
    return EquivalenceUtil.areEqual(this.namespaces, other.namespaces)
        && this.passing.equals(other.passing)
        && this.xquery.equals(other.xquery)
        && EquivalenceUtil.areEqual(this.emptyOnEmpty, other.emptyOnEmpty);
  }
 
  @Override
  public int hashCode() {
    return this.xquery.hashCode();
  }
 
  @Override
  public String toString() {
    return SQLStringVisitor.getSQLString(this);
  }

}
TOP

Related Classes of org.teiid.query.sql.symbol.XMLQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.