@Override
 public void toJSONString(JSONStringer stringer) throws JSONException {
   super.toJSONString(stringer);
   stringer.keySymbolValuePair(Members.COLUMN_IDX, m_columnIndex);
   if (m_tableIdx > 0) {
     stringer.keySymbolValuePair(Members.TABLE_IDX, m_tableIdx);
   }
 }
 @Override
 public void toJSONString(JSONStringer stringer) throws JSONException {
   super.toJSONString(stringer);
   stringer.key(Members.COLUMN_IDX.name()).value(m_columnIndex);
   stringer.key(Members.TABLE_NAME.name()).value(m_tableName);
   stringer.key(Members.COLUMN_NAME.name()).value(m_columnName);
   stringer.key(Members.COLUMN_ALIAS.name()).value(m_columnAlias);
 }
 @Override
 public void toJSONString(JSONStringer stringer) throws JSONException {
   super.toJSONString(stringer);
   stringer.key(Members.COLUMN_IDX.name()).value(m_columnIndex);
   stringer.key(Members.TABLE_NAME.name()).value(m_tableName);
   // Column name is not required in the EE but testing showed that it is
   // needed to support type resolution of indexed expressions in the planner
   // after they get round-tripped through the catalog's index definition.
   stringer.key(Members.COLUMN_NAME.name()).value(m_columnName);
 }
 @Override
 public void toJSONString(JSONStringer stringer) throws JSONException {
   super.toJSONString(stringer);
   stringer.key(Members.ISNULL.name());
   stringer.value(m_isNull);
   stringer.key(Members.VALUE.name());
   if (m_isNull) {
     stringer.value("NULL");
   } else {
     switch (m_valueType) {
       case INVALID:
         throw new JSONException(
             "ConstantValueExpression.toJSONString(): value_type should never be VoltType.INVALID");
       case NULL:
         stringer.value("null");
         break;
       case TINYINT:
         stringer.value(Long.valueOf(m_value));
         break;
       case SMALLINT:
         stringer.value(Long.valueOf(m_value));
         break;
       case INTEGER:
         stringer.value(Long.valueOf(m_value));
         break;
       case BIGINT:
         stringer.value(Long.valueOf(m_value));
         break;
       case FLOAT:
         stringer.value(Double.valueOf(m_value));
         break;
       case STRING:
         stringer.value(m_value);
         break;
       case VARBINARY:
         stringer.value(m_value);
         break;
       case TIMESTAMP:
         stringer.value(Long.valueOf(m_value));
         break;
       case DECIMAL:
         stringer.value(m_value);
         break;
       default:
         throw new JSONException(
             "ConstantValueExpression.toJSONString(): Unrecognized value_type " + m_valueType);
     }
   }
 }