List:Internals« Previous MessageNext Message »
From:tikeda Date:October 13 2005 11:39pm
Subject:Connector/J commit: r4400 - branches/branch_5_0/connector-j/src/testsuite/simple
View as plain text  
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/simpletikeda13 Oct