List:Commits« Previous MessageNext Message »
From:mmatthews Date:August 29 2007 4:36pm
Subject:Connector/J commit: r6521 - in branches/branch_5_0/connector-j: . src/com/mysql/jdbc
View as plain text  
Modified:
   branches/branch_5_0/connector-j/CHANGES
   branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
   branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java
Log:
- Added two configuration parameters (both default to "false")
    
            * blobsAreStrings  - Should the driver always treat BLOBs as Strings 
                                 specifically to work around dubious metadata returned 
                                 by the server for GROUP BY clauses?
            
            * functionsNeverReturnBlobs - 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?

Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES	2007-08-29 16:27:40 UTC (rev 6520)
+++ branches/branch_5_0/connector-j/CHANGES	2007-08-29 16:36:56 UTC (rev 6521)
@@ -6,7 +6,18 @@
     - Fixed BUG#30550, executeBatch() would fail with an ArithmeticException
       and/or NullPointerException when the batch had zero members and
       "rewriteBatchedStatements" was set to "true" for the connection.
-      
+    
+    - Added two configuration parameters (both default to "false")
+    
+            * blobsAreStrings  - Should the driver always treat BLOBs as Strings 
+                                 specifically to work around dubious metadata returned 
+                                 by the server for GROUP BY clauses?
+            
+            * functionsNeverReturnBlobs - 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?
+
 07-19-07 - Version 5.0.7
 
     - Setting the configuration parameter "useCursorFetch" to "true" for 

Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java	2007-08-29 16:27:40 UTC (rev 6520)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java	2007-08-29 16:36:56 UTC (rev 6521)
@@ -2,12 +2,12 @@
  Copyright (C) 2002-2004 MySQL AB
 
  This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as 
+ it under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.
 
- There are special exceptions to the terms and conditions of the GPL 
- as it is applied to this software. View the full text of the 
- exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
+ There are special exceptions to the terms and conditions of the GPL
+ as it is applied to this software. View the full text of the
+ exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
  software distribution.
 
  This program is distributed in the hope that it will be useful,
@@ -48,22 +48,22 @@
 /**
  * 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 ConnectionProperties implements Serializable {
-	
+
 	private static final long serialVersionUID = 4257801713007640580L;
 
 	class BooleanConnectionProperty extends ConnectionProperty implements Serializable {
-	
+
 		private static final long serialVersionUID = 2540132501709159404L;
 
 		/**
 		 * DOCUMENT ME!
-		 * 
+		 *
 		 * @param propertyNameToSet
 		 * @param defaultValueToSet
 		 * @param descriptionToSet
@@ -144,16 +144,16 @@
 		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;
@@ -260,11 +260,11 @@
 			dpi.value = (this.valueAsObject != null) ? this.valueAsObject.toString() : null;
 			dpi.required = this.required;
 			dpi.description = this.description;
-			
+
 			return dpi;
 		}
-		
 
+
 		void validateStringValues(String valueToValidate) throws SQLException {
 			String[] validateAgainst = getAllowableValues();
 
@@ -343,7 +343,7 @@
 
 		/**
 		 * DOCUMENT ME!
-		 * 
+		 *
 		 * @param propertyNameToSet
 		 * @param defaultValueToSet
 		 * @param descriptionToSet
@@ -433,7 +433,7 @@
 			this.valueAsObject = new Integer(valueFlag);
 		}
 	}
-	
+
 	public class LongConnectionProperty extends IntegerConnectionProperty {
 
 		private static final long serialVersionUID = 6068572984340480895L;
@@ -446,8 +446,8 @@
 					(int)lowerBoundToSet, (int)upperBoundToSet, descriptionToSet,
 					sinceVersionToSet, category, orderInCategory);
 		}
-		
 
+
 		LongConnectionProperty(String propertyNameToSet,
 				long defaultValueToSet, String descriptionToSet,
 				String sinceVersionToSet, String category, int orderInCategory) {
@@ -456,15 +456,15 @@
 				0, descriptionToSet,
 				sinceVersionToSet, category, orderInCategory);
 		}
-		
+
 		void setValue(long value) {
 			this.valueAsObject = new Long(value);
 		}
-		
+
 		long getValueAsLong() {
 			return ((Long) this.valueAsObject).longValue();
 		}
-		
+
 		void initializeFrom(String extractedValue) throws SQLException {
 			if (extractedValue != null) {
 				try {
@@ -542,7 +542,7 @@
 	}
 
 	class StringConnectionProperty extends ConnectionProperty implements Serializable {
-	
+
 		private static final long serialVersionUID = 5432127962785948272L;
 
 		StringConnectionProperty(String propertyNameToSet,
@@ -554,7 +554,7 @@
 
 		/**
 		 * DOCUMENT ME!
-		 * 
+		 *
 		 * @param propertyNameToSet
 		 * @param defaultValueToSet
 		 * @param allowableValuesToSet
@@ -611,7 +611,7 @@
 	private static final String CONNECTION_AND_AUTH_CATEGORY = "Connection/Authentication";
 
 	private static final String NETWORK_CATEGORY = "Networking";
-	
+
 	private static final String DEBUGING_PROFILING_CATEGORY = "Debuging/Profiling";
 
 	private static final String HA_CATEGORY = "High Availability and Clustering";
@@ -619,9 +619,9 @@
 	private static final String MISC_CATEGORY = "Miscellaneous";
 
 	private static final String PERFORMANCE_CATEGORY = "Performance Extensions";
-	
+
 	private static final String SECURITY_CATEGORY = "Security";
-	
+
 	private static final String[] PROPERTY_CATEGORIES = new String[] {
 		CONNECTION_AND_AUTH_CATEGORY, NETWORK_CATEGORY,
 		HA_CATEGORY, SECURITY_CATEGORY,
@@ -655,7 +655,7 @@
 
 	/**
 	 * Exposes all ConnectionPropertyInfo instances as DriverPropertyInfo
-	 * 
+	 *
 	 * @param info
 	 *            the properties to load into these ConnectionPropertyInfo
 	 *            instances
@@ -710,14 +710,14 @@
 			"3.1.7", PERFORMANCE_CATEGORY, Integer.MAX_VALUE);
 
 	private BooleanConnectionProperty autoClosePStmtStreams = new BooleanConnectionProperty(
-			"autoClosePStmtStreams", 
+			"autoClosePStmtStreams",
 			false,
 			"Should the driver automatically call .close() on streams/readers passed as "
 			+ "arguments via set*() methods?",
 			"3.1.12",
 			MISC_CATEGORY,
 			Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty autoDeserialize = new BooleanConnectionProperty(
 			"autoDeserialize",
 			false,
@@ -762,6 +762,18 @@
 			"Chunk to use when sending BLOB/CLOBs via ServerPreparedStatements",
 			"3.1.9", PERFORMANCE_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,
 			"Should the driver cache the parsing stage of CallableStatements",
@@ -824,7 +836,7 @@
 					+ "and any outstanding data still streaming from the server to be discarded if another query is executed "
 					+ "before all the data has been read from the server.",
 			"3.0.9", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private StringConnectionProperty clobCharacterEncoding = new StringConnectionProperty(
 			"clobCharacterEncoding",
 			null,
@@ -918,7 +930,7 @@
 			false,
 			"When enabled, a ring-buffer of 'packetDebugBufferSize' packets will be kept, and dumped when exceptions are thrown in key areas in the driver's code",
 			"3.1.3", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty enableQueryTimeouts = new BooleanConnectionProperty(
 			"enableQueryTimeouts",
 			true,
@@ -929,7 +941,7 @@
 			+ "might want to consider disabling this functionality.",
 			"5.0.6",
 			PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-			
+
 	private BooleanConnectionProperty explainSlowQueries = new BooleanConnectionProperty(
 			"explainSlowQueries",
 			false,
@@ -949,13 +961,13 @@
 			false,
 			"Should the driver gather performance metrics, and report them via the configured logger every 'reportMetricsIntervalMillis' milliseconds?",
 			"3.1.2", DEBUGING_PROFILING_CATEGORY, 1);
-	
+
 	private BooleanConnectionProperty generateSimpleParameterMetadata = new BooleanConnectionProperty(
 			"generateSimpleParameterMetadata", false, "Should the driver generate simplified parameter metadata for PreparedStatements when "
 			+ "no metadata is available either because the server couldn't support preparing the statement, or server-side prepared statements" +
 					" are disabled?"
 			, "5.0.5", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private boolean highAvailabilityAsBoolean = false;
 
 	private BooleanConnectionProperty holdResultsOpenOverStatementClose = new BooleanConnectionProperty(
@@ -963,13 +975,13 @@
 			false,
 			"Should the driver close result sets on Statement.close() as required by the JDBC specification?",
 			"3.1.7", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty includeInnodbStatusInDeadlockExceptions = new BooleanConnectionProperty(
 			"includeInnodbStatusInDeadlockExceptions",
 			false,
 			"Include the output of \"SHOW ENGINE INNODB STATUS\" in exception messages when deadlock exceptions are detected?",
 			"5.0.7", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty ignoreNonTxTables = new BooleanConnectionProperty(
 			"ignoreNonTxTables",
 			false,
@@ -998,9 +1010,9 @@
 					+ "(MySQL 4.1.0 and newer)?", "3.1.2", MISC_CATEGORY,
 			Integer.MIN_VALUE);
 
-	private boolean jdbcCompliantTruncationForReads = 
+	private boolean jdbcCompliantTruncationForReads =
 		this.jdbcCompliantTruncation.getValueAsBoolean();
-	
+
 	private StringConnectionProperty loadBalanceStrategy = new StringConnectionProperty(
 			"loadBalanceStrategy",
 			"random",
@@ -1014,12 +1026,12 @@
 			"across the workload. (2) \"bestResponseTime\" - the driver will route the request to the host that had " +
 			"the best response time for the previous transaction.",
 			"5.0.6", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-			
+
 	private StringConnectionProperty localSocketAddress = new StringConnectionProperty("localSocketAddress",
 			null, "Hostname or IP address given to explicitly configure the interface that "
 			+ "the driver will bind the client side of the TCP/IP connection to when connecting.",
 			"5.0.5", CONNECTION_AND_AUTH_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private MemorySizeConnectionProperty locatorFetchBufferSize = new MemorySizeConnectionProperty(
 			"locatorFetchBufferSize",
 			1024 * 1024,
@@ -1049,7 +1061,7 @@
 			"Should the driver log XA commands sent by MysqlXaConnection to the server," +
 			" at the DEBUG level of logging?",
 			"5.0.5", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty maintainTimeStats = new BooleanConnectionProperty(
 			"maintainTimeStats",
 			true,
@@ -1103,13 +1115,13 @@
 			+ " should the driver instead create basic metadata (all parameters reported as INOUT VARCHARs) instead "
 			+ " of throwing an exception?",
 			"5.0.3", MISC_CATEGORY, Integer.MIN_VALUE);
-			
+
 	private BooleanConnectionProperty noDatetimeStringSync = new BooleanConnectionProperty(
 			"noDatetimeStringSync",
 			false,
 			"Don't ensure that ResultSet.getDatetimeType().toString().equals(ResultSet.getString())",
 			"3.1.7", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty noTimezoneConversionForTimeType = new BooleanConnectionProperty(
 			"noTimezoneConversionForTimeType",
 			false,
@@ -1137,7 +1149,7 @@
 			Integer.MAX_VALUE,
 			"The maximum number of packets to retain when 'enablePacketDebug' is true",
 			"3.1.3", DEBUGING_PROFILING_CATEGORY, 7);
-	
+
 	private BooleanConnectionProperty padCharsWithSpace = new BooleanConnectionProperty(
 			"padCharsWithSpace",
 			false,
@@ -1147,7 +1159,7 @@
 			"5.0.6",
 			MISC_CATEGORY,
 			Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty paranoid = new BooleanConnectionProperty(
 			"paranoid",
 			false,
@@ -1164,7 +1176,7 @@
 			+ " operations on a given XID are always routed to the same physical connection? This allows the XAConnection"
 			+ " to support \"XA START ... JOIN\" after \"XA END\" has been called",
 			"5.0.1", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty populateInsertRowWithDefaultValues = new BooleanConnectionProperty(
 			"populateInsertRowWithDefaultValues", false,
 			"When using ResultSets that are CONCUR_UPDATABLE, should the driver pre-poulate " +
@@ -1174,7 +1186,7 @@
 			" If disabled (the default), the default values will be populated by the an internal" +
 			" call to refreshRow() which pulls back default values and/or values changed by triggers.",
 			"5.0.5", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private IntegerConnectionProperty preparedStatementCacheSize = new IntegerConnectionProperty(
 			"prepStmtCacheSize", 25, 0, Integer.MAX_VALUE,
 			"If prepared statement caching is enabled, "
@@ -1190,13 +1202,13 @@
 					+ "what's the largest SQL the driver will cache the parsing for?",
 			"3.0.10", PERFORMANCE_CATEGORY, 11);
 
-	private BooleanConnectionProperty processEscapeCodesForPrepStmts = 
+	private BooleanConnectionProperty processEscapeCodesForPrepStmts =
 		new BooleanConnectionProperty("processEscapeCodesForPrepStmts",
 				true,
 				"Should the driver process escape codes in queries that are prepared?",
 				"3.1.12",
 				MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private StringConnectionProperty profileSql = new StringConnectionProperty(
 			"profileSql",
 			null,
@@ -1263,28 +1275,28 @@
 			"5.0.1",
 			HA_CATEGORY,
 			Integer.MIN_VALUE);
-	
+
 	private IntegerConnectionProperty resultSetSizeThreshold = new IntegerConnectionProperty("resultSetSizeThreshold", 100,
 			"If the usage advisor is enabled, how many rows should a result set contain before the driver warns that it "
 			+ " is suspiciously large?", "5.0.5", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty retainStatementAfterResultSetClose = new BooleanConnectionProperty(
 			"retainStatementAfterResultSetClose",
 			false,
 			"Should the driver retain the Statement reference in a ResultSet after ResultSet.close()"
 					+ " has been called. This is not JDBC-compliant after JDBC-4.0.",
 			"3.1.11", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty rewriteBatchedStatements = new BooleanConnectionProperty(
 			"rewriteBatchedStatements",
-			false, 
+			false,
 			"Should the driver use multiqueries (irregardless of the setting of \"allowMultiQueries\") as well as "
 			+ "rewriting of prepared statements for INSERT and REPLACE into multi-value inserts/replaces when executeBatch() is called? Notice that this has the potential "
 			+ "for SQL injection if using plain java.sql.Statements and your code doesn't sanitize input correctly.\n\n"
-			+ "Notice that if you don't specify stream lengths when using PreparedStatement.set*Stream()," 
-			+ "the driver won't be able to determine the optimium number of parameters per batch and you might receive " 
+			+ "Notice that if you don't specify stream lengths when using PreparedStatement.set*Stream(),"
+			+ "the driver won't be able to determine the optimium number of parameters per batch and you might receive "
 			+ "an error from the driver that the resultant packet is too large.\n\n"
-			+ "Statement.getGeneratedKeys() for these rewritten statements only works when the entire " 
+			+ "Statement.getGeneratedKeys() for these rewritten statements only works when the entire "
 			+ "batch includes INSERT statements.",
 			"3.1.13", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
 
@@ -1340,12 +1352,12 @@
 	private LongConnectionProperty slowQueryThresholdNanos = new LongConnectionProperty(
 			"slowQueryThresholdNanos",
 			0,
-			"If 'useNanosForElapsedTime' is set to true, and this property is set to a non-zero value," 
+			"If 'useNanosForElapsedTime' is set to true, and this property is set to a non-zero value,"
 			+ " the driver will use this threshold (in nanosecond units) to determine if a query was slow.",
 			"5.0.7",
 			DEBUGING_PROFILING_CATEGORY,
 			10);
-	
+
 	private StringConnectionProperty socketFactoryClassName = new StringConnectionProperty(
 			"socketFactory",
 			StandardSocketFactory.class.getName(),
@@ -1384,13 +1396,13 @@
 			Boolean.valueOf(StandardSocketFactory.TCP_NO_DELAY_DEFAULT_VALUE).booleanValue(),
 			"If connecting using TCP/IP, should the driver set SO_TCP_NODELAY (disabling the Nagle Algorithm)?",
 			"5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty tcpKeepAlive = new BooleanConnectionProperty(
 			StandardSocketFactory.TCP_KEEP_ALIVE_PROPERTY_NAME,
 			Boolean.valueOf(StandardSocketFactory.TCP_KEEP_ALIVE_DEFAULT_VALUE).booleanValue(),
 			"If connecting using TCP/IP, should the driver set SO_KEEPALIVE?",
 			"5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private IntegerConnectionProperty tcpRcvBuf = new IntegerConnectionProperty(
 			StandardSocketFactory.TCP_RCV_BUF_PROPERTY_NAME,
 			Integer.parseInt(StandardSocketFactory.TCP_RCV_BUF_DEFAULT_VALUE),
@@ -1398,7 +1410,7 @@
 			"If connecting using TCP/IP, should the driver set SO_RCV_BUF to the given value? "
 			+ "The default value of '0', means use the platform default value for this property)",
 			"5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private IntegerConnectionProperty tcpSndBuf = new IntegerConnectionProperty(
 			StandardSocketFactory.TCP_SND_BUF_PROPERTY_NAME,
 			Integer.parseInt(StandardSocketFactory.TCP_SND_BUF_DEFAULT_VALUE),
@@ -1406,12 +1418,12 @@
 			"If connecting using TCP/IP, shuold the driver set SO_SND_BUF to the given value? "
 			+ "The default value of '0', means use the platform default value for this property)",
 			"5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE);
-			
+
 	private IntegerConnectionProperty tcpTrafficClass = new IntegerConnectionProperty(
 			StandardSocketFactory.TCP_TRAFFIC_CLASS_PROPERTY_NAME,
 			Integer.parseInt(StandardSocketFactory.TCP_TRAFFIC_CLASS_DEFAULT_VALUE),
 			0, 255,
-			"If connecting using TCP/IP, should the driver set traffic class or type-of-service fields ?" + 
+			"If connecting using TCP/IP, should the driver set traffic class or type-of-service fields ?" +
 			" See the documentation for java.net.Socket.setTrafficClass() for more information.",
 			"5.0.7", NETWORK_CATEGORY, Integer.MIN_VALUE);
 
@@ -1431,7 +1443,7 @@
 			"treatUtilDateAsTimestamp", true,
 			"Should the driver treat java.util.Date as a TIMESTAMP for the purposes of PreparedStatement.setObject()?",
 			"5.0.5", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty transformedBitIsBoolean = new BooleanConnectionProperty(
 			"transformedBitIsBoolean",
 			false,
@@ -1458,7 +1470,7 @@
 			"If connected to MySQL > 5.0.2, and setFetchSize() > 0 on a statement, should "
 			+ " that statement use cursor-based fetching to retrieve rows?",
 			"5.0.0", PERFORMANCE_CATEGORY, Integer.MAX_VALUE);
-	
+
 	private BooleanConnectionProperty useDynamicCharsetInfo = new BooleanConnectionProperty(
 			"useDynamicCharsetInfo",
 			true,
@@ -1468,13 +1480,13 @@
 			+ "(this only affects the \"padCharsWithSpace\" configuration property and the "
 			+ "ResultSetMetaData.getColumnDisplayWidth() method)."
 			, "5.0.6", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useFastIntParsing = new BooleanConnectionProperty(
 			"useFastIntParsing",
 			true,
 			"Use internal String->Integer conversion routines to avoid excessive object creation?",
 			"3.1.4", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useFastDateParsing = new BooleanConnectionProperty(
 			"useFastDateParsing",
 			true,
@@ -1489,7 +1501,7 @@
 	private BooleanConnectionProperty useInformationSchema = new BooleanConnectionProperty(
 			"useInformationSchema",
 			false,
-			"When connected to MySQL-5.0.7 or newer, should the driver use the INFORMATION_SCHEMA to " 
+			"When connected to MySQL-5.0.7 or newer, should the driver use the INFORMATION_SCHEMA to "
 			+ " derive information used by DatabaseMetaData?",
 			"5.0.0", MISC_CATEGORY, Integer.MIN_VALUE);
 	private BooleanConnectionProperty useJDBCCompliantTimezoneShift = new BooleanConnectionProperty(
@@ -1500,7 +1512,7 @@
 			"option is exclusive of the \"useTimezone=true\" configuration option.)",
 			"5.0.0",
 			MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useLocalSessionState = new BooleanConnectionProperty(
 			"useLocalSessionState",
 			false,
@@ -1517,7 +1529,7 @@
 			+ "try to use nanoseconds resolution if available (JDK >= 1.5)?",
 			"5.0.7",
 			DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useOldAliasMetadataBehavior = new BooleanConnectionProperty(
 			"useOldAliasMetadataBehavior",
 			true,
@@ -1527,7 +1539,7 @@
 		    "5.0.4",
 		    MISC_CATEGORY,
 		    Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useOldUTF8Behavior = new BooleanConnectionProperty(
 			"useOldUTF8Behavior",
 			false,
@@ -1567,7 +1579,7 @@
 			+ " configuration property \"useJDBCCompliantTimeZoneShift\" set to \"true\", use compatible behavior"
 			+ " when not using server-side prepared statements when sending TIMESTAMP values to the MySQL server.",
 			"5.0.5", MISC_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useStreamLengthsInPrepStmts = new BooleanConnectionProperty(
 			"useStreamLengthsInPrepStmts",
 			true,
@@ -1635,7 +1647,7 @@
 	private BooleanConnectionProperty useJvmCharsetConverters = new BooleanConnectionProperty("useJvmCharsetConverters",
 			false, "Always use the character encoding routines built into the JVM, rather than using "
 			+ "lookup tables for single-byte character sets?", "5.0.1", PERFORMANCE_CATEGORY, Integer.MIN_VALUE);
-	
+
 	private BooleanConnectionProperty useGmtMillisForDatetimes = new BooleanConnectionProperty("useGmtMillisForDatetimes", false, "Convert between session timezone and GMT before creating Date and Timestamp instances (value of \"false\" is legacy behavior, \"true\" leads to more JDBC-compliant behavior.", "3.1.12", MISC_CATEGORY, Integer.MIN_VALUE);
 
 	private BooleanConnectionProperty dumpMetadataOnColumnNotFound = new BooleanConnectionProperty("dumpMetadataOnColumnNotFound", false, "Should the driver dump the field-level metadata of a result set into " + "the exception message when ResultSet.findColumn() fails?", "3.1.13", DEBUGING_PROFILING_CATEGORY, Integer.MIN_VALUE);
@@ -1662,7 +1674,7 @@
 					propToExpose.initializeFrom(info);
 				}
 
-				
+
 				driverProperties[i] = propToExpose.getAsDriverPropertyInfo();
 			} catch (IllegalAccessException iae) {
 				throw SQLError.createSQLException("Internal properties failure",
@@ -1706,7 +1718,7 @@
 
 	/**
 	 * Returns a description of the connection properties as an XML document.
-	 * 
+	 *
 	 * @return the connection properties as an XML document.
 	 * @throws SQLException
 	 *             if an error occurs.
@@ -1745,12 +1757,12 @@
 				.get(CONNECTION_AND_AUTH_CATEGORY);
 		TreeMap userMap = new TreeMap();
 		userMap.put(userProp.getPropertyName(), userProp);
-		
+
 		connectionSortMaps[0].put(new Integer(userProp.getOrder()), userMap);
-		
+
 		TreeMap passwordMap = new TreeMap();
 		passwordMap.put(passwordProp.getPropertyName(), passwordProp);
-		
+
 		connectionSortMaps[0]
 				.put(new Integer(passwordProp.getOrder()), passwordMap);
 
@@ -1768,14 +1780,14 @@
 					sortMaps[1].put(propToGet.getPropertyName(), propToGet);
 				} else {
 					Integer order = new Integer(orderInCategory);
-					
+
 					Map orderMap = (Map)sortMaps[0].get(order);
-					
+
 					if (orderMap == null) {
 						orderMap = new TreeMap();
 						sortMaps[0].put(order, orderMap);
 					}
-					
+
 					orderMap.put(propToGet.getPropertyName(), propToGet);
 				}
 			}
@@ -1792,22 +1804,22 @@
 
 				while (orderedIter.hasNext()) {
 					Iterator orderedAlphaIter = ((Map)orderedIter.next()).values().iterator();
-					
+
 					while (orderedAlphaIter.hasNext()) {
 						ConnectionProperty propToGet = (ConnectionProperty) orderedAlphaIter
 								.next();
-						
+
 						xmlBuf.append("\n  <Property name=\"");
 						xmlBuf.append(propToGet.getPropertyName());
 						xmlBuf.append("\" required=\"");
 						xmlBuf.append(propToGet.required ? "Yes" : "No");
-	
+
 						xmlBuf.append("\" default=\"");
-	
+
 						if (propToGet.getDefaultValue() != null) {
 							xmlBuf.append(propToGet.getDefaultValue());
 						}
-	
+
 						xmlBuf.append("\" sortOrder=\"");
 						xmlBuf.append(propToGet.getOrder());
 						xmlBuf.append("\" since=\"");
@@ -1822,7 +1834,7 @@
 				while (alphaIter.hasNext()) {
 					ConnectionProperty propToGet = (ConnectionProperty) alphaIter
 							.next();
-					
+
 					xmlBuf.append("\n  <Property name=\"");
 					xmlBuf.append(propToGet.getPropertyName());
 					xmlBuf.append("\" required=\"");
@@ -1856,7 +1868,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getAllowLoadLocalInfile() {
@@ -1865,7 +1877,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getAllowMultiQueries() {
@@ -1906,7 +1918,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getAutoReconnectForPools() {
@@ -1922,7 +1934,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns if cacheCallableStatements is enabled
 	 */
 	public boolean getCacheCallableStatements() {
@@ -1931,7 +1943,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the cachePreparedStatements.
 	 */
 	public boolean getCachePreparedStatements() {
@@ -1941,7 +1953,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean getCacheResultSetMetadata() {
@@ -1957,7 +1969,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the callableStatementCacheSize.
 	 */
 	public int getCallableStatementCacheSize() {
@@ -1966,7 +1978,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getCapitalizeTypeNames() {
@@ -1975,7 +1987,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the characterSetResults.
 	 */
 	public String getCharacterSetResults() {
@@ -1984,7 +1996,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the clobberStreamingResults.
 	 */
 	public boolean getClobberStreamingResults() {
@@ -1997,7 +2009,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the connectionCollation.
 	 */
 	public String getConnectionCollation() {
@@ -2006,7 +2018,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getConnectTimeout() {
@@ -2015,7 +2027,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getContinueBatchOnError() {
@@ -2039,7 +2051,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the dumpQueriesOnException.
 	 */
 	public boolean getDumpQueriesOnException() {
@@ -2055,7 +2067,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the elideSetAutoCommits.
 	 */
 	public boolean getElideSetAutoCommits() {
@@ -2068,7 +2080,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getEmulateLocators() {
@@ -2084,7 +2096,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the enablePacketDebug.
 	 */
 	public boolean getEnablePacketDebug() {
@@ -2093,7 +2105,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public String getEncoding() {
@@ -2102,7 +2114,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the explainSlowQueries.
 	 */
 	public boolean getExplainSlowQueries() {
@@ -2111,7 +2123,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the failOverReadOnly.
 	 */
 	public boolean getFailOverReadOnly() {
@@ -2120,7 +2132,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the gatherPerformanceMetrics.
 	 */
 	public boolean getGatherPerformanceMetrics() {
@@ -2129,7 +2141,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	protected boolean getHighAvailability() {
@@ -2145,7 +2157,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getIgnoreNonTxTables() {
@@ -2154,7 +2166,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getInitialTimeout() {
@@ -2163,7 +2175,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getInteractiveClient() {
@@ -2172,7 +2184,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the isInteractiveClient.
 	 */
 	public boolean getIsInteractiveClient() {
@@ -2181,7 +2193,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the jdbcCompliantTruncation.
 	 */
 	public boolean getJdbcCompliantTruncation() {
@@ -2197,7 +2209,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public String getLogger() {
@@ -2206,7 +2218,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the loggerClassName.
 	 */
 	public String getLoggerClassName() {
@@ -2215,7 +2227,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the logSlowQueries.
 	 */
 	public boolean getLogSlowQueries() {
@@ -2228,7 +2240,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the maxQuerySizeToLog.
 	 */
 	public int getMaxQuerySizeToLog() {
@@ -2237,7 +2249,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getMaxReconnects() {
@@ -2246,7 +2258,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getMaxRows() {
@@ -2256,7 +2268,7 @@
 	/**
 	 * Returns the number of queries that metadata can be cached if caching is
 	 * enabled.
-	 * 
+	 *
 	 * @return the number of queries to cache metadata for.
 	 */
 	public int getMetadataCacheSize() {
@@ -2280,7 +2292,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the packetDebugBufferSize.
 	 */
 	public int getPacketDebugBufferSize() {
@@ -2289,7 +2301,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getParanoid() {
@@ -2298,7 +2310,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getPedantic() {
@@ -2307,7 +2319,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the preparedStatementCacheSize.
 	 */
 	public int getPreparedStatementCacheSize() {
@@ -2317,7 +2329,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the preparedStatementCacheSqlLimit.
 	 */
 	public int getPreparedStatementCacheSqlLimit() {
@@ -2327,7 +2339,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getProfileSql() {
@@ -2336,7 +2348,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the profileSQL flag
 	 */
 	public boolean getProfileSQL() {
@@ -2352,7 +2364,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getQueriesBeforeRetryMaster() {
@@ -2361,7 +2373,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getReconnectAtTxEnd() {
@@ -2370,7 +2382,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getRelaxAutoCommit() {
@@ -2379,7 +2391,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the reportMetricsIntervalMillis.
 	 */
 	public int getReportMetricsIntervalMillis() {
@@ -2388,7 +2400,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getRequireSSL() {
@@ -2408,7 +2420,7 @@
 
 	/**
 	 * Returns whether or not hosts will be picked in a round-robin fashion.
-	 * 
+	 *
 	 * @return Returns the roundRobinLoadBalance property.
 	 */
 	public boolean getRoundRobinLoadBalance() {
@@ -2424,7 +2436,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getSecondsBeforeRetryMaster() {
@@ -2433,7 +2445,7 @@
 
 	/**
 	 * Returns the 'serverTimezone' property.
-	 * 
+	 *
 	 * @return the configured server timezone property.
 	 */
 	public String getServerTimezone() {
@@ -2449,7 +2461,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the slowQueryThresholdMillis.
 	 */
 	public int getSlowQueryThresholdMillis() {
@@ -2458,7 +2470,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public String getSocketFactoryClassName() {
@@ -2467,7 +2479,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public int getSocketTimeout() {
@@ -2476,7 +2488,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getStrictFloatingPoint() {
@@ -2485,7 +2497,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getStrictUpdates() {
@@ -2501,7 +2513,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the logProtocol.
 	 */
 	public boolean getTraceProtocol() {
@@ -2514,7 +2526,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseCompression() {
@@ -2530,7 +2542,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseHostsInPrivileges() {
@@ -2571,7 +2583,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseServerPreparedStmts() {
@@ -2580,7 +2592,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the useSqlStateCodes state.
 	 */
 	public boolean getUseSqlStateCodes() {
@@ -2589,7 +2601,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseSSL() {
@@ -2598,7 +2610,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseStreamLengthsInPrepStmts() {
@@ -2607,7 +2619,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseTimezone() {
@@ -2616,7 +2628,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseUltraDevWorkAround() {
@@ -2625,7 +2637,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the useUnbufferedInput.
 	 */
 	public boolean getUseUnbufferedInput() {
@@ -2634,7 +2646,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return
 	 */
 	public boolean getUseUnicode() {
@@ -2643,7 +2655,7 @@
 
 	/**
 	 * Returns whether or not the driver advises of proper usage.
-	 * 
+	 *
 	 * @return the value of useUsageAdvisor
 	 */
 	public boolean getUseUsageAdvisor() {
@@ -2665,7 +2677,7 @@
 	 * 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
@@ -2697,7 +2709,7 @@
 	/**
 	 * Initializes driver properties that come from URL or properties passed to
 	 * the driver manager.
-	 * 
+	 *
 	 * @param info
 	 *            DOCUMENT ME!
 	 * @throws SQLException
@@ -2827,7 +2839,7 @@
 		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
@@ -2837,7 +2849,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setAllowLoadLocalInfile(boolean property) {
@@ -2846,7 +2858,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setAllowMultiQueries(boolean property) {
@@ -2893,7 +2905,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The autoReconnect to set.
 	 */
@@ -2903,7 +2915,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setAutoReconnectForConnectionPools(boolean property) {
@@ -2914,7 +2926,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The autoReconnectForPools to set.
 	 */
@@ -2932,7 +2944,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The cacheCallableStatements to set.
 	 */
@@ -2942,7 +2954,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The cachePreparedStatements to set.
 	 */
@@ -2952,7 +2964,7 @@
 
 	/**
 	 * Sets whether or not we should cache result set metadata.
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setCacheResultSetMetadata(boolean property) {
@@ -2972,7 +2984,7 @@
 	/**
 	 * Configures the number of callable statements to cache. (this is
 	 * configurable during the life of the connection).
-	 * 
+	 *
 	 * @param size
 	 *            The callableStatementCacheSize to set.
 	 */
@@ -2982,7 +2994,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setCapitalizeDBMDTypes(boolean property) {
@@ -2991,7 +3003,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The capitalizeTypeNames to set.
 	 */
@@ -3001,7 +3013,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param encoding
 	 *            The characterEncoding to set.
 	 */
@@ -3011,7 +3023,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param characterSet
 	 *            The characterSetResults to set.
 	 */
@@ -3021,7 +3033,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The clobberStreamingResults to set.
 	 */
@@ -3035,7 +3047,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param collation
 	 *            The connectionCollation to set.
 	 */
@@ -3045,7 +3057,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param timeoutMs
 	 */
 	public void setConnectTimeout(int timeoutMs) {
@@ -3054,7 +3066,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setContinueBatchOnError(boolean property) {
@@ -3071,7 +3083,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setDetectServerPreparedStmts(boolean property) {
@@ -3088,7 +3100,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The dumpQueriesOnException to set.
 	 */
@@ -3106,7 +3118,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The elideSetAutoCommits to set.
 	 */
@@ -3120,7 +3132,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setEmulateLocators(boolean property) {
@@ -3137,7 +3149,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The enablePacketDebug to set.
 	 */
@@ -3147,7 +3159,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setEncoding(String property) {
@@ -3158,7 +3170,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The explainSlowQueries to set.
 	 */
@@ -3168,7 +3180,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The failOverReadOnly to set.
 	 */
@@ -3178,7 +3190,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The gatherPerformanceMetrics to set.
 	 */
@@ -3188,7 +3200,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	protected void setHighAvailability(boolean property) {
@@ -3206,7 +3218,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setIgnoreNonTxTables(boolean property) {
@@ -3215,7 +3227,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setInitialTimeout(int property) {
@@ -3224,7 +3236,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setIsInteractiveClient(boolean property) {
@@ -3233,7 +3245,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The jdbcCompliantTruncation to set.
 	 */
@@ -3251,7 +3263,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setLogger(String property) {
@@ -3260,7 +3272,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param className
 	 *            The loggerClassName to set.
 	 */
@@ -3270,7 +3282,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The logSlowQueries to set.
 	 */
@@ -3286,7 +3298,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param sizeInBytes
 	 *            The maxQuerySizeToLog to set.
 	 */
@@ -3296,7 +3308,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setMaxReconnects(int property) {
@@ -3305,7 +3317,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setMaxRows(int property) {
@@ -3316,7 +3328,7 @@
 	/**
 	 * Sets the number of queries that metadata can be cached if caching is
 	 * enabled.
-	 * 
+	 *
 	 * @param value
 	 *            the number of queries to cache metadata for.
 	 */
@@ -3342,7 +3354,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param size
 	 *            The packetDebugBufferSize to set.
 	 */
@@ -3352,7 +3364,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setParanoid(boolean property) {
@@ -3361,7 +3373,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setPedantic(boolean property) {
@@ -3370,7 +3382,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param cacheSize
 	 *            The preparedStatementCacheSize to set.
 	 */
@@ -3380,7 +3392,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param cacheSqlLimit
 	 *            The preparedStatementCacheSqlLimit to set.
 	 */
@@ -3390,7 +3402,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setProfileSql(boolean property) {
@@ -3400,7 +3412,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The profileSQL to set.
 	 */
@@ -3418,7 +3430,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setQueriesBeforeRetryMaster(int property) {
@@ -3427,7 +3439,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setReconnectAtTxEnd(boolean property) {
@@ -3438,7 +3450,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setRelaxAutoCommit(boolean property) {
@@ -3447,7 +3459,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param millis
 	 *            The reportMetricsIntervalMillis to set.
 	 */
@@ -3457,7 +3469,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setRequireSSL(boolean property) {
@@ -3478,7 +3490,7 @@
 
 	/**
 	 * Sets whether or not hosts will be picked in a round-robin fashion.
-	 * 
+	 *
 	 * @param flag
 	 *            The roundRobinLoadBalance property to set.
 	 */
@@ -3496,7 +3508,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setSecondsBeforeRetryMaster(int property) {
@@ -3505,7 +3517,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 *            DOCUMENT ME!
 	 */
@@ -3523,7 +3535,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param millis
 	 *            The slowQueryThresholdMillis to set.
 	 */
@@ -3533,7 +3545,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setSocketFactoryClassName(String property) {
@@ -3542,7 +3554,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setSocketTimeout(int property) {
@@ -3551,7 +3563,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setStrictFloatingPoint(boolean property) {
@@ -3560,7 +3572,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setStrictUpdates(boolean property) {
@@ -3577,7 +3589,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The logProtocol to set.
 	 */
@@ -3591,7 +3603,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseCompression(boolean property) {
@@ -3608,7 +3620,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseHostsInPrivileges(boolean property) {
@@ -3655,7 +3667,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The detectServerPreparedStmts to set.
 	 */
@@ -3665,7 +3677,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The useSqlStateCodes to set.
 	 */
@@ -3675,7 +3687,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseSSL(boolean property) {
@@ -3684,7 +3696,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseStreamLengthsInPrepStmts(boolean property) {
@@ -3693,7 +3705,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseTimezone(boolean property) {
@@ -3702,7 +3714,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param property
 	 */
 	public void setUseUltraDevWorkAround(boolean property) {
@@ -3711,7 +3723,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The useUnbufferedInput to set.
 	 */
@@ -3721,7 +3733,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param flag
 	 *            The useUnicode to set.
 	 */
@@ -3732,7 +3744,7 @@
 
 	/**
 	 * Sets whether or not the driver advises of proper usage.
-	 * 
+	 *
 	 * @param useUsageAdvisorFlag
 	 *            whether or not the driver advises of proper usage.
 	 */
@@ -3776,7 +3788,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return Returns the useUnbufferedInput.
 	 */
 	public boolean useUnbufferedInput() {
@@ -3796,9 +3808,9 @@
 	}
 
 	public void setOverrideSupportsIntegrityEnhancementFacility(boolean flag) {
-		this.overrideSupportsIntegrityEnhancementFacility.setValue(flag);	
+		this.overrideSupportsIntegrityEnhancementFacility.setValue(flag);
 	}
-	
+
 	public boolean getNoTimezoneConversionForTimeType() {
 		return this.noTimezoneConversionForTimeType.getValueAsBoolean();
 	}
@@ -3814,7 +3826,7 @@
 	public void setUseJDBCCompliantTimezoneShift(boolean flag) {
 		this.useJDBCCompliantTimezoneShift.setValue(flag);
 	}
-	
+
 	public boolean getAutoClosePStmtStreams() {
 		return this.autoClosePStmtStreams.getValueAsBoolean();
 	}
@@ -3838,7 +3850,7 @@
 	public void setUseGmtMillisForDatetimes(boolean flag) {
 		this.useGmtMillisForDatetimes.setValue(flag);
 	}
-	
+
 	public boolean getDumpMetadataOnColumnNotFound() {
 		return this.dumpMetadataOnColumnNotFound.getValueAsBoolean();
 	}
@@ -3854,7 +3866,7 @@
 	public void setResourceId(String resourceId) {
 		this.resourceId.setValue(resourceId);
 	}
-	
+
 	public boolean getRewriteBatchedStatements() {
 		return this.rewriteBatchedStatements.getValueAsBoolean();
 	}
@@ -3862,7 +3874,7 @@
 	public void setRewriteBatchedStatements(boolean flag) {
 		this.rewriteBatchedStatements.setValue(flag);
 	}
-	
+
 	public boolean getJdbcCompliantTruncationForReads() {
 		return this.jdbcCompliantTruncationForReads;
 	}
@@ -3887,40 +3899,40 @@
 	public void setPinGlobalTxToPhysicalConnection(boolean flag) {
 		this.pinGlobalTxToPhysicalConnection.setValue(flag);
 	}
-	
+
 	/*
-	 * "Aliases" which match the property names to make using 
+	 * "Aliases" which match the property names to make using
 	 * from datasources easier.
 	 */
 
 	public void setGatherPerfMetrics(boolean flag) {
 		setGatherPerformanceMetrics(flag);
 	}
-	
+
 	public boolean getGatherPerfMetrics() {
 		return getGatherPerformanceMetrics();
 	}
-	
+
 	public void setUltraDevHack(boolean flag) {
 		setUseUltraDevWorkAround(flag);
 	}
-	
+
 	public boolean getUltraDevHack() {
 		return getUseUltraDevWorkAround();
 	}
-	
+
 	public void setInteractiveClient(boolean property) {
 		setIsInteractiveClient(property);
 	}
-	
+
 	public void setSocketFactory(String name) {
 		setSocketFactoryClassName(name);
 	}
-	
+
 	public String getSocketFactory() {
 		return getSocketFactoryClassName();
 	}
-	
+
 	public void setUseServerPrepStmts(boolean flag) {
 		setUseServerPreparedStmts(flag);
 	}
@@ -4016,15 +4028,15 @@
 	public void setLocalSocketAddress(String address) {
 		this.localSocketAddress.setValue(address);
 	}
-	
+
 	public void setUseConfigs(String configs) {
 		this.useConfigs.setValue(configs);
 	}
-	
+
 	public String getUseConfigs() {
 		return this.useConfigs.getValueAsString();
 	}
-	
+
 	public boolean getGenerateSimpleParameterMetadata() {
 		return this.generateSimpleParameterMetadata.getValueAsBoolean();
 	}
@@ -4064,7 +4076,7 @@
 	public void setPadCharsWithSpace(boolean flag) {
 		this.padCharsWithSpace.setValue(flag);
 	}
-	
+
 	public boolean getUseDynamicCharsetInfo() {
 		return this.useDynamicCharsetInfo.getValueAsBoolean();
 	}
@@ -4088,7 +4100,7 @@
 	public void setLoadBalanceStrategy(String strategy) {
 		this.loadBalanceStrategy.setValue(strategy);
 	}
-	
+
 	public boolean getUseNanosForElapsedTime() {
 		return this.useNanosForElapsedTime.getValueAsBoolean();
 	}
@@ -4104,7 +4116,7 @@
 	public void setSlowQueryThresholdNanos(long nanos) {
 		this.slowQueryThresholdNanos.setValue(nanos);
 	}
-	
+
 	public boolean getTcpNoDelay() {
 		return this.tcpNoDelay.getValueAsBoolean();
 	}
@@ -4152,4 +4164,20 @@
 	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);
+    }
+
+    protected boolean getFunctionsNeverReturnBlobs() {
+        return this.functionsNeverReturnBlobs.getValueAsBoolean();
+    }
+
+    protected void setFunctionsNeverReturnBlobs(boolean flag) {
+        this.functionsNeverReturnBlobs.setValue(flag);
+    }
 }

Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java	2007-08-29 16:27:40 UTC (rev 6520)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java	2007-08-29 16:36:56 UTC (rev 6521)
@@ -2,12 +2,12 @@
  Copyright (C) 2002-2004 MySQL AB
 
  This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as 
+ it under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.
 
- There are special exceptions to the terms and conditions of the GPL 
- as it is applied to this software. View the full text of the 
- exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
+ There are special exceptions to the terms and conditions of the GPL
+ as it is applied to this software. View the full text of the
+ exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
  software distribution.
 
  This program is distributed in the hope that it will be useful,
@@ -30,7 +30,7 @@
 
 /**
  * Field is a class used to describe fields in a ResultSet
- * 
+ *
  * @author Mark Matthews
  * @version $Id$
  */
@@ -105,7 +105,7 @@
 	private int tableNameLength;
 
 	private int tableNameStart;
-	
+
 	private boolean useOldNameMetadata = false;
 
 	private boolean isSingleBit;
@@ -150,14 +150,21 @@
 		// charset
 		this.charsetIndex = charsetIndex;
 
-		
+
 		// Map MySqlTypes to java.sql Types
 		this.sqlType = MysqlDefs.mysqlToJavaType(this.mysqlType);
-		
+
+        checkForImplicitTemporaryTable();
 		// Re-map to 'real' blob type, if we're a BLOB
 
 		if (this.mysqlType == MysqlDefs.FIELD_TYPE_BLOB) {
-			if (this.charsetIndex == 63 || 
+		    boolean isFromFunction = this.originalTableNameLength == 0;
+
+		    if (this.connection != null && this.connection.getBlobsAreStrings() ||
+		            (this.connection.getFunctionsNeverReturnBlobs() && isFromFunction)) {
+		        this.sqlType = Types.VARCHAR;
+		        this.mysqlType = MysqlDefs.FIELD_TYPE_VARCHAR;
+		    } else if (this.charsetIndex == 63 ||
 					!this.connection.versionMeetsMinimum(4, 1, 0)) {
 				setBlobTypeBasedOnLength();
 				this.sqlType = MysqlDefs.mysqlToJavaType(this.mysqlType);
@@ -180,28 +187,28 @@
 			}
 
 		}
-		
+
 		if (!isNativeNumericType() && !isNativeDateTimeType()) {
 			this.charsetName = this.connection
 				.getCharsetNameForIndex(this.charsetIndex);
 
-			
+
 			// Handle VARBINARY/BINARY (server doesn't have a different type
 			// for this
-	
+
 			boolean isBinary = isBinary();
-	
+
 			if (this.connection.versionMeetsMinimum(4, 1, 0) &&
-					this.mysqlType == MysqlDefs.FIELD_TYPE_VAR_STRING && 
+					this.mysqlType == MysqlDefs.FIELD_TYPE_VAR_STRING &&
 					isBinary &&
 					this.charsetIndex == 63) {
 				if (this.isOpaqueBinary()) {
 					this.sqlType = Types.VARBINARY;
 				}
-			} 
-			
+			}
+
 			if (this.connection.versionMeetsMinimum(4, 1, 0) &&
-					this.mysqlType == MysqlDefs.FIELD_TYPE_STRING && 
+					this.mysqlType == MysqlDefs.FIELD_TYPE_STRING &&
 					isBinary && this.charsetIndex == 63) {
 				//
 				// Okay, this is a hack, but there's currently no way
@@ -209,22 +216,22 @@
 				// from the "BINARY" column type, other than looking
 				// at the original column name.
 				//
-				
-				if (isOpaqueBinary()) {
+
+				if (isOpaqueBinary() && !this.connection.getBlobsAreStrings()) {
 					this.sqlType = Types.BINARY;
 				}
 			}
-	
-			
-	
+
+
+
 			if (this.mysqlType == MysqlDefs.FIELD_TYPE_BIT) {
 				this.isSingleBit = (this.length == 0);
-				
+
 				if (this.connection != null && (this.connection.versionMeetsMinimum(5, 0, 21) ||
 						this.connection.versionMeetsMinimum(5, 1, 10)) && this.length == 1) {
 					this.isSingleBit = true;
 				}
-				
+
 				if (this.isSingleBit) {
 					this.sqlType = Types.BIT;
 				} else {
@@ -234,7 +241,7 @@
 					isBinary = true;
 				}
 			}
-	
+
 			//
 			// Handle TEXT type (special case), Fix proposed by Peter McKeown
 			//
@@ -243,8 +250,6 @@
 			} else if ((this.sqlType == java.sql.Types.VARBINARY) && !isBinary) {
 				this.sqlType = java.sql.Types.VARCHAR;
 			}
-			
-			checkForImplicitTemporaryTable();
 		} else {
 			this.charsetName = "US-ASCII";
 		}
@@ -310,7 +315,7 @@
 
 	/**
 	 * Returns the character set (if known) for this field.
-	 * 
+	 *
 	 * @return the character set
 	 */
 	public String getCharacterSet() throws SQLException {
@@ -324,17 +329,17 @@
 					if (this.connection.getUseDynamicCharsetInfo()) {
 						java.sql.DatabaseMetaData dbmd = this.connection
 								.getMetaData();
-	
+
 						String quotedIdStr = dbmd.getIdentifierQuoteString();
-	
+
 						if (" ".equals(quotedIdStr)) { //$NON-NLS-1$
 							quotedIdStr = ""; //$NON-NLS-1$
 						}
-	
+
 						String csCatalogName = getDatabaseName();
 						String csTableName = getOriginalTableName();
 						String csColumnName = getOriginalName();
-	
+
 						if (csCatalogName != null && csCatalogName.length() != 0
 								&& csTableName != null && csTableName.length() != 0
 								&& csColumnName != null
@@ -350,22 +355,22 @@
 							queryBuf.append(quotedIdStr);
 							queryBuf.append(csTableName);
 							queryBuf.append(quotedIdStr);
-	
+
 							java.sql.Statement collationStmt = null;
 							java.sql.ResultSet collationRs = null;
-	
+
 							try {
 								collationStmt = this.connection.createStatement();
-	
+
 								collationRs = collationStmt.executeQuery(queryBuf
 										.toString());
-	
+
 								while (collationRs.next()) {
 									if (csColumnName.equals(collationRs
 											.getString("Field"))) { //$NON-NLS-1$
 										this.collationName = collationRs
 												.getString("Collation"); //$NON-NLS-1$
-	
+
 										break;
 									}
 								}
@@ -374,7 +379,7 @@
 									collationRs.close();
 									collationRs = null;
 								}
-	
+
 								if (collationStmt != null) {
 									collationStmt.close();
 									collationStmt = null;
@@ -397,7 +402,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getDatabaseName() throws SQLException {
@@ -416,7 +421,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getFullName() throws SQLException {
@@ -437,7 +442,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getFullOriginalName() throws SQLException {
@@ -465,7 +470,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public long getLength() {
@@ -476,13 +481,13 @@
 		if (this.maxBytesPerChar == 0) {
 			this.maxBytesPerChar = this.connection.getMaxBytesPerChar(getCharacterSet());
 		}
-		
+
 		return this.maxBytesPerChar;
 	}
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public int getMysqlType() {
@@ -491,7 +496,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getName() throws SQLException {
@@ -506,18 +511,18 @@
 		if (this.useOldNameMetadata) {
 			return getName();
 		}
-		
-		if (this.connection != null && 
+
+		if (this.connection != null &&
 				this.connection.versionMeetsMinimum(4, 1, 0)) {
 			return getOriginalName();
 		}
-		
+
 		return getName();
 	}
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getOriginalName() throws SQLException {
@@ -533,7 +538,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getOriginalTableName() throws SQLException {
@@ -550,9 +555,9 @@
 	/**
 	 * Returns amount of correction that should be applied to the precision
 	 * value.
-	 * 
+	 *
 	 * Different versions of MySQL report different precision values.
-	 * 
+	 *
 	 * @return the amount to adjust precision value by.
 	 */
 	public int getPrecisionAdjustFactor() {
@@ -561,7 +566,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public int getSQLType() {
@@ -639,7 +644,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getTable() throws SQLException {
@@ -648,7 +653,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public String getTableName() throws SQLException {
@@ -664,13 +669,13 @@
 		if (this.connection.versionMeetsMinimum(4, 1, 0)) {
 			return getOriginalTableName();
 		}
-			
+
 		return getTableName(); // pre-4.1, no aliases returned
 	}
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isAutoIncrement() {
@@ -679,7 +684,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isBinary() {
@@ -688,7 +693,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isBlob() {
@@ -697,7 +702,7 @@
 
 	/**
 	 * Is this field owned by a server-created temporary table?
-	 * 
+	 *
 	 * @return
 	 */
 	private boolean isImplicitTemporaryTable() {
@@ -706,7 +711,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isMultipleKey() {
@@ -745,7 +750,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isPrimaryKey() {
@@ -754,7 +759,7 @@
 
 	/**
 	 * Is this field _definitely_ not writable?
-	 * 
+	 *
 	 * @return true if this field can not be written to in an INSERT/UPDATE
 	 *         statement.
 	 */
@@ -772,7 +777,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isUniqueKey() {
@@ -781,7 +786,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isUnsigned() {
@@ -790,7 +795,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @return DOCUMENT ME!
 	 */
 	public boolean isZeroFill() {
@@ -813,14 +818,14 @@
 			this.mysqlType = MysqlDefs.FIELD_TYPE_LONG_BLOB;
 		}
 	}
-	
+
 	private boolean isNativeNumericType() {
-		return ((this.mysqlType >= MysqlDefs.FIELD_TYPE_TINY && 
+		return ((this.mysqlType >= MysqlDefs.FIELD_TYPE_TINY &&
 					this.mysqlType <= MysqlDefs.FIELD_TYPE_DOUBLE) ||
 					this.mysqlType == MysqlDefs.FIELD_TYPE_LONGLONG ||
 					this.mysqlType == MysqlDefs.FIELD_TYPE_YEAR);
 	}
-	
+
 	private boolean isNativeDateTimeType() {
 		return (this.mysqlType == MysqlDefs.FIELD_TYPE_DATE ||
 				this.mysqlType == MysqlDefs.FIELD_TYPE_NEWDATE ||
@@ -831,7 +836,7 @@
 
 	/**
 	 * DOCUMENT ME!
-	 * 
+	 *
 	 * @param conn
 	 *            DOCUMENT ME!
 	 */

Thread
Connector/J commit: r6521 - in branches/branch_5_0/connector-j: . src/com/mysql/jdbcmmatthews29 Aug