All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.snappydata.thrift.ServiceMetaData Maven / Gradle / Ivy

There is a newer version: 1.6.7
Show newest version
/**
 * Autogenerated by Thrift Compiler (0.9.3)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
package io.snappydata.thrift;

import org.apache.thrift.scheme.IScheme;
import org.apache.thrift.scheme.SchemeFactory;
import org.apache.thrift.scheme.StandardScheme;

import org.apache.thrift.scheme.TupleScheme;
import org.apache.thrift.protocol.TTupleProtocol;
import org.apache.thrift.protocol.TProtocolException;
import org.apache.thrift.EncodingUtils;
import org.apache.thrift.TException;
import org.apache.thrift.async.AsyncMethodCallback;
import org.apache.thrift.server.AbstractNonblockingServer.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
import java.util.Set;
import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
import java.util.Arrays;
import javax.annotation.Generated;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = "2019-08-09")
public class ServiceMetaData implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable {
  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ServiceMetaData");

  private static final org.apache.thrift.protocol.TField PRODUCT_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("productName", org.apache.thrift.protocol.TType.STRING, (short)1);
  private static final org.apache.thrift.protocol.TField PRODUCT_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("productVersion", org.apache.thrift.protocol.TType.STRING, (short)2);
  private static final org.apache.thrift.protocol.TField PRODUCT_MAJOR_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("productMajorVersion", org.apache.thrift.protocol.TType.I32, (short)3);
  private static final org.apache.thrift.protocol.TField PRODUCT_MINOR_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("productMinorVersion", org.apache.thrift.protocol.TType.I32, (short)4);
  private static final org.apache.thrift.protocol.TField JDBC_MAJOR_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("jdbcMajorVersion", org.apache.thrift.protocol.TType.I32, (short)5);
  private static final org.apache.thrift.protocol.TField JDBC_MINOR_VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("jdbcMinorVersion", org.apache.thrift.protocol.TType.I32, (short)6);
  private static final org.apache.thrift.protocol.TField IDENTIFIER_QUOTE_FIELD_DESC = new org.apache.thrift.protocol.TField("identifierQuote", org.apache.thrift.protocol.TType.STRING, (short)7);
  private static final org.apache.thrift.protocol.TField SQL_KEYWORDS_FIELD_DESC = new org.apache.thrift.protocol.TField("sqlKeywords", org.apache.thrift.protocol.TType.LIST, (short)8);
  private static final org.apache.thrift.protocol.TField NUMERIC_FUNCTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("numericFunctions", org.apache.thrift.protocol.TType.LIST, (short)9);
  private static final org.apache.thrift.protocol.TField STRING_FUNCTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("stringFunctions", org.apache.thrift.protocol.TType.LIST, (short)10);
  private static final org.apache.thrift.protocol.TField SYSTEM_FUNCTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("systemFunctions", org.apache.thrift.protocol.TType.LIST, (short)11);
  private static final org.apache.thrift.protocol.TField DATE_TIME_FUNCTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("dateTimeFunctions", org.apache.thrift.protocol.TType.LIST, (short)12);
  private static final org.apache.thrift.protocol.TField SEARCH_STRING_ESCAPE_FIELD_DESC = new org.apache.thrift.protocol.TField("searchStringEscape", org.apache.thrift.protocol.TType.STRING, (short)13);
  private static final org.apache.thrift.protocol.TField EXTRA_NAME_CHARACTERS_FIELD_DESC = new org.apache.thrift.protocol.TField("extraNameCharacters", org.apache.thrift.protocol.TType.STRING, (short)14);
  private static final org.apache.thrift.protocol.TField SUPPORTED_CONVERT_FIELD_DESC = new org.apache.thrift.protocol.TField("supportedCONVERT", org.apache.thrift.protocol.TType.MAP, (short)15);
  private static final org.apache.thrift.protocol.TField SCHEMA_TERM_FIELD_DESC = new org.apache.thrift.protocol.TField("schemaTerm", org.apache.thrift.protocol.TType.STRING, (short)16);
  private static final org.apache.thrift.protocol.TField PROCEDURE_TERM_FIELD_DESC = new org.apache.thrift.protocol.TField("procedureTerm", org.apache.thrift.protocol.TType.STRING, (short)17);
  private static final org.apache.thrift.protocol.TField CATALOG_TERM_FIELD_DESC = new org.apache.thrift.protocol.TField("catalogTerm", org.apache.thrift.protocol.TType.STRING, (short)18);
  private static final org.apache.thrift.protocol.TField CATALOG_SEPARATOR_FIELD_DESC = new org.apache.thrift.protocol.TField("catalogSeparator", org.apache.thrift.protocol.TType.STRING, (short)19);
  private static final org.apache.thrift.protocol.TField MAX_BINARY_LITERAL_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxBinaryLiteralLength", org.apache.thrift.protocol.TType.I32, (short)20);
  private static final org.apache.thrift.protocol.TField MAX_CHAR_LITERAL_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxCharLiteralLength", org.apache.thrift.protocol.TType.I32, (short)21);
  private static final org.apache.thrift.protocol.TField MAX_COLUMNS_IN_GROUP_BY_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnsInGroupBy", org.apache.thrift.protocol.TType.I32, (short)22);
  private static final org.apache.thrift.protocol.TField MAX_COLUMNS_IN_INDEX_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnsInIndex", org.apache.thrift.protocol.TType.I32, (short)23);
  private static final org.apache.thrift.protocol.TField MAX_COLUMNS_IN_ORDER_BY_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnsInOrderBy", org.apache.thrift.protocol.TType.I32, (short)24);
  private static final org.apache.thrift.protocol.TField MAX_COLUMNS_IN_SELECT_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnsInSelect", org.apache.thrift.protocol.TType.I32, (short)25);
  private static final org.apache.thrift.protocol.TField MAX_COLUMNS_IN_TABLE_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnsInTable", org.apache.thrift.protocol.TType.I32, (short)26);
  private static final org.apache.thrift.protocol.TField MAX_CONNECTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("maxConnections", org.apache.thrift.protocol.TType.I32, (short)27);
  private static final org.apache.thrift.protocol.TField MAX_INDEX_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxIndexLength", org.apache.thrift.protocol.TType.I32, (short)28);
  private static final org.apache.thrift.protocol.TField MAX_ROW_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("maxRowSize", org.apache.thrift.protocol.TType.I32, (short)29);
  private static final org.apache.thrift.protocol.TField MAX_STATEMENT_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxStatementLength", org.apache.thrift.protocol.TType.I32, (short)30);
  private static final org.apache.thrift.protocol.TField MAX_OPEN_STATEMENTS_FIELD_DESC = new org.apache.thrift.protocol.TField("maxOpenStatements", org.apache.thrift.protocol.TType.I32, (short)31);
  private static final org.apache.thrift.protocol.TField MAX_TABLE_NAMES_IN_SELECT_FIELD_DESC = new org.apache.thrift.protocol.TField("maxTableNamesInSelect", org.apache.thrift.protocol.TType.I32, (short)32);
  private static final org.apache.thrift.protocol.TField MAX_COLUMN_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxColumnNameLength", org.apache.thrift.protocol.TType.I32, (short)33);
  private static final org.apache.thrift.protocol.TField MAX_CURSOR_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxCursorNameLength", org.apache.thrift.protocol.TType.I32, (short)34);
  private static final org.apache.thrift.protocol.TField MAX_SCHEMA_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxSchemaNameLength", org.apache.thrift.protocol.TType.I32, (short)35);
  private static final org.apache.thrift.protocol.TField MAX_PROCEDURE_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxProcedureNameLength", org.apache.thrift.protocol.TType.I32, (short)36);
  private static final org.apache.thrift.protocol.TField MAX_CATALOG_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxCatalogNameLength", org.apache.thrift.protocol.TType.I32, (short)37);
  private static final org.apache.thrift.protocol.TField MAX_TABLE_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxTableNameLength", org.apache.thrift.protocol.TType.I32, (short)38);
  private static final org.apache.thrift.protocol.TField MAX_USER_NAME_LENGTH_FIELD_DESC = new org.apache.thrift.protocol.TField("maxUserNameLength", org.apache.thrift.protocol.TType.I32, (short)39);
  private static final org.apache.thrift.protocol.TField DEFAULT_TRANSACTION_ISOLATION_FIELD_DESC = new org.apache.thrift.protocol.TField("defaultTransactionIsolation", org.apache.thrift.protocol.TType.I32, (short)40);
  private static final org.apache.thrift.protocol.TField DEFAULT_RESULT_SET_TYPE_FIELD_DESC = new org.apache.thrift.protocol.TField("defaultResultSetType", org.apache.thrift.protocol.TType.BYTE, (short)41);
  private static final org.apache.thrift.protocol.TField DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("defaultResultSetHoldabilityHoldCursorsOverCommit", org.apache.thrift.protocol.TType.BOOL, (short)42);
  private static final org.apache.thrift.protocol.TField SQL_STATE_IS_XOPEN_FIELD_DESC = new org.apache.thrift.protocol.TField("sqlStateIsXOpen", org.apache.thrift.protocol.TType.BOOL, (short)43);
  private static final org.apache.thrift.protocol.TField CATALOG_AT_START_FIELD_DESC = new org.apache.thrift.protocol.TField("catalogAtStart", org.apache.thrift.protocol.TType.BOOL, (short)44);
  private static final org.apache.thrift.protocol.TField TRANSACTION_DEFAULTS_FIELD_DESC = new org.apache.thrift.protocol.TField("transactionDefaults", org.apache.thrift.protocol.TType.MAP, (short)45);
  private static final org.apache.thrift.protocol.TField ROW_ID_LIFE_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("rowIdLifeTime", org.apache.thrift.protocol.TType.I32, (short)46);
  private static final org.apache.thrift.protocol.TField SUPPORTED_FEATURES_FIELD_DESC = new org.apache.thrift.protocol.TField("supportedFeatures", org.apache.thrift.protocol.TType.SET, (short)47);
  private static final org.apache.thrift.protocol.TField FEATURES_WITH_PARAMS_FIELD_DESC = new org.apache.thrift.protocol.TField("featuresWithParams", org.apache.thrift.protocol.TType.MAP, (short)48);

  private static final Map, SchemeFactory> schemes = new HashMap, SchemeFactory>();
  static {
    schemes.put(StandardScheme.class, new ServiceMetaDataStandardSchemeFactory());
    schemes.put(TupleScheme.class, new ServiceMetaDataTupleSchemeFactory());
  }

  public String productName; // required
  public String productVersion; // required
  public int productMajorVersion; // required
  public int productMinorVersion; // required
  public int jdbcMajorVersion; // required
  public int jdbcMinorVersion; // required
  public String identifierQuote; // required
  public List sqlKeywords; // required
  public List numericFunctions; // required
  public List stringFunctions; // required
  public List systemFunctions; // required
  public List dateTimeFunctions; // required
  public String searchStringEscape; // required
  public String extraNameCharacters; // optional
  public Map> supportedCONVERT; // required
  public String schemaTerm; // required
  public String procedureTerm; // required
  public String catalogTerm; // required
  public String catalogSeparator; // required
  public int maxBinaryLiteralLength; // required
  public int maxCharLiteralLength; // required
  public int maxColumnsInGroupBy; // required
  public int maxColumnsInIndex; // required
  public int maxColumnsInOrderBy; // required
  public int maxColumnsInSelect; // required
  public int maxColumnsInTable; // required
  public int maxConnections; // required
  public int maxIndexLength; // required
  public int maxRowSize; // required
  public int maxStatementLength; // required
  public int maxOpenStatements; // required
  public int maxTableNamesInSelect; // required
  public int maxColumnNameLength; // required
  public int maxCursorNameLength; // required
  public int maxSchemaNameLength; // required
  public int maxProcedureNameLength; // required
  public int maxCatalogNameLength; // required
  public int maxTableNameLength; // required
  public int maxUserNameLength; // required
  public int defaultTransactionIsolation; // required
  public byte defaultResultSetType; // required
  public boolean defaultResultSetHoldabilityHoldCursorsOverCommit; // required
  public boolean sqlStateIsXOpen; // required
  public boolean catalogAtStart; // required
  public Map transactionDefaults; // required
  /**
   * 
   * @see RowIdLifetime
   */
  public RowIdLifetime rowIdLifeTime; // required
  public Set supportedFeatures; // required
  public Map> featuresWithParams; // required

  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
    PRODUCT_NAME((short)1, "productName"),
    PRODUCT_VERSION((short)2, "productVersion"),
    PRODUCT_MAJOR_VERSION((short)3, "productMajorVersion"),
    PRODUCT_MINOR_VERSION((short)4, "productMinorVersion"),
    JDBC_MAJOR_VERSION((short)5, "jdbcMajorVersion"),
    JDBC_MINOR_VERSION((short)6, "jdbcMinorVersion"),
    IDENTIFIER_QUOTE((short)7, "identifierQuote"),
    SQL_KEYWORDS((short)8, "sqlKeywords"),
    NUMERIC_FUNCTIONS((short)9, "numericFunctions"),
    STRING_FUNCTIONS((short)10, "stringFunctions"),
    SYSTEM_FUNCTIONS((short)11, "systemFunctions"),
    DATE_TIME_FUNCTIONS((short)12, "dateTimeFunctions"),
    SEARCH_STRING_ESCAPE((short)13, "searchStringEscape"),
    EXTRA_NAME_CHARACTERS((short)14, "extraNameCharacters"),
    SUPPORTED_CONVERT((short)15, "supportedCONVERT"),
    SCHEMA_TERM((short)16, "schemaTerm"),
    PROCEDURE_TERM((short)17, "procedureTerm"),
    CATALOG_TERM((short)18, "catalogTerm"),
    CATALOG_SEPARATOR((short)19, "catalogSeparator"),
    MAX_BINARY_LITERAL_LENGTH((short)20, "maxBinaryLiteralLength"),
    MAX_CHAR_LITERAL_LENGTH((short)21, "maxCharLiteralLength"),
    MAX_COLUMNS_IN_GROUP_BY((short)22, "maxColumnsInGroupBy"),
    MAX_COLUMNS_IN_INDEX((short)23, "maxColumnsInIndex"),
    MAX_COLUMNS_IN_ORDER_BY((short)24, "maxColumnsInOrderBy"),
    MAX_COLUMNS_IN_SELECT((short)25, "maxColumnsInSelect"),
    MAX_COLUMNS_IN_TABLE((short)26, "maxColumnsInTable"),
    MAX_CONNECTIONS((short)27, "maxConnections"),
    MAX_INDEX_LENGTH((short)28, "maxIndexLength"),
    MAX_ROW_SIZE((short)29, "maxRowSize"),
    MAX_STATEMENT_LENGTH((short)30, "maxStatementLength"),
    MAX_OPEN_STATEMENTS((short)31, "maxOpenStatements"),
    MAX_TABLE_NAMES_IN_SELECT((short)32, "maxTableNamesInSelect"),
    MAX_COLUMN_NAME_LENGTH((short)33, "maxColumnNameLength"),
    MAX_CURSOR_NAME_LENGTH((short)34, "maxCursorNameLength"),
    MAX_SCHEMA_NAME_LENGTH((short)35, "maxSchemaNameLength"),
    MAX_PROCEDURE_NAME_LENGTH((short)36, "maxProcedureNameLength"),
    MAX_CATALOG_NAME_LENGTH((short)37, "maxCatalogNameLength"),
    MAX_TABLE_NAME_LENGTH((short)38, "maxTableNameLength"),
    MAX_USER_NAME_LENGTH((short)39, "maxUserNameLength"),
    DEFAULT_TRANSACTION_ISOLATION((short)40, "defaultTransactionIsolation"),
    DEFAULT_RESULT_SET_TYPE((short)41, "defaultResultSetType"),
    DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT((short)42, "defaultResultSetHoldabilityHoldCursorsOverCommit"),
    SQL_STATE_IS_XOPEN((short)43, "sqlStateIsXOpen"),
    CATALOG_AT_START((short)44, "catalogAtStart"),
    TRANSACTION_DEFAULTS((short)45, "transactionDefaults"),
    /**
     * 
     * @see RowIdLifetime
     */
    ROW_ID_LIFE_TIME((short)46, "rowIdLifeTime"),
    SUPPORTED_FEATURES((short)47, "supportedFeatures"),
    FEATURES_WITH_PARAMS((short)48, "featuresWithParams");

    private static final Map byName = new HashMap();

    static {
      for (_Fields field : EnumSet.allOf(_Fields.class)) {
        byName.put(field.getFieldName(), field);
      }
    }

    /**
     * Find the _Fields constant that matches fieldId, or null if its not found.
     */
    public static _Fields findByThriftId(int fieldId) {
      switch(fieldId) {
        case 1: // PRODUCT_NAME
          return PRODUCT_NAME;
        case 2: // PRODUCT_VERSION
          return PRODUCT_VERSION;
        case 3: // PRODUCT_MAJOR_VERSION
          return PRODUCT_MAJOR_VERSION;
        case 4: // PRODUCT_MINOR_VERSION
          return PRODUCT_MINOR_VERSION;
        case 5: // JDBC_MAJOR_VERSION
          return JDBC_MAJOR_VERSION;
        case 6: // JDBC_MINOR_VERSION
          return JDBC_MINOR_VERSION;
        case 7: // IDENTIFIER_QUOTE
          return IDENTIFIER_QUOTE;
        case 8: // SQL_KEYWORDS
          return SQL_KEYWORDS;
        case 9: // NUMERIC_FUNCTIONS
          return NUMERIC_FUNCTIONS;
        case 10: // STRING_FUNCTIONS
          return STRING_FUNCTIONS;
        case 11: // SYSTEM_FUNCTIONS
          return SYSTEM_FUNCTIONS;
        case 12: // DATE_TIME_FUNCTIONS
          return DATE_TIME_FUNCTIONS;
        case 13: // SEARCH_STRING_ESCAPE
          return SEARCH_STRING_ESCAPE;
        case 14: // EXTRA_NAME_CHARACTERS
          return EXTRA_NAME_CHARACTERS;
        case 15: // SUPPORTED_CONVERT
          return SUPPORTED_CONVERT;
        case 16: // SCHEMA_TERM
          return SCHEMA_TERM;
        case 17: // PROCEDURE_TERM
          return PROCEDURE_TERM;
        case 18: // CATALOG_TERM
          return CATALOG_TERM;
        case 19: // CATALOG_SEPARATOR
          return CATALOG_SEPARATOR;
        case 20: // MAX_BINARY_LITERAL_LENGTH
          return MAX_BINARY_LITERAL_LENGTH;
        case 21: // MAX_CHAR_LITERAL_LENGTH
          return MAX_CHAR_LITERAL_LENGTH;
        case 22: // MAX_COLUMNS_IN_GROUP_BY
          return MAX_COLUMNS_IN_GROUP_BY;
        case 23: // MAX_COLUMNS_IN_INDEX
          return MAX_COLUMNS_IN_INDEX;
        case 24: // MAX_COLUMNS_IN_ORDER_BY
          return MAX_COLUMNS_IN_ORDER_BY;
        case 25: // MAX_COLUMNS_IN_SELECT
          return MAX_COLUMNS_IN_SELECT;
        case 26: // MAX_COLUMNS_IN_TABLE
          return MAX_COLUMNS_IN_TABLE;
        case 27: // MAX_CONNECTIONS
          return MAX_CONNECTIONS;
        case 28: // MAX_INDEX_LENGTH
          return MAX_INDEX_LENGTH;
        case 29: // MAX_ROW_SIZE
          return MAX_ROW_SIZE;
        case 30: // MAX_STATEMENT_LENGTH
          return MAX_STATEMENT_LENGTH;
        case 31: // MAX_OPEN_STATEMENTS
          return MAX_OPEN_STATEMENTS;
        case 32: // MAX_TABLE_NAMES_IN_SELECT
          return MAX_TABLE_NAMES_IN_SELECT;
        case 33: // MAX_COLUMN_NAME_LENGTH
          return MAX_COLUMN_NAME_LENGTH;
        case 34: // MAX_CURSOR_NAME_LENGTH
          return MAX_CURSOR_NAME_LENGTH;
        case 35: // MAX_SCHEMA_NAME_LENGTH
          return MAX_SCHEMA_NAME_LENGTH;
        case 36: // MAX_PROCEDURE_NAME_LENGTH
          return MAX_PROCEDURE_NAME_LENGTH;
        case 37: // MAX_CATALOG_NAME_LENGTH
          return MAX_CATALOG_NAME_LENGTH;
        case 38: // MAX_TABLE_NAME_LENGTH
          return MAX_TABLE_NAME_LENGTH;
        case 39: // MAX_USER_NAME_LENGTH
          return MAX_USER_NAME_LENGTH;
        case 40: // DEFAULT_TRANSACTION_ISOLATION
          return DEFAULT_TRANSACTION_ISOLATION;
        case 41: // DEFAULT_RESULT_SET_TYPE
          return DEFAULT_RESULT_SET_TYPE;
        case 42: // DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT
          return DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT;
        case 43: // SQL_STATE_IS_XOPEN
          return SQL_STATE_IS_XOPEN;
        case 44: // CATALOG_AT_START
          return CATALOG_AT_START;
        case 45: // TRANSACTION_DEFAULTS
          return TRANSACTION_DEFAULTS;
        case 46: // ROW_ID_LIFE_TIME
          return ROW_ID_LIFE_TIME;
        case 47: // SUPPORTED_FEATURES
          return SUPPORTED_FEATURES;
        case 48: // FEATURES_WITH_PARAMS
          return FEATURES_WITH_PARAMS;
        default:
          return null;
      }
    }

    /**
     * Find the _Fields constant that matches fieldId, throwing an exception
     * if it is not found.
     */
    public static _Fields findByThriftIdOrThrow(int fieldId) {
      _Fields fields = findByThriftId(fieldId);
      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
      return fields;
    }

    /**
     * Find the _Fields constant that matches name, or null if its not found.
     */
    public static _Fields findByName(String name) {
      return byName.get(name);
    }

    private final short _thriftId;
    private final String _fieldName;

    _Fields(short thriftId, String fieldName) {
      _thriftId = thriftId;
      _fieldName = fieldName;
    }

    public short getThriftFieldId() {
      return _thriftId;
    }

    public String getFieldName() {
      return _fieldName;
    }
  }

  // isset id assignments
  private static final int __PRODUCTMAJORVERSION_ISSET_ID = 0;
  private static final int __PRODUCTMINORVERSION_ISSET_ID = 1;
  private static final int __JDBCMAJORVERSION_ISSET_ID = 2;
  private static final int __JDBCMINORVERSION_ISSET_ID = 3;
  private static final int __MAXBINARYLITERALLENGTH_ISSET_ID = 4;
  private static final int __MAXCHARLITERALLENGTH_ISSET_ID = 5;
  private static final int __MAXCOLUMNSINGROUPBY_ISSET_ID = 6;
  private static final int __MAXCOLUMNSININDEX_ISSET_ID = 7;
  private static final int __MAXCOLUMNSINORDERBY_ISSET_ID = 8;
  private static final int __MAXCOLUMNSINSELECT_ISSET_ID = 9;
  private static final int __MAXCOLUMNSINTABLE_ISSET_ID = 10;
  private static final int __MAXCONNECTIONS_ISSET_ID = 11;
  private static final int __MAXINDEXLENGTH_ISSET_ID = 12;
  private static final int __MAXROWSIZE_ISSET_ID = 13;
  private static final int __MAXSTATEMENTLENGTH_ISSET_ID = 14;
  private static final int __MAXOPENSTATEMENTS_ISSET_ID = 15;
  private static final int __MAXTABLENAMESINSELECT_ISSET_ID = 16;
  private static final int __MAXCOLUMNNAMELENGTH_ISSET_ID = 17;
  private static final int __MAXCURSORNAMELENGTH_ISSET_ID = 18;
  private static final int __MAXSCHEMANAMELENGTH_ISSET_ID = 19;
  private static final int __MAXPROCEDURENAMELENGTH_ISSET_ID = 20;
  private static final int __MAXCATALOGNAMELENGTH_ISSET_ID = 21;
  private static final int __MAXTABLENAMELENGTH_ISSET_ID = 22;
  private static final int __MAXUSERNAMELENGTH_ISSET_ID = 23;
  private static final int __DEFAULTTRANSACTIONISOLATION_ISSET_ID = 24;
  private static final int __DEFAULTRESULTSETTYPE_ISSET_ID = 25;
  private static final int __DEFAULTRESULTSETHOLDABILITYHOLDCURSORSOVERCOMMIT_ISSET_ID = 26;
  private static final int __SQLSTATEISXOPEN_ISSET_ID = 27;
  private static final int __CATALOGATSTART_ISSET_ID = 28;
  private int __isset_bitfield = 0;
  private static final _Fields optionals[] = {_Fields.EXTRA_NAME_CHARACTERS};
  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
  static {
    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
    tmpMap.put(_Fields.PRODUCT_NAME, new org.apache.thrift.meta_data.FieldMetaData("productName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.PRODUCT_VERSION, new org.apache.thrift.meta_data.FieldMetaData("productVersion", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.PRODUCT_MAJOR_VERSION, new org.apache.thrift.meta_data.FieldMetaData("productMajorVersion", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.PRODUCT_MINOR_VERSION, new org.apache.thrift.meta_data.FieldMetaData("productMinorVersion", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.JDBC_MAJOR_VERSION, new org.apache.thrift.meta_data.FieldMetaData("jdbcMajorVersion", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.JDBC_MINOR_VERSION, new org.apache.thrift.meta_data.FieldMetaData("jdbcMinorVersion", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.IDENTIFIER_QUOTE, new org.apache.thrift.meta_data.FieldMetaData("identifierQuote", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.SQL_KEYWORDS, new org.apache.thrift.meta_data.FieldMetaData("sqlKeywords", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
    tmpMap.put(_Fields.NUMERIC_FUNCTIONS, new org.apache.thrift.meta_data.FieldMetaData("numericFunctions", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
    tmpMap.put(_Fields.STRING_FUNCTIONS, new org.apache.thrift.meta_data.FieldMetaData("stringFunctions", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
    tmpMap.put(_Fields.SYSTEM_FUNCTIONS, new org.apache.thrift.meta_data.FieldMetaData("systemFunctions", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
    tmpMap.put(_Fields.DATE_TIME_FUNCTIONS, new org.apache.thrift.meta_data.FieldMetaData("dateTimeFunctions", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
    tmpMap.put(_Fields.SEARCH_STRING_ESCAPE, new org.apache.thrift.meta_data.FieldMetaData("searchStringEscape", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.EXTRA_NAME_CHARACTERS, new org.apache.thrift.meta_data.FieldMetaData("extraNameCharacters", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.SUPPORTED_CONVERT, new org.apache.thrift.meta_data.FieldMetaData("supportedCONVERT", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
            new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, SnappyType.class), 
            new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, 
                new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, SnappyType.class)))));
    tmpMap.put(_Fields.SCHEMA_TERM, new org.apache.thrift.meta_data.FieldMetaData("schemaTerm", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.PROCEDURE_TERM, new org.apache.thrift.meta_data.FieldMetaData("procedureTerm", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.CATALOG_TERM, new org.apache.thrift.meta_data.FieldMetaData("catalogTerm", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.CATALOG_SEPARATOR, new org.apache.thrift.meta_data.FieldMetaData("catalogSeparator", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
    tmpMap.put(_Fields.MAX_BINARY_LITERAL_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxBinaryLiteralLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_CHAR_LITERAL_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxCharLiteralLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMNS_IN_GROUP_BY, new org.apache.thrift.meta_data.FieldMetaData("maxColumnsInGroupBy", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMNS_IN_INDEX, new org.apache.thrift.meta_data.FieldMetaData("maxColumnsInIndex", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMNS_IN_ORDER_BY, new org.apache.thrift.meta_data.FieldMetaData("maxColumnsInOrderBy", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMNS_IN_SELECT, new org.apache.thrift.meta_data.FieldMetaData("maxColumnsInSelect", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMNS_IN_TABLE, new org.apache.thrift.meta_data.FieldMetaData("maxColumnsInTable", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_CONNECTIONS, new org.apache.thrift.meta_data.FieldMetaData("maxConnections", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_INDEX_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxIndexLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_ROW_SIZE, new org.apache.thrift.meta_data.FieldMetaData("maxRowSize", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_STATEMENT_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxStatementLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_OPEN_STATEMENTS, new org.apache.thrift.meta_data.FieldMetaData("maxOpenStatements", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_TABLE_NAMES_IN_SELECT, new org.apache.thrift.meta_data.FieldMetaData("maxTableNamesInSelect", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_COLUMN_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxColumnNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_CURSOR_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxCursorNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_SCHEMA_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxSchemaNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_PROCEDURE_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxProcedureNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_CATALOG_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxCatalogNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_TABLE_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxTableNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.MAX_USER_NAME_LENGTH, new org.apache.thrift.meta_data.FieldMetaData("maxUserNameLength", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.DEFAULT_TRANSACTION_ISOLATION, new org.apache.thrift.meta_data.FieldMetaData("defaultTransactionIsolation", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
    tmpMap.put(_Fields.DEFAULT_RESULT_SET_TYPE, new org.apache.thrift.meta_data.FieldMetaData("defaultResultSetType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BYTE)));
    tmpMap.put(_Fields.DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT, new org.apache.thrift.meta_data.FieldMetaData("defaultResultSetHoldabilityHoldCursorsOverCommit", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    tmpMap.put(_Fields.SQL_STATE_IS_XOPEN, new org.apache.thrift.meta_data.FieldMetaData("sqlStateIsXOpen", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    tmpMap.put(_Fields.CATALOG_AT_START, new org.apache.thrift.meta_data.FieldMetaData("catalogAtStart", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
    tmpMap.put(_Fields.TRANSACTION_DEFAULTS, new org.apache.thrift.meta_data.FieldMetaData("transactionDefaults", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
            new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, TransactionAttribute.class), 
            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL))));
    tmpMap.put(_Fields.ROW_ID_LIFE_TIME, new org.apache.thrift.meta_data.FieldMetaData("rowIdLifeTime", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, RowIdLifetime.class)));
    tmpMap.put(_Fields.SUPPORTED_FEATURES, new org.apache.thrift.meta_data.FieldMetaData("supportedFeatures", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, 
            new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, ServiceFeature.class))));
    tmpMap.put(_Fields.FEATURES_WITH_PARAMS, new org.apache.thrift.meta_data.FieldMetaData("featuresWithParams", org.apache.thrift.TFieldRequirementType.REQUIRED, 
        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
            new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, ServiceFeatureParameterized.class), 
            new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
                new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)))));
    metaDataMap = Collections.unmodifiableMap(tmpMap);
    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ServiceMetaData.class, metaDataMap);
  }

  public ServiceMetaData() {
  }

  public ServiceMetaData(
    String productName,
    String productVersion,
    int productMajorVersion,
    int productMinorVersion,
    int jdbcMajorVersion,
    int jdbcMinorVersion,
    String identifierQuote,
    List sqlKeywords,
    List numericFunctions,
    List stringFunctions,
    List systemFunctions,
    List dateTimeFunctions,
    String searchStringEscape,
    Map> supportedCONVERT,
    String schemaTerm,
    String procedureTerm,
    String catalogTerm,
    String catalogSeparator,
    int maxBinaryLiteralLength,
    int maxCharLiteralLength,
    int maxColumnsInGroupBy,
    int maxColumnsInIndex,
    int maxColumnsInOrderBy,
    int maxColumnsInSelect,
    int maxColumnsInTable,
    int maxConnections,
    int maxIndexLength,
    int maxRowSize,
    int maxStatementLength,
    int maxOpenStatements,
    int maxTableNamesInSelect,
    int maxColumnNameLength,
    int maxCursorNameLength,
    int maxSchemaNameLength,
    int maxProcedureNameLength,
    int maxCatalogNameLength,
    int maxTableNameLength,
    int maxUserNameLength,
    int defaultTransactionIsolation,
    byte defaultResultSetType,
    boolean defaultResultSetHoldabilityHoldCursorsOverCommit,
    boolean sqlStateIsXOpen,
    boolean catalogAtStart,
    Map transactionDefaults,
    RowIdLifetime rowIdLifeTime,
    Set supportedFeatures,
    Map> featuresWithParams)
  {
    this();
    this.productName = productName;
    this.productVersion = productVersion;
    this.productMajorVersion = productMajorVersion;
    setProductMajorVersionIsSet(true);
    this.productMinorVersion = productMinorVersion;
    setProductMinorVersionIsSet(true);
    this.jdbcMajorVersion = jdbcMajorVersion;
    setJdbcMajorVersionIsSet(true);
    this.jdbcMinorVersion = jdbcMinorVersion;
    setJdbcMinorVersionIsSet(true);
    this.identifierQuote = identifierQuote;
    this.sqlKeywords = sqlKeywords;
    this.numericFunctions = numericFunctions;
    this.stringFunctions = stringFunctions;
    this.systemFunctions = systemFunctions;
    this.dateTimeFunctions = dateTimeFunctions;
    this.searchStringEscape = searchStringEscape;
    this.supportedCONVERT = supportedCONVERT;
    this.schemaTerm = schemaTerm;
    this.procedureTerm = procedureTerm;
    this.catalogTerm = catalogTerm;
    this.catalogSeparator = catalogSeparator;
    this.maxBinaryLiteralLength = maxBinaryLiteralLength;
    setMaxBinaryLiteralLengthIsSet(true);
    this.maxCharLiteralLength = maxCharLiteralLength;
    setMaxCharLiteralLengthIsSet(true);
    this.maxColumnsInGroupBy = maxColumnsInGroupBy;
    setMaxColumnsInGroupByIsSet(true);
    this.maxColumnsInIndex = maxColumnsInIndex;
    setMaxColumnsInIndexIsSet(true);
    this.maxColumnsInOrderBy = maxColumnsInOrderBy;
    setMaxColumnsInOrderByIsSet(true);
    this.maxColumnsInSelect = maxColumnsInSelect;
    setMaxColumnsInSelectIsSet(true);
    this.maxColumnsInTable = maxColumnsInTable;
    setMaxColumnsInTableIsSet(true);
    this.maxConnections = maxConnections;
    setMaxConnectionsIsSet(true);
    this.maxIndexLength = maxIndexLength;
    setMaxIndexLengthIsSet(true);
    this.maxRowSize = maxRowSize;
    setMaxRowSizeIsSet(true);
    this.maxStatementLength = maxStatementLength;
    setMaxStatementLengthIsSet(true);
    this.maxOpenStatements = maxOpenStatements;
    setMaxOpenStatementsIsSet(true);
    this.maxTableNamesInSelect = maxTableNamesInSelect;
    setMaxTableNamesInSelectIsSet(true);
    this.maxColumnNameLength = maxColumnNameLength;
    setMaxColumnNameLengthIsSet(true);
    this.maxCursorNameLength = maxCursorNameLength;
    setMaxCursorNameLengthIsSet(true);
    this.maxSchemaNameLength = maxSchemaNameLength;
    setMaxSchemaNameLengthIsSet(true);
    this.maxProcedureNameLength = maxProcedureNameLength;
    setMaxProcedureNameLengthIsSet(true);
    this.maxCatalogNameLength = maxCatalogNameLength;
    setMaxCatalogNameLengthIsSet(true);
    this.maxTableNameLength = maxTableNameLength;
    setMaxTableNameLengthIsSet(true);
    this.maxUserNameLength = maxUserNameLength;
    setMaxUserNameLengthIsSet(true);
    this.defaultTransactionIsolation = defaultTransactionIsolation;
    setDefaultTransactionIsolationIsSet(true);
    this.defaultResultSetType = defaultResultSetType;
    setDefaultResultSetTypeIsSet(true);
    this.defaultResultSetHoldabilityHoldCursorsOverCommit = defaultResultSetHoldabilityHoldCursorsOverCommit;
    setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(true);
    this.sqlStateIsXOpen = sqlStateIsXOpen;
    setSqlStateIsXOpenIsSet(true);
    this.catalogAtStart = catalogAtStart;
    setCatalogAtStartIsSet(true);
    this.transactionDefaults = transactionDefaults;
    this.rowIdLifeTime = rowIdLifeTime;
    this.supportedFeatures = supportedFeatures;
    this.featuresWithParams = featuresWithParams;
  }

  /**
   * Performs a deep copy on other.
   */
  public ServiceMetaData(ServiceMetaData other) {
    __isset_bitfield = other.__isset_bitfield;
    if (other.isSetProductName()) {
      this.productName = other.productName;
    }
    if (other.isSetProductVersion()) {
      this.productVersion = other.productVersion;
    }
    this.productMajorVersion = other.productMajorVersion;
    this.productMinorVersion = other.productMinorVersion;
    this.jdbcMajorVersion = other.jdbcMajorVersion;
    this.jdbcMinorVersion = other.jdbcMinorVersion;
    if (other.isSetIdentifierQuote()) {
      this.identifierQuote = other.identifierQuote;
    }
    if (other.isSetSqlKeywords()) {
      List __this__sqlKeywords = new ArrayList(other.sqlKeywords);
      this.sqlKeywords = __this__sqlKeywords;
    }
    if (other.isSetNumericFunctions()) {
      List __this__numericFunctions = new ArrayList(other.numericFunctions);
      this.numericFunctions = __this__numericFunctions;
    }
    if (other.isSetStringFunctions()) {
      List __this__stringFunctions = new ArrayList(other.stringFunctions);
      this.stringFunctions = __this__stringFunctions;
    }
    if (other.isSetSystemFunctions()) {
      List __this__systemFunctions = new ArrayList(other.systemFunctions);
      this.systemFunctions = __this__systemFunctions;
    }
    if (other.isSetDateTimeFunctions()) {
      List __this__dateTimeFunctions = new ArrayList(other.dateTimeFunctions);
      this.dateTimeFunctions = __this__dateTimeFunctions;
    }
    if (other.isSetSearchStringEscape()) {
      this.searchStringEscape = other.searchStringEscape;
    }
    if (other.isSetExtraNameCharacters()) {
      this.extraNameCharacters = other.extraNameCharacters;
    }
    if (other.isSetSupportedCONVERT()) {
      Map> __this__supportedCONVERT = new HashMap>(other.supportedCONVERT.size());
      for (Map.Entry> other_element : other.supportedCONVERT.entrySet()) {

        SnappyType other_element_key = other_element.getKey();
        Set other_element_value = other_element.getValue();

        SnappyType __this__supportedCONVERT_copy_key = other_element_key;

        Set __this__supportedCONVERT_copy_value = new HashSet(other_element_value.size());
        for (SnappyType other_element_value_element : other_element_value) {
          __this__supportedCONVERT_copy_value.add(other_element_value_element);
        }

        __this__supportedCONVERT.put(__this__supportedCONVERT_copy_key, __this__supportedCONVERT_copy_value);
      }
      this.supportedCONVERT = __this__supportedCONVERT;
    }
    if (other.isSetSchemaTerm()) {
      this.schemaTerm = other.schemaTerm;
    }
    if (other.isSetProcedureTerm()) {
      this.procedureTerm = other.procedureTerm;
    }
    if (other.isSetCatalogTerm()) {
      this.catalogTerm = other.catalogTerm;
    }
    if (other.isSetCatalogSeparator()) {
      this.catalogSeparator = other.catalogSeparator;
    }
    this.maxBinaryLiteralLength = other.maxBinaryLiteralLength;
    this.maxCharLiteralLength = other.maxCharLiteralLength;
    this.maxColumnsInGroupBy = other.maxColumnsInGroupBy;
    this.maxColumnsInIndex = other.maxColumnsInIndex;
    this.maxColumnsInOrderBy = other.maxColumnsInOrderBy;
    this.maxColumnsInSelect = other.maxColumnsInSelect;
    this.maxColumnsInTable = other.maxColumnsInTable;
    this.maxConnections = other.maxConnections;
    this.maxIndexLength = other.maxIndexLength;
    this.maxRowSize = other.maxRowSize;
    this.maxStatementLength = other.maxStatementLength;
    this.maxOpenStatements = other.maxOpenStatements;
    this.maxTableNamesInSelect = other.maxTableNamesInSelect;
    this.maxColumnNameLength = other.maxColumnNameLength;
    this.maxCursorNameLength = other.maxCursorNameLength;
    this.maxSchemaNameLength = other.maxSchemaNameLength;
    this.maxProcedureNameLength = other.maxProcedureNameLength;
    this.maxCatalogNameLength = other.maxCatalogNameLength;
    this.maxTableNameLength = other.maxTableNameLength;
    this.maxUserNameLength = other.maxUserNameLength;
    this.defaultTransactionIsolation = other.defaultTransactionIsolation;
    this.defaultResultSetType = other.defaultResultSetType;
    this.defaultResultSetHoldabilityHoldCursorsOverCommit = other.defaultResultSetHoldabilityHoldCursorsOverCommit;
    this.sqlStateIsXOpen = other.sqlStateIsXOpen;
    this.catalogAtStart = other.catalogAtStart;
    if (other.isSetTransactionDefaults()) {
      Map __this__transactionDefaults = new HashMap(other.transactionDefaults.size());
      for (Map.Entry other_element : other.transactionDefaults.entrySet()) {

        TransactionAttribute other_element_key = other_element.getKey();
        Boolean other_element_value = other_element.getValue();

        TransactionAttribute __this__transactionDefaults_copy_key = other_element_key;

        Boolean __this__transactionDefaults_copy_value = other_element_value;

        __this__transactionDefaults.put(__this__transactionDefaults_copy_key, __this__transactionDefaults_copy_value);
      }
      this.transactionDefaults = __this__transactionDefaults;
    }
    if (other.isSetRowIdLifeTime()) {
      this.rowIdLifeTime = other.rowIdLifeTime;
    }
    if (other.isSetSupportedFeatures()) {
      Set __this__supportedFeatures = new HashSet(other.supportedFeatures.size());
      for (ServiceFeature other_element : other.supportedFeatures) {
        __this__supportedFeatures.add(other_element);
      }
      this.supportedFeatures = __this__supportedFeatures;
    }
    if (other.isSetFeaturesWithParams()) {
      Map> __this__featuresWithParams = new HashMap>(other.featuresWithParams.size());
      for (Map.Entry> other_element : other.featuresWithParams.entrySet()) {

        ServiceFeatureParameterized other_element_key = other_element.getKey();
        List other_element_value = other_element.getValue();

        ServiceFeatureParameterized __this__featuresWithParams_copy_key = other_element_key;

        List __this__featuresWithParams_copy_value = new ArrayList(other_element_value);

        __this__featuresWithParams.put(__this__featuresWithParams_copy_key, __this__featuresWithParams_copy_value);
      }
      this.featuresWithParams = __this__featuresWithParams;
    }
  }

  public ServiceMetaData deepCopy() {
    return new ServiceMetaData(this);
  }

  @Override
  public void clear() {
    this.productName = null;
    this.productVersion = null;
    setProductMajorVersionIsSet(false);
    this.productMajorVersion = 0;
    setProductMinorVersionIsSet(false);
    this.productMinorVersion = 0;
    setJdbcMajorVersionIsSet(false);
    this.jdbcMajorVersion = 0;
    setJdbcMinorVersionIsSet(false);
    this.jdbcMinorVersion = 0;
    this.identifierQuote = null;
    this.sqlKeywords = null;
    this.numericFunctions = null;
    this.stringFunctions = null;
    this.systemFunctions = null;
    this.dateTimeFunctions = null;
    this.searchStringEscape = null;
    this.extraNameCharacters = null;
    this.supportedCONVERT = null;
    this.schemaTerm = null;
    this.procedureTerm = null;
    this.catalogTerm = null;
    this.catalogSeparator = null;
    setMaxBinaryLiteralLengthIsSet(false);
    this.maxBinaryLiteralLength = 0;
    setMaxCharLiteralLengthIsSet(false);
    this.maxCharLiteralLength = 0;
    setMaxColumnsInGroupByIsSet(false);
    this.maxColumnsInGroupBy = 0;
    setMaxColumnsInIndexIsSet(false);
    this.maxColumnsInIndex = 0;
    setMaxColumnsInOrderByIsSet(false);
    this.maxColumnsInOrderBy = 0;
    setMaxColumnsInSelectIsSet(false);
    this.maxColumnsInSelect = 0;
    setMaxColumnsInTableIsSet(false);
    this.maxColumnsInTable = 0;
    setMaxConnectionsIsSet(false);
    this.maxConnections = 0;
    setMaxIndexLengthIsSet(false);
    this.maxIndexLength = 0;
    setMaxRowSizeIsSet(false);
    this.maxRowSize = 0;
    setMaxStatementLengthIsSet(false);
    this.maxStatementLength = 0;
    setMaxOpenStatementsIsSet(false);
    this.maxOpenStatements = 0;
    setMaxTableNamesInSelectIsSet(false);
    this.maxTableNamesInSelect = 0;
    setMaxColumnNameLengthIsSet(false);
    this.maxColumnNameLength = 0;
    setMaxCursorNameLengthIsSet(false);
    this.maxCursorNameLength = 0;
    setMaxSchemaNameLengthIsSet(false);
    this.maxSchemaNameLength = 0;
    setMaxProcedureNameLengthIsSet(false);
    this.maxProcedureNameLength = 0;
    setMaxCatalogNameLengthIsSet(false);
    this.maxCatalogNameLength = 0;
    setMaxTableNameLengthIsSet(false);
    this.maxTableNameLength = 0;
    setMaxUserNameLengthIsSet(false);
    this.maxUserNameLength = 0;
    setDefaultTransactionIsolationIsSet(false);
    this.defaultTransactionIsolation = 0;
    setDefaultResultSetTypeIsSet(false);
    this.defaultResultSetType = 0;
    setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(false);
    this.defaultResultSetHoldabilityHoldCursorsOverCommit = false;
    setSqlStateIsXOpenIsSet(false);
    this.sqlStateIsXOpen = false;
    setCatalogAtStartIsSet(false);
    this.catalogAtStart = false;
    this.transactionDefaults = null;
    this.rowIdLifeTime = null;
    this.supportedFeatures = null;
    this.featuresWithParams = null;
  }

  public String getProductName() {
    return this.productName;
  }

  public ServiceMetaData setProductName(String productName) {
    this.productName = productName;
    return this;
  }

  public void unsetProductName() {
    this.productName = null;
  }

  /** Returns true if field productName is set (has been assigned a value) and false otherwise */
  public boolean isSetProductName() {
    return this.productName != null;
  }

  public void setProductNameIsSet(boolean value) {
    if (!value) {
      this.productName = null;
    }
  }

  public String getProductVersion() {
    return this.productVersion;
  }

  public ServiceMetaData setProductVersion(String productVersion) {
    this.productVersion = productVersion;
    return this;
  }

  public void unsetProductVersion() {
    this.productVersion = null;
  }

  /** Returns true if field productVersion is set (has been assigned a value) and false otherwise */
  public boolean isSetProductVersion() {
    return this.productVersion != null;
  }

  public void setProductVersionIsSet(boolean value) {
    if (!value) {
      this.productVersion = null;
    }
  }

  public int getProductMajorVersion() {
    return this.productMajorVersion;
  }

  public ServiceMetaData setProductMajorVersion(int productMajorVersion) {
    this.productMajorVersion = productMajorVersion;
    setProductMajorVersionIsSet(true);
    return this;
  }

  public void unsetProductMajorVersion() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __PRODUCTMAJORVERSION_ISSET_ID);
  }

  /** Returns true if field productMajorVersion is set (has been assigned a value) and false otherwise */
  public boolean isSetProductMajorVersion() {
    return EncodingUtils.testBit(__isset_bitfield, __PRODUCTMAJORVERSION_ISSET_ID);
  }

  public void setProductMajorVersionIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __PRODUCTMAJORVERSION_ISSET_ID, value);
  }

  public int getProductMinorVersion() {
    return this.productMinorVersion;
  }

  public ServiceMetaData setProductMinorVersion(int productMinorVersion) {
    this.productMinorVersion = productMinorVersion;
    setProductMinorVersionIsSet(true);
    return this;
  }

  public void unsetProductMinorVersion() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __PRODUCTMINORVERSION_ISSET_ID);
  }

  /** Returns true if field productMinorVersion is set (has been assigned a value) and false otherwise */
  public boolean isSetProductMinorVersion() {
    return EncodingUtils.testBit(__isset_bitfield, __PRODUCTMINORVERSION_ISSET_ID);
  }

  public void setProductMinorVersionIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __PRODUCTMINORVERSION_ISSET_ID, value);
  }

  public int getJdbcMajorVersion() {
    return this.jdbcMajorVersion;
  }

  public ServiceMetaData setJdbcMajorVersion(int jdbcMajorVersion) {
    this.jdbcMajorVersion = jdbcMajorVersion;
    setJdbcMajorVersionIsSet(true);
    return this;
  }

  public void unsetJdbcMajorVersion() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __JDBCMAJORVERSION_ISSET_ID);
  }

  /** Returns true if field jdbcMajorVersion is set (has been assigned a value) and false otherwise */
  public boolean isSetJdbcMajorVersion() {
    return EncodingUtils.testBit(__isset_bitfield, __JDBCMAJORVERSION_ISSET_ID);
  }

  public void setJdbcMajorVersionIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __JDBCMAJORVERSION_ISSET_ID, value);
  }

  public int getJdbcMinorVersion() {
    return this.jdbcMinorVersion;
  }

  public ServiceMetaData setJdbcMinorVersion(int jdbcMinorVersion) {
    this.jdbcMinorVersion = jdbcMinorVersion;
    setJdbcMinorVersionIsSet(true);
    return this;
  }

  public void unsetJdbcMinorVersion() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __JDBCMINORVERSION_ISSET_ID);
  }

  /** Returns true if field jdbcMinorVersion is set (has been assigned a value) and false otherwise */
  public boolean isSetJdbcMinorVersion() {
    return EncodingUtils.testBit(__isset_bitfield, __JDBCMINORVERSION_ISSET_ID);
  }

  public void setJdbcMinorVersionIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __JDBCMINORVERSION_ISSET_ID, value);
  }

  public String getIdentifierQuote() {
    return this.identifierQuote;
  }

  public ServiceMetaData setIdentifierQuote(String identifierQuote) {
    this.identifierQuote = identifierQuote;
    return this;
  }

  public void unsetIdentifierQuote() {
    this.identifierQuote = null;
  }

  /** Returns true if field identifierQuote is set (has been assigned a value) and false otherwise */
  public boolean isSetIdentifierQuote() {
    return this.identifierQuote != null;
  }

  public void setIdentifierQuoteIsSet(boolean value) {
    if (!value) {
      this.identifierQuote = null;
    }
  }

  public int getSqlKeywordsSize() {
    return (this.sqlKeywords == null) ? 0 : this.sqlKeywords.size();
  }

  public java.util.Iterator getSqlKeywordsIterator() {
    return (this.sqlKeywords == null) ? null : this.sqlKeywords.iterator();
  }

  public void addToSqlKeywords(String elem) {
    if (this.sqlKeywords == null) {
      this.sqlKeywords = new ArrayList();
    }
    this.sqlKeywords.add(elem);
  }

  public List getSqlKeywords() {
    return this.sqlKeywords;
  }

  public ServiceMetaData setSqlKeywords(List sqlKeywords) {
    this.sqlKeywords = sqlKeywords;
    return this;
  }

  public void unsetSqlKeywords() {
    this.sqlKeywords = null;
  }

  /** Returns true if field sqlKeywords is set (has been assigned a value) and false otherwise */
  public boolean isSetSqlKeywords() {
    return this.sqlKeywords != null;
  }

  public void setSqlKeywordsIsSet(boolean value) {
    if (!value) {
      this.sqlKeywords = null;
    }
  }

  public int getNumericFunctionsSize() {
    return (this.numericFunctions == null) ? 0 : this.numericFunctions.size();
  }

  public java.util.Iterator getNumericFunctionsIterator() {
    return (this.numericFunctions == null) ? null : this.numericFunctions.iterator();
  }

  public void addToNumericFunctions(String elem) {
    if (this.numericFunctions == null) {
      this.numericFunctions = new ArrayList();
    }
    this.numericFunctions.add(elem);
  }

  public List getNumericFunctions() {
    return this.numericFunctions;
  }

  public ServiceMetaData setNumericFunctions(List numericFunctions) {
    this.numericFunctions = numericFunctions;
    return this;
  }

  public void unsetNumericFunctions() {
    this.numericFunctions = null;
  }

  /** Returns true if field numericFunctions is set (has been assigned a value) and false otherwise */
  public boolean isSetNumericFunctions() {
    return this.numericFunctions != null;
  }

  public void setNumericFunctionsIsSet(boolean value) {
    if (!value) {
      this.numericFunctions = null;
    }
  }

  public int getStringFunctionsSize() {
    return (this.stringFunctions == null) ? 0 : this.stringFunctions.size();
  }

  public java.util.Iterator getStringFunctionsIterator() {
    return (this.stringFunctions == null) ? null : this.stringFunctions.iterator();
  }

  public void addToStringFunctions(String elem) {
    if (this.stringFunctions == null) {
      this.stringFunctions = new ArrayList();
    }
    this.stringFunctions.add(elem);
  }

  public List getStringFunctions() {
    return this.stringFunctions;
  }

  public ServiceMetaData setStringFunctions(List stringFunctions) {
    this.stringFunctions = stringFunctions;
    return this;
  }

  public void unsetStringFunctions() {
    this.stringFunctions = null;
  }

  /** Returns true if field stringFunctions is set (has been assigned a value) and false otherwise */
  public boolean isSetStringFunctions() {
    return this.stringFunctions != null;
  }

  public void setStringFunctionsIsSet(boolean value) {
    if (!value) {
      this.stringFunctions = null;
    }
  }

  public int getSystemFunctionsSize() {
    return (this.systemFunctions == null) ? 0 : this.systemFunctions.size();
  }

  public java.util.Iterator getSystemFunctionsIterator() {
    return (this.systemFunctions == null) ? null : this.systemFunctions.iterator();
  }

  public void addToSystemFunctions(String elem) {
    if (this.systemFunctions == null) {
      this.systemFunctions = new ArrayList();
    }
    this.systemFunctions.add(elem);
  }

  public List getSystemFunctions() {
    return this.systemFunctions;
  }

  public ServiceMetaData setSystemFunctions(List systemFunctions) {
    this.systemFunctions = systemFunctions;
    return this;
  }

  public void unsetSystemFunctions() {
    this.systemFunctions = null;
  }

  /** Returns true if field systemFunctions is set (has been assigned a value) and false otherwise */
  public boolean isSetSystemFunctions() {
    return this.systemFunctions != null;
  }

  public void setSystemFunctionsIsSet(boolean value) {
    if (!value) {
      this.systemFunctions = null;
    }
  }

  public int getDateTimeFunctionsSize() {
    return (this.dateTimeFunctions == null) ? 0 : this.dateTimeFunctions.size();
  }

  public java.util.Iterator getDateTimeFunctionsIterator() {
    return (this.dateTimeFunctions == null) ? null : this.dateTimeFunctions.iterator();
  }

  public void addToDateTimeFunctions(String elem) {
    if (this.dateTimeFunctions == null) {
      this.dateTimeFunctions = new ArrayList();
    }
    this.dateTimeFunctions.add(elem);
  }

  public List getDateTimeFunctions() {
    return this.dateTimeFunctions;
  }

  public ServiceMetaData setDateTimeFunctions(List dateTimeFunctions) {
    this.dateTimeFunctions = dateTimeFunctions;
    return this;
  }

  public void unsetDateTimeFunctions() {
    this.dateTimeFunctions = null;
  }

  /** Returns true if field dateTimeFunctions is set (has been assigned a value) and false otherwise */
  public boolean isSetDateTimeFunctions() {
    return this.dateTimeFunctions != null;
  }

  public void setDateTimeFunctionsIsSet(boolean value) {
    if (!value) {
      this.dateTimeFunctions = null;
    }
  }

  public String getSearchStringEscape() {
    return this.searchStringEscape;
  }

  public ServiceMetaData setSearchStringEscape(String searchStringEscape) {
    this.searchStringEscape = searchStringEscape;
    return this;
  }

  public void unsetSearchStringEscape() {
    this.searchStringEscape = null;
  }

  /** Returns true if field searchStringEscape is set (has been assigned a value) and false otherwise */
  public boolean isSetSearchStringEscape() {
    return this.searchStringEscape != null;
  }

  public void setSearchStringEscapeIsSet(boolean value) {
    if (!value) {
      this.searchStringEscape = null;
    }
  }

  public String getExtraNameCharacters() {
    return this.extraNameCharacters;
  }

  public ServiceMetaData setExtraNameCharacters(String extraNameCharacters) {
    this.extraNameCharacters = extraNameCharacters;
    return this;
  }

  public void unsetExtraNameCharacters() {
    this.extraNameCharacters = null;
  }

  /** Returns true if field extraNameCharacters is set (has been assigned a value) and false otherwise */
  public boolean isSetExtraNameCharacters() {
    return this.extraNameCharacters != null;
  }

  public void setExtraNameCharactersIsSet(boolean value) {
    if (!value) {
      this.extraNameCharacters = null;
    }
  }

  public int getSupportedCONVERTSize() {
    return (this.supportedCONVERT == null) ? 0 : this.supportedCONVERT.size();
  }

  public void putToSupportedCONVERT(SnappyType key, Set val) {
    if (this.supportedCONVERT == null) {
      this.supportedCONVERT = new HashMap>();
    }
    this.supportedCONVERT.put(key, val);
  }

  public Map> getSupportedCONVERT() {
    return this.supportedCONVERT;
  }

  public ServiceMetaData setSupportedCONVERT(Map> supportedCONVERT) {
    this.supportedCONVERT = supportedCONVERT;
    return this;
  }

  public void unsetSupportedCONVERT() {
    this.supportedCONVERT = null;
  }

  /** Returns true if field supportedCONVERT is set (has been assigned a value) and false otherwise */
  public boolean isSetSupportedCONVERT() {
    return this.supportedCONVERT != null;
  }

  public void setSupportedCONVERTIsSet(boolean value) {
    if (!value) {
      this.supportedCONVERT = null;
    }
  }

  public String getSchemaTerm() {
    return this.schemaTerm;
  }

  public ServiceMetaData setSchemaTerm(String schemaTerm) {
    this.schemaTerm = schemaTerm;
    return this;
  }

  public void unsetSchemaTerm() {
    this.schemaTerm = null;
  }

  /** Returns true if field schemaTerm is set (has been assigned a value) and false otherwise */
  public boolean isSetSchemaTerm() {
    return this.schemaTerm != null;
  }

  public void setSchemaTermIsSet(boolean value) {
    if (!value) {
      this.schemaTerm = null;
    }
  }

  public String getProcedureTerm() {
    return this.procedureTerm;
  }

  public ServiceMetaData setProcedureTerm(String procedureTerm) {
    this.procedureTerm = procedureTerm;
    return this;
  }

  public void unsetProcedureTerm() {
    this.procedureTerm = null;
  }

  /** Returns true if field procedureTerm is set (has been assigned a value) and false otherwise */
  public boolean isSetProcedureTerm() {
    return this.procedureTerm != null;
  }

  public void setProcedureTermIsSet(boolean value) {
    if (!value) {
      this.procedureTerm = null;
    }
  }

  public String getCatalogTerm() {
    return this.catalogTerm;
  }

  public ServiceMetaData setCatalogTerm(String catalogTerm) {
    this.catalogTerm = catalogTerm;
    return this;
  }

  public void unsetCatalogTerm() {
    this.catalogTerm = null;
  }

  /** Returns true if field catalogTerm is set (has been assigned a value) and false otherwise */
  public boolean isSetCatalogTerm() {
    return this.catalogTerm != null;
  }

  public void setCatalogTermIsSet(boolean value) {
    if (!value) {
      this.catalogTerm = null;
    }
  }

  public String getCatalogSeparator() {
    return this.catalogSeparator;
  }

  public ServiceMetaData setCatalogSeparator(String catalogSeparator) {
    this.catalogSeparator = catalogSeparator;
    return this;
  }

  public void unsetCatalogSeparator() {
    this.catalogSeparator = null;
  }

  /** Returns true if field catalogSeparator is set (has been assigned a value) and false otherwise */
  public boolean isSetCatalogSeparator() {
    return this.catalogSeparator != null;
  }

  public void setCatalogSeparatorIsSet(boolean value) {
    if (!value) {
      this.catalogSeparator = null;
    }
  }

  public int getMaxBinaryLiteralLength() {
    return this.maxBinaryLiteralLength;
  }

  public ServiceMetaData setMaxBinaryLiteralLength(int maxBinaryLiteralLength) {
    this.maxBinaryLiteralLength = maxBinaryLiteralLength;
    setMaxBinaryLiteralLengthIsSet(true);
    return this;
  }

  public void unsetMaxBinaryLiteralLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXBINARYLITERALLENGTH_ISSET_ID);
  }

  /** Returns true if field maxBinaryLiteralLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxBinaryLiteralLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXBINARYLITERALLENGTH_ISSET_ID);
  }

  public void setMaxBinaryLiteralLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXBINARYLITERALLENGTH_ISSET_ID, value);
  }

  public int getMaxCharLiteralLength() {
    return this.maxCharLiteralLength;
  }

  public ServiceMetaData setMaxCharLiteralLength(int maxCharLiteralLength) {
    this.maxCharLiteralLength = maxCharLiteralLength;
    setMaxCharLiteralLengthIsSet(true);
    return this;
  }

  public void unsetMaxCharLiteralLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCHARLITERALLENGTH_ISSET_ID);
  }

  /** Returns true if field maxCharLiteralLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxCharLiteralLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCHARLITERALLENGTH_ISSET_ID);
  }

  public void setMaxCharLiteralLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCHARLITERALLENGTH_ISSET_ID, value);
  }

  public int getMaxColumnsInGroupBy() {
    return this.maxColumnsInGroupBy;
  }

  public ServiceMetaData setMaxColumnsInGroupBy(int maxColumnsInGroupBy) {
    this.maxColumnsInGroupBy = maxColumnsInGroupBy;
    setMaxColumnsInGroupByIsSet(true);
    return this;
  }

  public void unsetMaxColumnsInGroupBy() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNSINGROUPBY_ISSET_ID);
  }

  /** Returns true if field maxColumnsInGroupBy is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnsInGroupBy() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNSINGROUPBY_ISSET_ID);
  }

  public void setMaxColumnsInGroupByIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNSINGROUPBY_ISSET_ID, value);
  }

  public int getMaxColumnsInIndex() {
    return this.maxColumnsInIndex;
  }

  public ServiceMetaData setMaxColumnsInIndex(int maxColumnsInIndex) {
    this.maxColumnsInIndex = maxColumnsInIndex;
    setMaxColumnsInIndexIsSet(true);
    return this;
  }

  public void unsetMaxColumnsInIndex() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNSININDEX_ISSET_ID);
  }

  /** Returns true if field maxColumnsInIndex is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnsInIndex() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNSININDEX_ISSET_ID);
  }

  public void setMaxColumnsInIndexIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNSININDEX_ISSET_ID, value);
  }

  public int getMaxColumnsInOrderBy() {
    return this.maxColumnsInOrderBy;
  }

  public ServiceMetaData setMaxColumnsInOrderBy(int maxColumnsInOrderBy) {
    this.maxColumnsInOrderBy = maxColumnsInOrderBy;
    setMaxColumnsInOrderByIsSet(true);
    return this;
  }

  public void unsetMaxColumnsInOrderBy() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNSINORDERBY_ISSET_ID);
  }

  /** Returns true if field maxColumnsInOrderBy is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnsInOrderBy() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNSINORDERBY_ISSET_ID);
  }

  public void setMaxColumnsInOrderByIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNSINORDERBY_ISSET_ID, value);
  }

  public int getMaxColumnsInSelect() {
    return this.maxColumnsInSelect;
  }

  public ServiceMetaData setMaxColumnsInSelect(int maxColumnsInSelect) {
    this.maxColumnsInSelect = maxColumnsInSelect;
    setMaxColumnsInSelectIsSet(true);
    return this;
  }

  public void unsetMaxColumnsInSelect() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNSINSELECT_ISSET_ID);
  }

  /** Returns true if field maxColumnsInSelect is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnsInSelect() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNSINSELECT_ISSET_ID);
  }

  public void setMaxColumnsInSelectIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNSINSELECT_ISSET_ID, value);
  }

  public int getMaxColumnsInTable() {
    return this.maxColumnsInTable;
  }

  public ServiceMetaData setMaxColumnsInTable(int maxColumnsInTable) {
    this.maxColumnsInTable = maxColumnsInTable;
    setMaxColumnsInTableIsSet(true);
    return this;
  }

  public void unsetMaxColumnsInTable() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNSINTABLE_ISSET_ID);
  }

  /** Returns true if field maxColumnsInTable is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnsInTable() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNSINTABLE_ISSET_ID);
  }

  public void setMaxColumnsInTableIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNSINTABLE_ISSET_ID, value);
  }

  public int getMaxConnections() {
    return this.maxConnections;
  }

  public ServiceMetaData setMaxConnections(int maxConnections) {
    this.maxConnections = maxConnections;
    setMaxConnectionsIsSet(true);
    return this;
  }

  public void unsetMaxConnections() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCONNECTIONS_ISSET_ID);
  }

  /** Returns true if field maxConnections is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxConnections() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCONNECTIONS_ISSET_ID);
  }

  public void setMaxConnectionsIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCONNECTIONS_ISSET_ID, value);
  }

  public int getMaxIndexLength() {
    return this.maxIndexLength;
  }

  public ServiceMetaData setMaxIndexLength(int maxIndexLength) {
    this.maxIndexLength = maxIndexLength;
    setMaxIndexLengthIsSet(true);
    return this;
  }

  public void unsetMaxIndexLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXINDEXLENGTH_ISSET_ID);
  }

  /** Returns true if field maxIndexLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxIndexLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXINDEXLENGTH_ISSET_ID);
  }

  public void setMaxIndexLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXINDEXLENGTH_ISSET_ID, value);
  }

  public int getMaxRowSize() {
    return this.maxRowSize;
  }

  public ServiceMetaData setMaxRowSize(int maxRowSize) {
    this.maxRowSize = maxRowSize;
    setMaxRowSizeIsSet(true);
    return this;
  }

  public void unsetMaxRowSize() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXROWSIZE_ISSET_ID);
  }

  /** Returns true if field maxRowSize is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxRowSize() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXROWSIZE_ISSET_ID);
  }

  public void setMaxRowSizeIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXROWSIZE_ISSET_ID, value);
  }

  public int getMaxStatementLength() {
    return this.maxStatementLength;
  }

  public ServiceMetaData setMaxStatementLength(int maxStatementLength) {
    this.maxStatementLength = maxStatementLength;
    setMaxStatementLengthIsSet(true);
    return this;
  }

  public void unsetMaxStatementLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXSTATEMENTLENGTH_ISSET_ID);
  }

  /** Returns true if field maxStatementLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxStatementLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXSTATEMENTLENGTH_ISSET_ID);
  }

  public void setMaxStatementLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXSTATEMENTLENGTH_ISSET_ID, value);
  }

  public int getMaxOpenStatements() {
    return this.maxOpenStatements;
  }

  public ServiceMetaData setMaxOpenStatements(int maxOpenStatements) {
    this.maxOpenStatements = maxOpenStatements;
    setMaxOpenStatementsIsSet(true);
    return this;
  }

  public void unsetMaxOpenStatements() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXOPENSTATEMENTS_ISSET_ID);
  }

  /** Returns true if field maxOpenStatements is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxOpenStatements() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXOPENSTATEMENTS_ISSET_ID);
  }

  public void setMaxOpenStatementsIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXOPENSTATEMENTS_ISSET_ID, value);
  }

  public int getMaxTableNamesInSelect() {
    return this.maxTableNamesInSelect;
  }

  public ServiceMetaData setMaxTableNamesInSelect(int maxTableNamesInSelect) {
    this.maxTableNamesInSelect = maxTableNamesInSelect;
    setMaxTableNamesInSelectIsSet(true);
    return this;
  }

  public void unsetMaxTableNamesInSelect() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXTABLENAMESINSELECT_ISSET_ID);
  }

  /** Returns true if field maxTableNamesInSelect is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxTableNamesInSelect() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXTABLENAMESINSELECT_ISSET_ID);
  }

  public void setMaxTableNamesInSelectIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXTABLENAMESINSELECT_ISSET_ID, value);
  }

  public int getMaxColumnNameLength() {
    return this.maxColumnNameLength;
  }

  public ServiceMetaData setMaxColumnNameLength(int maxColumnNameLength) {
    this.maxColumnNameLength = maxColumnNameLength;
    setMaxColumnNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxColumnNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCOLUMNNAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxColumnNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxColumnNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCOLUMNNAMELENGTH_ISSET_ID);
  }

  public void setMaxColumnNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCOLUMNNAMELENGTH_ISSET_ID, value);
  }

  public int getMaxCursorNameLength() {
    return this.maxCursorNameLength;
  }

  public ServiceMetaData setMaxCursorNameLength(int maxCursorNameLength) {
    this.maxCursorNameLength = maxCursorNameLength;
    setMaxCursorNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxCursorNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCURSORNAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxCursorNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxCursorNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCURSORNAMELENGTH_ISSET_ID);
  }

  public void setMaxCursorNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCURSORNAMELENGTH_ISSET_ID, value);
  }

  public int getMaxSchemaNameLength() {
    return this.maxSchemaNameLength;
  }

  public ServiceMetaData setMaxSchemaNameLength(int maxSchemaNameLength) {
    this.maxSchemaNameLength = maxSchemaNameLength;
    setMaxSchemaNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxSchemaNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXSCHEMANAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxSchemaNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxSchemaNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXSCHEMANAMELENGTH_ISSET_ID);
  }

  public void setMaxSchemaNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXSCHEMANAMELENGTH_ISSET_ID, value);
  }

  public int getMaxProcedureNameLength() {
    return this.maxProcedureNameLength;
  }

  public ServiceMetaData setMaxProcedureNameLength(int maxProcedureNameLength) {
    this.maxProcedureNameLength = maxProcedureNameLength;
    setMaxProcedureNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxProcedureNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXPROCEDURENAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxProcedureNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxProcedureNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXPROCEDURENAMELENGTH_ISSET_ID);
  }

  public void setMaxProcedureNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXPROCEDURENAMELENGTH_ISSET_ID, value);
  }

  public int getMaxCatalogNameLength() {
    return this.maxCatalogNameLength;
  }

  public ServiceMetaData setMaxCatalogNameLength(int maxCatalogNameLength) {
    this.maxCatalogNameLength = maxCatalogNameLength;
    setMaxCatalogNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxCatalogNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXCATALOGNAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxCatalogNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxCatalogNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXCATALOGNAMELENGTH_ISSET_ID);
  }

  public void setMaxCatalogNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXCATALOGNAMELENGTH_ISSET_ID, value);
  }

  public int getMaxTableNameLength() {
    return this.maxTableNameLength;
  }

  public ServiceMetaData setMaxTableNameLength(int maxTableNameLength) {
    this.maxTableNameLength = maxTableNameLength;
    setMaxTableNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxTableNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXTABLENAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxTableNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxTableNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXTABLENAMELENGTH_ISSET_ID);
  }

  public void setMaxTableNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXTABLENAMELENGTH_ISSET_ID, value);
  }

  public int getMaxUserNameLength() {
    return this.maxUserNameLength;
  }

  public ServiceMetaData setMaxUserNameLength(int maxUserNameLength) {
    this.maxUserNameLength = maxUserNameLength;
    setMaxUserNameLengthIsSet(true);
    return this;
  }

  public void unsetMaxUserNameLength() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __MAXUSERNAMELENGTH_ISSET_ID);
  }

  /** Returns true if field maxUserNameLength is set (has been assigned a value) and false otherwise */
  public boolean isSetMaxUserNameLength() {
    return EncodingUtils.testBit(__isset_bitfield, __MAXUSERNAMELENGTH_ISSET_ID);
  }

  public void setMaxUserNameLengthIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __MAXUSERNAMELENGTH_ISSET_ID, value);
  }

  public int getDefaultTransactionIsolation() {
    return this.defaultTransactionIsolation;
  }

  public ServiceMetaData setDefaultTransactionIsolation(int defaultTransactionIsolation) {
    this.defaultTransactionIsolation = defaultTransactionIsolation;
    setDefaultTransactionIsolationIsSet(true);
    return this;
  }

  public void unsetDefaultTransactionIsolation() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __DEFAULTTRANSACTIONISOLATION_ISSET_ID);
  }

  /** Returns true if field defaultTransactionIsolation is set (has been assigned a value) and false otherwise */
  public boolean isSetDefaultTransactionIsolation() {
    return EncodingUtils.testBit(__isset_bitfield, __DEFAULTTRANSACTIONISOLATION_ISSET_ID);
  }

  public void setDefaultTransactionIsolationIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __DEFAULTTRANSACTIONISOLATION_ISSET_ID, value);
  }

  public byte getDefaultResultSetType() {
    return this.defaultResultSetType;
  }

  public ServiceMetaData setDefaultResultSetType(byte defaultResultSetType) {
    this.defaultResultSetType = defaultResultSetType;
    setDefaultResultSetTypeIsSet(true);
    return this;
  }

  public void unsetDefaultResultSetType() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __DEFAULTRESULTSETTYPE_ISSET_ID);
  }

  /** Returns true if field defaultResultSetType is set (has been assigned a value) and false otherwise */
  public boolean isSetDefaultResultSetType() {
    return EncodingUtils.testBit(__isset_bitfield, __DEFAULTRESULTSETTYPE_ISSET_ID);
  }

  public void setDefaultResultSetTypeIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __DEFAULTRESULTSETTYPE_ISSET_ID, value);
  }

  public boolean isDefaultResultSetHoldabilityHoldCursorsOverCommit() {
    return this.defaultResultSetHoldabilityHoldCursorsOverCommit;
  }

  public ServiceMetaData setDefaultResultSetHoldabilityHoldCursorsOverCommit(boolean defaultResultSetHoldabilityHoldCursorsOverCommit) {
    this.defaultResultSetHoldabilityHoldCursorsOverCommit = defaultResultSetHoldabilityHoldCursorsOverCommit;
    setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(true);
    return this;
  }

  public void unsetDefaultResultSetHoldabilityHoldCursorsOverCommit() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __DEFAULTRESULTSETHOLDABILITYHOLDCURSORSOVERCOMMIT_ISSET_ID);
  }

  /** Returns true if field defaultResultSetHoldabilityHoldCursorsOverCommit is set (has been assigned a value) and false otherwise */
  public boolean isSetDefaultResultSetHoldabilityHoldCursorsOverCommit() {
    return EncodingUtils.testBit(__isset_bitfield, __DEFAULTRESULTSETHOLDABILITYHOLDCURSORSOVERCOMMIT_ISSET_ID);
  }

  public void setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __DEFAULTRESULTSETHOLDABILITYHOLDCURSORSOVERCOMMIT_ISSET_ID, value);
  }

  public boolean isSqlStateIsXOpen() {
    return this.sqlStateIsXOpen;
  }

  public ServiceMetaData setSqlStateIsXOpen(boolean sqlStateIsXOpen) {
    this.sqlStateIsXOpen = sqlStateIsXOpen;
    setSqlStateIsXOpenIsSet(true);
    return this;
  }

  public void unsetSqlStateIsXOpen() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SQLSTATEISXOPEN_ISSET_ID);
  }

  /** Returns true if field sqlStateIsXOpen is set (has been assigned a value) and false otherwise */
  public boolean isSetSqlStateIsXOpen() {
    return EncodingUtils.testBit(__isset_bitfield, __SQLSTATEISXOPEN_ISSET_ID);
  }

  public void setSqlStateIsXOpenIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SQLSTATEISXOPEN_ISSET_ID, value);
  }

  public boolean isCatalogAtStart() {
    return this.catalogAtStart;
  }

  public ServiceMetaData setCatalogAtStart(boolean catalogAtStart) {
    this.catalogAtStart = catalogAtStart;
    setCatalogAtStartIsSet(true);
    return this;
  }

  public void unsetCatalogAtStart() {
    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __CATALOGATSTART_ISSET_ID);
  }

  /** Returns true if field catalogAtStart is set (has been assigned a value) and false otherwise */
  public boolean isSetCatalogAtStart() {
    return EncodingUtils.testBit(__isset_bitfield, __CATALOGATSTART_ISSET_ID);
  }

  public void setCatalogAtStartIsSet(boolean value) {
    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __CATALOGATSTART_ISSET_ID, value);
  }

  public int getTransactionDefaultsSize() {
    return (this.transactionDefaults == null) ? 0 : this.transactionDefaults.size();
  }

  public void putToTransactionDefaults(TransactionAttribute key, boolean val) {
    if (this.transactionDefaults == null) {
      this.transactionDefaults = new HashMap();
    }
    this.transactionDefaults.put(key, val);
  }

  public Map getTransactionDefaults() {
    return this.transactionDefaults;
  }

  public ServiceMetaData setTransactionDefaults(Map transactionDefaults) {
    this.transactionDefaults = transactionDefaults;
    return this;
  }

  public void unsetTransactionDefaults() {
    this.transactionDefaults = null;
  }

  /** Returns true if field transactionDefaults is set (has been assigned a value) and false otherwise */
  public boolean isSetTransactionDefaults() {
    return this.transactionDefaults != null;
  }

  public void setTransactionDefaultsIsSet(boolean value) {
    if (!value) {
      this.transactionDefaults = null;
    }
  }

  /**
   * 
   * @see RowIdLifetime
   */
  public RowIdLifetime getRowIdLifeTime() {
    return this.rowIdLifeTime;
  }

  /**
   * 
   * @see RowIdLifetime
   */
  public ServiceMetaData setRowIdLifeTime(RowIdLifetime rowIdLifeTime) {
    this.rowIdLifeTime = rowIdLifeTime;
    return this;
  }

  public void unsetRowIdLifeTime() {
    this.rowIdLifeTime = null;
  }

  /** Returns true if field rowIdLifeTime is set (has been assigned a value) and false otherwise */
  public boolean isSetRowIdLifeTime() {
    return this.rowIdLifeTime != null;
  }

  public void setRowIdLifeTimeIsSet(boolean value) {
    if (!value) {
      this.rowIdLifeTime = null;
    }
  }

  public int getSupportedFeaturesSize() {
    return (this.supportedFeatures == null) ? 0 : this.supportedFeatures.size();
  }

  public java.util.Iterator getSupportedFeaturesIterator() {
    return (this.supportedFeatures == null) ? null : this.supportedFeatures.iterator();
  }

  public void addToSupportedFeatures(ServiceFeature elem) {
    if (this.supportedFeatures == null) {
      this.supportedFeatures = new HashSet();
    }
    this.supportedFeatures.add(elem);
  }

  public Set getSupportedFeatures() {
    return this.supportedFeatures;
  }

  public ServiceMetaData setSupportedFeatures(Set supportedFeatures) {
    this.supportedFeatures = supportedFeatures;
    return this;
  }

  public void unsetSupportedFeatures() {
    this.supportedFeatures = null;
  }

  /** Returns true if field supportedFeatures is set (has been assigned a value) and false otherwise */
  public boolean isSetSupportedFeatures() {
    return this.supportedFeatures != null;
  }

  public void setSupportedFeaturesIsSet(boolean value) {
    if (!value) {
      this.supportedFeatures = null;
    }
  }

  public int getFeaturesWithParamsSize() {
    return (this.featuresWithParams == null) ? 0 : this.featuresWithParams.size();
  }

  public void putToFeaturesWithParams(ServiceFeatureParameterized key, List val) {
    if (this.featuresWithParams == null) {
      this.featuresWithParams = new HashMap>();
    }
    this.featuresWithParams.put(key, val);
  }

  public Map> getFeaturesWithParams() {
    return this.featuresWithParams;
  }

  public ServiceMetaData setFeaturesWithParams(Map> featuresWithParams) {
    this.featuresWithParams = featuresWithParams;
    return this;
  }

  public void unsetFeaturesWithParams() {
    this.featuresWithParams = null;
  }

  /** Returns true if field featuresWithParams is set (has been assigned a value) and false otherwise */
  public boolean isSetFeaturesWithParams() {
    return this.featuresWithParams != null;
  }

  public void setFeaturesWithParamsIsSet(boolean value) {
    if (!value) {
      this.featuresWithParams = null;
    }
  }

  public void setFieldValue(_Fields field, Object value) {
    switch (field) {
    case PRODUCT_NAME:
      if (value == null) {
        unsetProductName();
      } else {
        setProductName((String)value);
      }
      break;

    case PRODUCT_VERSION:
      if (value == null) {
        unsetProductVersion();
      } else {
        setProductVersion((String)value);
      }
      break;

    case PRODUCT_MAJOR_VERSION:
      if (value == null) {
        unsetProductMajorVersion();
      } else {
        setProductMajorVersion((Integer)value);
      }
      break;

    case PRODUCT_MINOR_VERSION:
      if (value == null) {
        unsetProductMinorVersion();
      } else {
        setProductMinorVersion((Integer)value);
      }
      break;

    case JDBC_MAJOR_VERSION:
      if (value == null) {
        unsetJdbcMajorVersion();
      } else {
        setJdbcMajorVersion((Integer)value);
      }
      break;

    case JDBC_MINOR_VERSION:
      if (value == null) {
        unsetJdbcMinorVersion();
      } else {
        setJdbcMinorVersion((Integer)value);
      }
      break;

    case IDENTIFIER_QUOTE:
      if (value == null) {
        unsetIdentifierQuote();
      } else {
        setIdentifierQuote((String)value);
      }
      break;

    case SQL_KEYWORDS:
      if (value == null) {
        unsetSqlKeywords();
      } else {
        setSqlKeywords((List)value);
      }
      break;

    case NUMERIC_FUNCTIONS:
      if (value == null) {
        unsetNumericFunctions();
      } else {
        setNumericFunctions((List)value);
      }
      break;

    case STRING_FUNCTIONS:
      if (value == null) {
        unsetStringFunctions();
      } else {
        setStringFunctions((List)value);
      }
      break;

    case SYSTEM_FUNCTIONS:
      if (value == null) {
        unsetSystemFunctions();
      } else {
        setSystemFunctions((List)value);
      }
      break;

    case DATE_TIME_FUNCTIONS:
      if (value == null) {
        unsetDateTimeFunctions();
      } else {
        setDateTimeFunctions((List)value);
      }
      break;

    case SEARCH_STRING_ESCAPE:
      if (value == null) {
        unsetSearchStringEscape();
      } else {
        setSearchStringEscape((String)value);
      }
      break;

    case EXTRA_NAME_CHARACTERS:
      if (value == null) {
        unsetExtraNameCharacters();
      } else {
        setExtraNameCharacters((String)value);
      }
      break;

    case SUPPORTED_CONVERT:
      if (value == null) {
        unsetSupportedCONVERT();
      } else {
        setSupportedCONVERT((Map>)value);
      }
      break;

    case SCHEMA_TERM:
      if (value == null) {
        unsetSchemaTerm();
      } else {
        setSchemaTerm((String)value);
      }
      break;

    case PROCEDURE_TERM:
      if (value == null) {
        unsetProcedureTerm();
      } else {
        setProcedureTerm((String)value);
      }
      break;

    case CATALOG_TERM:
      if (value == null) {
        unsetCatalogTerm();
      } else {
        setCatalogTerm((String)value);
      }
      break;

    case CATALOG_SEPARATOR:
      if (value == null) {
        unsetCatalogSeparator();
      } else {
        setCatalogSeparator((String)value);
      }
      break;

    case MAX_BINARY_LITERAL_LENGTH:
      if (value == null) {
        unsetMaxBinaryLiteralLength();
      } else {
        setMaxBinaryLiteralLength((Integer)value);
      }
      break;

    case MAX_CHAR_LITERAL_LENGTH:
      if (value == null) {
        unsetMaxCharLiteralLength();
      } else {
        setMaxCharLiteralLength((Integer)value);
      }
      break;

    case MAX_COLUMNS_IN_GROUP_BY:
      if (value == null) {
        unsetMaxColumnsInGroupBy();
      } else {
        setMaxColumnsInGroupBy((Integer)value);
      }
      break;

    case MAX_COLUMNS_IN_INDEX:
      if (value == null) {
        unsetMaxColumnsInIndex();
      } else {
        setMaxColumnsInIndex((Integer)value);
      }
      break;

    case MAX_COLUMNS_IN_ORDER_BY:
      if (value == null) {
        unsetMaxColumnsInOrderBy();
      } else {
        setMaxColumnsInOrderBy((Integer)value);
      }
      break;

    case MAX_COLUMNS_IN_SELECT:
      if (value == null) {
        unsetMaxColumnsInSelect();
      } else {
        setMaxColumnsInSelect((Integer)value);
      }
      break;

    case MAX_COLUMNS_IN_TABLE:
      if (value == null) {
        unsetMaxColumnsInTable();
      } else {
        setMaxColumnsInTable((Integer)value);
      }
      break;

    case MAX_CONNECTIONS:
      if (value == null) {
        unsetMaxConnections();
      } else {
        setMaxConnections((Integer)value);
      }
      break;

    case MAX_INDEX_LENGTH:
      if (value == null) {
        unsetMaxIndexLength();
      } else {
        setMaxIndexLength((Integer)value);
      }
      break;

    case MAX_ROW_SIZE:
      if (value == null) {
        unsetMaxRowSize();
      } else {
        setMaxRowSize((Integer)value);
      }
      break;

    case MAX_STATEMENT_LENGTH:
      if (value == null) {
        unsetMaxStatementLength();
      } else {
        setMaxStatementLength((Integer)value);
      }
      break;

    case MAX_OPEN_STATEMENTS:
      if (value == null) {
        unsetMaxOpenStatements();
      } else {
        setMaxOpenStatements((Integer)value);
      }
      break;

    case MAX_TABLE_NAMES_IN_SELECT:
      if (value == null) {
        unsetMaxTableNamesInSelect();
      } else {
        setMaxTableNamesInSelect((Integer)value);
      }
      break;

    case MAX_COLUMN_NAME_LENGTH:
      if (value == null) {
        unsetMaxColumnNameLength();
      } else {
        setMaxColumnNameLength((Integer)value);
      }
      break;

    case MAX_CURSOR_NAME_LENGTH:
      if (value == null) {
        unsetMaxCursorNameLength();
      } else {
        setMaxCursorNameLength((Integer)value);
      }
      break;

    case MAX_SCHEMA_NAME_LENGTH:
      if (value == null) {
        unsetMaxSchemaNameLength();
      } else {
        setMaxSchemaNameLength((Integer)value);
      }
      break;

    case MAX_PROCEDURE_NAME_LENGTH:
      if (value == null) {
        unsetMaxProcedureNameLength();
      } else {
        setMaxProcedureNameLength((Integer)value);
      }
      break;

    case MAX_CATALOG_NAME_LENGTH:
      if (value == null) {
        unsetMaxCatalogNameLength();
      } else {
        setMaxCatalogNameLength((Integer)value);
      }
      break;

    case MAX_TABLE_NAME_LENGTH:
      if (value == null) {
        unsetMaxTableNameLength();
      } else {
        setMaxTableNameLength((Integer)value);
      }
      break;

    case MAX_USER_NAME_LENGTH:
      if (value == null) {
        unsetMaxUserNameLength();
      } else {
        setMaxUserNameLength((Integer)value);
      }
      break;

    case DEFAULT_TRANSACTION_ISOLATION:
      if (value == null) {
        unsetDefaultTransactionIsolation();
      } else {
        setDefaultTransactionIsolation((Integer)value);
      }
      break;

    case DEFAULT_RESULT_SET_TYPE:
      if (value == null) {
        unsetDefaultResultSetType();
      } else {
        setDefaultResultSetType((Byte)value);
      }
      break;

    case DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT:
      if (value == null) {
        unsetDefaultResultSetHoldabilityHoldCursorsOverCommit();
      } else {
        setDefaultResultSetHoldabilityHoldCursorsOverCommit((Boolean)value);
      }
      break;

    case SQL_STATE_IS_XOPEN:
      if (value == null) {
        unsetSqlStateIsXOpen();
      } else {
        setSqlStateIsXOpen((Boolean)value);
      }
      break;

    case CATALOG_AT_START:
      if (value == null) {
        unsetCatalogAtStart();
      } else {
        setCatalogAtStart((Boolean)value);
      }
      break;

    case TRANSACTION_DEFAULTS:
      if (value == null) {
        unsetTransactionDefaults();
      } else {
        setTransactionDefaults((Map)value);
      }
      break;

    case ROW_ID_LIFE_TIME:
      if (value == null) {
        unsetRowIdLifeTime();
      } else {
        setRowIdLifeTime((RowIdLifetime)value);
      }
      break;

    case SUPPORTED_FEATURES:
      if (value == null) {
        unsetSupportedFeatures();
      } else {
        setSupportedFeatures((Set)value);
      }
      break;

    case FEATURES_WITH_PARAMS:
      if (value == null) {
        unsetFeaturesWithParams();
      } else {
        setFeaturesWithParams((Map>)value);
      }
      break;

    }
  }

  public Object getFieldValue(_Fields field) {
    switch (field) {
    case PRODUCT_NAME:
      return getProductName();

    case PRODUCT_VERSION:
      return getProductVersion();

    case PRODUCT_MAJOR_VERSION:
      return getProductMajorVersion();

    case PRODUCT_MINOR_VERSION:
      return getProductMinorVersion();

    case JDBC_MAJOR_VERSION:
      return getJdbcMajorVersion();

    case JDBC_MINOR_VERSION:
      return getJdbcMinorVersion();

    case IDENTIFIER_QUOTE:
      return getIdentifierQuote();

    case SQL_KEYWORDS:
      return getSqlKeywords();

    case NUMERIC_FUNCTIONS:
      return getNumericFunctions();

    case STRING_FUNCTIONS:
      return getStringFunctions();

    case SYSTEM_FUNCTIONS:
      return getSystemFunctions();

    case DATE_TIME_FUNCTIONS:
      return getDateTimeFunctions();

    case SEARCH_STRING_ESCAPE:
      return getSearchStringEscape();

    case EXTRA_NAME_CHARACTERS:
      return getExtraNameCharacters();

    case SUPPORTED_CONVERT:
      return getSupportedCONVERT();

    case SCHEMA_TERM:
      return getSchemaTerm();

    case PROCEDURE_TERM:
      return getProcedureTerm();

    case CATALOG_TERM:
      return getCatalogTerm();

    case CATALOG_SEPARATOR:
      return getCatalogSeparator();

    case MAX_BINARY_LITERAL_LENGTH:
      return getMaxBinaryLiteralLength();

    case MAX_CHAR_LITERAL_LENGTH:
      return getMaxCharLiteralLength();

    case MAX_COLUMNS_IN_GROUP_BY:
      return getMaxColumnsInGroupBy();

    case MAX_COLUMNS_IN_INDEX:
      return getMaxColumnsInIndex();

    case MAX_COLUMNS_IN_ORDER_BY:
      return getMaxColumnsInOrderBy();

    case MAX_COLUMNS_IN_SELECT:
      return getMaxColumnsInSelect();

    case MAX_COLUMNS_IN_TABLE:
      return getMaxColumnsInTable();

    case MAX_CONNECTIONS:
      return getMaxConnections();

    case MAX_INDEX_LENGTH:
      return getMaxIndexLength();

    case MAX_ROW_SIZE:
      return getMaxRowSize();

    case MAX_STATEMENT_LENGTH:
      return getMaxStatementLength();

    case MAX_OPEN_STATEMENTS:
      return getMaxOpenStatements();

    case MAX_TABLE_NAMES_IN_SELECT:
      return getMaxTableNamesInSelect();

    case MAX_COLUMN_NAME_LENGTH:
      return getMaxColumnNameLength();

    case MAX_CURSOR_NAME_LENGTH:
      return getMaxCursorNameLength();

    case MAX_SCHEMA_NAME_LENGTH:
      return getMaxSchemaNameLength();

    case MAX_PROCEDURE_NAME_LENGTH:
      return getMaxProcedureNameLength();

    case MAX_CATALOG_NAME_LENGTH:
      return getMaxCatalogNameLength();

    case MAX_TABLE_NAME_LENGTH:
      return getMaxTableNameLength();

    case MAX_USER_NAME_LENGTH:
      return getMaxUserNameLength();

    case DEFAULT_TRANSACTION_ISOLATION:
      return getDefaultTransactionIsolation();

    case DEFAULT_RESULT_SET_TYPE:
      return getDefaultResultSetType();

    case DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT:
      return isDefaultResultSetHoldabilityHoldCursorsOverCommit();

    case SQL_STATE_IS_XOPEN:
      return isSqlStateIsXOpen();

    case CATALOG_AT_START:
      return isCatalogAtStart();

    case TRANSACTION_DEFAULTS:
      return getTransactionDefaults();

    case ROW_ID_LIFE_TIME:
      return getRowIdLifeTime();

    case SUPPORTED_FEATURES:
      return getSupportedFeatures();

    case FEATURES_WITH_PARAMS:
      return getFeaturesWithParams();

    }
    throw new IllegalStateException();
  }

  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
  public boolean isSet(_Fields field) {
    if (field == null) {
      throw new IllegalArgumentException();
    }

    switch (field) {
    case PRODUCT_NAME:
      return isSetProductName();
    case PRODUCT_VERSION:
      return isSetProductVersion();
    case PRODUCT_MAJOR_VERSION:
      return isSetProductMajorVersion();
    case PRODUCT_MINOR_VERSION:
      return isSetProductMinorVersion();
    case JDBC_MAJOR_VERSION:
      return isSetJdbcMajorVersion();
    case JDBC_MINOR_VERSION:
      return isSetJdbcMinorVersion();
    case IDENTIFIER_QUOTE:
      return isSetIdentifierQuote();
    case SQL_KEYWORDS:
      return isSetSqlKeywords();
    case NUMERIC_FUNCTIONS:
      return isSetNumericFunctions();
    case STRING_FUNCTIONS:
      return isSetStringFunctions();
    case SYSTEM_FUNCTIONS:
      return isSetSystemFunctions();
    case DATE_TIME_FUNCTIONS:
      return isSetDateTimeFunctions();
    case SEARCH_STRING_ESCAPE:
      return isSetSearchStringEscape();
    case EXTRA_NAME_CHARACTERS:
      return isSetExtraNameCharacters();
    case SUPPORTED_CONVERT:
      return isSetSupportedCONVERT();
    case SCHEMA_TERM:
      return isSetSchemaTerm();
    case PROCEDURE_TERM:
      return isSetProcedureTerm();
    case CATALOG_TERM:
      return isSetCatalogTerm();
    case CATALOG_SEPARATOR:
      return isSetCatalogSeparator();
    case MAX_BINARY_LITERAL_LENGTH:
      return isSetMaxBinaryLiteralLength();
    case MAX_CHAR_LITERAL_LENGTH:
      return isSetMaxCharLiteralLength();
    case MAX_COLUMNS_IN_GROUP_BY:
      return isSetMaxColumnsInGroupBy();
    case MAX_COLUMNS_IN_INDEX:
      return isSetMaxColumnsInIndex();
    case MAX_COLUMNS_IN_ORDER_BY:
      return isSetMaxColumnsInOrderBy();
    case MAX_COLUMNS_IN_SELECT:
      return isSetMaxColumnsInSelect();
    case MAX_COLUMNS_IN_TABLE:
      return isSetMaxColumnsInTable();
    case MAX_CONNECTIONS:
      return isSetMaxConnections();
    case MAX_INDEX_LENGTH:
      return isSetMaxIndexLength();
    case MAX_ROW_SIZE:
      return isSetMaxRowSize();
    case MAX_STATEMENT_LENGTH:
      return isSetMaxStatementLength();
    case MAX_OPEN_STATEMENTS:
      return isSetMaxOpenStatements();
    case MAX_TABLE_NAMES_IN_SELECT:
      return isSetMaxTableNamesInSelect();
    case MAX_COLUMN_NAME_LENGTH:
      return isSetMaxColumnNameLength();
    case MAX_CURSOR_NAME_LENGTH:
      return isSetMaxCursorNameLength();
    case MAX_SCHEMA_NAME_LENGTH:
      return isSetMaxSchemaNameLength();
    case MAX_PROCEDURE_NAME_LENGTH:
      return isSetMaxProcedureNameLength();
    case MAX_CATALOG_NAME_LENGTH:
      return isSetMaxCatalogNameLength();
    case MAX_TABLE_NAME_LENGTH:
      return isSetMaxTableNameLength();
    case MAX_USER_NAME_LENGTH:
      return isSetMaxUserNameLength();
    case DEFAULT_TRANSACTION_ISOLATION:
      return isSetDefaultTransactionIsolation();
    case DEFAULT_RESULT_SET_TYPE:
      return isSetDefaultResultSetType();
    case DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT:
      return isSetDefaultResultSetHoldabilityHoldCursorsOverCommit();
    case SQL_STATE_IS_XOPEN:
      return isSetSqlStateIsXOpen();
    case CATALOG_AT_START:
      return isSetCatalogAtStart();
    case TRANSACTION_DEFAULTS:
      return isSetTransactionDefaults();
    case ROW_ID_LIFE_TIME:
      return isSetRowIdLifeTime();
    case SUPPORTED_FEATURES:
      return isSetSupportedFeatures();
    case FEATURES_WITH_PARAMS:
      return isSetFeaturesWithParams();
    }
    throw new IllegalStateException();
  }

  @Override
  public boolean equals(Object that) {
    if (that == null)
      return false;
    if (that instanceof ServiceMetaData)
      return this.equals((ServiceMetaData)that);
    return false;
  }

  public boolean equals(ServiceMetaData that) {
    if (that == null)
      return false;

    boolean this_present_productName = true && this.isSetProductName();
    boolean that_present_productName = true && that.isSetProductName();
    if (this_present_productName || that_present_productName) {
      if (!(this_present_productName && that_present_productName))
        return false;
      if (!this.productName.equals(that.productName))
        return false;
    }

    boolean this_present_productVersion = true && this.isSetProductVersion();
    boolean that_present_productVersion = true && that.isSetProductVersion();
    if (this_present_productVersion || that_present_productVersion) {
      if (!(this_present_productVersion && that_present_productVersion))
        return false;
      if (!this.productVersion.equals(that.productVersion))
        return false;
    }

    boolean this_present_productMajorVersion = true;
    boolean that_present_productMajorVersion = true;
    if (this_present_productMajorVersion || that_present_productMajorVersion) {
      if (!(this_present_productMajorVersion && that_present_productMajorVersion))
        return false;
      if (this.productMajorVersion != that.productMajorVersion)
        return false;
    }

    boolean this_present_productMinorVersion = true;
    boolean that_present_productMinorVersion = true;
    if (this_present_productMinorVersion || that_present_productMinorVersion) {
      if (!(this_present_productMinorVersion && that_present_productMinorVersion))
        return false;
      if (this.productMinorVersion != that.productMinorVersion)
        return false;
    }

    boolean this_present_jdbcMajorVersion = true;
    boolean that_present_jdbcMajorVersion = true;
    if (this_present_jdbcMajorVersion || that_present_jdbcMajorVersion) {
      if (!(this_present_jdbcMajorVersion && that_present_jdbcMajorVersion))
        return false;
      if (this.jdbcMajorVersion != that.jdbcMajorVersion)
        return false;
    }

    boolean this_present_jdbcMinorVersion = true;
    boolean that_present_jdbcMinorVersion = true;
    if (this_present_jdbcMinorVersion || that_present_jdbcMinorVersion) {
      if (!(this_present_jdbcMinorVersion && that_present_jdbcMinorVersion))
        return false;
      if (this.jdbcMinorVersion != that.jdbcMinorVersion)
        return false;
    }

    boolean this_present_identifierQuote = true && this.isSetIdentifierQuote();
    boolean that_present_identifierQuote = true && that.isSetIdentifierQuote();
    if (this_present_identifierQuote || that_present_identifierQuote) {
      if (!(this_present_identifierQuote && that_present_identifierQuote))
        return false;
      if (!this.identifierQuote.equals(that.identifierQuote))
        return false;
    }

    boolean this_present_sqlKeywords = true && this.isSetSqlKeywords();
    boolean that_present_sqlKeywords = true && that.isSetSqlKeywords();
    if (this_present_sqlKeywords || that_present_sqlKeywords) {
      if (!(this_present_sqlKeywords && that_present_sqlKeywords))
        return false;
      if (!this.sqlKeywords.equals(that.sqlKeywords))
        return false;
    }

    boolean this_present_numericFunctions = true && this.isSetNumericFunctions();
    boolean that_present_numericFunctions = true && that.isSetNumericFunctions();
    if (this_present_numericFunctions || that_present_numericFunctions) {
      if (!(this_present_numericFunctions && that_present_numericFunctions))
        return false;
      if (!this.numericFunctions.equals(that.numericFunctions))
        return false;
    }

    boolean this_present_stringFunctions = true && this.isSetStringFunctions();
    boolean that_present_stringFunctions = true && that.isSetStringFunctions();
    if (this_present_stringFunctions || that_present_stringFunctions) {
      if (!(this_present_stringFunctions && that_present_stringFunctions))
        return false;
      if (!this.stringFunctions.equals(that.stringFunctions))
        return false;
    }

    boolean this_present_systemFunctions = true && this.isSetSystemFunctions();
    boolean that_present_systemFunctions = true && that.isSetSystemFunctions();
    if (this_present_systemFunctions || that_present_systemFunctions) {
      if (!(this_present_systemFunctions && that_present_systemFunctions))
        return false;
      if (!this.systemFunctions.equals(that.systemFunctions))
        return false;
    }

    boolean this_present_dateTimeFunctions = true && this.isSetDateTimeFunctions();
    boolean that_present_dateTimeFunctions = true && that.isSetDateTimeFunctions();
    if (this_present_dateTimeFunctions || that_present_dateTimeFunctions) {
      if (!(this_present_dateTimeFunctions && that_present_dateTimeFunctions))
        return false;
      if (!this.dateTimeFunctions.equals(that.dateTimeFunctions))
        return false;
    }

    boolean this_present_searchStringEscape = true && this.isSetSearchStringEscape();
    boolean that_present_searchStringEscape = true && that.isSetSearchStringEscape();
    if (this_present_searchStringEscape || that_present_searchStringEscape) {
      if (!(this_present_searchStringEscape && that_present_searchStringEscape))
        return false;
      if (!this.searchStringEscape.equals(that.searchStringEscape))
        return false;
    }

    boolean this_present_extraNameCharacters = true && this.isSetExtraNameCharacters();
    boolean that_present_extraNameCharacters = true && that.isSetExtraNameCharacters();
    if (this_present_extraNameCharacters || that_present_extraNameCharacters) {
      if (!(this_present_extraNameCharacters && that_present_extraNameCharacters))
        return false;
      if (!this.extraNameCharacters.equals(that.extraNameCharacters))
        return false;
    }

    boolean this_present_supportedCONVERT = true && this.isSetSupportedCONVERT();
    boolean that_present_supportedCONVERT = true && that.isSetSupportedCONVERT();
    if (this_present_supportedCONVERT || that_present_supportedCONVERT) {
      if (!(this_present_supportedCONVERT && that_present_supportedCONVERT))
        return false;
      if (!this.supportedCONVERT.equals(that.supportedCONVERT))
        return false;
    }

    boolean this_present_schemaTerm = true && this.isSetSchemaTerm();
    boolean that_present_schemaTerm = true && that.isSetSchemaTerm();
    if (this_present_schemaTerm || that_present_schemaTerm) {
      if (!(this_present_schemaTerm && that_present_schemaTerm))
        return false;
      if (!this.schemaTerm.equals(that.schemaTerm))
        return false;
    }

    boolean this_present_procedureTerm = true && this.isSetProcedureTerm();
    boolean that_present_procedureTerm = true && that.isSetProcedureTerm();
    if (this_present_procedureTerm || that_present_procedureTerm) {
      if (!(this_present_procedureTerm && that_present_procedureTerm))
        return false;
      if (!this.procedureTerm.equals(that.procedureTerm))
        return false;
    }

    boolean this_present_catalogTerm = true && this.isSetCatalogTerm();
    boolean that_present_catalogTerm = true && that.isSetCatalogTerm();
    if (this_present_catalogTerm || that_present_catalogTerm) {
      if (!(this_present_catalogTerm && that_present_catalogTerm))
        return false;
      if (!this.catalogTerm.equals(that.catalogTerm))
        return false;
    }

    boolean this_present_catalogSeparator = true && this.isSetCatalogSeparator();
    boolean that_present_catalogSeparator = true && that.isSetCatalogSeparator();
    if (this_present_catalogSeparator || that_present_catalogSeparator) {
      if (!(this_present_catalogSeparator && that_present_catalogSeparator))
        return false;
      if (!this.catalogSeparator.equals(that.catalogSeparator))
        return false;
    }

    boolean this_present_maxBinaryLiteralLength = true;
    boolean that_present_maxBinaryLiteralLength = true;
    if (this_present_maxBinaryLiteralLength || that_present_maxBinaryLiteralLength) {
      if (!(this_present_maxBinaryLiteralLength && that_present_maxBinaryLiteralLength))
        return false;
      if (this.maxBinaryLiteralLength != that.maxBinaryLiteralLength)
        return false;
    }

    boolean this_present_maxCharLiteralLength = true;
    boolean that_present_maxCharLiteralLength = true;
    if (this_present_maxCharLiteralLength || that_present_maxCharLiteralLength) {
      if (!(this_present_maxCharLiteralLength && that_present_maxCharLiteralLength))
        return false;
      if (this.maxCharLiteralLength != that.maxCharLiteralLength)
        return false;
    }

    boolean this_present_maxColumnsInGroupBy = true;
    boolean that_present_maxColumnsInGroupBy = true;
    if (this_present_maxColumnsInGroupBy || that_present_maxColumnsInGroupBy) {
      if (!(this_present_maxColumnsInGroupBy && that_present_maxColumnsInGroupBy))
        return false;
      if (this.maxColumnsInGroupBy != that.maxColumnsInGroupBy)
        return false;
    }

    boolean this_present_maxColumnsInIndex = true;
    boolean that_present_maxColumnsInIndex = true;
    if (this_present_maxColumnsInIndex || that_present_maxColumnsInIndex) {
      if (!(this_present_maxColumnsInIndex && that_present_maxColumnsInIndex))
        return false;
      if (this.maxColumnsInIndex != that.maxColumnsInIndex)
        return false;
    }

    boolean this_present_maxColumnsInOrderBy = true;
    boolean that_present_maxColumnsInOrderBy = true;
    if (this_present_maxColumnsInOrderBy || that_present_maxColumnsInOrderBy) {
      if (!(this_present_maxColumnsInOrderBy && that_present_maxColumnsInOrderBy))
        return false;
      if (this.maxColumnsInOrderBy != that.maxColumnsInOrderBy)
        return false;
    }

    boolean this_present_maxColumnsInSelect = true;
    boolean that_present_maxColumnsInSelect = true;
    if (this_present_maxColumnsInSelect || that_present_maxColumnsInSelect) {
      if (!(this_present_maxColumnsInSelect && that_present_maxColumnsInSelect))
        return false;
      if (this.maxColumnsInSelect != that.maxColumnsInSelect)
        return false;
    }

    boolean this_present_maxColumnsInTable = true;
    boolean that_present_maxColumnsInTable = true;
    if (this_present_maxColumnsInTable || that_present_maxColumnsInTable) {
      if (!(this_present_maxColumnsInTable && that_present_maxColumnsInTable))
        return false;
      if (this.maxColumnsInTable != that.maxColumnsInTable)
        return false;
    }

    boolean this_present_maxConnections = true;
    boolean that_present_maxConnections = true;
    if (this_present_maxConnections || that_present_maxConnections) {
      if (!(this_present_maxConnections && that_present_maxConnections))
        return false;
      if (this.maxConnections != that.maxConnections)
        return false;
    }

    boolean this_present_maxIndexLength = true;
    boolean that_present_maxIndexLength = true;
    if (this_present_maxIndexLength || that_present_maxIndexLength) {
      if (!(this_present_maxIndexLength && that_present_maxIndexLength))
        return false;
      if (this.maxIndexLength != that.maxIndexLength)
        return false;
    }

    boolean this_present_maxRowSize = true;
    boolean that_present_maxRowSize = true;
    if (this_present_maxRowSize || that_present_maxRowSize) {
      if (!(this_present_maxRowSize && that_present_maxRowSize))
        return false;
      if (this.maxRowSize != that.maxRowSize)
        return false;
    }

    boolean this_present_maxStatementLength = true;
    boolean that_present_maxStatementLength = true;
    if (this_present_maxStatementLength || that_present_maxStatementLength) {
      if (!(this_present_maxStatementLength && that_present_maxStatementLength))
        return false;
      if (this.maxStatementLength != that.maxStatementLength)
        return false;
    }

    boolean this_present_maxOpenStatements = true;
    boolean that_present_maxOpenStatements = true;
    if (this_present_maxOpenStatements || that_present_maxOpenStatements) {
      if (!(this_present_maxOpenStatements && that_present_maxOpenStatements))
        return false;
      if (this.maxOpenStatements != that.maxOpenStatements)
        return false;
    }

    boolean this_present_maxTableNamesInSelect = true;
    boolean that_present_maxTableNamesInSelect = true;
    if (this_present_maxTableNamesInSelect || that_present_maxTableNamesInSelect) {
      if (!(this_present_maxTableNamesInSelect && that_present_maxTableNamesInSelect))
        return false;
      if (this.maxTableNamesInSelect != that.maxTableNamesInSelect)
        return false;
    }

    boolean this_present_maxColumnNameLength = true;
    boolean that_present_maxColumnNameLength = true;
    if (this_present_maxColumnNameLength || that_present_maxColumnNameLength) {
      if (!(this_present_maxColumnNameLength && that_present_maxColumnNameLength))
        return false;
      if (this.maxColumnNameLength != that.maxColumnNameLength)
        return false;
    }

    boolean this_present_maxCursorNameLength = true;
    boolean that_present_maxCursorNameLength = true;
    if (this_present_maxCursorNameLength || that_present_maxCursorNameLength) {
      if (!(this_present_maxCursorNameLength && that_present_maxCursorNameLength))
        return false;
      if (this.maxCursorNameLength != that.maxCursorNameLength)
        return false;
    }

    boolean this_present_maxSchemaNameLength = true;
    boolean that_present_maxSchemaNameLength = true;
    if (this_present_maxSchemaNameLength || that_present_maxSchemaNameLength) {
      if (!(this_present_maxSchemaNameLength && that_present_maxSchemaNameLength))
        return false;
      if (this.maxSchemaNameLength != that.maxSchemaNameLength)
        return false;
    }

    boolean this_present_maxProcedureNameLength = true;
    boolean that_present_maxProcedureNameLength = true;
    if (this_present_maxProcedureNameLength || that_present_maxProcedureNameLength) {
      if (!(this_present_maxProcedureNameLength && that_present_maxProcedureNameLength))
        return false;
      if (this.maxProcedureNameLength != that.maxProcedureNameLength)
        return false;
    }

    boolean this_present_maxCatalogNameLength = true;
    boolean that_present_maxCatalogNameLength = true;
    if (this_present_maxCatalogNameLength || that_present_maxCatalogNameLength) {
      if (!(this_present_maxCatalogNameLength && that_present_maxCatalogNameLength))
        return false;
      if (this.maxCatalogNameLength != that.maxCatalogNameLength)
        return false;
    }

    boolean this_present_maxTableNameLength = true;
    boolean that_present_maxTableNameLength = true;
    if (this_present_maxTableNameLength || that_present_maxTableNameLength) {
      if (!(this_present_maxTableNameLength && that_present_maxTableNameLength))
        return false;
      if (this.maxTableNameLength != that.maxTableNameLength)
        return false;
    }

    boolean this_present_maxUserNameLength = true;
    boolean that_present_maxUserNameLength = true;
    if (this_present_maxUserNameLength || that_present_maxUserNameLength) {
      if (!(this_present_maxUserNameLength && that_present_maxUserNameLength))
        return false;
      if (this.maxUserNameLength != that.maxUserNameLength)
        return false;
    }

    boolean this_present_defaultTransactionIsolation = true;
    boolean that_present_defaultTransactionIsolation = true;
    if (this_present_defaultTransactionIsolation || that_present_defaultTransactionIsolation) {
      if (!(this_present_defaultTransactionIsolation && that_present_defaultTransactionIsolation))
        return false;
      if (this.defaultTransactionIsolation != that.defaultTransactionIsolation)
        return false;
    }

    boolean this_present_defaultResultSetType = true;
    boolean that_present_defaultResultSetType = true;
    if (this_present_defaultResultSetType || that_present_defaultResultSetType) {
      if (!(this_present_defaultResultSetType && that_present_defaultResultSetType))
        return false;
      if (this.defaultResultSetType != that.defaultResultSetType)
        return false;
    }

    boolean this_present_defaultResultSetHoldabilityHoldCursorsOverCommit = true;
    boolean that_present_defaultResultSetHoldabilityHoldCursorsOverCommit = true;
    if (this_present_defaultResultSetHoldabilityHoldCursorsOverCommit || that_present_defaultResultSetHoldabilityHoldCursorsOverCommit) {
      if (!(this_present_defaultResultSetHoldabilityHoldCursorsOverCommit && that_present_defaultResultSetHoldabilityHoldCursorsOverCommit))
        return false;
      if (this.defaultResultSetHoldabilityHoldCursorsOverCommit != that.defaultResultSetHoldabilityHoldCursorsOverCommit)
        return false;
    }

    boolean this_present_sqlStateIsXOpen = true;
    boolean that_present_sqlStateIsXOpen = true;
    if (this_present_sqlStateIsXOpen || that_present_sqlStateIsXOpen) {
      if (!(this_present_sqlStateIsXOpen && that_present_sqlStateIsXOpen))
        return false;
      if (this.sqlStateIsXOpen != that.sqlStateIsXOpen)
        return false;
    }

    boolean this_present_catalogAtStart = true;
    boolean that_present_catalogAtStart = true;
    if (this_present_catalogAtStart || that_present_catalogAtStart) {
      if (!(this_present_catalogAtStart && that_present_catalogAtStart))
        return false;
      if (this.catalogAtStart != that.catalogAtStart)
        return false;
    }

    boolean this_present_transactionDefaults = true && this.isSetTransactionDefaults();
    boolean that_present_transactionDefaults = true && that.isSetTransactionDefaults();
    if (this_present_transactionDefaults || that_present_transactionDefaults) {
      if (!(this_present_transactionDefaults && that_present_transactionDefaults))
        return false;
      if (!this.transactionDefaults.equals(that.transactionDefaults))
        return false;
    }

    boolean this_present_rowIdLifeTime = true && this.isSetRowIdLifeTime();
    boolean that_present_rowIdLifeTime = true && that.isSetRowIdLifeTime();
    if (this_present_rowIdLifeTime || that_present_rowIdLifeTime) {
      if (!(this_present_rowIdLifeTime && that_present_rowIdLifeTime))
        return false;
      if (!this.rowIdLifeTime.equals(that.rowIdLifeTime))
        return false;
    }

    boolean this_present_supportedFeatures = true && this.isSetSupportedFeatures();
    boolean that_present_supportedFeatures = true && that.isSetSupportedFeatures();
    if (this_present_supportedFeatures || that_present_supportedFeatures) {
      if (!(this_present_supportedFeatures && that_present_supportedFeatures))
        return false;
      if (!this.supportedFeatures.equals(that.supportedFeatures))
        return false;
    }

    boolean this_present_featuresWithParams = true && this.isSetFeaturesWithParams();
    boolean that_present_featuresWithParams = true && that.isSetFeaturesWithParams();
    if (this_present_featuresWithParams || that_present_featuresWithParams) {
      if (!(this_present_featuresWithParams && that_present_featuresWithParams))
        return false;
      if (!this.featuresWithParams.equals(that.featuresWithParams))
        return false;
    }

    return true;
  }

  @Override
  public int hashCode() {
    List list = new ArrayList();

    boolean present_productName = true && (isSetProductName());
    list.add(present_productName);
    if (present_productName)
      list.add(productName);

    boolean present_productVersion = true && (isSetProductVersion());
    list.add(present_productVersion);
    if (present_productVersion)
      list.add(productVersion);

    boolean present_productMajorVersion = true;
    list.add(present_productMajorVersion);
    if (present_productMajorVersion)
      list.add(productMajorVersion);

    boolean present_productMinorVersion = true;
    list.add(present_productMinorVersion);
    if (present_productMinorVersion)
      list.add(productMinorVersion);

    boolean present_jdbcMajorVersion = true;
    list.add(present_jdbcMajorVersion);
    if (present_jdbcMajorVersion)
      list.add(jdbcMajorVersion);

    boolean present_jdbcMinorVersion = true;
    list.add(present_jdbcMinorVersion);
    if (present_jdbcMinorVersion)
      list.add(jdbcMinorVersion);

    boolean present_identifierQuote = true && (isSetIdentifierQuote());
    list.add(present_identifierQuote);
    if (present_identifierQuote)
      list.add(identifierQuote);

    boolean present_sqlKeywords = true && (isSetSqlKeywords());
    list.add(present_sqlKeywords);
    if (present_sqlKeywords)
      list.add(sqlKeywords);

    boolean present_numericFunctions = true && (isSetNumericFunctions());
    list.add(present_numericFunctions);
    if (present_numericFunctions)
      list.add(numericFunctions);

    boolean present_stringFunctions = true && (isSetStringFunctions());
    list.add(present_stringFunctions);
    if (present_stringFunctions)
      list.add(stringFunctions);

    boolean present_systemFunctions = true && (isSetSystemFunctions());
    list.add(present_systemFunctions);
    if (present_systemFunctions)
      list.add(systemFunctions);

    boolean present_dateTimeFunctions = true && (isSetDateTimeFunctions());
    list.add(present_dateTimeFunctions);
    if (present_dateTimeFunctions)
      list.add(dateTimeFunctions);

    boolean present_searchStringEscape = true && (isSetSearchStringEscape());
    list.add(present_searchStringEscape);
    if (present_searchStringEscape)
      list.add(searchStringEscape);

    boolean present_extraNameCharacters = true && (isSetExtraNameCharacters());
    list.add(present_extraNameCharacters);
    if (present_extraNameCharacters)
      list.add(extraNameCharacters);

    boolean present_supportedCONVERT = true && (isSetSupportedCONVERT());
    list.add(present_supportedCONVERT);
    if (present_supportedCONVERT)
      list.add(supportedCONVERT);

    boolean present_schemaTerm = true && (isSetSchemaTerm());
    list.add(present_schemaTerm);
    if (present_schemaTerm)
      list.add(schemaTerm);

    boolean present_procedureTerm = true && (isSetProcedureTerm());
    list.add(present_procedureTerm);
    if (present_procedureTerm)
      list.add(procedureTerm);

    boolean present_catalogTerm = true && (isSetCatalogTerm());
    list.add(present_catalogTerm);
    if (present_catalogTerm)
      list.add(catalogTerm);

    boolean present_catalogSeparator = true && (isSetCatalogSeparator());
    list.add(present_catalogSeparator);
    if (present_catalogSeparator)
      list.add(catalogSeparator);

    boolean present_maxBinaryLiteralLength = true;
    list.add(present_maxBinaryLiteralLength);
    if (present_maxBinaryLiteralLength)
      list.add(maxBinaryLiteralLength);

    boolean present_maxCharLiteralLength = true;
    list.add(present_maxCharLiteralLength);
    if (present_maxCharLiteralLength)
      list.add(maxCharLiteralLength);

    boolean present_maxColumnsInGroupBy = true;
    list.add(present_maxColumnsInGroupBy);
    if (present_maxColumnsInGroupBy)
      list.add(maxColumnsInGroupBy);

    boolean present_maxColumnsInIndex = true;
    list.add(present_maxColumnsInIndex);
    if (present_maxColumnsInIndex)
      list.add(maxColumnsInIndex);

    boolean present_maxColumnsInOrderBy = true;
    list.add(present_maxColumnsInOrderBy);
    if (present_maxColumnsInOrderBy)
      list.add(maxColumnsInOrderBy);

    boolean present_maxColumnsInSelect = true;
    list.add(present_maxColumnsInSelect);
    if (present_maxColumnsInSelect)
      list.add(maxColumnsInSelect);

    boolean present_maxColumnsInTable = true;
    list.add(present_maxColumnsInTable);
    if (present_maxColumnsInTable)
      list.add(maxColumnsInTable);

    boolean present_maxConnections = true;
    list.add(present_maxConnections);
    if (present_maxConnections)
      list.add(maxConnections);

    boolean present_maxIndexLength = true;
    list.add(present_maxIndexLength);
    if (present_maxIndexLength)
      list.add(maxIndexLength);

    boolean present_maxRowSize = true;
    list.add(present_maxRowSize);
    if (present_maxRowSize)
      list.add(maxRowSize);

    boolean present_maxStatementLength = true;
    list.add(present_maxStatementLength);
    if (present_maxStatementLength)
      list.add(maxStatementLength);

    boolean present_maxOpenStatements = true;
    list.add(present_maxOpenStatements);
    if (present_maxOpenStatements)
      list.add(maxOpenStatements);

    boolean present_maxTableNamesInSelect = true;
    list.add(present_maxTableNamesInSelect);
    if (present_maxTableNamesInSelect)
      list.add(maxTableNamesInSelect);

    boolean present_maxColumnNameLength = true;
    list.add(present_maxColumnNameLength);
    if (present_maxColumnNameLength)
      list.add(maxColumnNameLength);

    boolean present_maxCursorNameLength = true;
    list.add(present_maxCursorNameLength);
    if (present_maxCursorNameLength)
      list.add(maxCursorNameLength);

    boolean present_maxSchemaNameLength = true;
    list.add(present_maxSchemaNameLength);
    if (present_maxSchemaNameLength)
      list.add(maxSchemaNameLength);

    boolean present_maxProcedureNameLength = true;
    list.add(present_maxProcedureNameLength);
    if (present_maxProcedureNameLength)
      list.add(maxProcedureNameLength);

    boolean present_maxCatalogNameLength = true;
    list.add(present_maxCatalogNameLength);
    if (present_maxCatalogNameLength)
      list.add(maxCatalogNameLength);

    boolean present_maxTableNameLength = true;
    list.add(present_maxTableNameLength);
    if (present_maxTableNameLength)
      list.add(maxTableNameLength);

    boolean present_maxUserNameLength = true;
    list.add(present_maxUserNameLength);
    if (present_maxUserNameLength)
      list.add(maxUserNameLength);

    boolean present_defaultTransactionIsolation = true;
    list.add(present_defaultTransactionIsolation);
    if (present_defaultTransactionIsolation)
      list.add(defaultTransactionIsolation);

    boolean present_defaultResultSetType = true;
    list.add(present_defaultResultSetType);
    if (present_defaultResultSetType)
      list.add(defaultResultSetType);

    boolean present_defaultResultSetHoldabilityHoldCursorsOverCommit = true;
    list.add(present_defaultResultSetHoldabilityHoldCursorsOverCommit);
    if (present_defaultResultSetHoldabilityHoldCursorsOverCommit)
      list.add(defaultResultSetHoldabilityHoldCursorsOverCommit);

    boolean present_sqlStateIsXOpen = true;
    list.add(present_sqlStateIsXOpen);
    if (present_sqlStateIsXOpen)
      list.add(sqlStateIsXOpen);

    boolean present_catalogAtStart = true;
    list.add(present_catalogAtStart);
    if (present_catalogAtStart)
      list.add(catalogAtStart);

    boolean present_transactionDefaults = true && (isSetTransactionDefaults());
    list.add(present_transactionDefaults);
    if (present_transactionDefaults)
      list.add(transactionDefaults);

    boolean present_rowIdLifeTime = true && (isSetRowIdLifeTime());
    list.add(present_rowIdLifeTime);
    if (present_rowIdLifeTime)
      list.add(rowIdLifeTime.getValue());

    boolean present_supportedFeatures = true && (isSetSupportedFeatures());
    list.add(present_supportedFeatures);
    if (present_supportedFeatures)
      list.add(supportedFeatures);

    boolean present_featuresWithParams = true && (isSetFeaturesWithParams());
    list.add(present_featuresWithParams);
    if (present_featuresWithParams)
      list.add(featuresWithParams);

    return list.hashCode();
  }

  @Override
  public int compareTo(ServiceMetaData other) {
    if (!getClass().equals(other.getClass())) {
      return getClass().getName().compareTo(other.getClass().getName());
    }

    int lastComparison = 0;

    lastComparison = Boolean.valueOf(isSetProductName()).compareTo(other.isSetProductName());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetProductName()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.productName, other.productName);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetProductVersion()).compareTo(other.isSetProductVersion());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetProductVersion()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.productVersion, other.productVersion);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetProductMajorVersion()).compareTo(other.isSetProductMajorVersion());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetProductMajorVersion()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.productMajorVersion, other.productMajorVersion);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetProductMinorVersion()).compareTo(other.isSetProductMinorVersion());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetProductMinorVersion()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.productMinorVersion, other.productMinorVersion);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetJdbcMajorVersion()).compareTo(other.isSetJdbcMajorVersion());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetJdbcMajorVersion()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.jdbcMajorVersion, other.jdbcMajorVersion);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetJdbcMinorVersion()).compareTo(other.isSetJdbcMinorVersion());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetJdbcMinorVersion()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.jdbcMinorVersion, other.jdbcMinorVersion);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetIdentifierQuote()).compareTo(other.isSetIdentifierQuote());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetIdentifierQuote()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.identifierQuote, other.identifierQuote);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSqlKeywords()).compareTo(other.isSetSqlKeywords());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSqlKeywords()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sqlKeywords, other.sqlKeywords);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetNumericFunctions()).compareTo(other.isSetNumericFunctions());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetNumericFunctions()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.numericFunctions, other.numericFunctions);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetStringFunctions()).compareTo(other.isSetStringFunctions());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetStringFunctions()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.stringFunctions, other.stringFunctions);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSystemFunctions()).compareTo(other.isSetSystemFunctions());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSystemFunctions()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.systemFunctions, other.systemFunctions);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetDateTimeFunctions()).compareTo(other.isSetDateTimeFunctions());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDateTimeFunctions()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.dateTimeFunctions, other.dateTimeFunctions);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSearchStringEscape()).compareTo(other.isSetSearchStringEscape());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSearchStringEscape()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.searchStringEscape, other.searchStringEscape);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetExtraNameCharacters()).compareTo(other.isSetExtraNameCharacters());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetExtraNameCharacters()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.extraNameCharacters, other.extraNameCharacters);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSupportedCONVERT()).compareTo(other.isSetSupportedCONVERT());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSupportedCONVERT()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.supportedCONVERT, other.supportedCONVERT);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSchemaTerm()).compareTo(other.isSetSchemaTerm());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSchemaTerm()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.schemaTerm, other.schemaTerm);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetProcedureTerm()).compareTo(other.isSetProcedureTerm());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetProcedureTerm()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.procedureTerm, other.procedureTerm);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetCatalogTerm()).compareTo(other.isSetCatalogTerm());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetCatalogTerm()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.catalogTerm, other.catalogTerm);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetCatalogSeparator()).compareTo(other.isSetCatalogSeparator());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetCatalogSeparator()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.catalogSeparator, other.catalogSeparator);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxBinaryLiteralLength()).compareTo(other.isSetMaxBinaryLiteralLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxBinaryLiteralLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxBinaryLiteralLength, other.maxBinaryLiteralLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxCharLiteralLength()).compareTo(other.isSetMaxCharLiteralLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxCharLiteralLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxCharLiteralLength, other.maxCharLiteralLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnsInGroupBy()).compareTo(other.isSetMaxColumnsInGroupBy());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnsInGroupBy()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnsInGroupBy, other.maxColumnsInGroupBy);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnsInIndex()).compareTo(other.isSetMaxColumnsInIndex());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnsInIndex()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnsInIndex, other.maxColumnsInIndex);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnsInOrderBy()).compareTo(other.isSetMaxColumnsInOrderBy());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnsInOrderBy()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnsInOrderBy, other.maxColumnsInOrderBy);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnsInSelect()).compareTo(other.isSetMaxColumnsInSelect());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnsInSelect()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnsInSelect, other.maxColumnsInSelect);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnsInTable()).compareTo(other.isSetMaxColumnsInTable());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnsInTable()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnsInTable, other.maxColumnsInTable);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxConnections()).compareTo(other.isSetMaxConnections());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxConnections()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxConnections, other.maxConnections);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxIndexLength()).compareTo(other.isSetMaxIndexLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxIndexLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxIndexLength, other.maxIndexLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxRowSize()).compareTo(other.isSetMaxRowSize());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxRowSize()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxRowSize, other.maxRowSize);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxStatementLength()).compareTo(other.isSetMaxStatementLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxStatementLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxStatementLength, other.maxStatementLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxOpenStatements()).compareTo(other.isSetMaxOpenStatements());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxOpenStatements()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxOpenStatements, other.maxOpenStatements);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxTableNamesInSelect()).compareTo(other.isSetMaxTableNamesInSelect());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxTableNamesInSelect()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxTableNamesInSelect, other.maxTableNamesInSelect);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxColumnNameLength()).compareTo(other.isSetMaxColumnNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxColumnNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxColumnNameLength, other.maxColumnNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxCursorNameLength()).compareTo(other.isSetMaxCursorNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxCursorNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxCursorNameLength, other.maxCursorNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxSchemaNameLength()).compareTo(other.isSetMaxSchemaNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxSchemaNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxSchemaNameLength, other.maxSchemaNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxProcedureNameLength()).compareTo(other.isSetMaxProcedureNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxProcedureNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxProcedureNameLength, other.maxProcedureNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxCatalogNameLength()).compareTo(other.isSetMaxCatalogNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxCatalogNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxCatalogNameLength, other.maxCatalogNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxTableNameLength()).compareTo(other.isSetMaxTableNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxTableNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxTableNameLength, other.maxTableNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetMaxUserNameLength()).compareTo(other.isSetMaxUserNameLength());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetMaxUserNameLength()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxUserNameLength, other.maxUserNameLength);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetDefaultTransactionIsolation()).compareTo(other.isSetDefaultTransactionIsolation());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDefaultTransactionIsolation()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.defaultTransactionIsolation, other.defaultTransactionIsolation);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetDefaultResultSetType()).compareTo(other.isSetDefaultResultSetType());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDefaultResultSetType()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.defaultResultSetType, other.defaultResultSetType);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetDefaultResultSetHoldabilityHoldCursorsOverCommit()).compareTo(other.isSetDefaultResultSetHoldabilityHoldCursorsOverCommit());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetDefaultResultSetHoldabilityHoldCursorsOverCommit()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.defaultResultSetHoldabilityHoldCursorsOverCommit, other.defaultResultSetHoldabilityHoldCursorsOverCommit);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSqlStateIsXOpen()).compareTo(other.isSetSqlStateIsXOpen());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSqlStateIsXOpen()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sqlStateIsXOpen, other.sqlStateIsXOpen);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetCatalogAtStart()).compareTo(other.isSetCatalogAtStart());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetCatalogAtStart()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.catalogAtStart, other.catalogAtStart);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetTransactionDefaults()).compareTo(other.isSetTransactionDefaults());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetTransactionDefaults()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.transactionDefaults, other.transactionDefaults);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetRowIdLifeTime()).compareTo(other.isSetRowIdLifeTime());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetRowIdLifeTime()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.rowIdLifeTime, other.rowIdLifeTime);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetSupportedFeatures()).compareTo(other.isSetSupportedFeatures());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetSupportedFeatures()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.supportedFeatures, other.supportedFeatures);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    lastComparison = Boolean.valueOf(isSetFeaturesWithParams()).compareTo(other.isSetFeaturesWithParams());
    if (lastComparison != 0) {
      return lastComparison;
    }
    if (isSetFeaturesWithParams()) {
      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.featuresWithParams, other.featuresWithParams);
      if (lastComparison != 0) {
        return lastComparison;
      }
    }
    return 0;
  }

  public _Fields fieldForId(int fieldId) {
    return _Fields.findByThriftId(fieldId);
  }

  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
  }

  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder("ServiceMetaData(");
    boolean first = true;

    sb.append("productName:");
    if (this.productName == null) {
      sb.append("null");
    } else {
      sb.append(this.productName);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("productVersion:");
    if (this.productVersion == null) {
      sb.append("null");
    } else {
      sb.append(this.productVersion);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("productMajorVersion:");
    sb.append(this.productMajorVersion);
    first = false;
    if (!first) sb.append(", ");
    sb.append("productMinorVersion:");
    sb.append(this.productMinorVersion);
    first = false;
    if (!first) sb.append(", ");
    sb.append("jdbcMajorVersion:");
    sb.append(this.jdbcMajorVersion);
    first = false;
    if (!first) sb.append(", ");
    sb.append("jdbcMinorVersion:");
    sb.append(this.jdbcMinorVersion);
    first = false;
    if (!first) sb.append(", ");
    sb.append("identifierQuote:");
    if (this.identifierQuote == null) {
      sb.append("null");
    } else {
      sb.append(this.identifierQuote);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("sqlKeywords:");
    if (this.sqlKeywords == null) {
      sb.append("null");
    } else {
      sb.append(this.sqlKeywords);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("numericFunctions:");
    if (this.numericFunctions == null) {
      sb.append("null");
    } else {
      sb.append(this.numericFunctions);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("stringFunctions:");
    if (this.stringFunctions == null) {
      sb.append("null");
    } else {
      sb.append(this.stringFunctions);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("systemFunctions:");
    if (this.systemFunctions == null) {
      sb.append("null");
    } else {
      sb.append(this.systemFunctions);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("dateTimeFunctions:");
    if (this.dateTimeFunctions == null) {
      sb.append("null");
    } else {
      sb.append(this.dateTimeFunctions);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("searchStringEscape:");
    if (this.searchStringEscape == null) {
      sb.append("null");
    } else {
      sb.append(this.searchStringEscape);
    }
    first = false;
    if (isSetExtraNameCharacters()) {
      if (!first) sb.append(", ");
      sb.append("extraNameCharacters:");
      if (this.extraNameCharacters == null) {
        sb.append("null");
      } else {
        sb.append(this.extraNameCharacters);
      }
      first = false;
    }
    if (!first) sb.append(", ");
    sb.append("supportedCONVERT:");
    if (this.supportedCONVERT == null) {
      sb.append("null");
    } else {
      sb.append(this.supportedCONVERT);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("schemaTerm:");
    if (this.schemaTerm == null) {
      sb.append("null");
    } else {
      sb.append(this.schemaTerm);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("procedureTerm:");
    if (this.procedureTerm == null) {
      sb.append("null");
    } else {
      sb.append(this.procedureTerm);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("catalogTerm:");
    if (this.catalogTerm == null) {
      sb.append("null");
    } else {
      sb.append(this.catalogTerm);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("catalogSeparator:");
    if (this.catalogSeparator == null) {
      sb.append("null");
    } else {
      sb.append(this.catalogSeparator);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxBinaryLiteralLength:");
    sb.append(this.maxBinaryLiteralLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxCharLiteralLength:");
    sb.append(this.maxCharLiteralLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnsInGroupBy:");
    sb.append(this.maxColumnsInGroupBy);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnsInIndex:");
    sb.append(this.maxColumnsInIndex);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnsInOrderBy:");
    sb.append(this.maxColumnsInOrderBy);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnsInSelect:");
    sb.append(this.maxColumnsInSelect);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnsInTable:");
    sb.append(this.maxColumnsInTable);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxConnections:");
    sb.append(this.maxConnections);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxIndexLength:");
    sb.append(this.maxIndexLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxRowSize:");
    sb.append(this.maxRowSize);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxStatementLength:");
    sb.append(this.maxStatementLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxOpenStatements:");
    sb.append(this.maxOpenStatements);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxTableNamesInSelect:");
    sb.append(this.maxTableNamesInSelect);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxColumnNameLength:");
    sb.append(this.maxColumnNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxCursorNameLength:");
    sb.append(this.maxCursorNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxSchemaNameLength:");
    sb.append(this.maxSchemaNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxProcedureNameLength:");
    sb.append(this.maxProcedureNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxCatalogNameLength:");
    sb.append(this.maxCatalogNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxTableNameLength:");
    sb.append(this.maxTableNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("maxUserNameLength:");
    sb.append(this.maxUserNameLength);
    first = false;
    if (!first) sb.append(", ");
    sb.append("defaultTransactionIsolation:");
    sb.append(this.defaultTransactionIsolation);
    first = false;
    if (!first) sb.append(", ");
    sb.append("defaultResultSetType:");
    sb.append(this.defaultResultSetType);
    first = false;
    if (!first) sb.append(", ");
    sb.append("defaultResultSetHoldabilityHoldCursorsOverCommit:");
    sb.append(this.defaultResultSetHoldabilityHoldCursorsOverCommit);
    first = false;
    if (!first) sb.append(", ");
    sb.append("sqlStateIsXOpen:");
    sb.append(this.sqlStateIsXOpen);
    first = false;
    if (!first) sb.append(", ");
    sb.append("catalogAtStart:");
    sb.append(this.catalogAtStart);
    first = false;
    if (!first) sb.append(", ");
    sb.append("transactionDefaults:");
    if (this.transactionDefaults == null) {
      sb.append("null");
    } else {
      sb.append(this.transactionDefaults);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("rowIdLifeTime:");
    if (this.rowIdLifeTime == null) {
      sb.append("null");
    } else {
      sb.append(this.rowIdLifeTime);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("supportedFeatures:");
    if (this.supportedFeatures == null) {
      sb.append("null");
    } else {
      sb.append(this.supportedFeatures);
    }
    first = false;
    if (!first) sb.append(", ");
    sb.append("featuresWithParams:");
    if (this.featuresWithParams == null) {
      sb.append("null");
    } else {
      sb.append(this.featuresWithParams);
    }
    first = false;
    sb.append(")");
    return sb.toString();
  }

  public void validate() throws org.apache.thrift.TException {
    // check for required fields
    if (productName == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'productName' was not present! Struct: " + toString());
    }
    if (productVersion == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'productVersion' was not present! Struct: " + toString());
    }
    // alas, we cannot check 'productMajorVersion' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'productMinorVersion' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'jdbcMajorVersion' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'jdbcMinorVersion' because it's a primitive and you chose the non-beans generator.
    if (identifierQuote == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'identifierQuote' was not present! Struct: " + toString());
    }
    if (sqlKeywords == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'sqlKeywords' was not present! Struct: " + toString());
    }
    if (numericFunctions == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'numericFunctions' was not present! Struct: " + toString());
    }
    if (stringFunctions == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'stringFunctions' was not present! Struct: " + toString());
    }
    if (systemFunctions == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'systemFunctions' was not present! Struct: " + toString());
    }
    if (dateTimeFunctions == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'dateTimeFunctions' was not present! Struct: " + toString());
    }
    if (searchStringEscape == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'searchStringEscape' was not present! Struct: " + toString());
    }
    if (supportedCONVERT == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'supportedCONVERT' was not present! Struct: " + toString());
    }
    if (schemaTerm == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'schemaTerm' was not present! Struct: " + toString());
    }
    if (procedureTerm == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'procedureTerm' was not present! Struct: " + toString());
    }
    if (catalogTerm == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'catalogTerm' was not present! Struct: " + toString());
    }
    if (catalogSeparator == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'catalogSeparator' was not present! Struct: " + toString());
    }
    // alas, we cannot check 'maxBinaryLiteralLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxCharLiteralLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnsInGroupBy' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnsInIndex' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnsInOrderBy' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnsInSelect' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnsInTable' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxConnections' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxIndexLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxRowSize' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxStatementLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxOpenStatements' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxTableNamesInSelect' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxColumnNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxCursorNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxSchemaNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxProcedureNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxCatalogNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxTableNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'maxUserNameLength' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'defaultTransactionIsolation' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'defaultResultSetType' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'defaultResultSetHoldabilityHoldCursorsOverCommit' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'sqlStateIsXOpen' because it's a primitive and you chose the non-beans generator.
    // alas, we cannot check 'catalogAtStart' because it's a primitive and you chose the non-beans generator.
    if (transactionDefaults == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'transactionDefaults' was not present! Struct: " + toString());
    }
    if (rowIdLifeTime == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'rowIdLifeTime' was not present! Struct: " + toString());
    }
    if (supportedFeatures == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'supportedFeatures' was not present! Struct: " + toString());
    }
    if (featuresWithParams == null) {
      throw new org.apache.thrift.protocol.TProtocolException("Required field 'featuresWithParams' was not present! Struct: " + toString());
    }
    // check for sub-struct validity
  }

  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
    try {
      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
    } catch (org.apache.thrift.TException te) {
      throw new java.io.IOException(te);
    }
  }

  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
    try {
      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
      __isset_bitfield = 0;
      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
    } catch (org.apache.thrift.TException te) {
      throw new java.io.IOException(te);
    }
  }

  private static class ServiceMetaDataStandardSchemeFactory implements SchemeFactory {
    public ServiceMetaDataStandardScheme getScheme() {
      return new ServiceMetaDataStandardScheme();
    }
  }

  private static class ServiceMetaDataStandardScheme extends StandardScheme {

    public void read(org.apache.thrift.protocol.TProtocol iprot, ServiceMetaData struct) throws org.apache.thrift.TException {
      org.apache.thrift.protocol.TField schemeField;
      iprot.readStructBegin();
      while (true)
      {
        schemeField = iprot.readFieldBegin();
        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
          break;
        }
        switch (schemeField.id) {
          case 1: // PRODUCT_NAME
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.productName = iprot.readString();
              struct.setProductNameIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 2: // PRODUCT_VERSION
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.productVersion = iprot.readString();
              struct.setProductVersionIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 3: // PRODUCT_MAJOR_VERSION
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.productMajorVersion = iprot.readI32();
              struct.setProductMajorVersionIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 4: // PRODUCT_MINOR_VERSION
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.productMinorVersion = iprot.readI32();
              struct.setProductMinorVersionIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 5: // JDBC_MAJOR_VERSION
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.jdbcMajorVersion = iprot.readI32();
              struct.setJdbcMajorVersionIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 6: // JDBC_MINOR_VERSION
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.jdbcMinorVersion = iprot.readI32();
              struct.setJdbcMinorVersionIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 7: // IDENTIFIER_QUOTE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.identifierQuote = iprot.readString();
              struct.setIdentifierQuoteIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 8: // SQL_KEYWORDS
            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
              {
                org.apache.thrift.protocol.TList _list0 = iprot.readListBegin();
                struct.sqlKeywords = new ArrayList(_list0.size);
                String _elem1;
                for (int _i2 = 0; _i2 < _list0.size; ++_i2)
                {
                  _elem1 = iprot.readString();
                  struct.sqlKeywords.add(_elem1);
                }
                iprot.readListEnd();
              }
              struct.setSqlKeywordsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 9: // NUMERIC_FUNCTIONS
            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
              {
                org.apache.thrift.protocol.TList _list3 = iprot.readListBegin();
                struct.numericFunctions = new ArrayList(_list3.size);
                String _elem4;
                for (int _i5 = 0; _i5 < _list3.size; ++_i5)
                {
                  _elem4 = iprot.readString();
                  struct.numericFunctions.add(_elem4);
                }
                iprot.readListEnd();
              }
              struct.setNumericFunctionsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 10: // STRING_FUNCTIONS
            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
              {
                org.apache.thrift.protocol.TList _list6 = iprot.readListBegin();
                struct.stringFunctions = new ArrayList(_list6.size);
                String _elem7;
                for (int _i8 = 0; _i8 < _list6.size; ++_i8)
                {
                  _elem7 = iprot.readString();
                  struct.stringFunctions.add(_elem7);
                }
                iprot.readListEnd();
              }
              struct.setStringFunctionsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 11: // SYSTEM_FUNCTIONS
            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
              {
                org.apache.thrift.protocol.TList _list9 = iprot.readListBegin();
                struct.systemFunctions = new ArrayList(_list9.size);
                String _elem10;
                for (int _i11 = 0; _i11 < _list9.size; ++_i11)
                {
                  _elem10 = iprot.readString();
                  struct.systemFunctions.add(_elem10);
                }
                iprot.readListEnd();
              }
              struct.setSystemFunctionsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 12: // DATE_TIME_FUNCTIONS
            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
              {
                org.apache.thrift.protocol.TList _list12 = iprot.readListBegin();
                struct.dateTimeFunctions = new ArrayList(_list12.size);
                String _elem13;
                for (int _i14 = 0; _i14 < _list12.size; ++_i14)
                {
                  _elem13 = iprot.readString();
                  struct.dateTimeFunctions.add(_elem13);
                }
                iprot.readListEnd();
              }
              struct.setDateTimeFunctionsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 13: // SEARCH_STRING_ESCAPE
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.searchStringEscape = iprot.readString();
              struct.setSearchStringEscapeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 14: // EXTRA_NAME_CHARACTERS
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.extraNameCharacters = iprot.readString();
              struct.setExtraNameCharactersIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 15: // SUPPORTED_CONVERT
            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
              {
                org.apache.thrift.protocol.TMap _map15 = iprot.readMapBegin();
                struct.supportedCONVERT = new HashMap>(2*_map15.size);
                SnappyType _key16;
                Set _val17;
                for (int _i18 = 0; _i18 < _map15.size; ++_i18)
                {
                  _key16 = io.snappydata.thrift.SnappyType.findByValue(iprot.readI32());
                  {
                    org.apache.thrift.protocol.TSet _set19 = iprot.readSetBegin();
                    _val17 = new HashSet(2*_set19.size);
                    SnappyType _elem20;
                    for (int _i21 = 0; _i21 < _set19.size; ++_i21)
                    {
                      _elem20 = io.snappydata.thrift.SnappyType.findByValue(iprot.readI32());
                      _val17.add(_elem20);
                    }
                    iprot.readSetEnd();
                  }
                  struct.supportedCONVERT.put(_key16, _val17);
                }
                iprot.readMapEnd();
              }
              struct.setSupportedCONVERTIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 16: // SCHEMA_TERM
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.schemaTerm = iprot.readString();
              struct.setSchemaTermIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 17: // PROCEDURE_TERM
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.procedureTerm = iprot.readString();
              struct.setProcedureTermIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 18: // CATALOG_TERM
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.catalogTerm = iprot.readString();
              struct.setCatalogTermIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 19: // CATALOG_SEPARATOR
            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
              struct.catalogSeparator = iprot.readString();
              struct.setCatalogSeparatorIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 20: // MAX_BINARY_LITERAL_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxBinaryLiteralLength = iprot.readI32();
              struct.setMaxBinaryLiteralLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 21: // MAX_CHAR_LITERAL_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxCharLiteralLength = iprot.readI32();
              struct.setMaxCharLiteralLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 22: // MAX_COLUMNS_IN_GROUP_BY
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnsInGroupBy = iprot.readI32();
              struct.setMaxColumnsInGroupByIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 23: // MAX_COLUMNS_IN_INDEX
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnsInIndex = iprot.readI32();
              struct.setMaxColumnsInIndexIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 24: // MAX_COLUMNS_IN_ORDER_BY
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnsInOrderBy = iprot.readI32();
              struct.setMaxColumnsInOrderByIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 25: // MAX_COLUMNS_IN_SELECT
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnsInSelect = iprot.readI32();
              struct.setMaxColumnsInSelectIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 26: // MAX_COLUMNS_IN_TABLE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnsInTable = iprot.readI32();
              struct.setMaxColumnsInTableIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 27: // MAX_CONNECTIONS
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxConnections = iprot.readI32();
              struct.setMaxConnectionsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 28: // MAX_INDEX_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxIndexLength = iprot.readI32();
              struct.setMaxIndexLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 29: // MAX_ROW_SIZE
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxRowSize = iprot.readI32();
              struct.setMaxRowSizeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 30: // MAX_STATEMENT_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxStatementLength = iprot.readI32();
              struct.setMaxStatementLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 31: // MAX_OPEN_STATEMENTS
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxOpenStatements = iprot.readI32();
              struct.setMaxOpenStatementsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 32: // MAX_TABLE_NAMES_IN_SELECT
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxTableNamesInSelect = iprot.readI32();
              struct.setMaxTableNamesInSelectIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 33: // MAX_COLUMN_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxColumnNameLength = iprot.readI32();
              struct.setMaxColumnNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 34: // MAX_CURSOR_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxCursorNameLength = iprot.readI32();
              struct.setMaxCursorNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 35: // MAX_SCHEMA_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxSchemaNameLength = iprot.readI32();
              struct.setMaxSchemaNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 36: // MAX_PROCEDURE_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxProcedureNameLength = iprot.readI32();
              struct.setMaxProcedureNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 37: // MAX_CATALOG_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxCatalogNameLength = iprot.readI32();
              struct.setMaxCatalogNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 38: // MAX_TABLE_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxTableNameLength = iprot.readI32();
              struct.setMaxTableNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 39: // MAX_USER_NAME_LENGTH
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.maxUserNameLength = iprot.readI32();
              struct.setMaxUserNameLengthIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 40: // DEFAULT_TRANSACTION_ISOLATION
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.defaultTransactionIsolation = iprot.readI32();
              struct.setDefaultTransactionIsolationIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 41: // DEFAULT_RESULT_SET_TYPE
            if (schemeField.type == org.apache.thrift.protocol.TType.BYTE) {
              struct.defaultResultSetType = iprot.readByte();
              struct.setDefaultResultSetTypeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 42: // DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.defaultResultSetHoldabilityHoldCursorsOverCommit = iprot.readBool();
              struct.setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 43: // SQL_STATE_IS_XOPEN
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.sqlStateIsXOpen = iprot.readBool();
              struct.setSqlStateIsXOpenIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 44: // CATALOG_AT_START
            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
              struct.catalogAtStart = iprot.readBool();
              struct.setCatalogAtStartIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 45: // TRANSACTION_DEFAULTS
            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
              {
                org.apache.thrift.protocol.TMap _map22 = iprot.readMapBegin();
                struct.transactionDefaults = new HashMap(2*_map22.size);
                TransactionAttribute _key23;
                boolean _val24;
                for (int _i25 = 0; _i25 < _map22.size; ++_i25)
                {
                  _key23 = io.snappydata.thrift.TransactionAttribute.findByValue(iprot.readI32());
                  _val24 = iprot.readBool();
                  struct.transactionDefaults.put(_key23, _val24);
                }
                iprot.readMapEnd();
              }
              struct.setTransactionDefaultsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 46: // ROW_ID_LIFE_TIME
            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
              struct.rowIdLifeTime = io.snappydata.thrift.RowIdLifetime.findByValue(iprot.readI32());
              struct.setRowIdLifeTimeIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 47: // SUPPORTED_FEATURES
            if (schemeField.type == org.apache.thrift.protocol.TType.SET) {
              {
                org.apache.thrift.protocol.TSet _set26 = iprot.readSetBegin();
                struct.supportedFeatures = new HashSet(2*_set26.size);
                ServiceFeature _elem27;
                for (int _i28 = 0; _i28 < _set26.size; ++_i28)
                {
                  _elem27 = io.snappydata.thrift.ServiceFeature.findByValue(iprot.readI32());
                  struct.supportedFeatures.add(_elem27);
                }
                iprot.readSetEnd();
              }
              struct.setSupportedFeaturesIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          case 48: // FEATURES_WITH_PARAMS
            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
              {
                org.apache.thrift.protocol.TMap _map29 = iprot.readMapBegin();
                struct.featuresWithParams = new HashMap>(2*_map29.size);
                ServiceFeatureParameterized _key30;
                List _val31;
                for (int _i32 = 0; _i32 < _map29.size; ++_i32)
                {
                  _key30 = io.snappydata.thrift.ServiceFeatureParameterized.findByValue(iprot.readI32());
                  {
                    org.apache.thrift.protocol.TList _list33 = iprot.readListBegin();
                    _val31 = new ArrayList(_list33.size);
                    int _elem34;
                    for (int _i35 = 0; _i35 < _list33.size; ++_i35)
                    {
                      _elem34 = iprot.readI32();
                      _val31.add(_elem34);
                    }
                    iprot.readListEnd();
                  }
                  struct.featuresWithParams.put(_key30, _val31);
                }
                iprot.readMapEnd();
              }
              struct.setFeaturesWithParamsIsSet(true);
            } else { 
              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
            }
            break;
          default:
            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
        }
        iprot.readFieldEnd();
      }
      iprot.readStructEnd();

      // check for required fields of primitive type, which can't be checked in the validate method
      if (!struct.isSetProductMajorVersion()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'productMajorVersion' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetProductMinorVersion()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'productMinorVersion' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetJdbcMajorVersion()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'jdbcMajorVersion' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetJdbcMinorVersion()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'jdbcMinorVersion' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxBinaryLiteralLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxBinaryLiteralLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxCharLiteralLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxCharLiteralLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnsInGroupBy()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnsInGroupBy' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnsInIndex()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnsInIndex' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnsInOrderBy()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnsInOrderBy' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnsInSelect()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnsInSelect' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnsInTable()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnsInTable' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxConnections()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxConnections' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxIndexLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxIndexLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxRowSize()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxRowSize' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxStatementLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxStatementLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxOpenStatements()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxOpenStatements' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxTableNamesInSelect()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxTableNamesInSelect' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxColumnNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxColumnNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxCursorNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxCursorNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxSchemaNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxSchemaNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxProcedureNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxProcedureNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxCatalogNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxCatalogNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxTableNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxTableNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetMaxUserNameLength()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'maxUserNameLength' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetDefaultTransactionIsolation()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'defaultTransactionIsolation' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetDefaultResultSetType()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'defaultResultSetType' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetDefaultResultSetHoldabilityHoldCursorsOverCommit()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'defaultResultSetHoldabilityHoldCursorsOverCommit' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetSqlStateIsXOpen()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'sqlStateIsXOpen' was not found in serialized data! Struct: " + toString());
      }
      if (!struct.isSetCatalogAtStart()) {
        throw new org.apache.thrift.protocol.TProtocolException("Required field 'catalogAtStart' was not found in serialized data! Struct: " + toString());
      }
      struct.validate();
    }

    public void write(org.apache.thrift.protocol.TProtocol oprot, ServiceMetaData struct) throws org.apache.thrift.TException {
      struct.validate();

      oprot.writeStructBegin(STRUCT_DESC);
      if (struct.productName != null) {
        oprot.writeFieldBegin(PRODUCT_NAME_FIELD_DESC);
        oprot.writeString(struct.productName);
        oprot.writeFieldEnd();
      }
      if (struct.productVersion != null) {
        oprot.writeFieldBegin(PRODUCT_VERSION_FIELD_DESC);
        oprot.writeString(struct.productVersion);
        oprot.writeFieldEnd();
      }
      oprot.writeFieldBegin(PRODUCT_MAJOR_VERSION_FIELD_DESC);
      oprot.writeI32(struct.productMajorVersion);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(PRODUCT_MINOR_VERSION_FIELD_DESC);
      oprot.writeI32(struct.productMinorVersion);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(JDBC_MAJOR_VERSION_FIELD_DESC);
      oprot.writeI32(struct.jdbcMajorVersion);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(JDBC_MINOR_VERSION_FIELD_DESC);
      oprot.writeI32(struct.jdbcMinorVersion);
      oprot.writeFieldEnd();
      if (struct.identifierQuote != null) {
        oprot.writeFieldBegin(IDENTIFIER_QUOTE_FIELD_DESC);
        oprot.writeString(struct.identifierQuote);
        oprot.writeFieldEnd();
      }
      if (struct.sqlKeywords != null) {
        oprot.writeFieldBegin(SQL_KEYWORDS_FIELD_DESC);
        {
          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.sqlKeywords.size()));
          for (String _iter36 : struct.sqlKeywords)
          {
            oprot.writeString(_iter36);
          }
          oprot.writeListEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.numericFunctions != null) {
        oprot.writeFieldBegin(NUMERIC_FUNCTIONS_FIELD_DESC);
        {
          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.numericFunctions.size()));
          for (String _iter37 : struct.numericFunctions)
          {
            oprot.writeString(_iter37);
          }
          oprot.writeListEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.stringFunctions != null) {
        oprot.writeFieldBegin(STRING_FUNCTIONS_FIELD_DESC);
        {
          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.stringFunctions.size()));
          for (String _iter38 : struct.stringFunctions)
          {
            oprot.writeString(_iter38);
          }
          oprot.writeListEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.systemFunctions != null) {
        oprot.writeFieldBegin(SYSTEM_FUNCTIONS_FIELD_DESC);
        {
          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.systemFunctions.size()));
          for (String _iter39 : struct.systemFunctions)
          {
            oprot.writeString(_iter39);
          }
          oprot.writeListEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.dateTimeFunctions != null) {
        oprot.writeFieldBegin(DATE_TIME_FUNCTIONS_FIELD_DESC);
        {
          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.dateTimeFunctions.size()));
          for (String _iter40 : struct.dateTimeFunctions)
          {
            oprot.writeString(_iter40);
          }
          oprot.writeListEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.searchStringEscape != null) {
        oprot.writeFieldBegin(SEARCH_STRING_ESCAPE_FIELD_DESC);
        oprot.writeString(struct.searchStringEscape);
        oprot.writeFieldEnd();
      }
      if (struct.extraNameCharacters != null) {
        if (struct.isSetExtraNameCharacters()) {
          oprot.writeFieldBegin(EXTRA_NAME_CHARACTERS_FIELD_DESC);
          oprot.writeString(struct.extraNameCharacters);
          oprot.writeFieldEnd();
        }
      }
      if (struct.supportedCONVERT != null) {
        oprot.writeFieldBegin(SUPPORTED_CONVERT_FIELD_DESC);
        {
          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.SET, struct.supportedCONVERT.size()));
          for (Map.Entry> _iter41 : struct.supportedCONVERT.entrySet())
          {
            oprot.writeI32(_iter41.getKey().getValue());
            {
              oprot.writeSetBegin(new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.I32, _iter41.getValue().size()));
              for (SnappyType _iter42 : _iter41.getValue())
              {
                oprot.writeI32(_iter42.getValue());
              }
              oprot.writeSetEnd();
            }
          }
          oprot.writeMapEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.schemaTerm != null) {
        oprot.writeFieldBegin(SCHEMA_TERM_FIELD_DESC);
        oprot.writeString(struct.schemaTerm);
        oprot.writeFieldEnd();
      }
      if (struct.procedureTerm != null) {
        oprot.writeFieldBegin(PROCEDURE_TERM_FIELD_DESC);
        oprot.writeString(struct.procedureTerm);
        oprot.writeFieldEnd();
      }
      if (struct.catalogTerm != null) {
        oprot.writeFieldBegin(CATALOG_TERM_FIELD_DESC);
        oprot.writeString(struct.catalogTerm);
        oprot.writeFieldEnd();
      }
      if (struct.catalogSeparator != null) {
        oprot.writeFieldBegin(CATALOG_SEPARATOR_FIELD_DESC);
        oprot.writeString(struct.catalogSeparator);
        oprot.writeFieldEnd();
      }
      oprot.writeFieldBegin(MAX_BINARY_LITERAL_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxBinaryLiteralLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_CHAR_LITERAL_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxCharLiteralLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMNS_IN_GROUP_BY_FIELD_DESC);
      oprot.writeI32(struct.maxColumnsInGroupBy);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMNS_IN_INDEX_FIELD_DESC);
      oprot.writeI32(struct.maxColumnsInIndex);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMNS_IN_ORDER_BY_FIELD_DESC);
      oprot.writeI32(struct.maxColumnsInOrderBy);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMNS_IN_SELECT_FIELD_DESC);
      oprot.writeI32(struct.maxColumnsInSelect);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMNS_IN_TABLE_FIELD_DESC);
      oprot.writeI32(struct.maxColumnsInTable);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_CONNECTIONS_FIELD_DESC);
      oprot.writeI32(struct.maxConnections);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_INDEX_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxIndexLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_ROW_SIZE_FIELD_DESC);
      oprot.writeI32(struct.maxRowSize);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_STATEMENT_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxStatementLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_OPEN_STATEMENTS_FIELD_DESC);
      oprot.writeI32(struct.maxOpenStatements);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_TABLE_NAMES_IN_SELECT_FIELD_DESC);
      oprot.writeI32(struct.maxTableNamesInSelect);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_COLUMN_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxColumnNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_CURSOR_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxCursorNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_SCHEMA_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxSchemaNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_PROCEDURE_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxProcedureNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_CATALOG_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxCatalogNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_TABLE_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxTableNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(MAX_USER_NAME_LENGTH_FIELD_DESC);
      oprot.writeI32(struct.maxUserNameLength);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(DEFAULT_TRANSACTION_ISOLATION_FIELD_DESC);
      oprot.writeI32(struct.defaultTransactionIsolation);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(DEFAULT_RESULT_SET_TYPE_FIELD_DESC);
      oprot.writeByte(struct.defaultResultSetType);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(DEFAULT_RESULT_SET_HOLDABILITY_HOLD_CURSORS_OVER_COMMIT_FIELD_DESC);
      oprot.writeBool(struct.defaultResultSetHoldabilityHoldCursorsOverCommit);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(SQL_STATE_IS_XOPEN_FIELD_DESC);
      oprot.writeBool(struct.sqlStateIsXOpen);
      oprot.writeFieldEnd();
      oprot.writeFieldBegin(CATALOG_AT_START_FIELD_DESC);
      oprot.writeBool(struct.catalogAtStart);
      oprot.writeFieldEnd();
      if (struct.transactionDefaults != null) {
        oprot.writeFieldBegin(TRANSACTION_DEFAULTS_FIELD_DESC);
        {
          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.BOOL, struct.transactionDefaults.size()));
          for (Map.Entry _iter43 : struct.transactionDefaults.entrySet())
          {
            oprot.writeI32(_iter43.getKey().getValue());
            oprot.writeBool(_iter43.getValue());
          }
          oprot.writeMapEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.rowIdLifeTime != null) {
        oprot.writeFieldBegin(ROW_ID_LIFE_TIME_FIELD_DESC);
        oprot.writeI32(struct.rowIdLifeTime.getValue());
        oprot.writeFieldEnd();
      }
      if (struct.supportedFeatures != null) {
        oprot.writeFieldBegin(SUPPORTED_FEATURES_FIELD_DESC);
        {
          oprot.writeSetBegin(new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.I32, struct.supportedFeatures.size()));
          for (ServiceFeature _iter44 : struct.supportedFeatures)
          {
            oprot.writeI32(_iter44.getValue());
          }
          oprot.writeSetEnd();
        }
        oprot.writeFieldEnd();
      }
      if (struct.featuresWithParams != null) {
        oprot.writeFieldBegin(FEATURES_WITH_PARAMS_FIELD_DESC);
        {
          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.LIST, struct.featuresWithParams.size()));
          for (Map.Entry> _iter45 : struct.featuresWithParams.entrySet())
          {
            oprot.writeI32(_iter45.getKey().getValue());
            {
              oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I32, _iter45.getValue().size()));
              for (int _iter46 : _iter45.getValue())
              {
                oprot.writeI32(_iter46);
              }
              oprot.writeListEnd();
            }
          }
          oprot.writeMapEnd();
        }
        oprot.writeFieldEnd();
      }
      oprot.writeFieldStop();
      oprot.writeStructEnd();
    }

  }

  private static class ServiceMetaDataTupleSchemeFactory implements SchemeFactory {
    public ServiceMetaDataTupleScheme getScheme() {
      return new ServiceMetaDataTupleScheme();
    }
  }

  private static class ServiceMetaDataTupleScheme extends TupleScheme {

    @Override
    public void write(org.apache.thrift.protocol.TProtocol prot, ServiceMetaData struct) throws org.apache.thrift.TException {
      TTupleProtocol oprot = (TTupleProtocol) prot;
      oprot.writeString(struct.productName);
      oprot.writeString(struct.productVersion);
      oprot.writeI32(struct.productMajorVersion);
      oprot.writeI32(struct.productMinorVersion);
      oprot.writeI32(struct.jdbcMajorVersion);
      oprot.writeI32(struct.jdbcMinorVersion);
      oprot.writeString(struct.identifierQuote);
      {
        oprot.writeI32(struct.sqlKeywords.size());
        for (String _iter47 : struct.sqlKeywords)
        {
          oprot.writeString(_iter47);
        }
      }
      {
        oprot.writeI32(struct.numericFunctions.size());
        for (String _iter48 : struct.numericFunctions)
        {
          oprot.writeString(_iter48);
        }
      }
      {
        oprot.writeI32(struct.stringFunctions.size());
        for (String _iter49 : struct.stringFunctions)
        {
          oprot.writeString(_iter49);
        }
      }
      {
        oprot.writeI32(struct.systemFunctions.size());
        for (String _iter50 : struct.systemFunctions)
        {
          oprot.writeString(_iter50);
        }
      }
      {
        oprot.writeI32(struct.dateTimeFunctions.size());
        for (String _iter51 : struct.dateTimeFunctions)
        {
          oprot.writeString(_iter51);
        }
      }
      oprot.writeString(struct.searchStringEscape);
      {
        oprot.writeI32(struct.supportedCONVERT.size());
        for (Map.Entry> _iter52 : struct.supportedCONVERT.entrySet())
        {
          oprot.writeI32(_iter52.getKey().getValue());
          {
            oprot.writeI32(_iter52.getValue().size());
            for (SnappyType _iter53 : _iter52.getValue())
            {
              oprot.writeI32(_iter53.getValue());
            }
          }
        }
      }
      oprot.writeString(struct.schemaTerm);
      oprot.writeString(struct.procedureTerm);
      oprot.writeString(struct.catalogTerm);
      oprot.writeString(struct.catalogSeparator);
      oprot.writeI32(struct.maxBinaryLiteralLength);
      oprot.writeI32(struct.maxCharLiteralLength);
      oprot.writeI32(struct.maxColumnsInGroupBy);
      oprot.writeI32(struct.maxColumnsInIndex);
      oprot.writeI32(struct.maxColumnsInOrderBy);
      oprot.writeI32(struct.maxColumnsInSelect);
      oprot.writeI32(struct.maxColumnsInTable);
      oprot.writeI32(struct.maxConnections);
      oprot.writeI32(struct.maxIndexLength);
      oprot.writeI32(struct.maxRowSize);
      oprot.writeI32(struct.maxStatementLength);
      oprot.writeI32(struct.maxOpenStatements);
      oprot.writeI32(struct.maxTableNamesInSelect);
      oprot.writeI32(struct.maxColumnNameLength);
      oprot.writeI32(struct.maxCursorNameLength);
      oprot.writeI32(struct.maxSchemaNameLength);
      oprot.writeI32(struct.maxProcedureNameLength);
      oprot.writeI32(struct.maxCatalogNameLength);
      oprot.writeI32(struct.maxTableNameLength);
      oprot.writeI32(struct.maxUserNameLength);
      oprot.writeI32(struct.defaultTransactionIsolation);
      oprot.writeByte(struct.defaultResultSetType);
      oprot.writeBool(struct.defaultResultSetHoldabilityHoldCursorsOverCommit);
      oprot.writeBool(struct.sqlStateIsXOpen);
      oprot.writeBool(struct.catalogAtStart);
      {
        oprot.writeI32(struct.transactionDefaults.size());
        for (Map.Entry _iter54 : struct.transactionDefaults.entrySet())
        {
          oprot.writeI32(_iter54.getKey().getValue());
          oprot.writeBool(_iter54.getValue());
        }
      }
      oprot.writeI32(struct.rowIdLifeTime.getValue());
      {
        oprot.writeI32(struct.supportedFeatures.size());
        for (ServiceFeature _iter55 : struct.supportedFeatures)
        {
          oprot.writeI32(_iter55.getValue());
        }
      }
      {
        oprot.writeI32(struct.featuresWithParams.size());
        for (Map.Entry> _iter56 : struct.featuresWithParams.entrySet())
        {
          oprot.writeI32(_iter56.getKey().getValue());
          {
            oprot.writeI32(_iter56.getValue().size());
            for (int _iter57 : _iter56.getValue())
            {
              oprot.writeI32(_iter57);
            }
          }
        }
      }
      BitSet optionals = new BitSet();
      if (struct.isSetExtraNameCharacters()) {
        optionals.set(0);
      }
      oprot.writeBitSet(optionals, 1);
      if (struct.isSetExtraNameCharacters()) {
        oprot.writeString(struct.extraNameCharacters);
      }
    }

    @Override
    public void read(org.apache.thrift.protocol.TProtocol prot, ServiceMetaData struct) throws org.apache.thrift.TException {
      TTupleProtocol iprot = (TTupleProtocol) prot;
      struct.productName = iprot.readString();
      struct.setProductNameIsSet(true);
      struct.productVersion = iprot.readString();
      struct.setProductVersionIsSet(true);
      struct.productMajorVersion = iprot.readI32();
      struct.setProductMajorVersionIsSet(true);
      struct.productMinorVersion = iprot.readI32();
      struct.setProductMinorVersionIsSet(true);
      struct.jdbcMajorVersion = iprot.readI32();
      struct.setJdbcMajorVersionIsSet(true);
      struct.jdbcMinorVersion = iprot.readI32();
      struct.setJdbcMinorVersionIsSet(true);
      struct.identifierQuote = iprot.readString();
      struct.setIdentifierQuoteIsSet(true);
      {
        org.apache.thrift.protocol.TList _list58 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
        struct.sqlKeywords = new ArrayList(_list58.size);
        String _elem59;
        for (int _i60 = 0; _i60 < _list58.size; ++_i60)
        {
          _elem59 = iprot.readString();
          struct.sqlKeywords.add(_elem59);
        }
      }
      struct.setSqlKeywordsIsSet(true);
      {
        org.apache.thrift.protocol.TList _list61 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
        struct.numericFunctions = new ArrayList(_list61.size);
        String _elem62;
        for (int _i63 = 0; _i63 < _list61.size; ++_i63)
        {
          _elem62 = iprot.readString();
          struct.numericFunctions.add(_elem62);
        }
      }
      struct.setNumericFunctionsIsSet(true);
      {
        org.apache.thrift.protocol.TList _list64 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
        struct.stringFunctions = new ArrayList(_list64.size);
        String _elem65;
        for (int _i66 = 0; _i66 < _list64.size; ++_i66)
        {
          _elem65 = iprot.readString();
          struct.stringFunctions.add(_elem65);
        }
      }
      struct.setStringFunctionsIsSet(true);
      {
        org.apache.thrift.protocol.TList _list67 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
        struct.systemFunctions = new ArrayList(_list67.size);
        String _elem68;
        for (int _i69 = 0; _i69 < _list67.size; ++_i69)
        {
          _elem68 = iprot.readString();
          struct.systemFunctions.add(_elem68);
        }
      }
      struct.setSystemFunctionsIsSet(true);
      {
        org.apache.thrift.protocol.TList _list70 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
        struct.dateTimeFunctions = new ArrayList(_list70.size);
        String _elem71;
        for (int _i72 = 0; _i72 < _list70.size; ++_i72)
        {
          _elem71 = iprot.readString();
          struct.dateTimeFunctions.add(_elem71);
        }
      }
      struct.setDateTimeFunctionsIsSet(true);
      struct.searchStringEscape = iprot.readString();
      struct.setSearchStringEscapeIsSet(true);
      {
        org.apache.thrift.protocol.TMap _map73 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.SET, iprot.readI32());
        struct.supportedCONVERT = new HashMap>(2*_map73.size);
        SnappyType _key74;
        Set _val75;
        for (int _i76 = 0; _i76 < _map73.size; ++_i76)
        {
          _key74 = io.snappydata.thrift.SnappyType.findByValue(iprot.readI32());
          {
            org.apache.thrift.protocol.TSet _set77 = new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.I32, iprot.readI32());
            _val75 = new HashSet(2*_set77.size);
            SnappyType _elem78;
            for (int _i79 = 0; _i79 < _set77.size; ++_i79)
            {
              _elem78 = io.snappydata.thrift.SnappyType.findByValue(iprot.readI32());
              _val75.add(_elem78);
            }
          }
          struct.supportedCONVERT.put(_key74, _val75);
        }
      }
      struct.setSupportedCONVERTIsSet(true);
      struct.schemaTerm = iprot.readString();
      struct.setSchemaTermIsSet(true);
      struct.procedureTerm = iprot.readString();
      struct.setProcedureTermIsSet(true);
      struct.catalogTerm = iprot.readString();
      struct.setCatalogTermIsSet(true);
      struct.catalogSeparator = iprot.readString();
      struct.setCatalogSeparatorIsSet(true);
      struct.maxBinaryLiteralLength = iprot.readI32();
      struct.setMaxBinaryLiteralLengthIsSet(true);
      struct.maxCharLiteralLength = iprot.readI32();
      struct.setMaxCharLiteralLengthIsSet(true);
      struct.maxColumnsInGroupBy = iprot.readI32();
      struct.setMaxColumnsInGroupByIsSet(true);
      struct.maxColumnsInIndex = iprot.readI32();
      struct.setMaxColumnsInIndexIsSet(true);
      struct.maxColumnsInOrderBy = iprot.readI32();
      struct.setMaxColumnsInOrderByIsSet(true);
      struct.maxColumnsInSelect = iprot.readI32();
      struct.setMaxColumnsInSelectIsSet(true);
      struct.maxColumnsInTable = iprot.readI32();
      struct.setMaxColumnsInTableIsSet(true);
      struct.maxConnections = iprot.readI32();
      struct.setMaxConnectionsIsSet(true);
      struct.maxIndexLength = iprot.readI32();
      struct.setMaxIndexLengthIsSet(true);
      struct.maxRowSize = iprot.readI32();
      struct.setMaxRowSizeIsSet(true);
      struct.maxStatementLength = iprot.readI32();
      struct.setMaxStatementLengthIsSet(true);
      struct.maxOpenStatements = iprot.readI32();
      struct.setMaxOpenStatementsIsSet(true);
      struct.maxTableNamesInSelect = iprot.readI32();
      struct.setMaxTableNamesInSelectIsSet(true);
      struct.maxColumnNameLength = iprot.readI32();
      struct.setMaxColumnNameLengthIsSet(true);
      struct.maxCursorNameLength = iprot.readI32();
      struct.setMaxCursorNameLengthIsSet(true);
      struct.maxSchemaNameLength = iprot.readI32();
      struct.setMaxSchemaNameLengthIsSet(true);
      struct.maxProcedureNameLength = iprot.readI32();
      struct.setMaxProcedureNameLengthIsSet(true);
      struct.maxCatalogNameLength = iprot.readI32();
      struct.setMaxCatalogNameLengthIsSet(true);
      struct.maxTableNameLength = iprot.readI32();
      struct.setMaxTableNameLengthIsSet(true);
      struct.maxUserNameLength = iprot.readI32();
      struct.setMaxUserNameLengthIsSet(true);
      struct.defaultTransactionIsolation = iprot.readI32();
      struct.setDefaultTransactionIsolationIsSet(true);
      struct.defaultResultSetType = iprot.readByte();
      struct.setDefaultResultSetTypeIsSet(true);
      struct.defaultResultSetHoldabilityHoldCursorsOverCommit = iprot.readBool();
      struct.setDefaultResultSetHoldabilityHoldCursorsOverCommitIsSet(true);
      struct.sqlStateIsXOpen = iprot.readBool();
      struct.setSqlStateIsXOpenIsSet(true);
      struct.catalogAtStart = iprot.readBool();
      struct.setCatalogAtStartIsSet(true);
      {
        org.apache.thrift.protocol.TMap _map80 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.BOOL, iprot.readI32());
        struct.transactionDefaults = new HashMap(2*_map80.size);
        TransactionAttribute _key81;
        boolean _val82;
        for (int _i83 = 0; _i83 < _map80.size; ++_i83)
        {
          _key81 = io.snappydata.thrift.TransactionAttribute.findByValue(iprot.readI32());
          _val82 = iprot.readBool();
          struct.transactionDefaults.put(_key81, _val82);
        }
      }
      struct.setTransactionDefaultsIsSet(true);
      struct.rowIdLifeTime = io.snappydata.thrift.RowIdLifetime.findByValue(iprot.readI32());
      struct.setRowIdLifeTimeIsSet(true);
      {
        org.apache.thrift.protocol.TSet _set84 = new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.I32, iprot.readI32());
        struct.supportedFeatures = new HashSet(2*_set84.size);
        ServiceFeature _elem85;
        for (int _i86 = 0; _i86 < _set84.size; ++_i86)
        {
          _elem85 = io.snappydata.thrift.ServiceFeature.findByValue(iprot.readI32());
          struct.supportedFeatures.add(_elem85);
        }
      }
      struct.setSupportedFeaturesIsSet(true);
      {
        org.apache.thrift.protocol.TMap _map87 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.LIST, iprot.readI32());
        struct.featuresWithParams = new HashMap>(2*_map87.size);
        ServiceFeatureParameterized _key88;
        List _val89;
        for (int _i90 = 0; _i90 < _map87.size; ++_i90)
        {
          _key88 = io.snappydata.thrift.ServiceFeatureParameterized.findByValue(iprot.readI32());
          {
            org.apache.thrift.protocol.TList _list91 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I32, iprot.readI32());
            _val89 = new ArrayList(_list91.size);
            int _elem92;
            for (int _i93 = 0; _i93 < _list91.size; ++_i93)
            {
              _elem92 = iprot.readI32();
              _val89.add(_elem92);
            }
          }
          struct.featuresWithParams.put(_key88, _val89);
        }
      }
      struct.setFeaturesWithParamsIsSet(true);
      BitSet incoming = iprot.readBitSet(1);
      if (incoming.get(0)) {
        struct.extraNameCharacters = iprot.readString();
        struct.setExtraNameCharactersIsSet(true);
      }
    }
  }

}