From: Date: September 4 2007 8:36pm Subject: Connector/J commit: r6551 - in trunk: . connector-j connector-j/src/com/mysql/jdbc connector-j/src/testsuite/regression List-Archive: http://lists.mysql.com/commits/33662 X-Bug: 27182, 27915 Message-Id: <200709041836.l84IaL9T003511@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: trunk/ trunk/connector-j/CHANGES trunk/connector-j/src/com/mysql/jdbc/ConnectionImpl.java trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java Log: Merged revisions 6541-6544,6546-6550 via svnmerge from svn+ssh://mmatthews@stripped/connectors-svnroot/connector-j/branches/branch_5_0 ....... r6549 | mmatthews | 2007-09-04 12:48:14 -0500 (Tue, 04 Sep 2007) | 2 lines Fixed BUG#27182 - Connection.getServerCharacterEncoding() doesn't work for servers with version >= 4.1. ....... r6550 | mmatthews | 2007-09-04 13:28:45 -0500 (Tue, 04 Sep 2007) | 2 lines Fixed BUG#27915 - DatabaseMetaData.getColumns() doesn't contain SCOPE_* or IS_AUTOINCREMENT columns. ....... Property changes on: trunk ___________________________________________________________________ Name: svnmerge-integrated - /branches/branch_5_0:1-6540,6545 /branches/branch_5_1:1-6517,6544 + /branches/branch_5_0:1-6550 /branches/branch_5_1:1-6517,6544 Modified: trunk/connector-j/CHANGES =================================================================== --- trunk/connector-j/CHANGES 2007-09-04 18:28:45 UTC (rev 6550) +++ trunk/connector-j/CHANGES 2007-09-04 18:36:20 UTC (rev 6551) @@ -223,7 +223,13 @@ that the driver will now report all paramters as "IN" paramters but allow callers to call registerOutParameter() on them without throwing an exception. + + - 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: trunk/connector-j/src/com/mysql/jdbc/ConnectionImpl.java =================================================================== --- trunk/connector-j/src/com/mysql/jdbc/ConnectionImpl.java 2007-09-04 18:28:45 UTC (rev 6550) +++ trunk/connector-j/src/com/mysql/jdbc/ConnectionImpl.java 2007-09-04 18:36:20 UTC (rev 6551) @@ -2997,7 +2997,11 @@ * @return the server's character set. */ public String getServerCharacterEncoding() { - return (String) this.serverVariables.get("character_set"); + if (this.io.versionMeetsMinimum(4, 1, 0)) { + return (String) this.serverVariables.get("character_set_server"); + } else { + return (String) this.serverVariables.get("character_set"); + } } int getServerMajorVersion() { Modified: trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java =================================================================== --- trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java 2007-09-04 18:28:45 UTC (rev 6550) +++ trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaData.java 2007-09-04 18:36:20 UTC (rev 6551) @@ -2312,7 +2312,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); @@ -2333,6 +2333,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(); @@ -2470,7 +2475,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) @@ -2550,7 +2555,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(new ByteArrayRow(rowVal)); } } finally { Modified: trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java =================================================================== --- trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java 2007-09-04 18:28:45 UTC (rev 6550) +++ trunk/connector-j/src/com/mysql/jdbc/DatabaseMetaDataUsingInfoSchema.java 2007-09-04 18:36:20 UTC (rev 6551) @@ -236,7 +236,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 ? " @@ -278,8 +283,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: trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java =================================================================== --- trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2007-09-04 18:28:45 UTC (rev 6550) +++ trunk/connector-j/src/testsuite/regression/MetaDataRegressionTest.java 2007-09-04 18:36:20 UTC (rev 6551) @@ -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")); + } }