Modified:
branches/branch_3_1/connector-j/src/com/mysql/jdbc/Connection.java
Log:
Push truncation checks on writes to server if possible (works only for MySQL-5.0, but more performant).
Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/Connection.java
===================================================================
--- branches/branch_3_1/connector-j/src/com/mysql/jdbc/Connection.java 2006-05-30 19:29:25 UTC (rev 5321)
+++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/Connection.java 2006-05-30 19:31:01 UTC (rev 5322)
@@ -1787,6 +1787,8 @@
if (versionMeetsMinimum(4, 1, 0)) {
configureClientCharacterSet();
}
+
+ setupServerForTruncationChecks();
}
private void checkAndCreatePerformanceHistogram() {
@@ -3888,8 +3890,44 @@
setAllowMultiQueries(false);
}
}
+
+ //
+ // Server can do this more efficiently for us
+ //
+
+ setupServerForTruncationChecks();
}
+ private void setupServerForTruncationChecks() throws SQLException {
+ if (getJdbcCompliantTruncation()) {
+ if (versionMeetsMinimum(5, 0, 2)) {
+ String currentSqlMode =
+ (String)this.serverVariables.get("sql_mode");
+
+ if (currentSqlMode == null ||
+ currentSqlMode.length() == 0 ||
+ StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") == -1) {
+ StringBuffer commandBuf = new StringBuffer("SET sql_mode='");
+
+ if (currentSqlMode != null && currentSqlMode.length() > 0) {
+ commandBuf.append(currentSqlMode);
+ commandBuf.append(",");
+ }
+
+ commandBuf.append("STRICT_TRANS_TABLES'");
+
+ execSQL(null, commandBuf.toString(), -1, null,
+ java.sql.ResultSet.TYPE_FORWARD_ONLY,
+ java.sql.ResultSet.CONCUR_READ_ONLY, false, false,
+ this.database, true, Statement.USES_VARIABLES_FALSE, false);
+
+ setJdbcCompliantTruncation(false); // server's handling this for us now
+ setJdbcCompliantTruncationForReads(true);
+ }
+ }
+ }
+ }
+
protected boolean isClientTzUTC() {
return this.isClientTzUTC;
}
| Thread |
|---|
| • Connector/J commit: r5322 - branches/branch_3_1/connector-j/src/com/mysql/jdbc | mmatthews | 30 May |