package org.aksw.sparqlify.algebra.sql.exprs2; import java.io.ByteArrayOutputStream; import org.aksw.sparqlify.core.TypeToken; import org.apache.jena.atlas.io.IndentedWriter; public abstract class SqlExprBase implements SqlExpr { protected final TypeToken datatype; public SqlExprBase(TypeToken datatype) { this.datatype = datatype; if(datatype == null) { throw new NullPointerException(); } } public boolean isVariable() { return SqlExprType.Variable.equals(getType()); } public boolean isFunction() { return SqlExprType.Function.equals(getType()); } public SqlExprFunction asFunction() { return (SqlExprFunction)this; } public SqlExprConstant asConstant() { return (SqlExprConstant)this; } public SqlExprVar asVariable() { return (SqlExprVar)this; } public boolean isConstant() { return SqlExprType.Constant.equals(getType()); } public TypeToken getDatatype() { return datatype; } /* public void setDatatype(SqlDatatype datatype) { this.datatype = datatype; } */ @Override public String toString() { ByteArrayOutputStream out = new ByteArrayOutputStream(); IndentedWriter writer = new IndentedWriter(out); asString(writer); writer.flush(); writer.close(); return out.toString(); } /* @Override public void asString(IndentedWriter writer) { asString(writer, this.getClass().getSimpleName(), getArgs()); } public static void asString(IndentedWriter writer, String nodeName, SqlExpr ... args) { asString(writer, nodeName, Arrays.asList(args)); } public static void asString(IndentedWriter writer, String nodeName, List<SqlExpr> args) { writer.println( "(" + nodeName); writer.incIndent(); for(SqlExpr arg : args) { arg.asString(writer); } writer.decIndent(); writer.println(")"); } */ // // public static Set<SqlExprColumn> getColumnsMentioned(SqlExpr expr) { // Set<SqlExprColumn> result = new HashSet<SqlExprColumn>(); // // _getColumnsMentioned(result, expr); // // return result; // } // // public static void _getColumnsMentioned(Set<SqlExprColumn> result, SqlExpr expr) { // if(expr instanceof SqlExprColumn) { // result.add((SqlExprColumn)expr); // return; // } // // for(SqlExpr arg : expr.getArgs()) { // _getColumnsMentioned(result, arg); // } // } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((datatype == null) ? 0 : datatype.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; SqlExprBase other = (SqlExprBase) obj; if (datatype == null) { if (other.datatype != null) return false; } else if (!datatype.equals(other.datatype)) return false; return true; } }