List:Commits« Previous MessageNext Message »
From:mmatthews Date:April 3 2006 8:22pm
Subject: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...
View as plain text  
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...mmatthews3 Apr