/*
* CodaSubExpression.java
*
* Created on August 13, 2007, 9:50 PM
*
* CodaServer and related original technologies are copyright 2008, 18th Street Software, LLC.
*
* Permission to use them is granted under the terms of the GNU GPLv2.
*/
package org.codalang.codaserver.language.objects;
import org.codalang.codaserver.database.CodaConnection;
import org.codalang.codaserver.database.CodaDatabase;
/**
*
* @author michaelarace
*/
public class CodaSubExpression {
public static final int SUB_EXPRESSION_FUNCTION = 1;
public static final int SUB_EXPRESSION_EXPRESSION = 2;
public static final int SUB_EXPRESSION_COLUMN = 3;
public static final int SUB_EXPRESSION_CONSTANT = 4;
private String aliasName;
private String columnName;
private int type;
private String unaryOperator;
private String currentUserName, currentGroupName;
private CodaFunction function;
private CodaExpression expression;
private CodaConstant constant;
/** Creates a new instance of CodaSubExpression */
public CodaSubExpression(String currentUserName, String currentGroupName, String unaryOperator, CodaFunction function) {
this.setType(CodaSubExpression.SUB_EXPRESSION_FUNCTION);
this.setUnaryOperator(unaryOperator);
this.setFunction(function);
}
public CodaSubExpression(String currentUserName, String currentGroupName, String unaryOperator, CodaExpression expression) {
this.setType(CodaSubExpression.SUB_EXPRESSION_EXPRESSION);
this.setUnaryOperator(unaryOperator);
this.setExpression(expression);
}
public CodaSubExpression(String currentUserName, String currentGroupName, String unaryOperator, String aliasName, String columnName) {
this.setType(CodaSubExpression.SUB_EXPRESSION_COLUMN);
this.setUnaryOperator(unaryOperator);
this.setColumnName(columnName);
this.setAliasName(aliasName);
}
public CodaSubExpression(String currentUserName, String currentGroupName, String unaryOperator, CodaConstant constant) {
this.setType(CodaSubExpression.SUB_EXPRESSION_CONSTANT);
this.setUnaryOperator(unaryOperator);
this.setConstant(constant);
}
public String getAliasName() {
return aliasName;
}
public void setAliasName(String aliasName) {
this.aliasName = aliasName;
}
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public boolean containsColumn() {
return type == CodaSubExpression.SUB_EXPRESSION_COLUMN;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getUnaryOperator() {
return unaryOperator;
}
public void setUnaryOperator(String unaryOperator) {
this.unaryOperator = unaryOperator;
}
public CodaFunction getFunction() {
return function;
}
public void setFunction(CodaFunction function) {
this.function = function;
}
public CodaExpression getExpression() {
return expression;
}
public void setExpression(CodaExpression expression) {
this.expression = expression;
}
public CodaConstant getConstant() {
return constant;
}
public void setConstant(CodaConstant constant) {
this.constant = constant;
}
public String toString() {
switch (type) {
case CodaSubExpression.SUB_EXPRESSION_FUNCTION:
return (unaryOperator != null ? unaryOperator + " " : "") + function.toString() + " ";
case CodaSubExpression.SUB_EXPRESSION_EXPRESSION:
return (unaryOperator != null ? unaryOperator + " " : "") + "(" + expression.toString() + ") ";
case CodaSubExpression.SUB_EXPRESSION_COLUMN:
return (unaryOperator != null ? unaryOperator + " " : "") + (aliasName != null ? aliasName + "." : "") + columnName + " ";
case CodaSubExpression.SUB_EXPRESSION_CONSTANT:
String retval = (unaryOperator != null ? unaryOperator + " " : "");
if (constant.getSysvar() == -1) {
retval += "'" + constant.getValue().replace("'", "''") + "'";
} else {
switch (constant.getSysvar()) {
case CodaConstant.SYSVAR_CURRENT_USER_ID:
retval += currentUserName;
break;
case CodaConstant.SYSVAR_CURRENT_GROUP_NAME:
retval += currentGroupName;
break;
default:
retval += "CURRENT_TIMESTAMP";
break;
}
}
retval += " ";
return retval;
}
return "";
}
public String toString(CodaDatabase database, String inputTableName, String inputColumnName) {
CodaConnection connection = database.getConnection();
switch (type) {
case CodaSubExpression.SUB_EXPRESSION_FUNCTION:
return (unaryOperator != null ? unaryOperator + " " : "") + function.toString() + " ";
case CodaSubExpression.SUB_EXPRESSION_EXPRESSION:
return (unaryOperator != null ? unaryOperator + " " : "") + "(" + expression.toString() + ") ";
case CodaSubExpression.SUB_EXPRESSION_COLUMN:
return (unaryOperator != null ? unaryOperator + " " : "") + (aliasName != null ? aliasName + "." : "") + columnName + " ";
case CodaSubExpression.SUB_EXPRESSION_CONSTANT:
String retval = (unaryOperator != null ? unaryOperator + " " : "");
if (constant.getSysvar() == -1) {
retval += connection.formatStringForSQL(inputTableName, inputColumnName, constant.getValue());
} else {
switch (constant.getSysvar()) {
case CodaConstant.SYSVAR_CURRENT_USER_ID:
retval += currentUserName;
break;
case CodaConstant.SYSVAR_CURRENT_GROUP_NAME:
retval += currentGroupName;
break;
default:
retval += "CURRENT_TIMESTAMP";
break;
}
}
retval += " ";
return retval;
}
return "";
}
}