Package org.openrdf.sail.rdbms.algebra.base

Source Code of org.openrdf.sail.rdbms.algebra.base.UnarySqlOperator

/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.algebra.base;

import org.openrdf.query.algebra.QueryModelNode;
import org.openrdf.query.algebra.QueryModelVisitor;
import org.openrdf.query.algebra.helpers.QueryModelTreePrinter;
import org.openrdf.sail.rdbms.optimizers.SqlConstantOptimizer;

/**
* An SQL operator with one argument.
*
* @author James Leigh
*/
public abstract class UnarySqlOperator extends RdbmsQueryModelNodeBase implements SqlExpr {

  private SqlExpr arg;

  public UnarySqlOperator() {
    super();
  }

  public UnarySqlOperator(SqlExpr arg) {
    super();
    setArg(arg);
  }

  public SqlExpr getArg() {
    return arg;
  }

  public void setArg(SqlExpr arg) {
    this.arg = arg;
    arg.setParentNode(this);
  }

  @Override
  public <X extends Exception> void visitChildren(QueryModelVisitor<X> visitor)
    throws X
  {
    arg.visit(visitor);
  }

  @Override
  public void replaceChildNode(QueryModelNode current, QueryModelNode replacement) {
    if (arg == current) {
      setArg((SqlExpr)replacement);
    }
    else {
      super.replaceChildNode(current, replacement);
    }
  }

  @Override
  public UnarySqlOperator clone() {
    UnarySqlOperator clone = (UnarySqlOperator)super.clone();
    clone.setArg(arg.clone());
    return clone;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((arg == null) ? 0 : arg.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final UnarySqlOperator other = (UnarySqlOperator)obj;
    if (arg == null) {
      if (other.arg != null) {
        return false;
      }
    }
    else if (!arg.equals(other.arg)) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    QueryModelTreePrinter treePrinter = new QueryModelTreePrinter();
    UnarySqlOperator clone = this.clone();
    UnarySqlOperator parent = new UnarySqlOperator(clone) {

      @Override
      public <X extends Exception> void visit(RdbmsQueryModelVisitorBase<X> visitor)
        throws X
      {
        visitor.meetOther(this);
      }
    };
    new SqlConstantOptimizer().optimize(clone);
    parent.getArg().visit(treePrinter);
    return treePrinter.getTreeString();
  }

}
TOP

Related Classes of org.openrdf.sail.rdbms.algebra.base.UnarySqlOperator

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.