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/jdbc | mmatthews | 29 Aug |