@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 validate() throws Exception {
    super.validate();

    if ((m_right != null) || (m_left != null))
      throw new Exception("ERROR: A value expression has child expressions for '" + this + "'");

    // Column Index
    if (m_columnIndex < 0) {
      throw new Exception("ERROR: Invalid column index '" + m_columnIndex + "' for '" + this + "'");
    }
  }
  @Override
  public void validate() throws Exception {
    super.validate();

    // Make sure our value is not null
    if (m_value == null && !m_isNull) {
      throw new Exception("ERROR: The constant value for '" + this + "' is inconsistently null");
      // Make sure the value type is something we support here
    } else if (m_valueType == VoltType.NULL || m_valueType == VoltType.VOLTTABLE) {
      throw new Exception(
          "ERROR: Invalid constant value type '" + m_valueType + "' for '" + this + "'");
    }
  }
 @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);
     }
   }
 }