List:Commits« Previous MessageNext Message »
From:mmatthews Date:September 4 2007 8:28pm
Subject:Connector/J commit: r6550 - in branches/branch_5_0/connector-j: . src/com/mysql/jdbc src/testsuite/regression
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/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/regressionmmatthews4 Sep