Package com.mysql.jdbc

Source Code of com.mysql.jdbc.ConnectionPropertiesImpl$XmlMap

/*
  Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.

  The MySQL Connector/J is licensed under the terms of the GPLv2
  <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors.
  There are special exceptions to the terms and conditions of the GPLv2 as it is applied to
  this software, see the FLOSS License Exception
  <http://www.mysql.com/about/legal/licensing/foss-exception.html>.

  This program is free software; you can redistribute it and/or modify it under the terms
  of the GNU General Public License as published by the Free Software Foundation; version 2
  of the License.

  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along with this
  program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth
  Floor, Boston, MA 02110-1301  USA
*/
package com.mysql.jdbc;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.TreeMap;

import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.StringRefAddr;

import com.mysql.jdbc.log.Log;
import com.mysql.jdbc.log.StandardLogger;

/**
* Represents configurable properties for Connections and DataSources. Can also
* expose properties as JDBC DriverPropertyInfo if required as well.
*
* @author Mark Matthews
* @version $Id: ConnectionProperties.java,v 1.1.2.2 2005/05/17 14:58:56
*          mmatthews Exp $
*/
public class ConnectionPropertiesImpl implements Serializable, ConnectionProperties {
 
  private static final long serialVersionUID = 4257801713007640580L;

  static class BooleanConnectionProperty extends ConnectionProperty implements Serializable {
 
    private static final long serialVersionUID = 2540132501709159404L;

    /**
     * DOCUMENT ME!
     *
     * @param propertyNameToSet
     * @param defaultValueToSet
     * @param descriptionToSet
     *            DOCUMENT ME!
     * @param sinceVersionToSet
     *            DOCUMENT ME!
     */
    BooleanConnectionProperty(String propertyNameToSet,
        boolean defaultValueToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      super(propertyNameToSet, Boolean.valueOf(defaultValueToSet), null, 0,
          0, descriptionToSet, sinceVersionToSet, category,
          orderInCategory);
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#getAllowableValues()
     */
    String[] getAllowableValues() {
      return new String[] { "true", "false", "yes", "no" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    }

    boolean getValueAsBoolean() {
      return ((Boolean) this.valueAsObject).booleanValue();
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#hasValueConstraints()
     */
    boolean hasValueConstraints() {
      return true;
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#initializeFrom(java.util.Properties)
     */
    void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (extractedValue != null) {
        validateStringValues(extractedValue, exceptionInterceptor);

        this.valueAsObject = Boolean.valueOf(extractedValue
            .equalsIgnoreCase("TRUE") //$NON-NLS-1$
            || extractedValue.equalsIgnoreCase("YES")); //$NON-NLS-1$
      } else {
        this.valueAsObject = this.defaultValue;
      }
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#isRangeBased()
     */
    boolean isRangeBased() {
      return false;
    }

    void setValue(boolean valueFlag) {
      this.valueAsObject = Boolean.valueOf(valueFlag);
    }
  }

  static abstract class ConnectionProperty implements Serializable {

    static final long serialVersionUID = -6644853639584478367L;

    String[] allowableValues;

    String categoryName;

    Object defaultValue;

    int lowerBound;

    int order;

    String propertyName;

    String sinceVersion;

    int upperBound;

    Object valueAsObject;

    boolean required;
   
    String description;
   
    public ConnectionProperty() {}
   
    ConnectionProperty(String propertyNameToSet, Object defaultValueToSet,
        String[] allowableValuesToSet, int lowerBoundToSet,
        int upperBoundToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
     
      this.description = descriptionToSet;
      this.propertyName = propertyNameToSet;
      this.defaultValue = defaultValueToSet;
      this.valueAsObject = defaultValueToSet;
      this.allowableValues = allowableValuesToSet;
      this.lowerBound = lowerBoundToSet;
      this.upperBound = upperBoundToSet;
      this.required = false;
      this.sinceVersion = sinceVersionToSet;
      this.categoryName = category;
      this.order = orderInCategory;
    }

    String[] getAllowableValues() {
      return this.allowableValues;
    }

    /**
     * @return Returns the categoryName.
     */
    String getCategoryName() {
      return this.categoryName;
    }

    Object getDefaultValue() {
      return this.defaultValue;
    }

    int getLowerBound() {
      return this.lowerBound;
    }

    /**
     * @return Returns the order.
     */
    int getOrder() {
      return this.order;
    }

    String getPropertyName() {
      return this.propertyName;
    }

    int getUpperBound() {
      return this.upperBound;
    }

    Object getValueAsObject() {
      return this.valueAsObject;
    }

    abstract boolean hasValueConstraints();

    void initializeFrom(Properties extractFrom, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      String extractedValue = extractFrom.getProperty(getPropertyName());
      extractFrom.remove(getPropertyName());
      initializeFrom(extractedValue, exceptionInterceptor);
    }

    void initializeFrom(Reference ref, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      RefAddr refAddr = ref.get(getPropertyName());

      if (refAddr != null) {
        String refContentAsString = (String) refAddr.getContent();

        initializeFrom(refContentAsString, exceptionInterceptor);
      }
    }

    abstract void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException;

    abstract boolean isRangeBased();

    /**
     * @param categoryName
     *            The categoryName to set.
     */
    void setCategoryName(String categoryName) {
      this.categoryName = categoryName;
    }

    /**
     * @param order
     *            The order to set.
     */
    void setOrder(int order) {
      this.order = order;
    }

    void setValueAsObject(Object obj) {
      this.valueAsObject = obj;
    }

    void storeTo(Reference ref) {
      if (getValueAsObject() != null) {
        ref.add(new StringRefAddr(getPropertyName(), getValueAsObject()
            .toString()));
      }
    }

    DriverPropertyInfo getAsDriverPropertyInfo() {
      DriverPropertyInfo dpi = new DriverPropertyInfo(this.propertyName, null);
      dpi.choices = getAllowableValues();
      dpi.value = (this.valueAsObject != null) ? this.valueAsObject.toString() : null;
      dpi.required = this.required;
      dpi.description = this.description;
     
      return dpi;
    }
   

    void validateStringValues(String valueToValidate, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      String[] validateAgainst = getAllowableValues();

      if (valueToValidate == null) {
        return;
      }

      if ((validateAgainst == null) || (validateAgainst.length == 0)) {
        return;
      }

      for (int i = 0; i < validateAgainst.length; i++) {
        if ((validateAgainst[i] != null)
            && validateAgainst[i].equalsIgnoreCase(valueToValidate)) {
          return;
        }
      }

      StringBuffer errorMessageBuf = new StringBuffer();

      errorMessageBuf.append("The connection property '"); //$NON-NLS-1$
      errorMessageBuf.append(getPropertyName());
      errorMessageBuf.append("' only accepts values of the form: "); //$NON-NLS-1$

      if (validateAgainst.length != 0) {
        errorMessageBuf.append("'"); //$NON-NLS-1$
        errorMessageBuf.append(validateAgainst[0]);
        errorMessageBuf.append("'"); //$NON-NLS-1$

        for (int i = 1; i < (validateAgainst.length - 1); i++) {
          errorMessageBuf.append(", "); //$NON-NLS-1$
          errorMessageBuf.append("'"); //$NON-NLS-1$
          errorMessageBuf.append(validateAgainst[i]);
          errorMessageBuf.append("'"); //$NON-NLS-1$
        }

        errorMessageBuf.append(" or '"); //$NON-NLS-1$
        errorMessageBuf
            .append(validateAgainst[validateAgainst.length - 1]);
        errorMessageBuf.append("'"); //$NON-NLS-1$
      }

      errorMessageBuf.append(". The value '"); //$NON-NLS-1$
      errorMessageBuf.append(valueToValidate);
      errorMessageBuf.append("' is not in this set."); //$NON-NLS-1$

      throw SQLError.createSQLException(errorMessageBuf.toString(),
          SQLError.SQL_STATE_ILLEGAL_ARGUMENT, exceptionInterceptor);
    }
  }

  static class IntegerConnectionProperty extends ConnectionProperty implements Serializable {

    private static final long serialVersionUID = -3004305481796850832L;

    int multiplier = 1;

    public IntegerConnectionProperty(String propertyNameToSet,
        Object defaultValueToSet, String[] allowableValuesToSet,
        int lowerBoundToSet, int upperBoundToSet,
        String descriptionToSet, String sinceVersionToSet,
        String category, int orderInCategory) {
      super(propertyNameToSet, defaultValueToSet, allowableValuesToSet,
          lowerBoundToSet, upperBoundToSet, descriptionToSet, sinceVersionToSet,
          category, orderInCategory);
    }

    IntegerConnectionProperty(String propertyNameToSet,
        int defaultValueToSet, int lowerBoundToSet,
        int upperBoundToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      super(propertyNameToSet, Integer.valueOf(defaultValueToSet), null,
          lowerBoundToSet, upperBoundToSet, descriptionToSet,
          sinceVersionToSet, category, orderInCategory);
    }

    /**
     * DOCUMENT ME!
     *
     * @param propertyNameToSet
     * @param defaultValueToSet
     * @param descriptionToSet
     * @param sinceVersionToSet
     *            DOCUMENT ME!
     */

    IntegerConnectionProperty(String propertyNameToSet,
        int defaultValueToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      this(propertyNameToSet, defaultValueToSet, 0, 0, descriptionToSet,
          sinceVersionToSet, category, orderInCategory);
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#getAllowableValues()
     */
    String[] getAllowableValues() {
      return null;
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#getLowerBound()
     */
    int getLowerBound() {
      return this.lowerBound;
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#getUpperBound()
     */
    int getUpperBound() {
      return this.upperBound;
    }

    int getValueAsInt() {
      return ((Integer) this.valueAsObject).intValue();
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#hasValueConstraints()
     */
    boolean hasValueConstraints() {
      return false;
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#initializeFrom(java.lang.String)
     */
    void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (extractedValue != null) {
        try {
          // Parse decimals, too
          int intValue = (int) (Double.valueOf(extractedValue).doubleValue() * multiplier);

          setValue(intValue, extractedValue, exceptionInterceptor);
        } catch (NumberFormatException nfe) {
          throw SQLError.createSQLException("The connection property '" //$NON-NLS-1$
              + getPropertyName()
              + "' only accepts integer values. The value '" //$NON-NLS-1$
              + extractedValue
              + "' can not be converted to an integer.", //$NON-NLS-1$
              SQLError.SQL_STATE_ILLEGAL_ARGUMENT, exceptionInterceptor);
        }
      } else {
        this.valueAsObject = this.defaultValue;
      }
    }

    /**
     * @see com.mysql.jdbc.ConnectionProperties.ConnectionProperty#isRangeBased()
     */
    boolean isRangeBased() {
      return getUpperBound() != getLowerBound();
    }

    void setValue(int intValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      setValue(intValue, null, exceptionInterceptor);
    }
   
    void setValue(int intValue, String valueAsString, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (isRangeBased()) {
        if ((intValue < getLowerBound()) || (intValue > getUpperBound())) {
          throw SQLError.createSQLException("The connection property '" + getPropertyName()
              + "' only accepts integer values in the range of " + getLowerBound() + " - "
              + getUpperBound() + ", the value '" + (valueAsString == null ? intValue : valueAsString)
              + "' exceeds this range.", SQLError.SQL_STATE_ILLEGAL_ARGUMENT, exceptionInterceptor);
        }
      }

      this.valueAsObject = Integer.valueOf(intValue);
    }
  }
 
  static public class LongConnectionProperty extends IntegerConnectionProperty {

    private static final long serialVersionUID = 6068572984340480895L;

    LongConnectionProperty(String propertyNameToSet,
        long defaultValueToSet, long lowerBoundToSet,
        long upperBoundToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      super(propertyNameToSet, Long.valueOf(defaultValueToSet), null,
          (int)lowerBoundToSet, (int)upperBoundToSet, descriptionToSet,
          sinceVersionToSet, category, orderInCategory);
    }
   

    LongConnectionProperty(String propertyNameToSet,
        long defaultValueToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      this(propertyNameToSet,
        defaultValueToSet, 0,
        0, descriptionToSet,
        sinceVersionToSet, category, orderInCategory);
    }
   
    void setValue(long longValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      setValue(longValue, null, exceptionInterceptor);
    }
     
    void setValue(long longValue, String valueAsString, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (isRangeBased()) {
        if ((longValue < getLowerBound()) || (longValue > getUpperBound())) {
          throw SQLError.createSQLException("The connection property '" + getPropertyName()
              + "' only accepts long integer values in the range of " + getLowerBound() + " - "
              + getUpperBound() + ", the value '" + (valueAsString == null ? longValue : valueAsString)
              + "' exceeds this range.", SQLError.SQL_STATE_ILLEGAL_ARGUMENT, exceptionInterceptor);
        }
      }
      this.valueAsObject = Long.valueOf(longValue);
    }
   
    long getValueAsLong() {
      return ((Long) this.valueAsObject).longValue();
    }
   
    void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (extractedValue != null) {
        try {
          // Parse decimals, too
          long longValue = Double.valueOf(extractedValue).longValue();

          setValue(longValue, extractedValue, exceptionInterceptor);
        } catch (NumberFormatException nfe) {
          throw SQLError.createSQLException("The connection property '" //$NON-NLS-1$
              + getPropertyName()
              + "' only accepts long integer values. The value '" //$NON-NLS-1$
              + extractedValue
              + "' can not be converted to a long integer.", //$NON-NLS-1$
              SQLError.SQL_STATE_ILLEGAL_ARGUMENT, exceptionInterceptor);
        }
      } else {
        this.valueAsObject = this.defaultValue;
      }
    }
  }
 
  static class MemorySizeConnectionProperty extends IntegerConnectionProperty implements Serializable {

    private static final long serialVersionUID = 7351065128998572656L;

    private String valueAsString;
   
    MemorySizeConnectionProperty(String propertyNameToSet,
        int defaultValueToSet, int lowerBoundToSet,
        int upperBoundToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      super(propertyNameToSet, defaultValueToSet, lowerBoundToSet,
          upperBoundToSet, descriptionToSet, sinceVersionToSet,
          category, orderInCategory);
    }

    void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      valueAsString = extractedValue;
      multiplier = 1;
     
      if (extractedValue != null) {
        if (extractedValue.endsWith("k") //$NON-NLS-1$
            || extractedValue.endsWith("K") //$NON-NLS-1$
            || extractedValue.endsWith("kb") //$NON-NLS-1$
            || extractedValue.endsWith("Kb") //$NON-NLS-1$
            || extractedValue.endsWith("kB") //$NON-NLS-1$
            || extractedValue.endsWith("KB")) { //$NON-NLS-1$
          multiplier = 1024;
          int indexOfK = StringUtils.indexOfIgnoreCase(
              extractedValue, "k"); //$NON-NLS-1$
          extractedValue = extractedValue.substring(0, indexOfK);
        } else if (extractedValue.endsWith("m") //$NON-NLS-1$
            || extractedValue.endsWith("M") //$NON-NLS-1$
            || extractedValue.endsWith("mb") //$NON-NLS-1$
            || extractedValue.endsWith("Mb") //$NON-NLS-1$
            || extractedValue.endsWith("mB") //$NON-NLS-1$
            || extractedValue.endsWith("MB")) { //$NON-NLS-1$
          multiplier = 1024 * 1024;
          int indexOfM = StringUtils.indexOfIgnoreCase(
              extractedValue, "m"); //$NON-NLS-1$
          extractedValue = extractedValue.substring(0, indexOfM);
        } else if (extractedValue.endsWith("g") //$NON-NLS-1$
            || extractedValue.endsWith("G") //$NON-NLS-1$
            || extractedValue.endsWith("gb") //$NON-NLS-1$
            || extractedValue.endsWith("Gb") //$NON-NLS-1$
            || extractedValue.endsWith("gB") //$NON-NLS-1$
            || extractedValue.endsWith("GB")) { //$NON-NLS-1$
          multiplier = 1024 * 1024 * 1024;
          int indexOfG = StringUtils.indexOfIgnoreCase(
              extractedValue, "g"); //$NON-NLS-1$
          extractedValue = extractedValue.substring(0, indexOfG);
        }
      }

      super.initializeFrom(extractedValue, exceptionInterceptor);
    }

    void setValue(String value, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      initializeFrom(value, exceptionInterceptor);
    }
   
    String getValueAsString() {
      return valueAsString;
    }
  }

  static class StringConnectionProperty extends ConnectionProperty implements Serializable {
 
    private static final long serialVersionUID = 5432127962785948272L;

    StringConnectionProperty(String propertyNameToSet,
        String defaultValueToSet, String descriptionToSet,
        String sinceVersionToSet, String category, int orderInCategory) {
      this(propertyNameToSet, defaultValueToSet, null, descriptionToSet,
          sinceVersionToSet, category, orderInCategory);
    }

    /**
     * DOCUMENT ME!
     *
     * @param propertyNameToSet
     * @param defaultValueToSet
     * @param allowableValuesToSet
     * @param descriptionToSet
     * @param sinceVersionToSet
     *            DOCUMENT ME!
     */
    StringConnectionProperty(String propertyNameToSet,
        String defaultValueToSet, String[] allowableValuesToSet,
        String descriptionToSet, String sinceVersionToSet,
        String category, int orderInCategory) {
      super(propertyNameToSet, defaultValueToSet, allowableValuesToSet,
          0, 0, descriptionToSet, sinceVersionToSet, category,
          orderInCategory);
    }

    String getValueAsString() {
      return (String) this.valueAsObject;
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#hasValueConstraints()
     */
    boolean hasValueConstraints() {
      return (this.allowableValues != null)
          && (this.allowableValues.length > 0);
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#initializeFrom(java.util.Properties)
     */
    void initializeFrom(String extractedValue, ExceptionInterceptor exceptionInterceptor) throws SQLException {
      if (extractedValue != null) {
        validateStringValues(extractedValue, exceptionInterceptor);

        this.valueAsObject = extractedValue;
      } else {
        this.valueAsObject = this.defaultValue;
      }
    }

    /**
     * @see com.mysql.jdbc.ConnectionPropertiesImpl.ConnectionProperty#isRangeBased()
     */
    boolean isRangeBased() {
      return false;
    }

    void setValue(String valueFlag) {
      this.valueAsObject = valueFlag;
    }
  }

  private static final String CONNECTION_AND_AUTH_CATEGORY = Messages.getString("ConnectionProperties.categoryConnectionAuthentication"); //$NON-NLS-1$

  private static final String NETWORK_CATEGORY = Messages.getString("ConnectionProperties.categoryNetworking"); //$NON-NLS-1$
 
  private static final String DEBUGING_PROFILING_CATEGORY = Messages.getString("ConnectionProperties.categoryDebuggingProfiling"); //$NON-NLS-1$

  private static final String HA_CATEGORY = Messages.getString("ConnectionProperties.categorryHA"); //$NON-NLS-1$

  private static final String MISC_CATEGORY = Messages.getString("ConnectionProperties.categoryMisc"); //$NON-NLS-1$

  private static final String PERFORMANCE_CATEGORY = Messages.getString("ConnectionProperties.categoryPerformance"); //$NON-NLS-1$
 
  private static final String SECURITY_CATEGORY = Messages.getString("ConnectionProperties.categorySecurity"); //$NON-NLS-1$
 
  private static final String[] PROPERTY_CATEGORIES = new String[] {
    CONNECTION_AND_AUTH_CATEGORY, NETWORK_CATEGORY,
    HA_CATEGORY, SECURITY_CATEGORY,
    PERFORMANCE_CATEGORY, DEBUGING_PROFILING_CATEGORY, MISC_CATEGORY };
 
  private static final ArrayList<java.lang.reflect.Field> PROPERTY_LIST = new ArrayList<java.lang.reflect.Field>();

  //
  // Yes, this looks goofy, but we're trying to avoid intern()ing here
  //
  private static final String STANDARD_LOGGER_NAME = StandardLogger.class.getName();

  protected static final String ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL = "convertToNull"; //$NON-NLS-1$

  protected static final String ZERO_DATETIME_BEHAVIOR_EXCEPTION = "exception"; //$NON-NLS-1$

  protected static final String ZERO_DATETIME_BEHAVIOR_ROUND = "round"; //$NON-NLS-1$

  static {
    try {
      java.lang.reflect.Field[] declaredFields = ConnectionPropertiesImpl.class
          .getDeclaredFields();

      for (int i = 0; i < declaredFields.length; i++) {
        if (ConnectionPropertiesImpl.ConnectionProperty.class
            .isAssignableFrom(declaredFields[i].getType())) {
          PROPERTY_LIST.add(declaredFields[i]);
        }
      }
    } catch (Exception ex) {
      RuntimeException rtEx = new RuntimeException();
      rtEx.initCause(ex);
     
      throw rtEx;
    }
  }

  public ExceptionInterceptor getExceptionInterceptor() {
    return null;
  }
 
  /**
   * Exposes all ConnectionPropertyInfo instances as DriverPropertyInfo
   *
   * @param info
   *            the properties to load into these ConnectionPropertyInfo
   *            instances
   * @param slotsToReserve
   *            the number of DPI slots to reserve for 'standard' DPI
   *            properties (user, host, password, etc)
   * @return a list of all ConnectionPropertyInfo instances, as
   *         DriverPropertyInfo
   * @throws SQLException
   *             if an error occurs
   */
  protected static DriverPropertyInfo[] exposeAsDriverPropertyInfo(
      Properties info, int slotsToReserve) throws SQLException {
    return (new ConnectionPropertiesImpl() {
      private static final long serialVersionUID = 4257801713007640581L;
    }).exposeAsDriverPropertyInfoInternal(info, slotsToReserve);
  }

  private BooleanConnectionProperty allowLoadLocalInfile = new BooleanConnectionProperty(
      "allowLoadLocalInfile", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.loadDataLocal"), //$NON-NLS-1$
      "3.0.3", SECURITY_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty allowMultiQueries = new BooleanConnectionProperty(
      "allowMultiQueries", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.allowMultiQueries"), //$NON-NLS-1$
      "3.1.1", SECURITY_CATEGORY, 1); //$NON-NLS-1$

  private BooleanConnectionProperty allowNanAndInf = new BooleanConnectionProperty(
      "allowNanAndInf", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.allowNANandINF"), //$NON-NLS-1$
      "3.1.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty allowUrlInLocalInfile = new BooleanConnectionProperty(
      "allowUrlInLocalInfile", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.allowUrlInLoadLocal"), //$NON-NLS-1$
      "3.1.4", SECURITY_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty alwaysSendSetIsolation = new BooleanConnectionProperty(
      "alwaysSendSetIsolation", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.alwaysSendSetIsolation"), //$NON-NLS-1$
      "3.1.7", PERFORMANCE_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty autoClosePStmtStreams = new BooleanConnectionProperty(
      "autoClosePStmtStreams"//$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.autoClosePstmtStreams"), //$NON-NLS-1$
      "3.1.12", //$NON-NLS-1$
      MISC_CATEGORY,
      Integer.MIN_VALUE);

  private BooleanConnectionProperty allowMasterDownConnections = new BooleanConnectionProperty(
      "allowMasterDownConnections"//$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.allowMasterDownConnections"), //$NON-NLS-1$
      "5.1.27", //$NON-NLS-1$
      HA_CATEGORY,
      Integer.MAX_VALUE);

  private BooleanConnectionProperty autoDeserialize = new BooleanConnectionProperty(
      "autoDeserialize", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.autoDeserialize"), //$NON-NLS-1$
      "3.1.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty autoGenerateTestcaseScript = new BooleanConnectionProperty(
      "autoGenerateTestcaseScript", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.autoGenerateTestcaseScript"), "3.1.9", //$NON-NLS-1$ //$NON-NLS-2$
      DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);

  private boolean autoGenerateTestcaseScriptAsBoolean = false;

  private BooleanConnectionProperty autoReconnect = new BooleanConnectionProperty(
      "autoReconnect", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.autoReconnect"), //$NON-NLS-1$
      "1.1", HA_CATEGORY, 0); //$NON-NLS-1$

  private BooleanConnectionProperty autoReconnectForPools = new BooleanConnectionProperty(
      "autoReconnectForPools", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.autoReconnectForPools"), //$NON-NLS-1$
      "3.1.3", HA_CATEGORY, 1); //$NON-NLS-1$

  private boolean autoReconnectForPoolsAsBoolean = false;

  private MemorySizeConnectionProperty blobSendChunkSize = new MemorySizeConnectionProperty(
      "blobSendChunkSize", //$NON-NLS-1$
      1024 * 1024,
      0,
      0,
      Messages.getString("ConnectionProperties.blobSendChunkSize"), //$NON-NLS-1$
      "3.1.9", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty autoSlowLog = new BooleanConnectionProperty(
      "autoSlowLog", true,
      Messages.getString("ConnectionProperties.autoSlowLog"),
      "5.1.4", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty blobsAreStrings = new BooleanConnectionProperty(
            "blobsAreStrings", false,
            "Should the driver always treat BLOBs as Strings - specifically to work around dubious metadata "
            + "returned by the server for GROUP BY clauses?",
            "5.0.8", MISC_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty functionsNeverReturnBlobs = new BooleanConnectionProperty(
            "functionsNeverReturnBlobs", false,
            "Should the driver always treat data from functions returning BLOBs as Strings - specifically to work around dubious metadata "
            + "returned by the server for GROUP BY clauses?",
            "5.0.8", MISC_CATEGORY, Integer.MIN_VALUE);
     
  private BooleanConnectionProperty cacheCallableStatements = new BooleanConnectionProperty(
      "cacheCallableStmts", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.cacheCallableStatements"), //$NON-NLS-1$
      "3.1.2", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty cachePreparedStatements = new BooleanConnectionProperty(
      "cachePrepStmts", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.cachePrepStmts"), //$NON-NLS-1$
      "3.0.10", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty cacheResultSetMetadata = new BooleanConnectionProperty(
      "cacheResultSetMetadata", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.cacheRSMetadata"), //$NON-NLS-1$
      "3.1.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private boolean cacheResultSetMetaDataAsBoolean;

  private StringConnectionProperty serverConfigCacheFactory = new StringConnectionProperty("serverConfigCacheFactory", //$NON-NLS-1$
      PerVmServerConfigCacheFactory.class.getName(), Messages.getString("ConnectionProperties.serverConfigCacheFactory"), "5.1.1", PERFORMANCE_CATEGORY, 12); //$NON-NLS-1$ //$NON-NLS-2$
 
  private BooleanConnectionProperty cacheServerConfiguration = new BooleanConnectionProperty(
      "cacheServerConfiguration", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.cacheServerConfiguration"), //$NON-NLS-1$
      "3.1.5", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty callableStatementCacheSize = new IntegerConnectionProperty(
      "callableStmtCacheSize", //$NON-NLS-1$
      100,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.callableStmtCacheSize"), //$NON-NLS-1$
      "3.1.2", PERFORMANCE_CATEGORY, 5); //$NON-NLS-1$

  private BooleanConnectionProperty capitalizeTypeNames = new BooleanConnectionProperty(
      "capitalizeTypeNames", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.capitalizeTypeNames"), //$NON-NLS-1$
      "2.0.7", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private StringConnectionProperty characterEncoding = new StringConnectionProperty(
      "characterEncoding", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.characterEncoding"), //$NON-NLS-1$
      "1.1g", MISC_CATEGORY, 5); //$NON-NLS-1$

  private String characterEncodingAsString = null;
 
  protected boolean characterEncodingIsAliasForSjis = false;

  private StringConnectionProperty characterSetResults = new StringConnectionProperty(
      "characterSetResults", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.characterSetResults"), "3.0.13", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, 6);

  private StringConnectionProperty connectionAttributes = new StringConnectionProperty(
      "connectionAttributes", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.connectionAttributes"), "5.1.25", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, 7);

 
  private StringConnectionProperty clientInfoProvider = new StringConnectionProperty(
      "clientInfoProvider", "com.mysql.jdbc.JDBC4CommentClientInfoProvider", //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.clientInfoProvider"), //$NON-NLS-1$
      "5.1.0", //$NON-NLS-1$
      DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty clobberStreamingResults = new BooleanConnectionProperty(
      "clobberStreamingResults", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.clobberStreamingResults"), //$NON-NLS-1$
      "3.0.9", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty clobCharacterEncoding = new StringConnectionProperty(
      "clobCharacterEncoding", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.clobCharacterEncoding"), //$NON-NLS-1$
      "5.0.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty compensateOnDuplicateKeyUpdateCounts = new BooleanConnectionProperty(
      "compensateOnDuplicateKeyUpdateCounts",
      false,
      Messages.getString("ConnectionProperties.compensateOnDuplicateKeyUpdateCounts"),
      "5.1.7", MISC_CATEGORY, Integer.MIN_VALUE);
  private StringConnectionProperty connectionCollation = new StringConnectionProperty(
      "connectionCollation", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.connectionCollation"), //$NON-NLS-1$
      "3.0.13", MISC_CATEGORY, 7); //$NON-NLS-1$

  private StringConnectionProperty connectionLifecycleInterceptors = new StringConnectionProperty(
      "connectionLifecycleInterceptors", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.connectionLifecycleInterceptors"),
      "5.1.4", CONNECTION_AND_AUTH_CATEGORY, Integer.MAX_VALUE);

  private IntegerConnectionProperty connectTimeout = new IntegerConnectionProperty(
      "connectTimeout", 0, 0, Integer.MAX_VALUE, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.connectTimeout"), //$NON-NLS-1$
      "3.0.1", CONNECTION_AND_AUTH_CATEGORY, 9); //$NON-NLS-1$

  private BooleanConnectionProperty continueBatchOnError = new BooleanConnectionProperty(
      "continueBatchOnError", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.continueBatchOnError"), //$NON-NLS-1$
      "3.0.3", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty createDatabaseIfNotExist = new BooleanConnectionProperty(
      "createDatabaseIfNotExist", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.createDatabaseIfNotExist"), //$NON-NLS-1$
      "3.1.9", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty defaultFetchSize = new IntegerConnectionProperty("defaultFetchSize", 0, Messages.getString("ConnectionProperties.defaultFetchSize"), "3.1.9", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

        // Think really long and hard about changing the default for this
        // many, many applications have come to be acustomed to the
        // latency profile of preparing stuff client-side, rather than
        // prepare (round-trip), execute (round-trip), close (round-trip).
  private BooleanConnectionProperty detectServerPreparedStmts = new BooleanConnectionProperty(
      "useServerPrepStmts", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useServerPrepStmts"), //$NON-NLS-1$
      "3.1.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty dontTrackOpenResources = new BooleanConnectionProperty(
      "dontTrackOpenResources", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.dontTrackOpenResources"), "3.1.7", PERFORMANCE_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$
      Integer.MIN_VALUE);

  private BooleanConnectionProperty dumpQueriesOnException = new BooleanConnectionProperty(
      "dumpQueriesOnException", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.dumpQueriesOnException"), //$NON-NLS-1$
      "3.1.3", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty dynamicCalendars = new BooleanConnectionProperty(
      "dynamicCalendars", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.dynamicCalendars"), //$NON-NLS-1$
      "3.1.5", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty elideSetAutoCommits = new BooleanConnectionProperty(
      "elideSetAutoCommits", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.eliseSetAutoCommit"), //$NON-NLS-1$
      "3.1.3", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty emptyStringsConvertToZero = new BooleanConnectionProperty(
      "emptyStringsConvertToZero", true, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.emptyStringsConvertToZero"), "3.1.8", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty emulateLocators = new BooleanConnectionProperty(
      "emulateLocators", false, Messages.getString("ConnectionProperties.emulateLocators"), "3.1.0", MISC_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      Integer.MIN_VALUE);

  private BooleanConnectionProperty emulateUnsupportedPstmts = new BooleanConnectionProperty(
      "emulateUnsupportedPstmts", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.emulateUnsupportedPstmts"), //$NON-NLS-1$
      "3.1.7", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty enablePacketDebug = new BooleanConnectionProperty(
      "enablePacketDebug", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.enablePacketDebug"), //$NON-NLS-1$
      "3.1.3", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty enableQueryTimeouts = new BooleanConnectionProperty(
      "enableQueryTimeouts", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.enableQueryTimeouts"), //$NON-NLS-1$
      "5.0.6", //$NON-NLS-1$
      PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
     
  private BooleanConnectionProperty explainSlowQueries = new BooleanConnectionProperty(
      "explainSlowQueries", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.explainSlowQueries"), //$NON-NLS-1$
      "3.1.2", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private StringConnectionProperty exceptionInterceptors = new StringConnectionProperty(
      "exceptionInterceptors", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.exceptionInterceptors"),
      "5.1.8", MISC_CATEGORY, Integer.MIN_VALUE);
 
  /** When failed-over, set connection to read-only? */
  private BooleanConnectionProperty failOverReadOnly = new BooleanConnectionProperty(
      "failOverReadOnly", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.failoverReadOnly"), //$NON-NLS-1$
      "3.0.12", HA_CATEGORY, 2); //$NON-NLS-1$

  private BooleanConnectionProperty gatherPerformanceMetrics = new BooleanConnectionProperty(
      "gatherPerfMetrics", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.gatherPerfMetrics"), //$NON-NLS-1$
      "3.1.2", DEBUGING_PROFILING_CATEGORY, 1); //$NON-NLS-1$

  private BooleanConnectionProperty generateSimpleParameterMetadata = new BooleanConnectionProperty(
      "generateSimpleParameterMetadata", false, Messages.getString("ConnectionProperties.generateSimpleParameterMetadata"), "5.0.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private boolean highAvailabilityAsBoolean = false;

  private BooleanConnectionProperty holdResultsOpenOverStatementClose = new BooleanConnectionProperty(
      "holdResultsOpenOverStatementClose", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.holdRSOpenOverStmtClose"), //$NON-NLS-1$
      "3.1.7", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty includeInnodbStatusInDeadlockExceptions = new BooleanConnectionProperty(
      "includeInnodbStatusInDeadlockExceptions",
      false,
      Messages.getString("ConnectionProperties.includeInnodbStatusInDeadlockExceptions"),
      "5.0.7", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty includeThreadDumpInDeadlockExceptions = new BooleanConnectionProperty(
      "includeThreadDumpInDeadlockExceptions",
      false,
      Messages.getString("ConnectionProperties.includeThreadDumpInDeadlockExceptions"),
      "5.1.15", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty includeThreadNamesAsStatementComment = new BooleanConnectionProperty(
      "includeThreadNamesAsStatementComment",
      false,
      Messages.getString("ConnectionProperties.includeThreadNamesAsStatementComment"),
      "5.1.15", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty ignoreNonTxTables = new BooleanConnectionProperty(
      "ignoreNonTxTables", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.ignoreNonTxTables"), //$NON-NLS-1$
      "3.0.9", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty initialTimeout = new IntegerConnectionProperty(
      "initialTimeout", 2, 1, Integer.MAX_VALUE, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.initialTimeout"), //$NON-NLS-1$
      "1.1", HA_CATEGORY, 5); //$NON-NLS-1$

  private BooleanConnectionProperty isInteractiveClient = new BooleanConnectionProperty(
      "interactiveClient", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.interactiveClient"), //$NON-NLS-1$
      "3.1.0", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty(
      "jdbcCompliantTruncation", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$
      Integer.MIN_VALUE);

  private boolean jdbcCompliantTruncationForReads =
    this.jdbcCompliantTruncation.getValueAsBoolean();
 
  protected MemorySizeConnectionProperty largeRowSizeThreshold = new MemorySizeConnectionProperty("largeRowSizeThreshold",
      2048, 0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.largeRowSizeThreshold"),
      "5.1.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
 
  private StringConnectionProperty loadBalanceStrategy = new StringConnectionProperty(
      "loadBalanceStrategy", //$NON-NLS-1$
      "random", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceStrategy"), //$NON-NLS-1$
      "5.0.6", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty loadBalanceBlacklistTimeout = new IntegerConnectionProperty(
      "loadBalanceBlacklistTimeout", 0, //$NON-NLS-1$
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.loadBalanceBlacklistTimeout"), //$NON-NLS-1$
      "5.1.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty loadBalancePingTimeout = new IntegerConnectionProperty(
      "loadBalancePingTimeout", 0, //$NON-NLS-1$
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.loadBalancePingTimeout"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty loadBalanceValidateConnectionOnSwapServer = new BooleanConnectionProperty(
      "loadBalanceValidateConnectionOnSwapServer",
      false,
      Messages.getString("ConnectionProperties.loadBalanceValidateConnectionOnSwapServer"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty loadBalanceConnectionGroup = new StringConnectionProperty(
      "loadBalanceConnectionGroup", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceConnectionGroup"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty loadBalanceExceptionChecker = new StringConnectionProperty(
      "loadBalanceExceptionChecker", //$NON-NLS-1$
      "com.mysql.jdbc.StandardLoadBalanceExceptionChecker", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceExceptionChecker"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty loadBalanceSQLStateFailover = new StringConnectionProperty(
      "loadBalanceSQLStateFailover", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceSQLStateFailover"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty loadBalanceSQLExceptionSubclassFailover = new StringConnectionProperty(
      "loadBalanceSQLExceptionSubclassFailover", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceSQLExceptionSubclassFailover"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty loadBalanceEnableJMX = new BooleanConnectionProperty(
      "loadBalanceEnableJMX", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.loadBalanceEnableJMX"), //$NON-NLS-1$
      "5.1.13", MISC_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty loadBalanceAutoCommitStatementRegex = new StringConnectionProperty(
      "loadBalanceAutoCommitStatementRegex", //$NON-NLS-1$
      null, //$NON-NLS-1$ //$NON-NLS-2$
      Messages.getString("ConnectionProperties.loadBalanceAutoCommitStatementRegex"), //$NON-NLS-1$
      "5.1.15", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty loadBalanceAutoCommitStatementThreshold = new IntegerConnectionProperty(
      "loadBalanceAutoCommitStatementThreshold", 0, //$NON-NLS-1$
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.loadBalanceAutoCommitStatementThreshold"), //$NON-NLS-1$
      "5.1.15", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

 
  private StringConnectionProperty localSocketAddress = new StringConnectionProperty("localSocketAddress", //$NON-NLS-1$
      null, Messages.getString("ConnectionProperties.localSocketAddress"), //$NON-NLS-1$
      "5.0.5", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private MemorySizeConnectionProperty locatorFetchBufferSize = new MemorySizeConnectionProperty(
      "locatorFetchBufferSize", //$NON-NLS-1$
      1024 * 1024,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.locatorFetchBufferSize"), //$NON-NLS-1$
      "3.2.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private StringConnectionProperty loggerClassName = new StringConnectionProperty(
      "logger", STANDARD_LOGGER_NAME, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.logger", new Object[] {Log.class.getName(), STANDARD_LOGGER_NAME}), //$NON-NLS-1$
           "3.1.1", DEBUGING_PROFILING_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$
      0);

  private BooleanConnectionProperty logSlowQueries = new BooleanConnectionProperty(
      "logSlowQueries", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.logSlowQueries"), //$NON-NLS-1$
      "3.1.2", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty logXaCommands = new BooleanConnectionProperty(
      "logXaCommands", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.logXaCommands"), //$NON-NLS-1$
      "5.0.5", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty maintainTimeStats = new BooleanConnectionProperty(
      "maintainTimeStats", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.maintainTimeStats"), "3.1.9", PERFORMANCE_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$
      Integer.MAX_VALUE);

  private boolean maintainTimeStatsAsBoolean = true;

  private IntegerConnectionProperty maxQuerySizeToLog = new IntegerConnectionProperty(
      "maxQuerySizeToLog", //$NON-NLS-1$
      2048,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.maxQuerySizeToLog"), //$NON-NLS-1$
      "3.1.3", DEBUGING_PROFILING_CATEGORY, 4); //$NON-NLS-1$

  private IntegerConnectionProperty maxReconnects = new IntegerConnectionProperty(
      "maxReconnects", //$NON-NLS-1$
      3,
      1,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.maxReconnects"), //$NON-NLS-1$
      "1.1", HA_CATEGORY, 4); //$NON-NLS-1$

  private IntegerConnectionProperty retriesAllDown = new IntegerConnectionProperty(
      "retriesAllDown", //$NON-NLS-1$
      120,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.retriesAllDown"), //$NON-NLS-1$
      "5.1.6", HA_CATEGORY, 4); //$NON-NLS-1$

  private IntegerConnectionProperty maxRows = new IntegerConnectionProperty(
      "maxRows", -1, -1, Integer.MAX_VALUE, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.maxRows"), //$NON-NLS-1$
      Messages.getString("ConnectionProperties.allVersions"), MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private int maxRowsAsInt = -1;

  private IntegerConnectionProperty metadataCacheSize = new IntegerConnectionProperty(
      "metadataCacheSize", //$NON-NLS-1$
      50,
      1,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.metadataCacheSize"), //$NON-NLS-1$
      "3.1.1", PERFORMANCE_CATEGORY, 5); //$NON-NLS-1$
 
  private IntegerConnectionProperty netTimeoutForStreamingResults = new IntegerConnectionProperty(
      "netTimeoutForStreamingResults", 600, //$NON-NLS-1$
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.netTimeoutForStreamingResults"), //$NON-NLS-1$
      "5.1.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty noAccessToProcedureBodies = new BooleanConnectionProperty(
      "noAccessToProcedureBodies",
      false,
      "When determining procedure parameter types for CallableStatements, and the connected user "
      + " can't access procedure bodies through \"SHOW CREATE PROCEDURE\" or select on mysql.proc "
      + " should the driver instead create basic metadata (all parameters reported as IN VARCHARs,"
      + " but allowing registerOutParameter() to be called on them anyway) instead "
      + " of throwing an exception?",
      "5.0.3", MISC_CATEGORY, Integer.MIN_VALUE);
     
  private BooleanConnectionProperty noDatetimeStringSync = new BooleanConnectionProperty(
      "noDatetimeStringSync", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.noDatetimeStringSync"), //$NON-NLS-1$
      "3.1.7", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty noTimezoneConversionForTimeType = new BooleanConnectionProperty(
      "noTimezoneConversionForTimeType", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.noTzConversionForTimeType"), //$NON-NLS-1$
      "5.0.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty nullCatalogMeansCurrent = new BooleanConnectionProperty(
      "nullCatalogMeansCurrent", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.nullCatalogMeansCurrent"), //$NON-NLS-1$
      "3.1.8", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty nullNamePatternMatchesAll = new BooleanConnectionProperty(
      "nullNamePatternMatchesAll", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.nullNamePatternMatchesAll"), //$NON-NLS-1$
      "3.1.8", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty packetDebugBufferSize = new IntegerConnectionProperty(
      "packetDebugBufferSize", //$NON-NLS-1$
      20,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.packetDebugBufferSize"), //$NON-NLS-1$
      "3.1.3", DEBUGING_PROFILING_CATEGORY, 7); //$NON-NLS-1$
 
  private BooleanConnectionProperty padCharsWithSpace = new BooleanConnectionProperty(
      "padCharsWithSpace", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.padCharsWithSpace"), //$NON-NLS-1$
      "5.0.6", //$NON-NLS-1$
      MISC_CATEGORY,
      Integer.MIN_VALUE);

  private BooleanConnectionProperty paranoid = new BooleanConnectionProperty(
      "paranoid", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.paranoid"), //$NON-NLS-1$
      "3.0.1", SECURITY_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty pedantic = new BooleanConnectionProperty(
      "pedantic", false, Messages.getString("ConnectionProperties.pedantic"), "3.0.0", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
      MISC_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty pinGlobalTxToPhysicalConnection = new BooleanConnectionProperty(
      "pinGlobalTxToPhysicalConnection", false, Messages.getString("ConnectionProperties.pinGlobalTxToPhysicalConnection"), //$NON-NLS-1$
      "5.0.1", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty populateInsertRowWithDefaultValues = new BooleanConnectionProperty(
      "populateInsertRowWithDefaultValues", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.populateInsertRowWithDefaultValues"), //$NON-NLS-1$
      "5.0.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty preparedStatementCacheSize = new IntegerConnectionProperty(
      "prepStmtCacheSize", 25, 0, Integer.MAX_VALUE, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.prepStmtCacheSize"), //$NON-NLS-1$
      "3.0.10", PERFORMANCE_CATEGORY, 10); //$NON-NLS-1$

  private IntegerConnectionProperty preparedStatementCacheSqlLimit = new IntegerConnectionProperty(
      "prepStmtCacheSqlLimit", //$NON-NLS-1$
      256,
      1,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.prepStmtCacheSqlLimit"), //$NON-NLS-1$
      "3.0.10", PERFORMANCE_CATEGORY, 11); //$NON-NLS-1$

  private StringConnectionProperty parseInfoCacheFactory = new StringConnectionProperty("parseInfoCacheFactory", //$NON-NLS-1$
      PerConnectionLRUFactory.class.getName(), Messages.getString("ConnectionProperties.parseInfoCacheFactory"), "5.1.1", PERFORMANCE_CATEGORY, 12); //$NON-NLS-1$ //$NON-NLS-2$
 
  private BooleanConnectionProperty processEscapeCodesForPrepStmts =
    new BooleanConnectionProperty("processEscapeCodesForPrepStmts", //$NON-NLS-1$
        true,
        Messages.getString("ConnectionProperties.processEscapeCodesForPrepStmts"), //$NON-NLS-1$
        "3.1.12", //$NON-NLS-1$
        MISC_CATEGORY, Integer.MIN_VALUE);
 
  private StringConnectionProperty profilerEventHandler = new StringConnectionProperty(
      "profilerEventHandler",
      "com.mysql.jdbc.profiler.LoggingProfilerEventHandler",
      Messages.getString("ConnectionProperties.profilerEventHandler"),
      "5.1.6", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
     
  private StringConnectionProperty profileSql = new StringConnectionProperty(
      "profileSql", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.profileSqlDeprecated"), //$NON-NLS-1$
      "2.0.14", DEBUGING_PROFILING_CATEGORY, 3); //$NON-NLS-1$

  private BooleanConnectionProperty profileSQL = new BooleanConnectionProperty(
      "profileSQL", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.profileSQL"), //$NON-NLS-1$
      "3.1.0", DEBUGING_PROFILING_CATEGORY, 1); //$NON-NLS-1$

  private boolean profileSQLAsBoolean = false;

  private StringConnectionProperty propertiesTransform = new StringConnectionProperty(
      NonRegisteringDriver.PROPERTIES_TRANSFORM_KEY,
      null,
      Messages.getString("ConnectionProperties.connectionPropertiesTransform"), //$NON-NLS-1$
      "3.1.4", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty queriesBeforeRetryMaster = new IntegerConnectionProperty(
      "queriesBeforeRetryMaster", //$NON-NLS-1$
      50,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.queriesBeforeRetryMaster"), //$NON-NLS-1$
      "3.0.2", HA_CATEGORY, 7); //$NON-NLS-1$

  private BooleanConnectionProperty queryTimeoutKillsConnection = new BooleanConnectionProperty(
      "queryTimeoutKillsConnection", false,
      Messages.getString("ConnectionProperties.queryTimeoutKillsConnection"), "5.1.9", MISC_CATEGORY, Integer.MIN_VALUE);
     
  private BooleanConnectionProperty reconnectAtTxEnd = new BooleanConnectionProperty(
      "reconnectAtTxEnd", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.reconnectAtTxEnd"), "3.0.10", //$NON-NLS-1$ //$NON-NLS-2$
      HA_CATEGORY, 4);

  private boolean reconnectTxAtEndAsBoolean = false;

  private BooleanConnectionProperty relaxAutoCommit = new BooleanConnectionProperty(
      "relaxAutoCommit", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.relaxAutoCommit"), //$NON-NLS-1$
      "2.0.13", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty reportMetricsIntervalMillis = new IntegerConnectionProperty(
      "reportMetricsIntervalMillis", //$NON-NLS-1$
      30000,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.reportMetricsIntervalMillis"), //$NON-NLS-1$
      "3.1.2", DEBUGING_PROFILING_CATEGORY, 3); //$NON-NLS-1$

  private BooleanConnectionProperty requireSSL = new BooleanConnectionProperty(
      "requireSSL", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.requireSSL"), //$NON-NLS-1$
      "3.1.0", SECURITY_CATEGORY, 3); //$NON-NLS-1$

  private StringConnectionProperty resourceId = new StringConnectionProperty(
      "resourceId", //$NON-NLS-1$
      null, Messages.getString("ConnectionProperties.resourceId"), //$NON-NLS-1$
      "5.0.1", //$NON-NLS-1$
      HA_CATEGORY,
      Integer.MIN_VALUE);
 
  private IntegerConnectionProperty resultSetSizeThreshold = new IntegerConnectionProperty("resultSetSizeThreshold", 100, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.resultSetSizeThreshold"), "5.0.5", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$
     
  private BooleanConnectionProperty retainStatementAfterResultSetClose = new BooleanConnectionProperty(
      "retainStatementAfterResultSetClose", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.retainStatementAfterResultSetClose"), //$NON-NLS-1$
      "3.1.11", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty rewriteBatchedStatements = new BooleanConnectionProperty(
      "rewriteBatchedStatements", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.rewriteBatchedStatements"), //$NON-NLS-1$
      "3.1.13", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty rollbackOnPooledClose = new BooleanConnectionProperty(
      "rollbackOnPooledClose", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.rollbackOnPooledClose"), //$NON-NLS-1$
      "3.0.15", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty roundRobinLoadBalance = new BooleanConnectionProperty(
      "roundRobinLoadBalance", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.roundRobinLoadBalance"), //$NON-NLS-1$
      "3.1.2", HA_CATEGORY, 5); //$NON-NLS-1$

  private BooleanConnectionProperty runningCTS13 = new BooleanConnectionProperty(
      "runningCTS13", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.runningCTS13"), //$NON-NLS-1$
      "3.1.7", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private IntegerConnectionProperty secondsBeforeRetryMaster = new IntegerConnectionProperty(
      "secondsBeforeRetryMaster", //$NON-NLS-1$
      30,
      1,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.secondsBeforeRetryMaster"), //$NON-NLS-1$
      "3.0.2", HA_CATEGORY, 8); //$NON-NLS-1$

  private IntegerConnectionProperty selfDestructOnPingSecondsLifetime = new IntegerConnectionProperty(
      "selfDestructOnPingSecondsLifetime",
      0,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.selfDestructOnPingSecondsLifetime"),
      "5.1.6", HA_CATEGORY, Integer.MAX_VALUE);
 
  private IntegerConnectionProperty selfDestructOnPingMaxOperations = new IntegerConnectionProperty(
      "selfDestructOnPingMaxOperations",
      0,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.selfDestructOnPingMaxOperations"),
      "5.1.6", HA_CATEGORY, Integer.MAX_VALUE);

  private BooleanConnectionProperty replicationEnableJMX = new BooleanConnectionProperty(
      "replicationEnableJMX", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.loadBalanceEnableJMX"), //$NON-NLS-1$
      "5.1.27", HA_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$

  private StringConnectionProperty serverTimezone = new StringConnectionProperty(
      "serverTimezone", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.serverTimezone"), //$NON-NLS-1$
      "3.0.2", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private StringConnectionProperty sessionVariables = new StringConnectionProperty(
      "sessionVariables", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.sessionVariables"), "3.1.8", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, Integer.MAX_VALUE);

  private IntegerConnectionProperty slowQueryThresholdMillis = new IntegerConnectionProperty(
      "slowQueryThresholdMillis", //$NON-NLS-1$
      2000,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.slowQueryThresholdMillis"), //$NON-NLS-1$
      "3.1.2", DEBUGING_PROFILING_CATEGORY, 9); //$NON-NLS-1$
 
  private LongConnectionProperty slowQueryThresholdNanos = new LongConnectionProperty(
      "slowQueryThresholdNanos", //$NON-NLS-1$
      0,
      Messages.getString("ConnectionProperties.slowQueryThresholdNanos"), //$NON-NLS-1$
      "5.0.7", //$NON-NLS-1$
      DEBUGING_PROFILING_CATEGORY,
      10);
 
  private StringConnectionProperty socketFactoryClassName = new StringConnectionProperty(
      "socketFactory", //$NON-NLS-1$
      StandardSocketFactory.class.getName(),
      Messages.getString("ConnectionProperties.socketFactory"), //$NON-NLS-1$
      "3.0.3", CONNECTION_AND_AUTH_CATEGORY, 4); //$NON-NLS-1$

  private IntegerConnectionProperty socketTimeout = new IntegerConnectionProperty(
      "socketTimeout", //$NON-NLS-1$
      0,
      0,
      Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.socketTimeout"), //$NON-NLS-1$
      "3.0.1", CONNECTION_AND_AUTH_CATEGORY, 10); //$NON-NLS-1$
 
  private StringConnectionProperty statementInterceptors = new StringConnectionProperty("statementInterceptors", //$NON-NLS-1$
      null, Messages.getString("ConnectionProperties.statementInterceptors"), "5.1.1", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$
 
  private BooleanConnectionProperty strictFloatingPoint = new BooleanConnectionProperty(
      "strictFloatingPoint", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.strictFloatingPoint"), "3.0.0", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty strictUpdates = new BooleanConnectionProperty(
      "strictUpdates", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.strictUpdates"), //$NON-NLS-1$
      "3.0.4", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty overrideSupportsIntegrityEnhancementFacility =
    new BooleanConnectionProperty("overrideSupportsIntegrityEnhancementFacility", //$NON-NLS-1$
        false,
        Messages.getString("ConnectionProperties.overrideSupportsIEF"), //$NON-NLS-1$
        "3.1.12", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty tcpNoDelay = new BooleanConnectionProperty(
      StandardSocketFactory.TCP_NO_DELAY_PROPERTY_NAME,
      Boolean.valueOf(StandardSocketFactory.TCP_NO_DELAY_DEFAULT_VALUE).booleanValue(),
      Messages.getString("ConnectionProperties.tcpNoDelay"), //$NON-NLS-1$
      "5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty tcpKeepAlive = new BooleanConnectionProperty(
      StandardSocketFactory.TCP_KEEP_ALIVE_PROPERTY_NAME,
      Boolean.valueOf(StandardSocketFactory.TCP_KEEP_ALIVE_DEFAULT_VALUE).booleanValue(),
      Messages.getString("ConnectionProperties.tcpKeepAlive"), //$NON-NLS-1$
      "5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty tcpRcvBuf = new IntegerConnectionProperty(
      StandardSocketFactory.TCP_RCV_BUF_PROPERTY_NAME,
      Integer.parseInt(StandardSocketFactory.TCP_RCV_BUF_DEFAULT_VALUE),
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.tcpSoRcvBuf"), //$NON-NLS-1$
      "5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private IntegerConnectionProperty tcpSndBuf = new IntegerConnectionProperty(
      StandardSocketFactory.TCP_SND_BUF_PROPERTY_NAME,
      Integer.parseInt(StandardSocketFactory.TCP_SND_BUF_DEFAULT_VALUE),
      0, Integer.MAX_VALUE,
      Messages.getString("ConnectionProperties.tcpSoSndBuf"), //$NON-NLS-1$
      "5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
     
  private IntegerConnectionProperty tcpTrafficClass = new IntegerConnectionProperty(
      StandardSocketFactory.TCP_TRAFFIC_CLASS_PROPERTY_NAME,
      Integer.parseInt(StandardSocketFactory.TCP_TRAFFIC_CLASS_DEFAULT_VALUE),
      0, 255,
      Messages.getString("ConnectionProperties.tcpTrafficClass"), //$NON-NLS-1$
      "5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty tinyInt1isBit = new BooleanConnectionProperty(
      "tinyInt1isBit", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.tinyInt1isBit"), //$NON-NLS-1$
      "3.0.16", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  protected BooleanConnectionProperty traceProtocol = new BooleanConnectionProperty(
      "traceProtocol", false, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.traceProtocol"), "3.1.2", //$NON-NLS-1$ //$NON-NLS-2$
      DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty treatUtilDateAsTimestamp = new BooleanConnectionProperty(
      "treatUtilDateAsTimestamp", true, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.treatUtilDateAsTimestamp"), //$NON-NLS-1$
      "5.0.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty transformedBitIsBoolean = new BooleanConnectionProperty(
      "transformedBitIsBoolean", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.transformedBitIsBoolean"), //$NON-NLS-1$
      "3.1.9", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useBlobToStoreUTF8OutsideBMP = new BooleanConnectionProperty(
      "useBlobToStoreUTF8OutsideBMP",
      false,
      Messages.getString("ConnectionProperties.useBlobToStoreUTF8OutsideBMP"), //$NON-NLS-1$
      "5.1.3", MISC_CATEGORY, 128);
 
  private StringConnectionProperty utf8OutsideBmpExcludedColumnNamePattern = new StringConnectionProperty(
      "utf8OutsideBmpExcludedColumnNamePattern",
      null,
      Messages.getString("ConnectionProperties.utf8OutsideBmpExcludedColumnNamePattern"), //$NON-NLS-1$
      "5.1.3", MISC_CATEGORY, 129);
 
  private StringConnectionProperty utf8OutsideBmpIncludedColumnNamePattern = new StringConnectionProperty(
      "utf8OutsideBmpIncludedColumnNamePattern",
      null,
      Messages.getString("ConnectionProperties.utf8OutsideBmpIncludedColumnNamePattern"), //$NON-NLS-1$
      "5.1.3", MISC_CATEGORY, 129);
 
  private BooleanConnectionProperty useCompression = new BooleanConnectionProperty(
      "useCompression", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useCompression"), //$NON-NLS-1$
      "3.0.17", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useColumnNamesInFindColumn = new BooleanConnectionProperty(
      "useColumnNamesInFindColumn",
      false,
      Messages.getString("ConnectionProperties.useColumnNamesInFindColumn"), //$NON-NLS-1$
      "5.1.7", MISC_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$
 
  private StringConnectionProperty useConfigs = new StringConnectionProperty(
      "useConfigs", //$NON-NLS-1$
      null,
      Messages.getString("ConnectionProperties.useConfigs"), //$NON-NLS-1$
      "3.1.5", CONNECTION_AND_AUTH_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useCursorFetch = new BooleanConnectionProperty(
      "useCursorFetch", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useCursorFetch"), //$NON-NLS-1$
      "5.0.0", PERFORMANCE_CATEGORY, Integer.MAX_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty useDynamicCharsetInfo = new BooleanConnectionProperty(
      "useDynamicCharsetInfo", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useDynamicCharsetInfo") //$NON-NLS-1$
      , "5.0.6", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty useDirectRowUnpack = new BooleanConnectionProperty(
      "useDirectRowUnpack",
      true, "Use newer result set row unpacking code that skips a copy from network buffers "
      + " to a MySQL packet instance and instead reads directly into the result set row data buffers.",
      "5.1.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty useFastIntParsing = new BooleanConnectionProperty(
      "useFastIntParsing", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useFastIntParsing"), //$NON-NLS-1$
      "3.1.4", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useFastDateParsing = new BooleanConnectionProperty(
      "useFastDateParsing", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useFastDateParsing"), //$NON-NLS-1$
      "5.0.5", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty useHostsInPrivileges = new BooleanConnectionProperty(
      "useHostsInPrivileges", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useHostsInPrivileges"), //$NON-NLS-1$
      "3.0.2", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
  private BooleanConnectionProperty useInformationSchema = new BooleanConnectionProperty(
      "useInformationSchema", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useInformationSchema"), //$NON-NLS-1$
      "5.0.0", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
  private BooleanConnectionProperty useJDBCCompliantTimezoneShift = new BooleanConnectionProperty(
      "useJDBCCompliantTimezoneShift", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useJDBCCompliantTimezoneShift"), //$NON-NLS-1$
      "5.0.0", //$NON-NLS-1$
      MISC_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty useLocalSessionState = new BooleanConnectionProperty(
      "useLocalSessionState", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useLocalSessionState"), //$NON-NLS-1$
      "3.1.7", PERFORMANCE_CATEGORY, 5); //$NON-NLS-1$
 
  private BooleanConnectionProperty useLocalTransactionState = new BooleanConnectionProperty(
      "useLocalTransactionState", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useLocalTransactionState"),
      "5.1.7", PERFORMANCE_CATEGORY, 6);
 
  private BooleanConnectionProperty useLegacyDatetimeCode = new BooleanConnectionProperty(
      "useLegacyDatetimeCode",
      true,
      Messages.getString("ConnectionProperties.useLegacyDatetimeCode"),
      "5.1.6", MISC_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty useNanosForElapsedTime = new BooleanConnectionProperty(
      "useNanosForElapsedTime", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useNanosForElapsedTime"), //$NON-NLS-1$
      "5.0.7", //$NON-NLS-1$
      DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty useOldAliasMetadataBehavior = new BooleanConnectionProperty(
      "useOldAliasMetadataBehavior", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useOldAliasMetadataBehavior"), //$NON-NLS-1$
        "5.0.4", //$NON-NLS-1$
        MISC_CATEGORY,
        Integer.MIN_VALUE);
 
  private BooleanConnectionProperty useOldUTF8Behavior = new BooleanConnectionProperty(
      "useOldUTF8Behavior", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useOldUtf8Behavior"), //$NON-NLS-1$
      "3.1.6", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private boolean useOldUTF8BehaviorAsBoolean = false;

  private BooleanConnectionProperty useOnlyServerErrorMessages = new BooleanConnectionProperty(
      "useOnlyServerErrorMessages", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useOnlyServerErrorMessages"), //$NON-NLS-1$
      "3.0.15", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useReadAheadInput = new BooleanConnectionProperty(
      "useReadAheadInput", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useReadAheadInput"), //$NON-NLS-1$
      "3.1.5", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useSqlStateCodes = new BooleanConnectionProperty(
      "useSqlStateCodes", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useSqlStateCodes"), //$NON-NLS-1$
      "3.1.3", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useSSL = new BooleanConnectionProperty(
      "useSSL", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useSSL"), //$NON-NLS-1$
      "3.0.2", SECURITY_CATEGORY, 2); //$NON-NLS-1$

  private BooleanConnectionProperty useSSPSCompatibleTimezoneShift = new BooleanConnectionProperty(
      "useSSPSCompatibleTimezoneShift", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useSSPSCompatibleTimezoneShift"), //$NON-NLS-1$
      "5.0.5", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$
 
  private BooleanConnectionProperty useStreamLengthsInPrepStmts = new BooleanConnectionProperty(
      "useStreamLengthsInPrepStmts", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useStreamLengthsInPrepStmts"), //$NON-NLS-1$
      "3.0.2", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useTimezone = new BooleanConnectionProperty(
      "useTimezone", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useTimezone"), //$NON-NLS-1$
      "3.0.2", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useUltraDevWorkAround = new BooleanConnectionProperty(
      "ultraDevHack", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.ultraDevHack"), //$NON-NLS-1$
      "2.0.3", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useUnbufferedInput = new BooleanConnectionProperty(
      "useUnbufferedInput", true, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.useUnbufferedInput"), //$NON-NLS-1$
      "3.0.11", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private BooleanConnectionProperty useUnicode = new BooleanConnectionProperty(
      "useUnicode", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.useUnicode"), //$NON-NLS-1$
      "1.1g", MISC_CATEGORY, 0); //$NON-NLS-1$

  // Cache these values, they are 'hot'
  private boolean useUnicodeAsBoolean = true;

  private BooleanConnectionProperty useUsageAdvisor = new BooleanConnectionProperty(
      "useUsageAdvisor", //$NON-NLS-1$
      false,
      Messages.getString("ConnectionProperties.useUsageAdvisor"), //$NON-NLS-1$
      "3.1.1", DEBUGING_PROFILING_CATEGORY, 10); //$NON-NLS-1$

  private boolean useUsageAdvisorAsBoolean = false;

  private BooleanConnectionProperty yearIsDateType = new BooleanConnectionProperty(
      "yearIsDateType", //$NON-NLS-1$
      true,
      Messages.getString("ConnectionProperties.yearIsDateType"), //$NON-NLS-1$
      "3.1.9", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$

  private StringConnectionProperty zeroDateTimeBehavior = new StringConnectionProperty(
      "zeroDateTimeBehavior", //$NON-NLS-1$
      ZERO_DATETIME_BEHAVIOR_EXCEPTION,
      new String[] { ZERO_DATETIME_BEHAVIOR_EXCEPTION,
          ZERO_DATETIME_BEHAVIOR_ROUND,
          ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL },
      Messages.getString("ConnectionProperties.zeroDateTimeBehavior", new Object[] {ZERO_DATETIME_BEHAVIOR_EXCEPTION, ZERO_DATETIME_BEHAVIOR_ROUND,ZERO_DATETIME_BEHAVIOR_CONVERT_TO_NULL})//$NON-NLS-1$
      "3.1.4", //$NON-NLS-1$ //$NON-NLS-2$
      MISC_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty useJvmCharsetConverters = new BooleanConnectionProperty("useJvmCharsetConverters", //$NON-NLS-1$
      false, Messages.getString("ConnectionProperties.useJvmCharsetConverters"), "5.0.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$
 
  private BooleanConnectionProperty useGmtMillisForDatetimes = new BooleanConnectionProperty("useGmtMillisForDatetimes", false, Messages.getString("ConnectionProperties.useGmtMillisForDatetimes"), "3.1.12", MISC_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

  private BooleanConnectionProperty dumpMetadataOnColumnNotFound = new BooleanConnectionProperty("dumpMetadataOnColumnNotFound", false, Messages.getString("ConnectionProperties.dumpMetadataOnColumnNotFound"), "3.1.13", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

  // SSL Options
 
  private StringConnectionProperty clientCertificateKeyStoreUrl = new StringConnectionProperty(
      "clientCertificateKeyStoreUrl", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.clientCertificateKeyStoreUrl"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 5);
 
  private StringConnectionProperty trustCertificateKeyStoreUrl = new StringConnectionProperty(
      "trustCertificateKeyStoreUrl", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.trustCertificateKeyStoreUrl"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 8);
 
  private StringConnectionProperty clientCertificateKeyStoreType = new StringConnectionProperty(
      "clientCertificateKeyStoreType", "JKS", //$NON-NLS-1$
      Messages.getString("ConnectionProperties.clientCertificateKeyStoreType"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 6);
 
  private StringConnectionProperty clientCertificateKeyStorePassword = new StringConnectionProperty(
      "clientCertificateKeyStorePassword", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.clientCertificateKeyStorePassword"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 7);
 
  private StringConnectionProperty trustCertificateKeyStoreType = new StringConnectionProperty(
      "trustCertificateKeyStoreType", "JKS", //$NON-NLS-1$
      Messages.getString("ConnectionProperties.trustCertificateKeyStoreType"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 9);
 
  private StringConnectionProperty trustCertificateKeyStorePassword = new StringConnectionProperty(
      "trustCertificateKeyStorePassword", null, //$NON-NLS-1$
      Messages.getString("ConnectionProperties.trustCertificateKeyStorePassword"), "5.1.0", //$NON-NLS-1$ //$NON-NLS-2$
      SECURITY_CATEGORY, 10);

  private BooleanConnectionProperty verifyServerCertificate = new BooleanConnectionProperty(
      "verifyServerCertificate",
      true,
      Messages.getString("ConnectionProperties.verifyServerCertificate"),
      "5.1.6", SECURITY_CATEGORY, 4);
 
  private BooleanConnectionProperty useAffectedRows = new BooleanConnectionProperty("useAffectedRows",
      false,
      Messages.getString("ConnectionProperties.useAffectedRows"),
      "5.1.7", MISC_CATEGORY, Integer.MIN_VALUE);
 
  private StringConnectionProperty passwordCharacterEncoding = new StringConnectionProperty("passwordCharacterEncoding",
      null,
      Messages.getString("ConnectionProperties.passwordCharacterEncoding"),
      "5.1.7", SECURITY_CATEGORY, Integer.MIN_VALUE);
 
  private IntegerConnectionProperty maxAllowedPacket = new IntegerConnectionProperty("maxAllowedPacket",
      -1, Messages.getString("ConnectionProperties.maxAllowedPacket"), "5.1.8", NETWORK_CATEGORY,
      Integer.MIN_VALUE);

  private StringConnectionProperty authenticationPlugins = new StringConnectionProperty(
      "authenticationPlugins",
      null,
      Messages.getString("ConnectionProperties.authenticationPlugins"),
      "5.1.19", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE);
 
  private StringConnectionProperty disabledAuthenticationPlugins = new StringConnectionProperty(
      "disabledAuthenticationPlugins",
      null,
      Messages.getString("ConnectionProperties.disabledAuthenticationPlugins"),
      "5.1.19", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE);
 
  private StringConnectionProperty defaultAuthenticationPlugin = new StringConnectionProperty(
      "defaultAuthenticationPlugin",
      "com.mysql.jdbc.authentication.MysqlNativePasswordPlugin",
      Messages.getString("ConnectionProperties.defaultAuthenticationPlugin"),
      "5.1.19", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE);
 
  private BooleanConnectionProperty disconnectOnExpiredPasswords = new BooleanConnectionProperty("disconnectOnExpiredPasswords",
      true,
      Messages.getString("ConnectionProperties.disconnectOnExpiredPasswords"),
      "5.1.23", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE);

  private BooleanConnectionProperty getProceduresReturnsFunctions = new BooleanConnectionProperty(
      "getProceduresReturnsFunctions", true,
      Messages.getString("ConnectionProperties.getProceduresReturnsFunctions"),
      "5.1.26", MISC_CATEGORY, Integer.MIN_VALUE);


  protected DriverPropertyInfo[] exposeAsDriverPropertyInfoInternal(
      Properties info, int slotsToReserve) throws SQLException {
    initializeProperties(info);

    int numProperties = PROPERTY_LIST.size();

    int listSize = numProperties + slotsToReserve;

    DriverPropertyInfo[] driverProperties = new DriverPropertyInfo[listSize];

    for (int i = slotsToReserve; i < listSize; i++) {
      java.lang.reflect.Field propertyField = PROPERTY_LIST
          .get(i - slotsToReserve);

      try {
        ConnectionProperty propToExpose = (ConnectionProperty) propertyField
            .get(this);

        if (info != null) {
          propToExpose.initializeFrom(info, getExceptionInterceptor());
        }

       
        driverProperties[i] = propToExpose.getAsDriverPropertyInfo();
      } catch (IllegalAccessException iae) {
        throw SQLError.createSQLException(Messages.getString("ConnectionProperties.InternalPropertiesFailure"), //$NON-NLS-1$
            SQLError.SQL_STATE_GENERAL_ERROR, getExceptionInterceptor());
      }
    }

    return driverProperties;
  }

  protected Properties exposeAsProperties(Properties info)
      throws SQLException {
    if (info == null) {
      info = new Properties();
    }

    int numPropertiesToSet = PROPERTY_LIST.size();

    for (int i = 0; i < numPropertiesToSet; i++) {
      java.lang.reflect.Field propertyField = PROPERTY_LIST
          .get(i);

      try {
        ConnectionProperty propToGet = (ConnectionProperty) propertyField
            .get(this);

        Object propValue = propToGet.getValueAsObject();

        if (propValue != null) {
          info.setProperty(propToGet.getPropertyName(), propValue
              .toString());
        }
      } catch (IllegalAccessException iae) {
        throw SQLError.createSQLException("Internal properties failure", //$NON-NLS-1$
            SQLError.SQL_STATE_GENERAL_ERROR, getExceptionInterceptor());
      }
    }

    return info;
  }

  class XmlMap {
    protected Map<Integer, Map<String, ConnectionProperty>> ordered = new TreeMap<Integer, Map<String, ConnectionProperty>>();
    protected Map<String, ConnectionProperty> alpha = new TreeMap<String, ConnectionProperty>();
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#exposeAsXml()
   */
  public String exposeAsXml() throws SQLException {
    StringBuffer xmlBuf = new StringBuffer();
    xmlBuf.append("<ConnectionProperties>"); //$NON-NLS-1$

    int numPropertiesToSet = PROPERTY_LIST.size();

    int numCategories = PROPERTY_CATEGORIES.length;

    Map<String, XmlMap> propertyListByCategory = new HashMap<String, XmlMap>();

    for (int i = 0; i < numCategories; i++) {
      propertyListByCategory.put(PROPERTY_CATEGORIES[i], new XmlMap());
    }

    //
    // The following properties are not exposed as 'normal' properties, but
    // they are
    // settable nonetheless, so we need to have them documented, make sure
    // that they sort 'first' as #1 and #2 in the category
    //
    StringConnectionProperty userProp = new StringConnectionProperty(
        NonRegisteringDriver.USER_PROPERTY_KEY, null,
        Messages.getString("ConnectionProperties.Username"), Messages.getString("ConnectionProperties.allVersions"), CONNECTION_AND_AUTH_CATEGORY, //$NON-NLS-1$ //$NON-NLS-2$
        Integer.MIN_VALUE + 1);
    StringConnectionProperty passwordProp = new StringConnectionProperty(
        NonRegisteringDriver.PASSWORD_PROPERTY_KEY, null,
        Messages.getString("ConnectionProperties.Password"), Messages.getString("ConnectionProperties.allVersions"), //$NON-NLS-1$ //$NON-NLS-2$
        CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE + 2);

    XmlMap connectionSortMaps = propertyListByCategory.get(CONNECTION_AND_AUTH_CATEGORY);
    TreeMap<String, ConnectionProperty> userMap = new TreeMap<String, ConnectionProperty>();
    userMap.put(userProp.getPropertyName(), userProp);
   
    connectionSortMaps.ordered.put(Integer.valueOf(userProp.getOrder()), userMap);
   
    TreeMap<String, ConnectionProperty> passwordMap = new TreeMap<String, ConnectionProperty>();
    passwordMap.put(passwordProp.getPropertyName(), passwordProp);
   
    connectionSortMaps.ordered.put(new Integer(passwordProp.getOrder()), passwordMap);

    try {
      for (int i = 0; i < numPropertiesToSet; i++) {
        java.lang.reflect.Field propertyField = PROPERTY_LIST
            .get(i);
        ConnectionProperty propToGet = (ConnectionProperty) propertyField
            .get(this);
        XmlMap sortMaps = propertyListByCategory.get(propToGet
            .getCategoryName());
        int orderInCategory = propToGet.getOrder();

        if (orderInCategory == Integer.MIN_VALUE) {
          sortMaps.alpha.put(propToGet.getPropertyName(), propToGet);
        } else {
          Integer order = Integer.valueOf(orderInCategory);
          Map<String, ConnectionProperty> orderMap = sortMaps.ordered.get(order);
         
          if (orderMap == null) {
            orderMap = new TreeMap<String, ConnectionProperty>();
            sortMaps.ordered.put(order, orderMap);
          }
         
          orderMap.put(propToGet.getPropertyName(), propToGet);
        }
      }

      for (int j = 0; j < numCategories; j++) {
        XmlMap sortMaps = propertyListByCategory.get(PROPERTY_CATEGORIES[j]);

        xmlBuf.append("\n <PropertyCategory name=\""); //$NON-NLS-1$
        xmlBuf.append(PROPERTY_CATEGORIES[j]);
        xmlBuf.append("\">"); //$NON-NLS-1$

        for (Map<String, ConnectionProperty> orderedEl : sortMaps.ordered.values()) {
          for (ConnectionProperty propToGet : orderedEl.values()) {
            xmlBuf.append("\n  <Property name=\""); //$NON-NLS-1$
            xmlBuf.append(propToGet.getPropertyName());
            xmlBuf.append("\" required=\""); //$NON-NLS-1$
            xmlBuf.append(propToGet.required ? "Yes" : "No"); //$NON-NLS-1$ //$NON-NLS-2$
 
            xmlBuf.append("\" default=\""); //$NON-NLS-1$
 
            if (propToGet.getDefaultValue() != null) {
              xmlBuf.append(propToGet.getDefaultValue());
            }
 
            xmlBuf.append("\" sortOrder=\""); //$NON-NLS-1$
            xmlBuf.append(propToGet.getOrder());
            xmlBuf.append("\" since=\""); //$NON-NLS-1$
            xmlBuf.append(propToGet.sinceVersion);
            xmlBuf.append("\">\n"); //$NON-NLS-1$
            xmlBuf.append("    "); //$NON-NLS-1$
            String escapedDescription = propToGet.description;
            escapedDescription = escapedDescription.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
           
            xmlBuf.append(escapedDescription);
            xmlBuf.append("\n  </Property>"); //$NON-NLS-1$
          }
        }

        for (ConnectionProperty propToGet : sortMaps.alpha.values()) {
          xmlBuf.append("\n  <Property name=\""); //$NON-NLS-1$
          xmlBuf.append(propToGet.getPropertyName());
          xmlBuf.append("\" required=\""); //$NON-NLS-1$
          xmlBuf.append(propToGet.required ? "Yes" : "No"); //$NON-NLS-1$ //$NON-NLS-2$

          xmlBuf.append("\" default=\""); //$NON-NLS-1$

          if (propToGet.getDefaultValue() != null) {
            xmlBuf.append(propToGet.getDefaultValue());
          }

          xmlBuf.append("\" sortOrder=\"alpha\" since=\""); //$NON-NLS-1$
          xmlBuf.append(propToGet.sinceVersion);
          xmlBuf.append("\">\n"); //$NON-NLS-1$
          xmlBuf.append("    "); //$NON-NLS-1$
          xmlBuf.append(propToGet.description);
          xmlBuf.append("\n  </Property>"); //$NON-NLS-1$
        }

        xmlBuf.append("\n </PropertyCategory>"); //$NON-NLS-1$
      }
    } catch (IllegalAccessException iae) {
      throw SQLError.createSQLException("Internal properties failure", //$NON-NLS-1$
          SQLError.SQL_STATE_GENERAL_ERROR, getExceptionInterceptor());
    }

    xmlBuf.append("\n</ConnectionProperties>"); //$NON-NLS-1$

    return xmlBuf.toString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAllowLoadLocalInfile()
   */
  public boolean getAllowLoadLocalInfile() {
    return this.allowLoadLocalInfile.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAllowMultiQueries()
   */
  public boolean getAllowMultiQueries() {
    return this.allowMultiQueries.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAllowNanAndInf()
   */
  public boolean getAllowNanAndInf() {
    return allowNanAndInf.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAllowUrlInLocalInfile()
   */
  public boolean getAllowUrlInLocalInfile() {
    return this.allowUrlInLocalInfile.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAlwaysSendSetIsolation()
   */
  public boolean getAlwaysSendSetIsolation() {
    return this.alwaysSendSetIsolation.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAutoDeserialize()
   */
  public boolean getAutoDeserialize() {
    return autoDeserialize.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAutoGenerateTestcaseScript()
   */
  public boolean getAutoGenerateTestcaseScript() {
    return this.autoGenerateTestcaseScriptAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAutoReconnectForPools()
   */
  public boolean getAutoReconnectForPools() {
    return this.autoReconnectForPoolsAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getBlobSendChunkSize()
   */
  public int getBlobSendChunkSize() {
    return blobSendChunkSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCacheCallableStatements()
   */
  public boolean getCacheCallableStatements() {
    return this.cacheCallableStatements.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCachePreparedStatements()
   */
  public boolean getCachePreparedStatements() {
    return ((Boolean) this.cachePreparedStatements.getValueAsObject())
        .booleanValue();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCacheResultSetMetadata()
   */
  public boolean getCacheResultSetMetadata() {
    return this.cacheResultSetMetaDataAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCacheServerConfiguration()
   */
  public boolean getCacheServerConfiguration() {
    return cacheServerConfiguration.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCallableStatementCacheSize()
   */
  public int getCallableStatementCacheSize() {
    return this.callableStatementCacheSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCapitalizeTypeNames()
   */
  public boolean getCapitalizeTypeNames() {
    return this.capitalizeTypeNames.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCharacterSetResults()
   */
  public String getCharacterSetResults() {
    return this.characterSetResults.getValueAsString();
  }
 
  public String getConnectionAttributes() {
    return this.connectionAttributes.getValueAsString();
  }
 
  public void setConnectionAttributes(String val) {
    this.connectionAttributes.setValue(val);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClobberStreamingResults()
   */
  public boolean getClobberStreamingResults() {
    return this.clobberStreamingResults.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClobCharacterEncoding()
   */
  public String getClobCharacterEncoding() {
    return this.clobCharacterEncoding.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getConnectionCollation()
   */
  public String getConnectionCollation() {
    return this.connectionCollation.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getConnectTimeout()
   */
  public int getConnectTimeout() {
    return this.connectTimeout.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getContinueBatchOnError()
   */
  public boolean getContinueBatchOnError() {
    return this.continueBatchOnError.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCreateDatabaseIfNotExist()
   */
  public boolean getCreateDatabaseIfNotExist() {
    return this.createDatabaseIfNotExist.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getDefaultFetchSize()
   */
  public int getDefaultFetchSize() {
    return this.defaultFetchSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getDontTrackOpenResources()
   */
  public boolean getDontTrackOpenResources() {
    return this.dontTrackOpenResources.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getDumpQueriesOnException()
   */
  public boolean getDumpQueriesOnException() {
    return this.dumpQueriesOnException.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getDynamicCalendars()
   */
  public boolean getDynamicCalendars() {
    return this.dynamicCalendars.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getElideSetAutoCommits()
   */
  public boolean getElideSetAutoCommits() {
    return this.elideSetAutoCommits.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEmptyStringsConvertToZero()
   */
  public boolean getEmptyStringsConvertToZero() {
    return this.emptyStringsConvertToZero.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEmulateLocators()
   */
  public boolean getEmulateLocators() {
    return this.emulateLocators.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEmulateUnsupportedPstmts()
   */
  public boolean getEmulateUnsupportedPstmts() {
    return this.emulateUnsupportedPstmts.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEnablePacketDebug()
   */
  public boolean getEnablePacketDebug() {
    return this.enablePacketDebug.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEncoding()
   */
  public String getEncoding() {
    return this.characterEncodingAsString;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getExplainSlowQueries()
   */
  public boolean getExplainSlowQueries() {
    return this.explainSlowQueries.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getFailOverReadOnly()
   */
  public boolean getFailOverReadOnly() {
    return this.failOverReadOnly.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getGatherPerformanceMetrics()
   */
  public boolean getGatherPerformanceMetrics() {
    return this.gatherPerformanceMetrics.getValueAsBoolean();
  }

  /**
   * DOCUMENT ME!
   *
   * @return
   */
  protected boolean getHighAvailability() {
    return this.highAvailabilityAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getHoldResultsOpenOverStatementClose()
   */
  public boolean getHoldResultsOpenOverStatementClose() {
    return holdResultsOpenOverStatementClose.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getIgnoreNonTxTables()
   */
  public boolean getIgnoreNonTxTables() {
    return this.ignoreNonTxTables.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getInitialTimeout()
   */
  public int getInitialTimeout() {
    return this.initialTimeout.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getInteractiveClient()
   */
  public boolean getInteractiveClient() {
    return this.isInteractiveClient.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getIsInteractiveClient()
   */
  public boolean getIsInteractiveClient() {
    return this.isInteractiveClient.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getJdbcCompliantTruncation()
   */
  public boolean getJdbcCompliantTruncation() {
    return this.jdbcCompliantTruncation.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLocatorFetchBufferSize()
   */
  public int getLocatorFetchBufferSize() {
    return this.locatorFetchBufferSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLogger()
   */
  public String getLogger() {
    return this.loggerClassName.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLoggerClassName()
   */
  public String getLoggerClassName() {
    return this.loggerClassName.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLogSlowQueries()
   */
  public boolean getLogSlowQueries() {
    return this.logSlowQueries.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getMaintainTimeStats()
   */
  public boolean getMaintainTimeStats() {
    return maintainTimeStatsAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getMaxQuerySizeToLog()
   */
  public int getMaxQuerySizeToLog() {
    return this.maxQuerySizeToLog.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getMaxReconnects()
   */
  public int getMaxReconnects() {
    return this.maxReconnects.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getMaxRows()
   */
  public int getMaxRows() {
    return this.maxRowsAsInt;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getMetadataCacheSize()
   */
  public int getMetadataCacheSize() {
    return this.metadataCacheSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNoDatetimeStringSync()
   */
  public boolean getNoDatetimeStringSync() {
    return this.noDatetimeStringSync.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNullCatalogMeansCurrent()
   */
  public boolean getNullCatalogMeansCurrent() {
    return this.nullCatalogMeansCurrent.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNullNamePatternMatchesAll()
   */
  public boolean getNullNamePatternMatchesAll() {
    return this.nullNamePatternMatchesAll.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPacketDebugBufferSize()
   */
  public int getPacketDebugBufferSize() {
    return this.packetDebugBufferSize.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getParanoid()
   */
  public boolean getParanoid() {
    return this.paranoid.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPedantic()
   */
  public boolean getPedantic() {
    return this.pedantic.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPreparedStatementCacheSize()
   */
  public int getPreparedStatementCacheSize() {
    return ((Integer) this.preparedStatementCacheSize.getValueAsObject())
        .intValue();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPreparedStatementCacheSqlLimit()
   */
  public int getPreparedStatementCacheSqlLimit() {
    return ((Integer) this.preparedStatementCacheSqlLimit
        .getValueAsObject()).intValue();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getProfileSql()
   */
  public boolean getProfileSql() {
    return this.profileSQLAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getProfileSQL()
   */
  public boolean getProfileSQL() {
    return this.profileSQL.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPropertiesTransform()
   */
  public String getPropertiesTransform() {
    return this.propertiesTransform.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getQueriesBeforeRetryMaster()
   */
  public int getQueriesBeforeRetryMaster() {
    return this.queriesBeforeRetryMaster.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getReconnectAtTxEnd()
   */
  public boolean getReconnectAtTxEnd() {
    return this.reconnectTxAtEndAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRelaxAutoCommit()
   */
  public boolean getRelaxAutoCommit() {
    return this.relaxAutoCommit.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getReportMetricsIntervalMillis()
   */
  public int getReportMetricsIntervalMillis() {
    return this.reportMetricsIntervalMillis.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRequireSSL()
   */
  public boolean getRequireSSL() {
    return this.requireSSL.getValueAsBoolean();
  }

  public boolean getRetainStatementAfterResultSetClose() {
    return this.retainStatementAfterResultSetClose.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRollbackOnPooledClose()
   */
  public boolean getRollbackOnPooledClose() {
    return this.rollbackOnPooledClose.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRoundRobinLoadBalance()
   */
  public boolean getRoundRobinLoadBalance() {
    return this.roundRobinLoadBalance.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRunningCTS13()
   */
  public boolean getRunningCTS13() {
    return this.runningCTS13.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSecondsBeforeRetryMaster()
   */
  public int getSecondsBeforeRetryMaster() {
    return this.secondsBeforeRetryMaster.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getServerTimezone()
   */
  public String getServerTimezone() {
    return this.serverTimezone.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSessionVariables()
   */
  public String getSessionVariables() {
    return sessionVariables.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSlowQueryThresholdMillis()
   */
  public int getSlowQueryThresholdMillis() {
    return this.slowQueryThresholdMillis.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSocketFactoryClassName()
   */
  public String getSocketFactoryClassName() {
    return this.socketFactoryClassName.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSocketTimeout()
   */
  public int getSocketTimeout() {
    return this.socketTimeout.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getStrictFloatingPoint()
   */
  public boolean getStrictFloatingPoint() {
    return this.strictFloatingPoint.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getStrictUpdates()
   */
  public boolean getStrictUpdates() {
    return this.strictUpdates.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTinyInt1isBit()
   */
  public boolean getTinyInt1isBit() {
    return this.tinyInt1isBit.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTraceProtocol()
   */
  public boolean getTraceProtocol() {
    return this.traceProtocol.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTransformedBitIsBoolean()
   */
  public boolean getTransformedBitIsBoolean() {
    return this.transformedBitIsBoolean.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseCompression()
   */
  public boolean getUseCompression() {
    return this.useCompression.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseFastIntParsing()
   */
  public boolean getUseFastIntParsing() {
    return this.useFastIntParsing.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseHostsInPrivileges()
   */
  public boolean getUseHostsInPrivileges() {
    return this.useHostsInPrivileges.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseInformationSchema()
   */
  public boolean getUseInformationSchema() {
    return this.useInformationSchema.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseLocalSessionState()
   */
  public boolean getUseLocalSessionState() {
    return this.useLocalSessionState.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseOldUTF8Behavior()
   */
  public boolean getUseOldUTF8Behavior() {
    return this.useOldUTF8BehaviorAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseOnlyServerErrorMessages()
   */
  public boolean getUseOnlyServerErrorMessages() {
    return this.useOnlyServerErrorMessages.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseReadAheadInput()
   */
  public boolean getUseReadAheadInput() {
    return this.useReadAheadInput.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseServerPreparedStmts()
   */
  public boolean getUseServerPreparedStmts() {
    return this.detectServerPreparedStmts.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseSqlStateCodes()
   */
  public boolean getUseSqlStateCodes() {
    return this.useSqlStateCodes.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseSSL()
   */
  public boolean getUseSSL() {
    return this.useSSL.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseStreamLengthsInPrepStmts()
   */
  public boolean getUseStreamLengthsInPrepStmts() {
    return this.useStreamLengthsInPrepStmts.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseTimezone()
   */
  public boolean getUseTimezone() {
    return this.useTimezone.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseUltraDevWorkAround()
   */
  public boolean getUseUltraDevWorkAround() {
    return this.useUltraDevWorkAround.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseUnbufferedInput()
   */
  public boolean getUseUnbufferedInput() {
    return this.useUnbufferedInput.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseUnicode()
   */
  public boolean getUseUnicode() {
    return this.useUnicodeAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseUsageAdvisor()
   */
  public boolean getUseUsageAdvisor() {
    return this.useUsageAdvisorAsBoolean;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getYearIsDateType()
   */
  public boolean getYearIsDateType() {
    return this.yearIsDateType.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getZeroDateTimeBehavior()
   */
  public String getZeroDateTimeBehavior() {
    return this.zeroDateTimeBehavior.getValueAsString();
  }

  /**
   * Initializes driver properties that come from a JNDI reference (in the
   * case of a javax.sql.DataSource bound into some name service that doesn't
   * handle Java objects directly).
   *
   * @param ref
   *            The JNDI Reference that holds RefAddrs for all properties
   * @throws SQLException
   *             DOCUMENT ME!
   */
  protected void initializeFromRef(Reference ref) throws SQLException {
    int numPropertiesToSet = PROPERTY_LIST.size();

    for (int i = 0; i < numPropertiesToSet; i++) {
      java.lang.reflect.Field propertyField = PROPERTY_LIST
          .get(i);

      try {
        ConnectionProperty propToSet = (ConnectionProperty) propertyField
            .get(this);

        if (ref != null) {
          propToSet.initializeFrom(ref, getExceptionInterceptor());
        }
      } catch (IllegalAccessException iae) {
        throw SQLError.createSQLException("Internal properties failure", //$NON-NLS-1$
            SQLError.SQL_STATE_GENERAL_ERROR, getExceptionInterceptor());
      }
    }

    postInitialization();
  }

  /**
   * Initializes driver properties that come from URL or properties passed to
   * the driver manager.
   *
   * @param info
   *            DOCUMENT ME!
   * @throws SQLException
   *             DOCUMENT ME!
   */
  protected void initializeProperties(Properties info) throws SQLException {
    if (info != null) {
      // For backwards-compatibility
      String profileSqlLc = info.getProperty("profileSql"); //$NON-NLS-1$

      if (profileSqlLc != null) {
        info.put("profileSQL", profileSqlLc); //$NON-NLS-1$
      }

      Properties infoCopy = (Properties) info.clone();

      infoCopy.remove(NonRegisteringDriver.HOST_PROPERTY_KEY);
      infoCopy.remove(NonRegisteringDriver.USER_PROPERTY_KEY);
      infoCopy.remove(NonRegisteringDriver.PASSWORD_PROPERTY_KEY);
      infoCopy.remove(NonRegisteringDriver.DBNAME_PROPERTY_KEY);
      infoCopy.remove(NonRegisteringDriver.PORT_PROPERTY_KEY);
      infoCopy.remove("profileSql"); //$NON-NLS-1$

      int numPropertiesToSet = PROPERTY_LIST.size();

      for (int i = 0; i < numPropertiesToSet; i++) {
        java.lang.reflect.Field propertyField = PROPERTY_LIST
            .get(i);

        try {
          ConnectionProperty propToSet = (ConnectionProperty) propertyField
              .get(this);

          propToSet.initializeFrom(infoCopy, getExceptionInterceptor());
        } catch (IllegalAccessException iae) {
          throw SQLError.createSQLException(
              Messages.getString("ConnectionProperties.unableToInitDriverProperties") //$NON-NLS-1$
                  + iae.toString(),
              SQLError.SQL_STATE_GENERAL_ERROR, getExceptionInterceptor());
        }
      }

      postInitialization();
    }
  }

  protected void postInitialization() throws SQLException {
 
    // Support 'old' profileSql capitalization
    if (this.profileSql.getValueAsObject() != null) {
      this.profileSQL.initializeFrom(this.profileSql.getValueAsObject()
          .toString(), getExceptionInterceptor());
    }

    this.reconnectTxAtEndAsBoolean = ((Boolean) this.reconnectAtTxEnd
        .getValueAsObject()).booleanValue();

    // Adjust max rows
    if (this.getMaxRows() == 0) {
      // adjust so that it will become MysqlDefs.MAX_ROWS
      // in execSQL()
      this.maxRows.setValueAsObject(Integer.valueOf(-1));
    }

    //
    // Check character encoding
    //
    String testEncoding = this.getEncoding();

    if (testEncoding != null) {
      // Attempt to use the encoding, and bail out if it
      // can't be used
      try {
        String testString = "abc"; //$NON-NLS-1$
        StringUtils.getBytes(testString, testEncoding);
      } catch (UnsupportedEncodingException UE) {
        throw SQLError.createSQLException(Messages.getString(
            "ConnectionProperties.unsupportedCharacterEncoding",
            new Object[] {testEncoding}), "0S100", getExceptionInterceptor()); //$NON-NLS-1$ //$NON-NLS-2$
      }
    }

    // Metadata caching is only supported on JDK-1.4 and newer
    // because it relies on LinkedHashMap being present.
    // Check (and disable) if not supported
    if (((Boolean) this.cacheResultSetMetadata.getValueAsObject())
        .booleanValue()) {
      try {
        Class.forName("java.util.LinkedHashMap"); //$NON-NLS-1$
      } catch (ClassNotFoundException cnfe) {
        this.cacheResultSetMetadata.setValue(false);
      }
    }

    this.cacheResultSetMetaDataAsBoolean = this.cacheResultSetMetadata
        .getValueAsBoolean();
    this.useUnicodeAsBoolean = this.useUnicode.getValueAsBoolean();
    this.characterEncodingAsString = ((String) this.characterEncoding
        .getValueAsObject());
    this.characterEncodingIsAliasForSjis = CharsetMapping.isAliasForSjis(this.characterEncodingAsString);
    this.highAvailabilityAsBoolean = this.autoReconnect.getValueAsBoolean();
    this.autoReconnectForPoolsAsBoolean = this.autoReconnectForPools
        .getValueAsBoolean();
    this.maxRowsAsInt = ((Integer) this.maxRows.getValueAsObject())
        .intValue();
    this.profileSQLAsBoolean = this.profileSQL.getValueAsBoolean();
    this.useUsageAdvisorAsBoolean = this.useUsageAdvisor
        .getValueAsBoolean();
    this.useOldUTF8BehaviorAsBoolean = this.useOldUTF8Behavior
        .getValueAsBoolean();
    this.autoGenerateTestcaseScriptAsBoolean = this.autoGenerateTestcaseScript
        .getValueAsBoolean();
    this.maintainTimeStatsAsBoolean = this.maintainTimeStats
        .getValueAsBoolean();
    this.jdbcCompliantTruncationForReads = getJdbcCompliantTruncation();
   
    if (getUseCursorFetch()) {
      // assume they want to use server-side prepared statements
      // because they're required for this functionality
      setDetectServerPreparedStmts(true);
    }
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAllowLoadLocalInfile(boolean)
   */
  public void setAllowLoadLocalInfile(boolean property) {
    this.allowLoadLocalInfile.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAllowMultiQueries(boolean)
   */
  public void setAllowMultiQueries(boolean property) {
    this.allowMultiQueries.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAllowNanAndInf(boolean)
   */
  public void setAllowNanAndInf(boolean flag) {
    this.allowNanAndInf.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAllowUrlInLocalInfile(boolean)
   */
  public void setAllowUrlInLocalInfile(boolean flag) {
    this.allowUrlInLocalInfile.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAlwaysSendSetIsolation(boolean)
   */
  public void setAlwaysSendSetIsolation(boolean flag) {
    this.alwaysSendSetIsolation.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoDeserialize(boolean)
   */
  public void setAutoDeserialize(boolean flag) {
    this.autoDeserialize.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoGenerateTestcaseScript(boolean)
   */
  public void setAutoGenerateTestcaseScript(boolean flag) {
    this.autoGenerateTestcaseScript.setValue(flag);
    this.autoGenerateTestcaseScriptAsBoolean = this.autoGenerateTestcaseScript
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoReconnect(boolean)
   */
  public void setAutoReconnect(boolean flag) {
    this.autoReconnect.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoReconnectForConnectionPools(boolean)
   */
  public void setAutoReconnectForConnectionPools(boolean property) {
    this.autoReconnectForPools.setValue(property);
    this.autoReconnectForPoolsAsBoolean = this.autoReconnectForPools
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoReconnectForPools(boolean)
   */
  public void setAutoReconnectForPools(boolean flag) {
    this.autoReconnectForPools.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setBlobSendChunkSize(java.lang.String)
   */
  public void setBlobSendChunkSize(String value) throws SQLException {
    this.blobSendChunkSize.setValue(value, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCacheCallableStatements(boolean)
   */
  public void setCacheCallableStatements(boolean flag) {
    this.cacheCallableStatements.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCachePreparedStatements(boolean)
   */
  public void setCachePreparedStatements(boolean flag) {
    this.cachePreparedStatements.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCacheResultSetMetadata(boolean)
   */
  public void setCacheResultSetMetadata(boolean property) {
    this.cacheResultSetMetadata.setValue(property);
    this.cacheResultSetMetaDataAsBoolean = this.cacheResultSetMetadata
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCacheServerConfiguration(boolean)
   */
  public void setCacheServerConfiguration(boolean flag) {
    this.cacheServerConfiguration.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCallableStatementCacheSize(int)
   */
  public void setCallableStatementCacheSize(int size) throws SQLException {
    this.callableStatementCacheSize.setValue(size, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCapitalizeDBMDTypes(boolean)
   */
  public void setCapitalizeDBMDTypes(boolean property) {
    this.capitalizeTypeNames.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCapitalizeTypeNames(boolean)
   */
  public void setCapitalizeTypeNames(boolean flag) {
    this.capitalizeTypeNames.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCharacterEncoding(java.lang.String)
   */
  public void setCharacterEncoding(String encoding) {
    this.characterEncoding.setValue(encoding);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCharacterSetResults(java.lang.String)
   */
  public void setCharacterSetResults(String characterSet) {
    this.characterSetResults.setValue(characterSet);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClobberStreamingResults(boolean)
   */
  public void setClobberStreamingResults(boolean flag) {
    this.clobberStreamingResults.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClobCharacterEncoding(java.lang.String)
   */
  public void setClobCharacterEncoding(String encoding) {
    this.clobCharacterEncoding.setValue(encoding);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setConnectionCollation(java.lang.String)
   */
  public void setConnectionCollation(String collation) {
    this.connectionCollation.setValue(collation);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setConnectTimeout(int)
   */
  public void setConnectTimeout(int timeoutMs) throws SQLException {
    this.connectTimeout.setValue(timeoutMs, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setContinueBatchOnError(boolean)
   */
  public void setContinueBatchOnError(boolean property) {
    this.continueBatchOnError.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCreateDatabaseIfNotExist(boolean)
   */
  public void setCreateDatabaseIfNotExist(boolean flag) {
    this.createDatabaseIfNotExist.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDefaultFetchSize(int)
   */
  public void setDefaultFetchSize(int n) throws SQLException {
    this.defaultFetchSize.setValue(n, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDetectServerPreparedStmts(boolean)
   */
  public void setDetectServerPreparedStmts(boolean property) {
    this.detectServerPreparedStmts.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDontTrackOpenResources(boolean)
   */
  public void setDontTrackOpenResources(boolean flag) {
    this.dontTrackOpenResources.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDumpQueriesOnException(boolean)
   */
  public void setDumpQueriesOnException(boolean flag) {
    this.dumpQueriesOnException.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDynamicCalendars(boolean)
   */
  public void setDynamicCalendars(boolean flag) {
    this.dynamicCalendars.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setElideSetAutoCommits(boolean)
   */
  public void setElideSetAutoCommits(boolean flag) {
    this.elideSetAutoCommits.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEmptyStringsConvertToZero(boolean)
   */
  public void setEmptyStringsConvertToZero(boolean flag) {
    this.emptyStringsConvertToZero.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEmulateLocators(boolean)
   */
  public void setEmulateLocators(boolean property) {
    this.emulateLocators.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEmulateUnsupportedPstmts(boolean)
   */
  public void setEmulateUnsupportedPstmts(boolean flag) {
    this.emulateUnsupportedPstmts.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEnablePacketDebug(boolean)
   */
  public void setEnablePacketDebug(boolean flag) {
    this.enablePacketDebug.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEncoding(java.lang.String)
   */
  public void setEncoding(String property) {
    this.characterEncoding.setValue(property);
    this.characterEncodingAsString = this.characterEncoding
        .getValueAsString();
    this.characterEncodingIsAliasForSjis = CharsetMapping.isAliasForSjis(this.characterEncodingAsString);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setExplainSlowQueries(boolean)
   */
  public void setExplainSlowQueries(boolean flag) {
    this.explainSlowQueries.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setFailOverReadOnly(boolean)
   */
  public void setFailOverReadOnly(boolean flag) {
    this.failOverReadOnly.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setGatherPerformanceMetrics(boolean)
   */
  public void setGatherPerformanceMetrics(boolean flag) {
    this.gatherPerformanceMetrics.setValue(flag);
  }

  /**
   * DOCUMENT ME!
   *
   * @param property
   */
  protected void setHighAvailability(boolean property) {
    this.autoReconnect.setValue(property);
    this.highAvailabilityAsBoolean = this.autoReconnect.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setHoldResultsOpenOverStatementClose(boolean)
   */
  public void setHoldResultsOpenOverStatementClose(boolean flag) {
    this.holdResultsOpenOverStatementClose.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setIgnoreNonTxTables(boolean)
   */
  public void setIgnoreNonTxTables(boolean property) {
    this.ignoreNonTxTables.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setInitialTimeout(int)
   */
  public void setInitialTimeout(int property) throws SQLException {
    this.initialTimeout.setValue(property, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setIsInteractiveClient(boolean)
   */
  public void setIsInteractiveClient(boolean property) {
    this.isInteractiveClient.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setJdbcCompliantTruncation(boolean)
   */
  public void setJdbcCompliantTruncation(boolean flag) {
    this.jdbcCompliantTruncation.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLocatorFetchBufferSize(java.lang.String)
   */
  public void setLocatorFetchBufferSize(String value) throws SQLException {
    this.locatorFetchBufferSize.setValue(value, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLogger(java.lang.String)
   */
  public void setLogger(String property) {
    this.loggerClassName.setValueAsObject(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLoggerClassName(java.lang.String)
   */
  public void setLoggerClassName(String className) {
    this.loggerClassName.setValue(className);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLogSlowQueries(boolean)
   */
  public void setLogSlowQueries(boolean flag) {
    this.logSlowQueries.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setMaintainTimeStats(boolean)
   */
  public void setMaintainTimeStats(boolean flag) {
    this.maintainTimeStats.setValue(flag);
    this.maintainTimeStatsAsBoolean = this.maintainTimeStats
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setMaxQuerySizeToLog(int)
   */
  public void setMaxQuerySizeToLog(int sizeInBytes) throws SQLException {
    this.maxQuerySizeToLog.setValue(sizeInBytes, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setMaxReconnects(int)
   */
  public void setMaxReconnects(int property) throws SQLException {
    this.maxReconnects.setValue(property, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setMaxRows(int)
   */
  public void setMaxRows(int property) throws SQLException {
    this.maxRows.setValue(property, getExceptionInterceptor());
    this.maxRowsAsInt = this.maxRows.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setMetadataCacheSize(int)
   */
  public void setMetadataCacheSize(int value) throws SQLException {
    this.metadataCacheSize.setValue(value, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNoDatetimeStringSync(boolean)
   */
  public void setNoDatetimeStringSync(boolean flag) {
    this.noDatetimeStringSync.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNullCatalogMeansCurrent(boolean)
   */
  public void setNullCatalogMeansCurrent(boolean value) {
    this.nullCatalogMeansCurrent.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNullNamePatternMatchesAll(boolean)
   */
  public void setNullNamePatternMatchesAll(boolean value) {
    this.nullNamePatternMatchesAll.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPacketDebugBufferSize(int)
   */
  public void setPacketDebugBufferSize(int size) throws SQLException {
    this.packetDebugBufferSize.setValue(size, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setParanoid(boolean)
   */
  public void setParanoid(boolean property) {
    this.paranoid.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPedantic(boolean)
   */
  public void setPedantic(boolean property) {
    this.pedantic.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPreparedStatementCacheSize(int)
   */
  public void setPreparedStatementCacheSize(int cacheSize) throws SQLException {
    this.preparedStatementCacheSize.setValue(cacheSize, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPreparedStatementCacheSqlLimit(int)
   */
  public void setPreparedStatementCacheSqlLimit(int cacheSqlLimit) throws SQLException {
    this.preparedStatementCacheSqlLimit.setValue(cacheSqlLimit, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setProfileSql(boolean)
   */
  public void setProfileSql(boolean property) {
    this.profileSQL.setValue(property);
    this.profileSQLAsBoolean = this.profileSQL.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setProfileSQL(boolean)
   */
  public void setProfileSQL(boolean flag) {
    this.profileSQL.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPropertiesTransform(java.lang.String)
   */
  public void setPropertiesTransform(String value) {
    this.propertiesTransform.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setQueriesBeforeRetryMaster(int)
   */
  public void setQueriesBeforeRetryMaster(int property) throws SQLException {
    this.queriesBeforeRetryMaster.setValue(property, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setReconnectAtTxEnd(boolean)
   */
  public void setReconnectAtTxEnd(boolean property) {
    this.reconnectAtTxEnd.setValue(property);
    this.reconnectTxAtEndAsBoolean = this.reconnectAtTxEnd
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRelaxAutoCommit(boolean)
   */
  public void setRelaxAutoCommit(boolean property) {
    this.relaxAutoCommit.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setReportMetricsIntervalMillis(int)
   */
  public void setReportMetricsIntervalMillis(int millis) throws SQLException {
    this.reportMetricsIntervalMillis.setValue(millis, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRequireSSL(boolean)
   */
  public void setRequireSSL(boolean property) {
    this.requireSSL.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRetainStatementAfterResultSetClose(boolean)
   */
  public void setRetainStatementAfterResultSetClose(boolean flag) {
    this.retainStatementAfterResultSetClose.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRollbackOnPooledClose(boolean)
   */
  public void setRollbackOnPooledClose(boolean flag) {
    this.rollbackOnPooledClose.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRoundRobinLoadBalance(boolean)
   */
  public void setRoundRobinLoadBalance(boolean flag) {
    this.roundRobinLoadBalance.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRunningCTS13(boolean)
   */
  public void setRunningCTS13(boolean flag) {
    this.runningCTS13.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSecondsBeforeRetryMaster(int)
   */
  public void setSecondsBeforeRetryMaster(int property) throws SQLException {
    this.secondsBeforeRetryMaster.setValue(property, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setServerTimezone(java.lang.String)
   */
  public void setServerTimezone(String property) {
    this.serverTimezone.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSessionVariables(java.lang.String)
   */
  public void setSessionVariables(String variables) {
    this.sessionVariables.setValue(variables);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSlowQueryThresholdMillis(int)
   */
  public void setSlowQueryThresholdMillis(int millis) throws SQLException {
    this.slowQueryThresholdMillis.setValue(millis, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSocketFactoryClassName(java.lang.String)
   */
  public void setSocketFactoryClassName(String property) {
    this.socketFactoryClassName.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSocketTimeout(int)
   */
  public void setSocketTimeout(int property) throws SQLException {
    this.socketTimeout.setValue(property, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setStrictFloatingPoint(boolean)
   */
  public void setStrictFloatingPoint(boolean property) {
    this.strictFloatingPoint.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setStrictUpdates(boolean)
   */
  public void setStrictUpdates(boolean property) {
    this.strictUpdates.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTinyInt1isBit(boolean)
   */
  public void setTinyInt1isBit(boolean flag) {
    this.tinyInt1isBit.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTraceProtocol(boolean)
   */
  public void setTraceProtocol(boolean flag) {
    this.traceProtocol.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTransformedBitIsBoolean(boolean)
   */
  public void setTransformedBitIsBoolean(boolean flag) {
    this.transformedBitIsBoolean.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseCompression(boolean)
   */
  public void setUseCompression(boolean property) {
    this.useCompression.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseFastIntParsing(boolean)
   */
  public void setUseFastIntParsing(boolean flag) {
    this.useFastIntParsing.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseHostsInPrivileges(boolean)
   */
  public void setUseHostsInPrivileges(boolean property) {
    this.useHostsInPrivileges.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseInformationSchema(boolean)
   */
  public void setUseInformationSchema(boolean flag) {
    this.useInformationSchema.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseLocalSessionState(boolean)
   */
  public void setUseLocalSessionState(boolean flag) {
    this.useLocalSessionState.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseOldUTF8Behavior(boolean)
   */
  public void setUseOldUTF8Behavior(boolean flag) {
    this.useOldUTF8Behavior.setValue(flag);
    this.useOldUTF8BehaviorAsBoolean = this.useOldUTF8Behavior
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseOnlyServerErrorMessages(boolean)
   */
  public void setUseOnlyServerErrorMessages(boolean flag) {
    this.useOnlyServerErrorMessages.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseReadAheadInput(boolean)
   */
  public void setUseReadAheadInput(boolean flag) {
    this.useReadAheadInput.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseServerPreparedStmts(boolean)
   */
  public void setUseServerPreparedStmts(boolean flag) {
    this.detectServerPreparedStmts.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseSqlStateCodes(boolean)
   */
  public void setUseSqlStateCodes(boolean flag) {
    this.useSqlStateCodes.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseSSL(boolean)
   */
  public void setUseSSL(boolean property) {
    this.useSSL.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseStreamLengthsInPrepStmts(boolean)
   */
  public void setUseStreamLengthsInPrepStmts(boolean property) {
    this.useStreamLengthsInPrepStmts.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseTimezone(boolean)
   */
  public void setUseTimezone(boolean property) {
    this.useTimezone.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseUltraDevWorkAround(boolean)
   */
  public void setUseUltraDevWorkAround(boolean property) {
    this.useUltraDevWorkAround.setValue(property);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseUnbufferedInput(boolean)
   */
  public void setUseUnbufferedInput(boolean flag) {
    this.useUnbufferedInput.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseUnicode(boolean)
   */
  public void setUseUnicode(boolean flag) {
    this.useUnicode.setValue(flag);
    this.useUnicodeAsBoolean = this.useUnicode.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseUsageAdvisor(boolean)
   */
  public void setUseUsageAdvisor(boolean useUsageAdvisorFlag) {
    this.useUsageAdvisor.setValue(useUsageAdvisorFlag);
    this.useUsageAdvisorAsBoolean = this.useUsageAdvisor
        .getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setYearIsDateType(boolean)
   */
  public void setYearIsDateType(boolean flag) {
    this.yearIsDateType.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setZeroDateTimeBehavior(java.lang.String)
   */
  public void setZeroDateTimeBehavior(String behavior) {
    this.zeroDateTimeBehavior.setValue(behavior);
  }

  protected void storeToRef(Reference ref) throws SQLException {
    int numPropertiesToSet = PROPERTY_LIST.size();

    for (int i = 0; i < numPropertiesToSet; i++) {
      java.lang.reflect.Field propertyField = PROPERTY_LIST
          .get(i);

      try {
        ConnectionProperty propToStore = (ConnectionProperty) propertyField
            .get(this);

        if (ref != null) {
          propToStore.storeTo(ref);
        }
      } catch (IllegalAccessException iae) {
        throw SQLError.createSQLException(Messages.getString("ConnectionProperties.errorNotExpected"), getExceptionInterceptor()); //$NON-NLS-1$
      }
    }
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#useUnbufferedInput()
   */
  public boolean useUnbufferedInput() {
    return this.useUnbufferedInput.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseCursorFetch()
   */
  public boolean getUseCursorFetch() {
    return this.useCursorFetch.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseCursorFetch(boolean)
   */
  public void setUseCursorFetch(boolean flag) {
    this.useCursorFetch.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getOverrideSupportsIntegrityEnhancementFacility()
   */
  public boolean getOverrideSupportsIntegrityEnhancementFacility() {
    return this.overrideSupportsIntegrityEnhancementFacility.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setOverrideSupportsIntegrityEnhancementFacility(boolean)
   */
  public void setOverrideSupportsIntegrityEnhancementFacility(boolean flag) {
    this.overrideSupportsIntegrityEnhancementFacility.setValue(flag)
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNoTimezoneConversionForTimeType()
   */
  public boolean getNoTimezoneConversionForTimeType() {
    return this.noTimezoneConversionForTimeType.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNoTimezoneConversionForTimeType(boolean)
   */
  public void setNoTimezoneConversionForTimeType(boolean flag) {
    this.noTimezoneConversionForTimeType.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseJDBCCompliantTimezoneShift()
   */
  public boolean getUseJDBCCompliantTimezoneShift() {
    return this.useJDBCCompliantTimezoneShift.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseJDBCCompliantTimezoneShift(boolean)
   */
  public void setUseJDBCCompliantTimezoneShift(boolean flag) {
    this.useJDBCCompliantTimezoneShift.setValue(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getAutoClosePStmtStreams()
   */
  public boolean getAutoClosePStmtStreams() {
    return this.autoClosePStmtStreams.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setAutoClosePStmtStreams(boolean)
   */
  public void setAutoClosePStmtStreams(boolean flag) {
    this.autoClosePStmtStreams.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getProcessEscapeCodesForPrepStmts()
   */
  public boolean getProcessEscapeCodesForPrepStmts() {
    return this.processEscapeCodesForPrepStmts.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setProcessEscapeCodesForPrepStmts(boolean)
   */
  public void setProcessEscapeCodesForPrepStmts(boolean flag) {
    this.processEscapeCodesForPrepStmts.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseGmtMillisForDatetimes()
   */
  public boolean getUseGmtMillisForDatetimes() {
    return this.useGmtMillisForDatetimes.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseGmtMillisForDatetimes(boolean)
   */
  public void setUseGmtMillisForDatetimes(boolean flag) {
    this.useGmtMillisForDatetimes.setValue(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getDumpMetadataOnColumnNotFound()
   */
  public boolean getDumpMetadataOnColumnNotFound() {
    return this.dumpMetadataOnColumnNotFound.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setDumpMetadataOnColumnNotFound(boolean)
   */
  public void setDumpMetadataOnColumnNotFound(boolean flag) {
    this.dumpMetadataOnColumnNotFound.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getResourceId()
   */
  public String getResourceId() {
    return this.resourceId.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setResourceId(java.lang.String)
   */
  public void setResourceId(String resourceId) {
    this.resourceId.setValue(resourceId);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getRewriteBatchedStatements()
   */
  public boolean getRewriteBatchedStatements() {
    return this.rewriteBatchedStatements.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setRewriteBatchedStatements(boolean)
   */
  public void setRewriteBatchedStatements(boolean flag) {
    this.rewriteBatchedStatements.setValue(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getJdbcCompliantTruncationForReads()
   */
  public boolean getJdbcCompliantTruncationForReads() {
    return this.jdbcCompliantTruncationForReads;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setJdbcCompliantTruncationForReads(boolean)
   */
  public void setJdbcCompliantTruncationForReads(
      boolean jdbcCompliantTruncationForReads) {
    this.jdbcCompliantTruncationForReads = jdbcCompliantTruncationForReads;
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseJvmCharsetConverters()
   */
  public boolean getUseJvmCharsetConverters() {
    return this.useJvmCharsetConverters.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseJvmCharsetConverters(boolean)
   */
  public void setUseJvmCharsetConverters(boolean flag) {
    this.useJvmCharsetConverters.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPinGlobalTxToPhysicalConnection()
   */
  public boolean getPinGlobalTxToPhysicalConnection() {
    return this.pinGlobalTxToPhysicalConnection.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPinGlobalTxToPhysicalConnection(boolean)
   */
  public void setPinGlobalTxToPhysicalConnection(boolean flag) {
    this.pinGlobalTxToPhysicalConnection.setValue(flag);
  }
 
  /*
   * "Aliases" which match the property names to make using
   * from datasources easier.
   */
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setGatherPerfMetrics(boolean)
   */
  public void setGatherPerfMetrics(boolean flag) {
    setGatherPerformanceMetrics(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getGatherPerfMetrics()
   */
  public boolean getGatherPerfMetrics() {
    return getGatherPerformanceMetrics();
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUltraDevHack(boolean)
   */
  public void setUltraDevHack(boolean flag) {
    setUseUltraDevWorkAround(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUltraDevHack()
   */
  public boolean getUltraDevHack() {
    return getUseUltraDevWorkAround();
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setInteractiveClient(boolean)
   */
  public void setInteractiveClient(boolean property) {
    setIsInteractiveClient(property);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setSocketFactory(java.lang.String)
   */
  public void setSocketFactory(String name) {
    setSocketFactoryClassName(name);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getSocketFactory()
   */
  public String getSocketFactory() {
    return getSocketFactoryClassName();
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseServerPrepStmts(boolean)
   */
  public void setUseServerPrepStmts(boolean flag) {
    setUseServerPreparedStmts(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseServerPrepStmts()
   */
  public boolean getUseServerPrepStmts() {
    return getUseServerPreparedStmts();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCacheCallableStmts(boolean)
   */
  public void setCacheCallableStmts(boolean flag) {
    setCacheCallableStatements(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCacheCallableStmts()
   */
  public boolean getCacheCallableStmts() {
    return getCacheCallableStatements();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCachePrepStmts(boolean)
   */
  public void setCachePrepStmts(boolean flag) {
    setCachePreparedStatements(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCachePrepStmts()
   */
  public boolean getCachePrepStmts() {
    return getCachePreparedStatements();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setCallableStmtCacheSize(int)
   */
  public void setCallableStmtCacheSize(int cacheSize) throws SQLException {
    setCallableStatementCacheSize(cacheSize);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getCallableStmtCacheSize()
   */
  public int getCallableStmtCacheSize() {
    return getCallableStatementCacheSize();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPrepStmtCacheSize(int)
   */
  public void setPrepStmtCacheSize(int cacheSize) throws SQLException {
    setPreparedStatementCacheSize(cacheSize);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPrepStmtCacheSize()
   */
  public int getPrepStmtCacheSize() {
    return getPreparedStatementCacheSize();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPrepStmtCacheSqlLimit(int)
   */
  public void setPrepStmtCacheSqlLimit(int sqlLimit) throws SQLException {
    setPreparedStatementCacheSqlLimit(sqlLimit);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPrepStmtCacheSqlLimit()
   */
  public int getPrepStmtCacheSqlLimit() {
    return getPreparedStatementCacheSqlLimit();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNoAccessToProcedureBodies()
   */
  public boolean getNoAccessToProcedureBodies() {
    return this.noAccessToProcedureBodies.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNoAccessToProcedureBodies(boolean)
   */
  public void setNoAccessToProcedureBodies(boolean flag) {
    this.noAccessToProcedureBodies.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseOldAliasMetadataBehavior()
   */
  public boolean getUseOldAliasMetadataBehavior() {
    return this.useOldAliasMetadataBehavior.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseOldAliasMetadataBehavior(boolean)
   */
  public void setUseOldAliasMetadataBehavior(boolean flag) {
    this.useOldAliasMetadataBehavior.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClientCertificateKeyStorePassword()
   */
  public String getClientCertificateKeyStorePassword() {
    return clientCertificateKeyStorePassword.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClientCertificateKeyStorePassword(java.lang.String)
   */
  public void setClientCertificateKeyStorePassword(
      String value) {
    this.clientCertificateKeyStorePassword.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClientCertificateKeyStoreType()
   */
  public String getClientCertificateKeyStoreType() {
    return clientCertificateKeyStoreType.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClientCertificateKeyStoreType(java.lang.String)
   */
  public void setClientCertificateKeyStoreType(
      String value) {
    this.clientCertificateKeyStoreType.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClientCertificateKeyStoreUrl()
   */
  public String getClientCertificateKeyStoreUrl() {
    return clientCertificateKeyStoreUrl.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClientCertificateKeyStoreUrl(java.lang.String)
   */
  public void setClientCertificateKeyStoreUrl(
      String value) {
    this.clientCertificateKeyStoreUrl.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTrustCertificateKeyStorePassword()
   */
  public String getTrustCertificateKeyStorePassword() {
    return trustCertificateKeyStorePassword.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTrustCertificateKeyStorePassword(java.lang.String)
   */
  public void setTrustCertificateKeyStorePassword(
      String value) {
    this.trustCertificateKeyStorePassword.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTrustCertificateKeyStoreType()
   */
  public String getTrustCertificateKeyStoreType() {
    return trustCertificateKeyStoreType.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTrustCertificateKeyStoreType(java.lang.String)
   */
  public void setTrustCertificateKeyStoreType(
      String value) {
    this.trustCertificateKeyStoreType.setValue(value);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTrustCertificateKeyStoreUrl()
   */
  public String getTrustCertificateKeyStoreUrl() {
    return trustCertificateKeyStoreUrl.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTrustCertificateKeyStoreUrl(java.lang.String)
   */
  public void setTrustCertificateKeyStoreUrl(
      String value) {
    this.trustCertificateKeyStoreUrl.setValue(value);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseSSPSCompatibleTimezoneShift()
   */
  public boolean getUseSSPSCompatibleTimezoneShift() {
    return this.useSSPSCompatibleTimezoneShift.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseSSPSCompatibleTimezoneShift(boolean)
   */
  public void setUseSSPSCompatibleTimezoneShift(boolean flag) {
    this.useSSPSCompatibleTimezoneShift.setValue(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getTreatUtilDateAsTimestamp()
   */
  public boolean getTreatUtilDateAsTimestamp() {
    return this.treatUtilDateAsTimestamp.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setTreatUtilDateAsTimestamp(boolean)
   */
  public void setTreatUtilDateAsTimestamp(boolean flag) {
    this.treatUtilDateAsTimestamp.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseFastDateParsing()
   */
  public boolean getUseFastDateParsing() {
    return this.useFastDateParsing.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseFastDateParsing(boolean)
   */
  public void setUseFastDateParsing(boolean flag) {
    this.useFastDateParsing.setValue(flag);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLocalSocketAddress()
   */
  public String getLocalSocketAddress() {
    return this.localSocketAddress.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLocalSocketAddress(java.lang.String)
   */
  public void setLocalSocketAddress(String address) {
    this.localSocketAddress.setValue(address);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseConfigs(java.lang.String)
   */
  public void setUseConfigs(String configs) {
    this.useConfigs.setValue(configs);
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseConfigs()
   */
  public String getUseConfigs() {
    return this.useConfigs.getValueAsString();
  }
 
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getGenerateSimpleParameterMetadata()
   */
  public boolean getGenerateSimpleParameterMetadata() {
    return this.generateSimpleParameterMetadata.getValueAsBoolean();
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setGenerateSimpleParameterMetadata(boolean)
   */
  public void setGenerateSimpleParameterMetadata(boolean flag) {
    this.generateSimpleParameterMetadata.setValue(flag);
 

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getLogXaCommands()
   */
  public boolean getLogXaCommands() {
    return this.logXaCommands.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setLogXaCommands(boolean)
   */
  public void setLogXaCommands(boolean flag) {
    this.logXaCommands.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getResultSetSizeThreshold()
   */
  public int getResultSetSizeThreshold() {
    return this.resultSetSizeThreshold.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setResultSetSizeThreshold(int)
   */
  public void setResultSetSizeThreshold(int threshold) throws SQLException {
    this.resultSetSizeThreshold.setValue(threshold, getExceptionInterceptor());
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getNetTimeoutForStreamingResults()
   */
  public int getNetTimeoutForStreamingResults() {
    return this.netTimeoutForStreamingResults.getValueAsInt();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setNetTimeoutForStreamingResults(int)
   */
  public void setNetTimeoutForStreamingResults(int value) throws SQLException {
    this.netTimeoutForStreamingResults.setValue(value, getExceptionInterceptor());
  }
 
  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getEnableQueryTimeouts()
   */
  public boolean getEnableQueryTimeouts() {
    return this.enableQueryTimeouts.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setEnableQueryTimeouts(boolean)
   */
  public void setEnableQueryTimeouts(boolean flag) {
    this.enableQueryTimeouts.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getPadCharsWithSpace()
   */
  public boolean getPadCharsWithSpace() {
    return this.padCharsWithSpace.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setPadCharsWithSpace(boolean)
   */
  public void setPadCharsWithSpace(boolean flag) {
    this.padCharsWithSpace.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getUseDynamicCharsetInfo()
   */
  public boolean getUseDynamicCharsetInfo() {
    return this.useDynamicCharsetInfo.getValueAsBoolean();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setUseDynamicCharsetInfo(boolean)
   */
  public void setUseDynamicCharsetInfo(boolean flag) {
    this.useDynamicCharsetInfo.setValue(flag);
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#getClientInfoProvider()
   */
  public String getClientInfoProvider() {
    return this.clientInfoProvider.getValueAsString();
  }

  /* (non-Javadoc)
   * @see com.mysql.jdbc.IConnectionProperties#setClientInfoProvider(java.lang.String)
   */
  public void setClientInfoProvider(String classname) {
    this.clientInfoProvider.setValue(classname);
  }
 
  public boolean getPopulateInsertRowWithDefaultValues() {
    return this.populateInsertRowWithDefaultValues.getValueAsBoolean();
  }

  public void setPopulateInsertRowWithDefaultValues(boolean flag) {
    this.populateInsertRowWithDefaultValues.setValue(flag);
  }
 
  public String getLoadBalanceStrategy() {
    return this.loadBalanceStrategy.getValueAsString();
  }

  public void setLoadBalanceStrategy(String strategy) {
    this.loadBalanceStrategy.setValue(strategy);
  }
 
  public boolean getTcpNoDelay() {
    return this.tcpNoDelay.getValueAsBoolean();
  }

  public void setTcpNoDelay(boolean flag) {
    this.tcpNoDelay.setValue(flag);
  }

  public boolean getTcpKeepAlive() {
    return this.tcpKeepAlive.getValueAsBoolean();
  }

  public void setTcpKeepAlive(boolean flag) {
    this.tcpKeepAlive.setValue(flag);
  }

  public int getTcpRcvBuf() {
    return this.tcpRcvBuf.getValueAsInt();
  }

  public void setTcpRcvBuf(int bufSize) throws SQLException {
    this.tcpRcvBuf.setValue(bufSize, getExceptionInterceptor());
  }

  public int getTcpSndBuf() {
    return this.tcpSndBuf.getValueAsInt();
  }

  public void setTcpSndBuf(int bufSize) throws SQLException {
    this.tcpSndBuf.setValue(bufSize, getExceptionInterceptor());
  }

  public int getTcpTrafficClass() {
    return this.tcpTrafficClass.getValueAsInt();
  }

  public void setTcpTrafficClass(int classFlags) throws SQLException {
    this.tcpTrafficClass.setValue(classFlags, getExceptionInterceptor());
  }
 
  public boolean getUseNanosForElapsedTime() {
    return this.useNanosForElapsedTime.getValueAsBoolean();
  }

  public void setUseNanosForElapsedTime(boolean flag) {
    this.useNanosForElapsedTime.setValue(flag);
  }

  public long getSlowQueryThresholdNanos() {
    return this.slowQueryThresholdNanos.getValueAsLong();
  }

  public void setSlowQueryThresholdNanos(long nanos) throws SQLException {
    this.slowQueryThresholdNanos.setValue(nanos, getExceptionInterceptor());
  }

  public String getStatementInterceptors() {
    return this.statementInterceptors.getValueAsString();
  }

  public void setStatementInterceptors(String value) {
    this.statementInterceptors.setValue(value);
  }

  public boolean getUseDirectRowUnpack() {
    return this.useDirectRowUnpack.getValueAsBoolean();
  }

  public void setUseDirectRowUnpack(boolean flag) {
    this.useDirectRowUnpack.setValue(flag);
  }

  public String getLargeRowSizeThreshold() {
    return this.largeRowSizeThreshold.getValueAsString();
  }

  public void setLargeRowSizeThreshold(String value) throws SQLException {
    this.largeRowSizeThreshold.setValue(value, getExceptionInterceptor());
  }

  public boolean getUseBlobToStoreUTF8OutsideBMP() {
    return this.useBlobToStoreUTF8OutsideBMP.getValueAsBoolean();
  }

  public void setUseBlobToStoreUTF8OutsideBMP(boolean flag) {
    this.useBlobToStoreUTF8OutsideBMP.setValue(flag);
  }

  public String getUtf8OutsideBmpExcludedColumnNamePattern() {
    return this.utf8OutsideBmpExcludedColumnNamePattern.getValueAsString();
  }

  public void setUtf8OutsideBmpExcludedColumnNamePattern(String regexPattern) {
    this.utf8OutsideBmpExcludedColumnNamePattern.setValue(regexPattern);
  }

  public String getUtf8OutsideBmpIncludedColumnNamePattern() {
    return this.utf8OutsideBmpIncludedColumnNamePattern.getValueAsString();
  }

  public void setUtf8OutsideBmpIncludedColumnNamePattern(String regexPattern) {
    this.utf8OutsideBmpIncludedColumnNamePattern.setValue(regexPattern);
  }
 
  public boolean getIncludeInnodbStatusInDeadlockExceptions() {
    return this.includeInnodbStatusInDeadlockExceptions.getValueAsBoolean();
  }

  public void setIncludeInnodbStatusInDeadlockExceptions(boolean flag) {
    this.includeInnodbStatusInDeadlockExceptions.setValue(flag);
  }
 
  public boolean getBlobsAreStrings() {
        return this.blobsAreStrings.getValueAsBoolean();
    }

  public void setBlobsAreStrings(boolean flag) {
        this.blobsAreStrings.setValue(flag);
    }

    public boolean getFunctionsNeverReturnBlobs() {
        return this.functionsNeverReturnBlobs.getValueAsBoolean();
    }

    public void setFunctionsNeverReturnBlobs(boolean flag) {
        this.functionsNeverReturnBlobs.setValue(flag);
    }

  public boolean getAutoSlowLog() {
    return this.autoSlowLog.getValueAsBoolean();
  }

  public void setAutoSlowLog(boolean flag) {
    this.autoSlowLog.setValue(flag);
  }

  public String getConnectionLifecycleInterceptors() {
    return this.connectionLifecycleInterceptors.getValueAsString();
  }

  public void setConnectionLifecycleInterceptors(String interceptors) {
    this.connectionLifecycleInterceptors.setValue(interceptors);
    }

  public String getProfilerEventHandler() {
    return this.profilerEventHandler.getValueAsString();
  }

  public void setProfilerEventHandler(String handler) {
    this.profilerEventHandler.setValue(handler);
  }

  public boolean getVerifyServerCertificate() {
    return this.verifyServerCertificate.getValueAsBoolean();
  }

  public void setVerifyServerCertificate(boolean flag) {
    this.verifyServerCertificate.setValue(flag);
  }

  public boolean getUseLegacyDatetimeCode() {
    return this.useLegacyDatetimeCode.getValueAsBoolean();
  }

  public void setUseLegacyDatetimeCode(boolean flag) {
    this.useLegacyDatetimeCode.setValue(flag);
  }

  public int getSelfDestructOnPingSecondsLifetime() {
    return this.selfDestructOnPingSecondsLifetime.getValueAsInt();
  }

  public void setSelfDestructOnPingSecondsLifetime(int seconds) throws SQLException {
    this.selfDestructOnPingSecondsLifetime.setValue(seconds, getExceptionInterceptor());
  }

  public int getSelfDestructOnPingMaxOperations() {
    return this.selfDestructOnPingMaxOperations.getValueAsInt();
  }

  public void setSelfDestructOnPingMaxOperations(int maxOperations) throws SQLException {
    this.selfDestructOnPingMaxOperations.setValue(maxOperations, getExceptionInterceptor());
  }

  public boolean getUseColumnNamesInFindColumn() {
    return this.useColumnNamesInFindColumn.getValueAsBoolean();
  }

  public void setUseColumnNamesInFindColumn(boolean flag) {
    this.useColumnNamesInFindColumn.setValue(flag);
  }

  public boolean getUseLocalTransactionState() {
    return this.useLocalTransactionState.getValueAsBoolean();
  }

  public void setUseLocalTransactionState(boolean flag) {
    this.useLocalTransactionState.setValue(flag);
  }

  public boolean getCompensateOnDuplicateKeyUpdateCounts() {
    return this.compensateOnDuplicateKeyUpdateCounts.getValueAsBoolean();
  }

  public void setCompensateOnDuplicateKeyUpdateCounts(boolean flag) {
    this.compensateOnDuplicateKeyUpdateCounts.setValue(flag);
  }

  public int getLoadBalanceBlacklistTimeout() {
    return loadBalanceBlacklistTimeout.getValueAsInt();
  }

  public void setLoadBalanceBlacklistTimeout(int loadBalanceBlacklistTimeout) throws SQLException {
    this.loadBalanceBlacklistTimeout.setValue(loadBalanceBlacklistTimeout, getExceptionInterceptor());
  }

  public int getLoadBalancePingTimeout() {
    return loadBalancePingTimeout.getValueAsInt();
  }

  public void setLoadBalancePingTimeout(int loadBalancePingTimeout) throws SQLException {
    this.loadBalancePingTimeout.setValue(loadBalancePingTimeout, getExceptionInterceptor());
  }
 
  public void setRetriesAllDown(int retriesAllDown) throws SQLException {
    this.retriesAllDown.setValue(retriesAllDown, getExceptionInterceptor());
  }
 
  public int getRetriesAllDown() {
    return this.retriesAllDown.getValueAsInt();
  }

  public void setUseAffectedRows(boolean flag) {
    this.useAffectedRows.setValue(flag);
  }

  public boolean getUseAffectedRows() {
    return this.useAffectedRows.getValueAsBoolean();
  }

  public void setPasswordCharacterEncoding(String characterSet) {
    this.passwordCharacterEncoding.setValue(characterSet);
  }

  public String getPasswordCharacterEncoding() {
    return this.passwordCharacterEncoding.getValueAsString();
  }

  public void setExceptionInterceptors(String exceptionInterceptors) {
    this.exceptionInterceptors.setValue(exceptionInterceptors);
  }

  public String getExceptionInterceptors() {
    return this.exceptionInterceptors.getValueAsString();
  }
 
  public void setMaxAllowedPacket(int  max) throws SQLException {
    this.maxAllowedPacket.setValue(max, getExceptionInterceptor());
  }
 
  public int getMaxAllowedPacket() {
    return this.maxAllowedPacket.getValueAsInt();
  }

  public boolean getQueryTimeoutKillsConnection() {
    return this.queryTimeoutKillsConnection.getValueAsBoolean();
  }

  public void setQueryTimeoutKillsConnection(boolean queryTimeoutKillsConnection) {
    this.queryTimeoutKillsConnection.setValue(queryTimeoutKillsConnection);
  }

  public boolean getLoadBalanceValidateConnectionOnSwapServer() {
    return this.loadBalanceValidateConnectionOnSwapServer.getValueAsBoolean();
  }

  public void setLoadBalanceValidateConnectionOnSwapServer(
      boolean loadBalanceValidateConnectionOnSwapServer) {
    this.loadBalanceValidateConnectionOnSwapServer.setValue(loadBalanceValidateConnectionOnSwapServer);
   
  }
 
  public String getLoadBalanceConnectionGroup() {
    return loadBalanceConnectionGroup.getValueAsString();
  }

  public void setLoadBalanceConnectionGroup(String loadBalanceConnectionGroup) {
    this.loadBalanceConnectionGroup.setValue(loadBalanceConnectionGroup);
  }

  public String getLoadBalanceExceptionChecker() {
    return loadBalanceExceptionChecker.getValueAsString();
  }

  public void setLoadBalanceExceptionChecker(String loadBalanceExceptionChecker) {
    this.loadBalanceExceptionChecker.setValue(loadBalanceExceptionChecker);
  }

  public String getLoadBalanceSQLStateFailover() {
    return loadBalanceSQLStateFailover.getValueAsString();
  }

  public void setLoadBalanceSQLStateFailover(String loadBalanceSQLStateFailover) {
    this.loadBalanceSQLStateFailover.setValue(loadBalanceSQLStateFailover);
  }

  public String getLoadBalanceSQLExceptionSubclassFailover() {
    return loadBalanceSQLExceptionSubclassFailover.getValueAsString();
  }

  public void setLoadBalanceSQLExceptionSubclassFailover(String loadBalanceSQLExceptionSubclassFailover) {
    this.loadBalanceSQLExceptionSubclassFailover.setValue(loadBalanceSQLExceptionSubclassFailover);
  }

  public boolean getLoadBalanceEnableJMX() {
    return loadBalanceEnableJMX.getValueAsBoolean();
  }

  public void setLoadBalanceEnableJMX(boolean loadBalanceEnableJMX) {
    this.loadBalanceEnableJMX.setValue(loadBalanceEnableJMX);
  }

  public void setLoadBalanceAutoCommitStatementThreshold(int loadBalanceAutoCommitStatementThreshold) throws SQLException {
    this.loadBalanceAutoCommitStatementThreshold.setValue(loadBalanceAutoCommitStatementThreshold, getExceptionInterceptor());
  }

  public int getLoadBalanceAutoCommitStatementThreshold() {
    return loadBalanceAutoCommitStatementThreshold.getValueAsInt();
  }

  public void setLoadBalanceAutoCommitStatementRegex(String loadBalanceAutoCommitStatementRegex) {
    this.loadBalanceAutoCommitStatementRegex.setValue(loadBalanceAutoCommitStatementRegex);
  }

  public String getLoadBalanceAutoCommitStatementRegex() {
    return loadBalanceAutoCommitStatementRegex.getValueAsString();
  }

  public void setIncludeThreadDumpInDeadlockExceptions(boolean flag) {
    this.includeThreadDumpInDeadlockExceptions.setValue(flag);
  }

  public boolean getIncludeThreadDumpInDeadlockExceptions() {
    return includeThreadDumpInDeadlockExceptions.getValueAsBoolean();
  }

  public void setIncludeThreadNamesAsStatementComment(boolean flag) {
    this.includeThreadNamesAsStatementComment.setValue(flag);
  }

  public boolean getIncludeThreadNamesAsStatementComment() {
    return includeThreadNamesAsStatementComment.getValueAsBoolean();
  }

  public void setAuthenticationPlugins(String authenticationPlugins) {
    this.authenticationPlugins.setValue(authenticationPlugins);
  }

  public String getAuthenticationPlugins() {
    return this.authenticationPlugins.getValueAsString();
  }

  public void setDisabledAuthenticationPlugins(String disabledAuthenticationPlugins) {
    this.disabledAuthenticationPlugins.setValue(disabledAuthenticationPlugins);
  }

  public String getDisabledAuthenticationPlugins() {
    return this.disabledAuthenticationPlugins.getValueAsString();
  }

  public void setDefaultAuthenticationPlugin(String defaultAuthenticationPlugin) {
    this.defaultAuthenticationPlugin.setValue(defaultAuthenticationPlugin);
   
  }

  public String getDefaultAuthenticationPlugin() {
    return this.defaultAuthenticationPlugin.getValueAsString();
  }

  public void setParseInfoCacheFactory(String factoryClassname) {
    this.parseInfoCacheFactory.setValue(factoryClassname)
  }

  public String getParseInfoCacheFactory() {
    return this.parseInfoCacheFactory.getValueAsString();
  }
 
  public void setServerConfigCacheFactory(String factoryClassname) {
    this.serverConfigCacheFactory.setValue(factoryClassname)
  }

  public String getServerConfigCacheFactory() {
    return this.serverConfigCacheFactory.getValueAsString();
  }

  public void setDisconnectOnExpiredPasswords(boolean disconnectOnExpiredPasswords) {
    this.disconnectOnExpiredPasswords.setValue(disconnectOnExpiredPasswords);
  }

  public boolean getDisconnectOnExpiredPasswords() {
    return this.disconnectOnExpiredPasswords.getValueAsBoolean();
  }

  public boolean getAllowMasterDownConnections() {
    return this.allowMasterDownConnections.getValueAsBoolean();
  }

  public void setAllowMasterDownConnections(boolean connectIfMasterDown) {
    this.allowMasterDownConnections.setValue(connectIfMasterDown);
  }

  public boolean getReplicationEnableJMX() {
    return this.replicationEnableJMX.getValueAsBoolean();
  }

  public void setReplicationEnableJMX(boolean replicationEnableJMX) {
    this.replicationEnableJMX.setValue(replicationEnableJMX);
   
  }

  public void setGetProceduresReturnsFunctions(boolean getProcedureReturnsFunctions) {
    this.getProceduresReturnsFunctions.setValue(getProcedureReturnsFunctions);
  }

  public boolean getGetProceduresReturnsFunctions() {
    return this.getProceduresReturnsFunctions.getValueAsBoolean();
  }
}
TOP

Related Classes of com.mysql.jdbc.ConnectionPropertiesImpl$XmlMap

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.