Bug #65213 | Connector/J does not retrieve the table comment in a InnoDB table | ||
---|---|---|---|
Submitted: | 5 May 2012 17:53 | Modified: | 28 Jun 2012 11:18 |
Reporter: | Nicola Mascheroni | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | Connector / J | Severity: | S3 (Non-critical) |
Version: | MySQL 5.5.22 - Connector/J 5.1.20 | OS: | Windows (Vista SP 2 Home Premium) |
Assigned to: | Alexander Soklakov | CPU Architecture: | Any |
Tags: | Connector/J, java, Remaks, table |
[5 May 2012 17:53]
Nicola Mascheroni
[5 May 2012 20:09]
Nicola Mascheroni
I think you can try to correct this: class: com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema method: getTables (row 1482) row: 1599 try new Field("", "REMARKS", java.sql.Types.VARCHAR, 255) }); instead of new Field("", "REMARKS", java.sql.Types.VARCHAR, 0) });
[11 May 2012 17:30]
Sveta Smirnova
Thank you for the report. Verified as described. Test case for testsuite: import testsuite.BaseTestCase; import java.sql.ResultSet; import java.sql.DatabaseMetaData; public class bug65213 extends BaseTestCase { public bug65213(String name) { super(name); } public static void main(String[] args) { junit.textui.TestRunner.run(bug65213.class); } public void testBug65213() throws Exception { try { this.stmt.execute("DROP TABLE IF EXISTS table_1"); this.stmt.execute("CREATE TABLE table_1(f1 int, f2 timestamp, f3 timestamp) comment='foobar'"); DatabaseMetaData dmd = this.conn.getMetaData(); ResultSet rs = dmd.getTables(null, "test", "table_1", null); assertTrue("1 column must be found", rs.next()); assertEquals("Can not retrieve table comment", rs.getString("REMARKS"), "foobar"); } finally { // closeMemberJDBCResources(); } } }
[26 Jun 2012 11:31]
Valeriy Kravchuk
Bug #65705 was marked as a duplicate of this one.
[27 Jun 2012 11:26]
Alexander Soklakov
Sveta, default value of "useInformationSchema" connection property is "false". That means you get a DatabaseMetaData object instead of DatabaseMetaDataUsingInfoSchema in test case above and results of SHOW FULL TABLES, which doesn't contains REMARKS. Nicola, do you use useInformationSchema=true?
[28 Jun 2012 7:35]
Alexander Soklakov
That works fine for me: package testsuite.simple; import testsuite.BaseTestCase; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.util.Properties; import com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema; public class TestBug65213 extends BaseTestCase { public TestBug65213(String name) { super(name); } public static void main(String[] args) { junit.textui.TestRunner.run(TestBug65213.class); } public void testBug65213() throws Exception { this.stmt.execute("DROP TABLE IF EXISTS testBug65213"); createTable("testBug65213", "(f1 int, f2 timestamp, f3 timestamp) comment='foobar'", "InnoDB"); Connection is_conn = null; try { Properties props = new Properties(); props.setProperty("useInformationSchema", "true"); is_conn = getConnectionWithProps(props); DatabaseMetaData dmd = is_conn.getMetaData(); assertTrue(dmd instanceof DatabaseMetaDataUsingInfoSchema); this.rs = dmd.getTables(null, "test", "testBug65213", null); assertTrue("1 column must be found", rs.next()); assertEquals("Can not retrieve table comment", rs.getString("REMARKS"), "foobar"); } finally { if (is_conn != null) { is_conn.close(); } } } }
[28 Jun 2012 11:18]
Sveta Smirnova
Alexander, you are correct: this is my mistake and not a bug. User must use useInformationSchema=true
[21 Aug 2012 14:30]
Alexander Soklakov
Bug#66442 was marked as a duplicate of this one.