Modified:
branches/branch_3_1/connector-j/CHANGES
branches/branch_3_1/connector-j/src/com/mysql/jdbc/Field.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/Field.java
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
trunk/connector-j/CHANGES
trunk/connector-j/src/com/mysql/jdbc/Field.java
trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
Log:
Fixed calling toString() on ResultSetMetaData for driver-generated
(i.e. from DatabaseMetaData method calls, or from getGeneratedKeys())
result sets would raise a NullPointerException.
Modified: branches/branch_3_1/connector-j/CHANGES
===================================================================
--- branches/branch_3_1/connector-j/CHANGES 2006-08-16 00:01:45 UTC (rev 5638)
+++ branches/branch_3_1/connector-j/CHANGES 2006-08-16 14:18:23 UTC (rev 5639)
@@ -35,7 +35,11 @@
- Fixed BUG#19993 - ReplicationDriver does not always round-robin load
balance depending on URL used for slaves list.
-
+
+ - Fixed calling toString() on ResultSetMetaData for driver-generated
+ (i.e. from DatabaseMetaData method calls, or from getGeneratedKeys())
+ result sets would raise a NullPointerException.
+
05-26-06 - Version 3.1.13
- Fixed BUG#15464 - INOUT parameter does not store IN value.
Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/Field.java
===================================================================
--- branches/branch_3_1/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 00:01:45 UTC
(rev 5638)
+++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 14:18:23 UTC
(rev 5639)
@@ -832,36 +832,34 @@
this.useOldNameMetadata = useOldNameMetadata;
}
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
public String toString() {
try {
StringBuffer asString = new StringBuffer();
asString.append(super.toString());
-
+
asString.append("\n catalog: ");
asString.append(this.getDatabaseName());
- asString.append("\n table name: ");
- asString.append(this.getTableName());
- asString.append("\n original table name: ");
- asString.append(this.getOriginalTableName());
- asString.append("\n column name: ");
- asString.append(this.getName());
- asString.append("\n original column name: ");
- asString.append(this.getOriginalName());
- asString.append("\n MySQL data type: ");
- asString.append(getMysqlType());
- asString.append("\n\nData as received from server:\n\n");
- asString.append(StringUtils.dumpAsHex(this.buffer, this.buffer.length));
-
- return asString.toString();
- } catch (SQLException sqlEx) {
+ asString.append("\n table name: ");
+ asString.append(this.getTableName());
+ asString.append("\n original table name: ");
+ asString.append(this.getOriginalTableName());
+ asString.append("\n column name: ");
+ asString.append(this.getName());
+ asString.append("\n original column name: ");
+ asString.append(this.getOriginalName());
+ asString.append("\n MySQL data type: ");
+ asString.append(getMysqlType());
+
+ if (this.buffer != null) {
+ asString.append("\n\nData as received from server:\n\n");
+ asString.append(StringUtils.dumpAsHex(this.buffer,
+ this.buffer.length));
+ }
+
+ return asString.toString();
+ } catch (Throwable t) {
return super.toString();
}
-
}
protected boolean isSingleBit() {
Modified:
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
00:01:45 UTC (rev 5638)
+++
branches/branch_3_1/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
14:18:23 UTC (rev 5639)
@@ -1453,6 +1453,19 @@
}
/**
+ * Tests fix for BUG#18258 - Nonexistent catalog/database causes SQLException
+ * to be raised, rather than returning empty result set.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug18258() throws Exception {
+ String bogusDatabaseName = "abcdefghijklmnopqrstuvwxyz";
+ this.conn.getMetaData().getTables(bogusDatabaseName, "%", "%", new String[] {"TABLE",
"VIEW"});
+ this.conn.getMetaData().getColumns(bogusDatabaseName, "%", "%", "%");
+ this.conn.getMetaData().getProcedures(bogusDatabaseName, "%", "%");
+ }
+
+ /**
* Tests fix for BUG#18554 - Aliased column names where
* length of name > 251 are corrupted.
*
@@ -1468,6 +1481,52 @@
testBug18554(255);
}
+ /*
+ public void testBug20491() throws Exception {
+ createTable("testBug20491", "("
+ + "`field1_ae_+ + "`field2_ue_+ + "`field3_oe_+ + "`field4_sz_+ + "PRIMARY KEY (`field1_ae_+ );
+ this.rs = this.conn.getMetaData().getColumns(this.conn.getCatalog(),
+ null, "testBug20491", "%");
+ this.rs.next();
+ assertEquals("field1_ae_+ }*/
+
+ public void testBug20191() throws Exception {
+ if (versionMeetsMinimum(5, 0)) {
+ stmt.executeUpdate("drop table if exists t1;");
+ stmt.executeUpdate("create table t1 (id int(10))");
+ stmt.executeUpdate("insert into t1 values (1);");
+ stmt.executeUpdate("drop view if exists v1");
+ stmt.executeUpdate("CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW v1 AS
select t1.id as id from t1");
+ ResultSet rs = stmt.executeQuery("select * from v1 group by id limit 1");
+ System.out.println("when limit is 1, getTableName gives: ");
+ ResultSetMetaData rsmd = rs.getMetaData();
+ System.out.println(rsmd.getTableName(1));
+ System.out.println("<P>");
+ rs = stmt.executeQuery("select * from v1 group by id limit 0");
+ System.out.println("when limit is 0, getTableName gives: ");
+ rsmd = rs.getMetaData();
+ System.out.println(rsmd.getTableName(1));
+ System.out.println("<P>");
+ rs = stmt.executeQuery("select * from v1 where id=1000 group by id ");
+ System.out.println("when result not found, getTableName gives: ");
+ rsmd = rs.getMetaData();
+ System.out.println(rsmd.getTableName(1));
+ System.out.println("<P>");
+ rs = stmt.executeQuery("select * from v1 where id=1 group by id ");
+ System.out.println("when result not found, getTableName gives: ");
+ rsmd = rs.getMetaData();
+ System.out.println(rsmd.getTableName(1));
+ System.out.println("<P>");
+ System.out.println("Note that \"group by\" is essential in this case");
+ rs.close();
+ }
+ }
private void testBug18554(int columnNameLength) throws Exception {
StringBuffer buf = new StringBuffer(columnNameLength + 2);
@@ -1506,6 +1565,16 @@
assertEquals(true, dbmd.supportsGroupByUnrelated());
}
+ public void testRSMDToStringFromDBMD() throws Exception {
+ try {
+ this.rs = this.conn.getMetaData().getTypeInfo();
+
+ this.rs.getMetaData().toString(); // used to cause NPE
+ } finally {
+ closeMemberJDBCResources();
+ }
+ }
+
private void testAbsenceOfMetadataForQuery(String query) throws Exception {
try {
this.pstmt = this.conn.prepareStatement(query);
Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES 2006-08-16 00:01:45 UTC (rev 5638)
+++ branches/branch_5_0/connector-j/CHANGES 2006-08-16 14:18:23 UTC (rev 5639)
@@ -226,7 +226,11 @@
- Fixed BUG#19993 - ReplicationDriver does not always round-robin load
balance depending on URL used for slaves list.
-
+
+ - Fixed calling toString() on ResultSetMetaData for driver-generated
+ (i.e. from DatabaseMetaData method calls, or from getGeneratedKeys())
+ result sets would raise a NullPointerException.
+
05-26-06 - Version 3.1.13
- Fixed BUG#15464 - INOUT parameter does not store IN value.
Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 00:01:45 UTC
(rev 5638)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 14:18:23 UTC
(rev 5639)
@@ -853,36 +853,34 @@
this.useOldNameMetadata = useOldNameMetadata;
}
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
public String toString() {
try {
StringBuffer asString = new StringBuffer();
asString.append(super.toString());
-
+
asString.append("\n catalog: ");
asString.append(this.getDatabaseName());
- asString.append("\n table name: ");
- asString.append(this.getTableName());
- asString.append("\n original table name: ");
- asString.append(this.getOriginalTableName());
- asString.append("\n column name: ");
- asString.append(this.getName());
- asString.append("\n original column name: ");
- asString.append(this.getOriginalName());
- asString.append("\n MySQL data type: ");
- asString.append(getMysqlType());
- asString.append("\n\nData as received from server:\n\n");
- asString.append(StringUtils.dumpAsHex(this.buffer, this.buffer.length));
-
- return asString.toString();
- } catch (SQLException sqlEx) {
+ asString.append("\n table name: ");
+ asString.append(this.getTableName());
+ asString.append("\n original table name: ");
+ asString.append(this.getOriginalTableName());
+ asString.append("\n column name: ");
+ asString.append(this.getName());
+ asString.append("\n original column name: ");
+ asString.append(this.getOriginalName());
+ asString.append("\n MySQL data type: ");
+ asString.append(getMysqlType());
+
+ if (this.buffer != null) {
+ asString.append("\n\nData as received from server:\n\n");
+ asString.append(StringUtils.dumpAsHex(this.buffer,
+ this.buffer.length));
+ }
+
+ return asString.toString();
+ } catch (Throwable t) {
return super.toString();
}
-
}
protected boolean isSingleBit() {
Modified:
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
00:01:45 UTC (rev 5638)
+++
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
14:18:23 UTC (rev 5639)
@@ -1602,4 +1602,14 @@
}
}
+ public void testRSMDToStringFromDBMD() throws Exception {
+ try {
+ this.rs = this.conn.getMetaData().getTypeInfo();
+
+ this.rs.getMetaData().toString(); // used to cause NPE
+ } finally {
+ closeMemberJDBCResources();
+ }
+ }
+
}
Modified: trunk/connector-j/CHANGES
===================================================================
--- trunk/connector-j/CHANGES 2006-08-16 00:01:45 UTC (rev 5638)
+++ trunk/connector-j/CHANGES 2006-08-16 14:18:23 UTC (rev 5639)
@@ -217,7 +217,11 @@
- Fixed BUG#19993 - ReplicationDriver does not always round-robin load
balance depending on URL used for slaves list.
-
+
+ - Fixed calling toString() on ResultSetMetaData for driver-generated
+ (i.e. from DatabaseMetaData method calls, or from getGeneratedKeys())
+ result sets would raise a NullPointerException.
+
05-26-06 - Version 3.1.13
- Fixed BUG#15464 - INOUT parameter does not store IN value.
Modified: trunk/connector-j/src/com/mysql/jdbc/Field.java
===================================================================
--- trunk/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 00:01:45 UTC (rev 5638)
+++ trunk/connector-j/src/com/mysql/jdbc/Field.java 2006-08-16 14:18:23 UTC (rev 5639)
@@ -853,36 +853,34 @@
this.useOldNameMetadata = useOldNameMetadata;
}
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
public String toString() {
try {
StringBuffer asString = new StringBuffer();
asString.append(super.toString());
-
+
asString.append("\n catalog: ");
asString.append(this.getDatabaseName());
- asString.append("\n table name: ");
- asString.append(this.getTableName());
- asString.append("\n original table name: ");
- asString.append(this.getOriginalTableName());
- asString.append("\n column name: ");
- asString.append(this.getName());
- asString.append("\n original column name: ");
- asString.append(this.getOriginalName());
- asString.append("\n MySQL data type: ");
- asString.append(getMysqlType());
- asString.append("\n\nData as received from server:\n\n");
- asString.append(StringUtils.dumpAsHex(this.buffer, this.buffer.length));
-
- return asString.toString();
- } catch (SQLException sqlEx) {
+ asString.append("\n table name: ");
+ asString.append(this.getTableName());
+ asString.append("\n original table name: ");
+ asString.append(this.getOriginalTableName());
+ asString.append("\n column name: ");
+ asString.append(this.getName());
+ asString.append("\n original column name: ");
+ asString.append(this.getOriginalName());
+ asString.append("\n MySQL data type: ");
+ asString.append(getMysqlType());
+
+ if (this.buffer != null) {
+ asString.append("\n\nData as received from server:\n\n");
+ asString.append(StringUtils.dumpAsHex(this.buffer,
+ this.buffer.length));
+ }
+
+ return asString.toString();
+ } catch (Throwable t) {
return super.toString();
}
-
}
protected boolean isSingleBit() {
Modified: trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
--- trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
00:01:45 UTC (rev 5638)
+++ trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2006-08-16
14:18:23 UTC (rev 5639)
@@ -1559,4 +1559,14 @@
}
}
+ public void testRSMDToStringFromDBMD() throws Exception {
+ try {
+ this.rs = this.conn.getMetaData().getTypeInfo();
+
+ this.rs.getMetaData().toString(); // used to cause NPE
+ } finally {
+ closeMemberJDBCResources();
+ }
+ }
+
}
| Thread |
|---|
| • Connector/J commit: r5639 - branches/branch_3_1/connector-j branches/branch_3_1/connector-j/src/com/mysql/jdbc branches/branch_3_1/connector-j/src/tes... | mmatthews | 16 Aug |