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... | mmatthews | 5 Oct |