Modified:
branches/branch_3_1/connector-j/CHANGES
branches/branch_3_1/connector-j/src/com/mysql/jdbc/MysqlIO.java
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
branches/branch_5_0/connector-j/CHANGES
branches/branch_5_0/connector-j/src/com/mysql/jdbc/MysqlIO.java
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
branches/branch_5_1/connector-j/CHANGES
branches/branch_5_1/connector-j/src/com/mysql/jdbc/MysqlIO.java
branches/branch_5_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
Log:
Fixed BUG#18554 - Aliased column names where length of name > 251 are corrupted.
Modified: branches/branch_3_1/connector-j/CHANGES
===================================================================
--- branches/branch_3_1/connector-j/CHANGES 2006-04-03 17:44:51 UTC (rev 5123)
+++ branches/branch_3_1/connector-j/CHANGES 2006-04-03 18:22:07 UTC (rev 5124)
@@ -81,7 +81,15 @@
- Fixed BUG#18740 - Data truncation and getWarnings() only returns last
warning in set.
-
+
+ - Improved performance of retrieving BigDecimal, Time, Timestamp and Date
+ values from server-side prepared statements by creating fewer short-lived
+ instances of Strings when the native type is not an exact match for
+ the requested type.
+
+ - Fixed BUG#18554 - Aliased column names where length of name > 251
+ are corrupted.
+
11-30-05 - Version 3.1.12
- Fixed client-side prepared statement bug with embedded ? inside
Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/MysqlIO.java
===================================================================
--- branches/branch_3_1/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 17:44:51
UTC (rev 5123)
+++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 18:22:07
UTC (rev 5124)
@@ -582,25 +582,32 @@
// Not used yet, 5.0?
int catalogNameStart = packet.getPosition() + 1;
int catalogNameLength = packet.fastSkipLenString();
+ catalogNameStart = adjustStartForFieldLength(catalogNameStart,
catalogNameLength);
}
int databaseNameStart = packet.getPosition() + 1;
int databaseNameLength = packet.fastSkipLenString();
+ databaseNameStart = adjustStartForFieldLength(databaseNameStart,
databaseNameLength);
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
-
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
// orgTableName is never used so skip
int originalTableNameStart = packet.getPosition() + 1;
int originalTableNameLength = packet.fastSkipLenString();
+ originalTableNameStart = adjustStartForFieldLength(originalTableNameStart,
originalTableNameLength);
// we only store the position again...
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
// orgColName is not required so skip...
int originalColumnNameStart = packet.getPosition() + 1;
int originalColumnNameLength = packet.fastSkipLenString();
+ originalColumnNameStart = adjustStartForFieldLength(originalColumnNameStart,
originalColumnNameLength);
packet.readByte();
@@ -647,8 +654,12 @@
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
+
int colLength = packet.readnBytes();
int colType = packet.readnBytes();
packet.readByte(); // We know it's currently 2
@@ -674,7 +685,23 @@
return field;
}
- protected boolean isSetNeededForAutoCommitMode(boolean autoCommitFlag) {
+ private int adjustStartForFieldLength(int nameStart, int nameLength) {
+ if (nameLength < 251) {
+ return nameStart;
+ }
+
+ if (nameLength >= 251 && nameLength < 65536) {
+ return nameStart + 2;
+ }
+
+ if (nameLength >= 65536 && nameLength < 16777216) {
+ return nameStart + 3;
+ }
+
+ return nameStart + 8;
+ }
+
+ protected boolean isSetNeededForAutoCommitMode(boolean autoCommitFlag) {
if (this.use41Extensions && this.connection.getElideSetAutoCommits()) {
boolean autoCommitModeOnServer = ((this.serverStatus &
SERVER_STATUS_AUTOCOMMIT) != 0);
Modified:
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
17:44:51 UTC (rev 5123)
+++
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
18:22:07 UTC (rev 5124)
@@ -1438,6 +1438,39 @@
}
}
+
+ /**
+ * Tests fix for BUG#18554 - Aliased column names where
+ * length of name > 251 are corrupted.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug18554() throws Exception {
+ testBug18554(249);
+ testBug18554(250);
+ testBug18554(251);
+ testBug18554(252);
+ testBug18554(253);
+ testBug18554(254);
+ testBug18554(255);
+ }
+
+ private void testBug18554(int columnNameLength) throws Exception {
+ StringBuffer buf = new StringBuffer(columnNameLength + 2);
+
+ for (int i = 0; i < columnNameLength; i++) {
+ buf.append((char)((Math.random() * 26) + 65));
+ }
+
+
+ String colName = buf.toString();
+ this.rs = this.stmt.executeQuery("select curtime() as `" + colName + "`");
+ ResultSetMetaData meta = this.rs.getMetaData();
+
+ assertEquals(colName, meta.getColumnName(1));
+
+ }
+
private void checkRsmdForBug13277(ResultSetMetaData rsmd) throws SQLException {
assertEquals(17, rsmd.getColumnDisplaySize(1));
Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES 2006-04-03 17:44:51 UTC (rev 5123)
+++ branches/branch_5_0/connector-j/CHANGES 2006-04-03 18:22:07 UTC (rev 5124)
@@ -184,6 +184,14 @@
- Fixed BUG#18740 - Data truncation and getWarnings() only returns last
warning in set.
+
+ - Improved performance of retrieving BigDecimal, Time, Timestamp and Date
+ values from server-side prepared statements by creating fewer short-lived
+ instances of Strings when the native type is not an exact match for
+ the requested type.
+
+ - Fixed BUG#18554 - Aliased column names where length of name > 251
+ are corrupted.
11-30-05 - Version 3.1.12
Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/MysqlIO.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 17:44:51
UTC (rev 5123)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 18:22:07
UTC (rev 5124)
@@ -597,25 +597,32 @@
// Not used yet, 5.0?
int catalogNameStart = packet.getPosition() + 1;
int catalogNameLength = packet.fastSkipLenString();
+ catalogNameStart = adjustStartForFieldLength(catalogNameStart,
catalogNameLength);
}
int databaseNameStart = packet.getPosition() + 1;
int databaseNameLength = packet.fastSkipLenString();
+ databaseNameStart = adjustStartForFieldLength(databaseNameStart,
databaseNameLength);
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
-
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
// orgTableName is never used so skip
int originalTableNameStart = packet.getPosition() + 1;
int originalTableNameLength = packet.fastSkipLenString();
+ originalTableNameStart = adjustStartForFieldLength(originalTableNameStart,
originalTableNameLength);
// we only store the position again...
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
// orgColName is not required so skip...
int originalColumnNameStart = packet.getPosition() + 1;
int originalColumnNameLength = packet.fastSkipLenString();
+ originalColumnNameStart = adjustStartForFieldLength(originalColumnNameStart,
originalColumnNameLength);
packet.readByte();
@@ -662,8 +669,12 @@
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
+
int colLength = packet.readnBytes();
int colType = packet.readnBytes();
packet.readByte(); // We know it's currently 2
@@ -689,6 +700,22 @@
return field;
}
+ private int adjustStartForFieldLength(int nameStart, int nameLength) {
+ if (nameLength < 251) {
+ return nameStart;
+ }
+
+ if (nameLength >= 251 && nameLength < 65536) {
+ return nameStart + 2;
+ }
+
+ if (nameLength >= 65536 && nameLength < 16777216) {
+ return nameStart + 3;
+ }
+
+ return nameStart + 8;
+ }
+
protected boolean isSetNeededForAutoCommitMode(boolean autoCommitFlag) {
if (this.use41Extensions && this.connection.getElideSetAutoCommits()) {
boolean autoCommitModeOnServer = ((this.serverStatus &
Modified:
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
17:44:51 UTC (rev 5123)
+++
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
18:22:07 UTC (rev 5124)
@@ -1471,4 +1471,36 @@
}
}
+
+ /**
+ * Tests fix for BUG#18554 - Aliased column names where
+ * length of name > 251 are corrupted.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug18554() throws Exception {
+ testBug18554(249);
+ testBug18554(250);
+ testBug18554(251);
+ testBug18554(252);
+ testBug18554(253);
+ testBug18554(254);
+ testBug18554(255);
+ }
+
+ private void testBug18554(int columnNameLength) throws Exception {
+ StringBuffer buf = new StringBuffer(columnNameLength + 2);
+
+ for (int i = 0; i < columnNameLength; i++) {
+ buf.append((char)((Math.random() * 26) + 65));
+ }
+
+
+ String colName = buf.toString();
+ this.rs = this.stmt.executeQuery("select curtime() as `" + colName + "`");
+ ResultSetMetaData meta = this.rs.getMetaData();
+
+ assertEquals(colName, meta.getColumnName(1));
+
+ }
}
Modified: branches/branch_5_1/connector-j/CHANGES
===================================================================
--- branches/branch_5_1/connector-j/CHANGES 2006-04-03 17:44:51 UTC (rev 5123)
+++ branches/branch_5_1/connector-j/CHANGES 2006-04-03 18:22:07 UTC (rev 5124)
@@ -186,7 +186,15 @@
- Fixed BUG#18740 - Data truncation and getWarnings() only returns last
warning in set.
+
+ - Improved performance of retrieving BigDecimal, Time, Timestamp and Date
+ values from server-side prepared statements by creating fewer short-lived
+ instances of Strings when the native type is not an exact match for
+ the requested type.
+ - Fixed BUG#18554 - Aliased column names where length of name > 251
+ are corrupted.
+
11-30-05 - Version 3.1.12
- Fixed client-side prepared statement bug with embedded ? inside
Modified: branches/branch_5_1/connector-j/src/com/mysql/jdbc/MysqlIO.java
===================================================================
--- branches/branch_5_1/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 17:44:51
UTC (rev 5123)
+++ branches/branch_5_1/connector-j/src/com/mysql/jdbc/MysqlIO.java 2006-04-03 18:22:07
UTC (rev 5124)
@@ -3373,7 +3373,7 @@
return unpackedRowData;
}
- /**
+ /**
* Unpacks the Field information from the given packet. Understands pre 4.1
* and post 4.1 server version field packet structures.
*
@@ -3393,25 +3393,32 @@
// Not used yet, 5.0?
int catalogNameStart = packet.getPosition() + 1;
int catalogNameLength = packet.fastSkipLenString();
+ catalogNameStart = adjustStartForFieldLength(catalogNameStart,
catalogNameLength);
}
int databaseNameStart = packet.getPosition() + 1;
int databaseNameLength = packet.fastSkipLenString();
+ databaseNameStart = adjustStartForFieldLength(databaseNameStart,
databaseNameLength);
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
-
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
// orgTableName is never used so skip
int originalTableNameStart = packet.getPosition() + 1;
int originalTableNameLength = packet.fastSkipLenString();
+ originalTableNameStart = adjustStartForFieldLength(originalTableNameStart,
originalTableNameLength);
// we only store the position again...
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
// orgColName is not required so skip...
int originalColumnNameStart = packet.getPosition() + 1;
int originalColumnNameLength = packet.fastSkipLenString();
+ originalColumnNameStart = adjustStartForFieldLength(originalColumnNameStart,
originalColumnNameLength);
packet.readByte();
@@ -3458,8 +3465,12 @@
int tableNameStart = packet.getPosition() + 1;
int tableNameLength = packet.fastSkipLenString();
+ tableNameStart = adjustStartForFieldLength(tableNameStart, tableNameLength);
+
int nameStart = packet.getPosition() + 1;
int nameLength = packet.fastSkipLenString();
+ nameStart = adjustStartForFieldLength(nameStart, nameLength);
+
int colLength = packet.readnBytes();
int colType = packet.readnBytes();
packet.readByte(); // We know it's currently 2
@@ -3485,6 +3496,22 @@
return field;
}
+ private int adjustStartForFieldLength(int nameStart, int nameLength) {
+ if (nameLength < 251) {
+ return nameStart;
+ }
+
+ if (nameLength >= 251 && nameLength < 65536) {
+ return nameStart + 2;
+ }
+
+ if (nameLength >= 65536 && nameLength < 16777216) {
+ return nameStart + 3;
+ }
+
+ return nameStart + 8;
+ }
+
private final void unpackNativeEncodedColumn(Buffer binaryData,
Field[] fields, int columnIndex, Object[] unpackedRowData)
throws SQLException {
Modified:
branches/branch_5_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_5_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
17:44:51 UTC (rev 5123)
+++
branches/branch_5_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-04-03
18:22:07 UTC (rev 5124)
@@ -1471,4 +1471,36 @@
}
}
+
+ /**
+ * Tests fix for BUG#18554 - Aliased column names where
+ * length of name > 251 are corrupted.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug18554() throws Exception {
+ testBug18554(249);
+ testBug18554(250);
+ testBug18554(251);
+ testBug18554(252);
+ testBug18554(253);
+ testBug18554(254);
+ testBug18554(255);
+ }
+
+ private void testBug18554(int columnNameLength) throws Exception {
+ StringBuffer buf = new StringBuffer(columnNameLength + 2);
+
+ for (int i = 0; i < columnNameLength; i++) {
+ buf.append((char)((Math.random() * 26) + 65));
+ }
+
+
+ String colName = buf.toString();
+ this.rs = this.stmt.executeQuery("select curtime() as `" + colName + "`");
+ ResultSetMetaData meta = this.rs.getMetaData();
+
+ assertEquals(colName, meta.getColumnName(1));
+
+ }
}
| Thread |
|---|
| • Connector/J commit: r5124 - in branches: branch_3_1/connector-j branch_3_1/connector-j/src/com/mysql/jdbc branch_3_1/connector-j/src/testsuite/regress... | mmatthews | 3 Apr |