Modified:
branches/branch_5_0/connector-j/src/testsuite/simple/MetadataTest.java
Log:
added test cases for DatabaseMetaDataUsingInfoSchema
Modified: branches/branch_5_0/connector-j/src/testsuite/simple/MetadataTest.java
===================================================================
--- branches/branch_5_0/connector-j/src/testsuite/simple/MetadataTest.java 2005-10-13 00:07:32 UTC (rev 4399)
+++ branches/branch_5_0/connector-j/src/testsuite/simple/MetadataTest.java 2005-10-13 21:39:12 UTC (rev 4400)
@@ -29,6 +29,7 @@
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Types;
import java.util.HashSet;
import java.util.Properties;
@@ -527,15 +528,17 @@
this.stmt.executeUpdate("CREATE TABLE t1 (c1 int(1) primary key)");
Properties props = new Properties();
props.put("useInformationSchema", "true");
- com.mysql.jdbc.Connection conn1 = (com.mysql.jdbc.Connection) getConnectionWithProps(null);
- conn1.setUseInformationSchema(true);
- com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema metaData =
- (com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema) conn1.getMetaData();
- this.rs = metaData.getPrimaryKeys(null, null, "t1");
- this.rs.next();
- assertEquals("t1", this.rs.getString("TABLE_NAME"));
- assertEquals("c1", this.rs.getString("COLUMN_NAME"));
- conn1.close();
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getPrimaryKeys(null, null, "t1");
+ this.rs.next();
+ assertEquals("t1", this.rs.getString("TABLE_NAME"));
+ assertEquals("c1", this.rs.getString("COLUMN_NAME"));
+ } finally {
+ conn1.close();
+ }
}
}
@@ -549,15 +552,19 @@
this.stmt.executeUpdate("CREATE INDEX index1 ON t1 (c1)");
Properties props = new Properties();
props.put("useInformationSchema", "true");
- Connection conn1 = getConnectionWithProps(props);
- DatabaseMetaData metaData = conn1.getMetaData();
- this.rs = metaData.getIndexInfo("test", null, "t1", false, true);
- this.rs.next();
- assertEquals("t1", this.rs.getString("TABLE_NAME"));
- assertEquals("c1", this.rs.getString("COLUMN_NAME"));
- assertEquals("1", this.rs.getString("NON_UNIQUE"));
- assertEquals("index1", this.rs.getString("INDEX_NAME"));
- conn1.close();
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getIndexInfo("test", null, "t1", false, true);
+ this.rs.next();
+ assertEquals("t1", this.rs.getString("TABLE_NAME"));
+ assertEquals("c1", this.rs.getString("COLUMN_NAME"));
+ assertEquals("1", this.rs.getString("NON_UNIQUE"));
+ assertEquals("index1", this.rs.getString("INDEX_NAME"));
+ } finally {
+ conn1.close();
+ }
}
}
@@ -570,15 +577,19 @@
this.stmt.executeUpdate("CREATE TABLE t1 (c1 char(1))");
Properties props = new Properties();
props.put("useInformationSchema", "true");
- Connection conn1 = getConnectionWithProps(props);
- DatabaseMetaData metaData = conn1.getMetaData();
- this.rs = metaData.getColumns(null, null, "t1", null);
- this.rs.next();
- assertEquals("t1", this.rs.getString("TABLE_NAME"));
- assertEquals("c1", this.rs.getString("COLUMN_NAME"));
- assertEquals("char", this.rs.getString("TYPE_NAME"));
- assertEquals("1", this.rs.getString("COLUMN_SIZE"));
- conn1.close();
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getColumns(null, null, "t1", null);
+ this.rs.next();
+ assertEquals("t1", this.rs.getString("TABLE_NAME"));
+ assertEquals("c1", this.rs.getString("COLUMN_NAME"));
+ assertEquals("char", this.rs.getString("TYPE_NAME"));
+ assertEquals("1", this.rs.getString("COLUMN_SIZE"));
+ } finally {
+ conn1.close();
+ }
}
}
@@ -598,15 +609,170 @@
tableNames.add("t1-2");
Properties props = new Properties();
props.put("useInformationSchema", "true");
- Connection conn1 = getConnectionWithProps(props);
- DatabaseMetaData metaData = conn1.getMetaData();
- // pattern matching for table name
- this.rs = metaData.getTables(null, null, "t1-_", null);
- while (this.rs.next()) {
- assertTrue(tableNames.remove(this.rs.getString("TABLE_NAME")));
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ // pattern matching for table name
+ this.rs = metaData.getTables(null, null, "t1-_", null);
+ while (this.rs.next()) {
+ assertTrue(tableNames.remove(this.rs.getString("TABLE_NAME")));
+ }
+ assertTrue(tableNames.isEmpty());
+ } finally {
+ conn1.close();
}
- conn1.close();
- assertTrue(tableNames.isEmpty());
}
}
+
+ /**
+ * Tests the implementation of Information Schema for column privileges.
+ */
+ public void testGetColumnPrivilegesUsingInfoSchema() throws Exception {
+ if (versionMeetsMinimum(5, 0, 7)) {
+ Properties props = new Properties();
+ // root is used for GRANT
+ props.put("user", "root");
+ props.put("password", "");
+ props.put("useInformationSchema", "true");
+ Connection conn1 = null;
+ Statement stmt1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ stmt1 = conn1.createStatement();
+ stmt1.executeUpdate("DROP TABLE IF EXISTS t1");
+ stmt1.executeUpdate("CREATE TABLE t1 (c1 int)");
+ stmt1.executeUpdate("GRANT update (c1) on test.t1 to 'foobar'@'localhost' identified by 'foobar'");
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getColumnPrivileges(null, null, "t1", null);
+ this.rs.next();
+ assertEquals("t1", this.rs.getString("TABLE_NAME"));
+ assertEquals("c1", this.rs.getString("COLUMN_NAME"));
+ assertEquals("'foobar'@'localhost'", this.rs.getString("GRANTEE"));
+ assertEquals("UPDATE", this.rs.getString("PRIVILEGE"));
+ } finally {
+ stmt1.executeUpdate("REVOKE update (c1) on test.t1 from 'foobar'@'localhost'");
+ stmt1.close();
+ conn1.close();
+ }
+ }
+ }
+
+ /**
+ * Tests the implementation of Information Schema for description
+ * of stored procedures available in a catalog.
+ */
+ public void testGetProceduresUsingInfoSchema() throws Exception {
+ if (versionMeetsMinimum(5, 0, 7)) {
+ this.stmt.executeUpdate("DROP PROCEDURE IF EXISTS sp1");
+ this.stmt.executeUpdate("CREATE PROCEDURE sp1()\n BEGIN\n" + "SELECT 1;" + "end\n");
+ Properties props = new Properties();
+ props.put("useInformationSchema", "true");
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getProcedures(null, null, "sp1");
+ this.rs.next();
+ assertEquals("sp1", this.rs.getString("PROCEDURE_NAME"));
+ assertEquals("1", this.rs.getString("PROCEDURE_TYPE"));
+ } finally {
+ conn1.close();
+ this.stmt.executeUpdate("DROP PROCEDURE sp1");
+ }
+ }
+ }
+
+ /**
+ * Tests the implementation of Information Schema for foreign key.
+ */
+ public void testGetCrossReferenceUsingInfoSchema() throws Exception {
+ if (versionMeetsMinimum(5, 0, 7)) {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ this.stmt.executeUpdate("CREATE TABLE parent(id INT NOT NULL, "
+ + "PRIMARY KEY (id)) ENGINE=INNODB");
+ this.stmt.executeUpdate("CREATE TABLE child(id INT, parent_id INT, "
+ + "FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL) ENGINE=INNODB");
+ Properties props = new Properties();
+ props.put("useInformationSchema", "true");
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getCrossReference(null, null, "parent", null, null, "child");
+ this.rs.next();
+ assertEquals("parent", this.rs.getString("PKTABLE_NAME"));
+ assertEquals("id", this.rs.getString("PKCOLUMN_NAME"));
+ assertEquals("child", this.rs.getString("FKTABLE_NAME"));
+ assertEquals("parent_id", this.rs.getString("FKCOLUMN_NAME"));
+ } finally {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ conn1.close();
+ }
+ }
+ }
+
+ /**
+ * Tests the implementation of Information Schema for foreign key.
+ */
+ public void testGetExportedKeysUsingInfoSchema() throws Exception {
+ if (versionMeetsMinimum(5, 0, 7)) {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ this.stmt.executeUpdate("CREATE TABLE parent(id INT NOT NULL, "
+ + "PRIMARY KEY (id)) ENGINE=INNODB");
+ this.stmt.executeUpdate("CREATE TABLE child(id INT, parent_id INT, "
+ + "FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL) ENGINE=INNODB");
+ Properties props = new Properties();
+ props.put("useInformationSchema", "true");
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getExportedKeys(null, null, "parent");
+ this.rs.next();
+ assertEquals("parent", this.rs.getString("PKTABLE_NAME"));
+ assertEquals("id", this.rs.getString("PKCOLUMN_NAME"));
+ assertEquals("child", this.rs.getString("FKTABLE_NAME"));
+ assertEquals("parent_id", this.rs.getString("FKCOLUMN_NAME"));
+ } finally {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ conn1.close();
+ }
+ }
+ }
+
+ /**
+ * Tests the implementation of Information Schema for foreign key.
+ */
+ public void testGetImportedKeysUsingInfoSchema() throws Exception {
+ if (versionMeetsMinimum(5, 0, 7)) {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ this.stmt.executeUpdate("CREATE TABLE parent(id INT NOT NULL, "
+ + "PRIMARY KEY (id)) ENGINE=INNODB");
+ this.stmt.executeUpdate("CREATE TABLE child(id INT, parent_id INT, "
+ + "FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL) ENGINE=INNODB");
+ Properties props = new Properties();
+ props.put("useInformationSchema", "true");
+ Connection conn1 = null;
+ try {
+ conn1 = getConnectionWithProps(props);
+ DatabaseMetaData metaData = conn1.getMetaData();
+ this.rs = metaData.getImportedKeys(null, null, "child");
+ this.rs.next();
+ assertEquals("parent", this.rs.getString("PKTABLE_NAME"));
+ assertEquals("id", this.rs.getString("PKCOLUMN_NAME"));
+ assertEquals("child", this.rs.getString("FKTABLE_NAME"));
+ assertEquals("parent_id", this.rs.getString("FKCOLUMN_NAME"));
+ } finally {
+ this.stmt.executeUpdate("DROP TABLE IF EXISTS child");
+ this.stmt.executeUpdate("DROP TABLE If EXISTS parent");
+ conn1.close();
+ }
+ }
+ }
}
| Thread |
|---|
| • Connector/J commit: r4400 - branches/branch_5_0/connector-j/src/testsuite/simple | tikeda | 13 Oct |