in HSQL/src/org/hsqldb1/Expression.java [590:869]
String getDDL() throws HsqlException {
StringBuffer buf = new StringBuffer(64);
String left = null;
String right = null;
if (eArg != null) {
left = Expression.getContextDDL(eArg);
}
if (eArg2 != null) {
right = Expression.getContextDDL(eArg2);
}
switch (exprType) {
case FUNCTION :
return function.getDLL();
case VALUE :
try {
return isParam ? Token.T_QUESTION
: Column.createSQLString(valueData,
dataType);
} catch (HsqlException e) {}
return buf.toString();
case COLUMN :
// this is a limited solution
Table table = tableFilter.getTable();
if (tableName != null) {
buf.append(table.tableName.statementName);
buf.append('.');
}
buf.append(
table.getColumn(columnIndex).columnName.statementName);
return buf.toString();
case TRUE :
return Token.T_TRUE;
case FALSE :
return Token.T_FALSE;
case VALUELIST :
for (int i = 0; i < valueList.length; i++) {
buf.append(valueList[i].getDDL());
if (i < valueList.length - 1) {
buf.append(',');
}
}
return buf.toString();
case ASTERISK :
buf.append('*');
return buf.toString();
case NEGATE :
buf.append('-').append(left);
return buf.toString();
case ADD :
buf.append(left).append('+').append(right);
return buf.toString();
case SUBTRACT :
buf.append(left).append('-').append(right);
return buf.toString();
case MULTIPLY :
buf.append(left).append('*').append(right);
return buf.toString();
case DIVIDE :
buf.append(left).append('/').append(right);
return buf.toString();
case CONCAT :
buf.append(left).append("||").append(right);
return buf.toString();
case NOT :
if (eArg.exprType == IS_NULL) {
buf.append(getContextDDL(eArg.eArg)).append(' ').append(
Token.T_IS).append(' ').append(Token.T_NOT).append(
' ').append(Token.T_NULL);
return buf.toString();
}
buf.append(Token.T_NOT).append(' ').append(left);
return buf.toString();
case EQUAL :
buf.append(left).append('=').append(right);
return buf.toString();
case BIGGER_EQUAL :
buf.append(left).append(">=").append(right);
return buf.toString();
case BIGGER :
buf.append(left).append('>').append(right);
return buf.toString();
case SMALLER :
buf.append(left).append('<').append(right);
return buf.toString();
case SMALLER_EQUAL :
buf.append(left).append("<=").append(right);
return buf.toString();
case NOT_EQUAL :
if (Token.T_NULL.equals(right)) {
buf.append(left).append(" IS NOT ").append(right);
} else {
buf.append(left).append("!=").append(right);
}
return buf.toString();
case LIKE :
buf.append(left).append(' ').append(Token.T_LIKE).append(' ');
buf.append(right);
/** @todo fredt - scripting of non-ascii escapes needs changes to general script logging */
if (likeObject.escapeChar != null) {
buf.append(' ').append(Token.T_ESCAPE).append(' ').append(
'\'');
buf.append(likeObject.escapeChar.toString()).append('\'');
buf.append(' ');
}
return buf.toString();
case AND :
buf.append(left).append(' ').append(Token.T_AND).append(
' ').append(right);
return buf.toString();
case OR :
buf.append(left).append(' ').append(Token.T_OR).append(
' ').append(right);
return buf.toString();
case ALL :
buf.append(left).append(' ').append(Token.T_ALL).append(
' ').append(right);
return buf.toString();
case ANY :
buf.append(left).append(' ').append(Token.T_ANY).append(
' ').append(right);
return buf.toString();
case IN :
buf.append(left).append(' ').append(Token.T_IN).append(
' ').append(right);
return buf.toString();
case CONVERT :
buf.append(' ').append(Token.T_CONVERT).append('(');
buf.append(left).append(',');
buf.append(Types.getTypeString(dataType, precision, scale));
buf.append(')');
return buf.toString();
case CASEWHEN :
buf.append(' ').append(Token.T_CASEWHEN).append('(');
buf.append(left).append(',').append(right).append(')');
return buf.toString();
case IS_NULL :
buf.append(left).append(' ').append(Token.T_IS).append(
' ').append(Token.T_NULL);
return buf.toString();
case ALTERNATIVE :
buf.append(left).append(',').append(right);
return buf.toString();
case QUERY :
/*
buf.append('(');
buf.append(subSelect.getDDL());
buf.append(')');
*/
break;
case EXISTS :
buf.append(' ').append(Token.T_EXISTS).append(' ');
break;
case COUNT :
buf.append(' ').append(Token.T_COUNT).append('(');
break;
case SUM :
buf.append(' ').append(Token.T_SUM).append('(');
buf.append(left).append(')');
break;
case MIN :
buf.append(' ').append(Token.T_MIN).append('(');
buf.append(left).append(')');
break;
case MAX :
buf.append(' ').append(Token.T_MAX).append('(');
buf.append(left).append(')');
break;
case AVG :
buf.append(' ').append(Token.T_AVG).append('(');
buf.append(left).append(')');
break;
case EVERY :
buf.append(' ').append(Token.T_EVERY).append('(');
buf.append(left).append(')');
break;
case SOME :
buf.append(' ').append(Token.T_SOME).append('(');
buf.append(left).append(')');
break;
case STDDEV_POP :
buf.append(' ').append(Token.T_STDDEV_POP).append('(');
buf.append(left).append(')');
break;
case STDDEV_SAMP :
buf.append(' ').append(Token.T_STDDEV_SAMP).append('(');
buf.append(left).append(')');
break;
case VAR_POP :
buf.append(' ').append(Token.T_VAR_POP).append('(');
buf.append(left).append(')');
break;
case VAR_SAMP :
buf.append(' ').append(Token.T_VAR_SAMP).append('(');
buf.append(left).append(')');
break;
}
throw Trace.error(Trace.EXPRESSION_NOT_SUPPORTED);
}