| Bug #20912 | DatabaseMetaData.getTables hangs/memory leaks | ||
|---|---|---|---|
| Submitted: | 8 Jul 2006 3:38 | Modified: | 12 Jul 2006 10:01 |
| Reporter: | George Van Treeck | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | Connector / J | Severity: | S1 (Critical) |
| Version: | 3.1.13 | OS: | Windows (Windows XP, SP 2) |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | DatabaseMetaData, getTables | ||
[12 Jul 2006 9:57]
Tonci Grgin
Test case
Attachment: Main.java (text/x-java), 2.57 KiB.
[12 Jul 2006 10:01]
Tonci Grgin
Hi George, thanks for your problem report. I was unable to verify it with test case attached. There might be some problems with your server settings / privileges causing reported behavior.
Environment:
MySQL server 5.0.24BK on Suse 10
WinXP SP2 client with mysql-connector-java-3.1.13 GA and JDK 1.6
Test output:
init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\Tonci\TestB20912-13\build\classes
compile:
run:
Connected
Testing default schema, schema not-null (mysql)
Schema: mysql
ROW: 1 Table: columns_priv
ROW: 2 Table: db
ROW: 3 Table: func
ROW: 4 Table: help_category
ROW: 5 Table: help_keyword
ROW: 6 Table: help_relation
ROW: 7 Table: help_topic
ROW: 8 Table: host
ROW: 9 Table: proc
ROW: 10 Table: procs_priv
ROW: 11 Table: tables_priv
ROW: 12 Table: time_zone
ROW: 13 Table: time_zone_leap_second
ROW: 14 Table: time_zone_name
ROW: 15 Table: time_zone_transition
ROW: 16 Table: time_zone_transition_type
ROW: 17 Table: user
ROW: 18 Table: user_info
Testing default schema, schema null (mysql)
Schema: mysql
ROW: 1 Table: columns_priv
ROW: 2 Table: db
ROW: 3 Table: func
ROW: 4 Table: help_category
ROW: 5 Table: help_keyword
ROW: 6 Table: help_relation
ROW: 7 Table: help_topic
ROW: 8 Table: host
ROW: 9 Table: proc
ROW: 10 Table: procs_priv
ROW: 11 Table: tables_priv
ROW: 12 Table: time_zone
ROW: 13 Table: time_zone_leap_second
ROW: 14 Table: time_zone_name
ROW: 15 Table: time_zone_transition
ROW: 16 Table: time_zone_transition_type
ROW: 17 Table: user
ROW: 18 Table: user_info
Testing not-default schema, schema not-null (test)
Schema: test
ROW: 1 Table: TESTBINARY
ROW: 2 Table: TESTBINDPARAM
ROW: 3 Table: TESTSTREAM
ROW: 4 Table: TestTest
ROW: 5 Table: da
ROW: 6 Table: deps
ROW: 7 Table: lpsfrtinv
ROW: 8 Table: master
ROW: 9 Table: packages
ROW: 10 Table: people
ROW: 11 Table: releases
ROW: 12 Table: reserved
ROW: 13 Table: slave
ROW: 14 Table: tblTransactions
ROW: 15 Table: test
ROW: 16 Table: test1
ROW: 17 Table: test11
ROW: 18 Table: test_bind_fetch
ROW: 19 Table: test_table
ROW: 20 Table: testtable
ROW: 21 Table: tst20306
ROW: 22 Table: tstidx
Testing default schema, schema not-null (mysql), pattern 'time%'
Schema: mysql
ROW: 1 Table: time_zone
ROW: 2 Table: time_zone_leap_second
ROW: 3 Table: time_zone_name
ROW: 4 Table: time_zone_transition
ROW: 5 Table: time_zone_transition_type
Testing not-default schema, schema not-null (test), pattern 'TEST%'
Schema: test
ROW: 1 Table: TESTBINARY
ROW: 2 Table: TESTBINDPARAM
ROW: 3 Table: TESTSTREAM
BUILD SUCCESSFUL (total time: 0 seconds)

Description: Trying to list tables on a non-default catalog causes a hang and memory leak. For example, when the default catalog is "inventory" (specified in the URL for creating the connection): getTables("orders", null, "%", tableTypes) hangs and memory usage starts to grow very large... Also, getTables("orders", null, "shipto", tableTypes) hangs and memory usage starts to grow... The "orders" catalog and "shipto" table both exist. As a work-around, I tried to pass null as the catalog and just pick out those tables with a matching catalog name. But, instead of listing all tables for all catalogs, it only lists tables in the default catalog (another bug). Thus, there is no work-around to get a listing of tables outside the default catalog. This is critical issue because most large applications access across catalogs. For example, data in "accounts" recievables/payables might be updated when "orders" or "inventory" are updated. I was using Connector/J 3.1.3 with MySQL 5.0. How to repeat: Into some existing program you already have, insert a statement that calls getTables specifying a non-default catalog name and use a wild card ("%") for the table name parameter.