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/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
Log:
Fixed BUG#27915 - DatabaseMetaData.getColumns() doesn't
contain SCOPE_* or IS_AUTOINCREMENT columns.
Modified: branches/branch_5_0/connector-j/CHANGES
===================================================================
--- branches/branch_5_0/connector-j/CHANGES 2007-09-04 17:48:14 UTC (rev 6549)
+++ branches/branch_5_0/connector-j/CHANGES 2007-09-04 18:28:45 UTC (rev 6550)
@@ -49,6 +49,9 @@
- Fixed BUG#27182 - Connection.getServerCharacterEncoding() doesn't work
for servers with version >= 4.1.
+ - Fixed BUG#27915 - DatabaseMetaData.getColumns() doesn't
+ contain SCOPE_* or IS_AUTOINCREMENT columns.
+
07-19-07 - Version 5.0.7
- Setting the configuration parameter "useCursorFetch" to "true" for
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 2007-09-04
17:48:14 UTC (rev 6549)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java 2007-09-04
18:28:45 UTC (rev 6550)
@@ -2226,7 +2226,7 @@
final String colPattern = columnNamePattern;
- Field[] fields = new Field[18];
+ Field[] fields = new Field[23];
fields[0] = new Field("", "TABLE_CAT", Types.CHAR, 255);
fields[1] = new Field("", "TABLE_SCHEM", Types.CHAR, 0);
fields[2] = new Field("", "TABLE_NAME", Types.CHAR, 255);
@@ -2247,6 +2247,11 @@
.toString(Integer.MAX_VALUE).length());
fields[16] = new Field("", "ORDINAL_POSITION", Types.INTEGER, 10);
fields[17] = new Field("", "IS_NULLABLE", Types.CHAR, 3);
+ fields[18] = new Field("", "SCOPE_CATALOG", Types.CHAR, 255);
+ fields[19] = new Field("", "SCOPE_SCHEMA", Types.CHAR, 255);
+ fields[20] = new Field("", "SCOPE_TABLE", Types.CHAR, 255);
+ fields[21] = new Field("", "SOURCE_DATA_TYPE", Types.SMALLINT, 10);
+ fields[22] = new Field("", "IS_AUTOINCREMENT", Types.CHAR, 3);
final ArrayList rows = new ArrayList();
final Statement stmt = this.conn.getMetadataSafeStatement();
@@ -2384,7 +2389,7 @@
int ordPos = 1;
while (results.next()) {
- byte[][] rowVal = new byte[18][];
+ byte[][] rowVal = new byte[23][];
rowVal[0] = s2b(catalog); // TABLE_CAT
rowVal[1] = null; // TABLE_SCHEM (No schemas
// in MySQL)
@@ -2472,7 +2477,24 @@
}
rowVal[17] = s2b(typeDesc.isNullable);
-
+
+ // We don't support REF or DISTINCT types
+ rowVal[18] = null;
+ rowVal[19] = null;
+ rowVal[20] = null;
+ rowVal[21] = null;
+
+ rowVal[22] = s2b("");
+
+ String extra = results.getString("Extra");
+
+ if (extra != null) {
+ rowVal[22] = s2b(StringUtils
+ .indexOfIgnoreCase(extra,
+ "auto_increment") != -1 ? "YES"
+ : "NO");
+ }
+
rows.add(rowVal);
}
} finally {
Modified:
branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java
===================================================================
---
branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java 2007-09-04
17:48:14 UTC (rev 6549)
+++
branches/branch_5_0/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java 2007-09-04
18:28:45 UTC (rev 6550)
@@ -231,7 +231,12 @@
+ "0 AS SQL_DATETIME_SUB,"
+ "CASE WHEN CHARACTER_OCTET_LENGTH > " + Integer.MAX_VALUE + " THEN " +
Integer.MAX_VALUE + " ELSE CHARACTER_OCTET_LENGTH END AS CHAR_OCTET_LENGTH,"
+ "ORDINAL_POSITION,"
- + "IS_NULLABLE "
+ + "IS_NULLABLE,"
+ + "NULL AS SCOPE_CATALOG,"
+ + "NULL AS SCOPE_SCHEMA,"
+ + "NULL AS SCOPE_TABLE,"
+ + "NULL AS SOURCE_DATA_TYPE,"
+ + "IF (EXTRA LIKE '%auto_increment%','YES','NO') AS IS_AUTOINCREMENT "
+ "FROM INFORMATION_SCHEMA.COLUMNS WHERE "
+ "TABLE_SCHEMA LIKE ? AND "
+ "TABLE_NAME LIKE ? AND COLUMN_NAME LIKE ? "
@@ -273,8 +278,12 @@
new Field("", "CHAR_OCTET_LENGTH", Types.INTEGER, Integer
.toString(Integer.MAX_VALUE).length()),
new Field("", "ORDINAL_POSITION", Types.INTEGER, 10),
- new Field("", "IS_NULLABLE", Types.CHAR, 3) });
-
+ new Field("", "IS_NULLABLE", Types.CHAR, 3),
+ new Field("", "SCOPE_CATALOG", Types.CHAR, 255),
+ new Field("", "SCOPE_SCHEMA", Types.CHAR, 255),
+ new Field("", "SCOPE_TABLE", Types.CHAR, 255),
+ new Field("", "SOURCE_DATA_TYPE", Types.SMALLINT, 10),
+ new Field("", "IS_AUTOINCREMENT", Types.CHAR, 3) });
return rs;
} finally {
if (pStmt != null) {
Modified:
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java
===================================================================
---
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2007-09-04
17:48:14 UTC (rev 6549)
+++
branches/branch_5_0/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2007-09-04
18:28:45 UTC (rev 6550)
@@ -39,6 +39,7 @@
import testsuite.BaseTestCase;
import com.mysql.jdbc.Driver;
+import com.mysql.jdbc.Field;
import com.mysql.jdbc.NonRegisteringDriver;
import com.mysql.jdbc.SQLError;
@@ -1976,4 +1977,51 @@
closeMemberJDBCResources();
}
}
+
+ /**
+ * Fixed BUG#27915 - DatabaseMetaData.getColumns() doesn't
+ * contain SCOPE_* or IS_AUTOINCREMENT columns.
+ *
+ * @throws Exception
+ */
+ public void testBug27915() throws Exception {
+ createTable("testBug27915",
+ "(field1 int not null primary key auto_increment, field2 int)");
+ DatabaseMetaData dbmd = this.conn.getMetaData();
+
+ try {
+ this.rs = dbmd.getColumns(this.conn.getCatalog(), null,
+ "testBug27915", "%");
+ this.rs.next();
+
+ checkBug27915();
+
+ if (versionMeetsMinimum(5, 0)) {
+ this.rs = getConnectionWithProps("useInformationSchema=true")
+ .getMetaData().getColumns(this.conn.getCatalog(), null,
+ "testBug27915", "%");
+ this.rs.next();
+
+ checkBug27915();
+ }
+ } finally {
+ closeMemberJDBCResources();
+ }
+ }
+
+ private void checkBug27915() throws SQLException {
+ assertNull(this.rs.getString("SCOPE_CATALOG"));
+ assertNull(this.rs.getString("SCOPE_SCHEMA"));
+ assertNull(this.rs.getString("SCOPE_TABLE"));
+ assertNull(this.rs.getString("SOURCE_DATA_TYPE"));
+ assertEquals("YES", this.rs.getString("IS_AUTOINCREMENT"));
+
+ this.rs.next();
+
+ assertNull(this.rs.getString("SCOPE_CATALOG"));
+ assertNull(this.rs.getString("SCOPE_SCHEMA"));
+ assertNull(this.rs.getString("SCOPE_TABLE"));
+ assertNull(this.rs.getString("SOURCE_DATA_TYPE"));
+ assertEquals("NO", this.rs.getString("IS_AUTOINCREMENT"));
+ }
}
| Thread |
|---|
| • Connector/J commit: r6550 - in branches/branch_5_0/connector-j: . src/com/mysql/jdbc src/testsuite/regression | mmatthews | 4 Sep |