@Override
 protected void loadFromJSONObject(JSONObject obj, Database db) throws JSONException {
   m_columnIndex = obj.getInt(Members.COLUMN_IDX.name());
   m_tableName = obj.getString(Members.TABLE_NAME.name());
   m_columnName = obj.getString(Members.COLUMN_NAME.name());
   m_columnAlias = obj.getString(Members.COLUMN_ALIAS.name());
 }
 @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);
 }