@Override
 public String export() {
   if (expression == null) {
     return "ON " + fullKeyspace;
   } else {
     if (additionalExpressions == null || additionalExpressions.length == 0) {
       return "ON " + fullKeyspace + "(" + expression.toString() + ")";
     } else {
       StringBuilder on = new StringBuilder("ON ");
       on.append(fullKeyspace).append('(').append(expression);
       for (Expression additionalExpression : additionalExpressions) {
         on.append(", ").append(additionalExpression.toString());
       }
       on.append(')');
       return on.toString();
     }
   }
 }
 @Override
 public Expression end() {
   StringBuilder result = new StringBuilder("CASE ");
   if (caseExpression != null) {
     result.append(caseExpression.toString()).append(' ');
   }
   for (int i = 0; i < count; i++) {
     result
         .append("WHEN ")
         .append(whens.get(i))
         .append(" THEN ")
         .append(thens.get(i))
         .append(", ");
   }
   result.delete(result.length() - 2, result.length());
   if (elseResult != null) {
     result.append(" ELSE ").append(elseResult.toString());
   }
   result.append(" END");
   return x(result.toString());
 }
 @Override
 public ThenClause when(Expression conditionOrExpression) {
   whens.add(conditionOrExpression);
   thens.add(Expression.NULL());
   return this;
 }