List:Commits« Previous MessageNext Message »
From:mmatthews Date:October 5 2006 6:45pm
Subject:Connector/J commit: r5827 - branches/branch_5_0/connector-j branches/branch_5_0/connector-j/src/com/mysql/jdbc branches/branch_5_0/connector-j/src/tes...
View as plain text  
Modified:
   branches/branch_5_0/connector-j/CHANGES
   branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java
   branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
   trunk/connector-j/CHANGES
   trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java
   trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
Log:
Fixed BUG#22613 - DBMD.getColumns() does not return expected
	  COLUMN_SIZE for the SET type, now returns length of largest possible
	  set disregarding whitespace or the "," delimitters to be consistent 
	  with the ODBC driver.

Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES	2006-10-05 16:13:49 UTC (rev 5826)
+++ branches/branch_5_0/connector-j/CHANGES	2006-10-05 16:45:25 UTC (rev 5827)
@@ -41,6 +41,11 @@
 	  it shouldn't (due to sending big decimal incorrectly to server with
 	  server-side prepared statement).
 	  
+	- Fixed BUG#22613 - DBMD.getColumns() does not return expected
+	  COLUMN_SIZE for the SET type, now returns length of largest possible
+	  set disregarding whitespace or the "," delimitters to be consistent 
+	  with the ODBC driver.
+	  
 07-26-06 - Version 5.0.3
 
     - Fixed BUG#20650 - Statement.cancel() causes NullPointerException

Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java	2006-10-05
16:13:49 UTC (rev 5826)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java	2006-10-05
16:45:25 UTC (rev 5827)
@@ -220,8 +220,7 @@
 
 			// Figure Out the Size
 			if (typeInfo != null) {
-				if (StringUtils.startsWithIgnoreCase(typeInfo, "enum")
-						|| StringUtils.startsWithIgnoreCase(typeInfo, "set")) {
+				if (StringUtils.startsWithIgnoreCase(typeInfo, "enum")) {
 					String temp = typeInfo.substring(typeInfo.indexOf("("),
 							typeInfo.lastIndexOf(")"));
 					java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
@@ -235,6 +234,25 @@
 
 					this.columnSize = maxLength;
 					this.decimalDigits = 0;
+				} else if (StringUtils.startsWithIgnoreCase(typeInfo, "set")) {
+					String temp = typeInfo.substring(typeInfo.indexOf("("),
+							typeInfo.lastIndexOf(")"));
+					java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
+							temp, ",");
+					int maxLength = 0;
+
+					while (tokenizer.hasMoreTokens()) {
+						String setMember = tokenizer.nextToken().trim();
+						
+						if (setMember.startsWith("'") && setMember.endsWith("'")) {
+							maxLength += setMember.length() - 2;
+						} else {
+							maxLength += setMember.length();
+						}
+					}
+
+					this.columnSize = maxLength;
+					this.decimalDigits = 0;
 				} else if (typeInfo.indexOf(",") != -1) {
 					// Numeric with decimals
 					this.columnSize = Integer.parseInt(typeInfo.substring(

Modified:
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java	2006-10-05
16:13:49 UTC (rev 5826)
+++
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java	2006-10-05
16:45:25 UTC (rev 5827)
@@ -1583,6 +1583,60 @@
         }
 	}
 
+	/** 
+	 * Tests fix for BUG#22613 - DBMD.getColumns() does not return expected
+	 * COLUMN_SIZE for the SET type (fixed to be consistent with the ODBC driver)
+	 * 
+	 * @throws Exception if the test fails
+	 */
+	public void testBug22613() throws Exception {
+		
+		createTable("bug22613", "( s set('a','bc','def','ghij') default NULL, t enum('a', 'ab',
'cdef'))");
+
+		try {
+			checkMetadataForBug22613(this.conn);
+			
+			if (versionMeetsMinimum(5, 0)) {
+				Connection infoSchemConn = null;
+			
+				try {
+					Properties props = new Properties();
+					props.setProperty("useInformationSchema", "true");
+					
+					infoSchemConn = getConnectionWithProps(props);
+					
+					checkMetadataForBug22613(infoSchemConn);
+				} finally {
+					if (infoSchemConn != null) {
+						infoSchemConn.close();
+					}
+				}
+			}
+		} finally {
+			closeMemberJDBCResources();
+		}
+	}
+	
+	private void checkMetadataForBug22613(Connection c) throws Exception {
+		String maxValue = "a,bc,def,ghij";
+		
+		try {
+			DatabaseMetaData meta = c.getMetaData();
+			this.rs = meta.getColumns(null, this.conn.getCatalog(), "bug22613", "s");
+			this.rs.first();
+
+			assertEquals(maxValue.length(), rs.getInt("COLUMN_SIZE"));
+			
+			this.rs = meta.getColumns(null, c.getCatalog(), "bug22613", "t");
+			this.rs.first();
+
+			assertEquals(4, rs.getInt("COLUMN_SIZE"));			
+		} finally {
+			closeMemberJDBCResources();
+		}
+	}
+
+
 	private void testAbsenceOfMetadataForQuery(String query) throws Exception {
 		try {
 			this.pstmt = this.conn.prepareStatement(query);

Modified: trunk/connector-j/CHANGES
===================================================================
--- trunk/connector-j/CHANGES	2006-10-05 16:13:49 UTC (rev 5826)
+++ trunk/connector-j/CHANGES	2006-10-05 16:45:25 UTC (rev 5827)
@@ -40,6 +40,11 @@
 	- Fixed BUG#22290 - Driver issues truncation on write exception when
 	  it shouldn't (due to sending big decimal incorrectly to server with
 	  server-side prepared statement).
+	  
+	- Fixed BUG#22613 - DBMD.getColumns() does not return expected
+	  COLUMN_SIZE for the SET type, now returns length of largest possible
+	  set disregarding whitespace or the "," delimitters to be consistent 
+	  with the ODBC driver.
 	  	 
 07-26-06 - Version 5.0.3
 

Modified: trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java
===================================================================
--- trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java	2006-10-05 16:13:49 UTC
(rev 5826)
+++ trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java	2006-10-05 16:45:25 UTC
(rev 5827)
@@ -223,8 +223,7 @@
 
 			// Figure Out the Size
 			if (typeInfo != null) {
-				if (StringUtils.startsWithIgnoreCase(typeInfo, "enum")
-						|| StringUtils.startsWithIgnoreCase(typeInfo, "set")) {
+				if (StringUtils.startsWithIgnoreCase(typeInfo, "enum")) {
 					String temp = typeInfo.substring(typeInfo.indexOf("("),
 							typeInfo.lastIndexOf(")"));
 					java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
@@ -238,6 +237,25 @@
 
 					this.columnSize = maxLength;
 					this.decimalDigits = 0;
+				} else if (StringUtils.startsWithIgnoreCase(typeInfo, "set")) {
+					String temp = typeInfo.substring(typeInfo.indexOf("("),
+							typeInfo.lastIndexOf(")"));
+					java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
+							temp, ",");
+					int maxLength = 0;
+
+					while (tokenizer.hasMoreTokens()) {
+						String setMember = tokenizer.nextToken().trim();
+						
+						if (setMember.startsWith("'") && setMember.endsWith("'")) {
+							maxLength += setMember.length() - 2;
+						} else {
+							maxLength += setMember.length();
+						}
+					}
+
+					this.columnSize = maxLength;
+					this.decimalDigits = 0;
 				} else if (typeInfo.indexOf(",") != -1) {
 					// Numeric with decimals
 					this.columnSize = Integer.parseInt(typeInfo.substring(

Modified: trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
--- trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java	2006-10-05
16:13:49 UTC (rev 5826)
+++ trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java	2006-10-05
16:45:25 UTC (rev 5827)
@@ -1612,4 +1612,57 @@
 	    }
 	}
 
+	/** 
+	 * Tests fix for BUG#22613 - DBMD.getColumns() does not return expected
+	 * COLUMN_SIZE for the SET type (fixed to be consistent with the ODBC driver)
+	 * 
+	 * @throws Exception if the test fails
+	 */
+	public void testBug22613() throws Exception {
+		
+		createTable("bug22613", "( s set('a','bc','def','ghij') default NULL, t enum('a', 'ab',
'cdef'))");
+
+		try {
+			checkMetadataForBug22613(this.conn);
+			
+			if (versionMeetsMinimum(5, 0)) {
+				Connection infoSchemConn = null;
+			
+				try {
+					Properties props = new Properties();
+					props.setProperty("useInformationSchema", "true");
+					
+					infoSchemConn = getConnectionWithProps(props);
+					
+					checkMetadataForBug22613(infoSchemConn);
+				} finally {
+					if (infoSchemConn != null) {
+						infoSchemConn.close();
+					}
+				}
+			}
+		} finally {
+			closeMemberJDBCResources();
+		}
+	}
+	
+	private void checkMetadataForBug22613(Connection c) throws Exception {
+		String maxValue = "a,bc,def,ghij";
+		
+		try {
+			DatabaseMetaData meta = c.getMetaData();
+			this.rs = meta.getColumns(null, this.conn.getCatalog(), "bug22613", "s");
+			this.rs.first();
+
+			assertEquals(maxValue.length(), rs.getInt("COLUMN_SIZE"));
+			
+			this.rs = meta.getColumns(null, c.getCatalog(), "bug22613", "t");
+			this.rs.first();
+
+			assertEquals(4, rs.getInt("COLUMN_SIZE"));			
+		} finally {
+			closeMemberJDBCResources();
+		}
+	}
+
 }

Thread
Connector/J commit: r5827 - branches/branch_5_0/connector-j branches/branch_5_0/connector-j/src/com/mysql/jdbc branches/branch_5_0/connector-j/src/tes...mmatthews5 Oct