[Seasar-user:11194] Re: [dolteng]DatabaseViewでHiRDBのテーブルのスキーマ情報取得

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 10月 22日 (月) 13:33:28 JST


小林さん。

お世話になっております。
坂口です。 

下記確認用のコードを実行したところgetTableTypesメソッドでSQLExceptionが発生します。
SQLExceptionが発生する理由ですが、HiRDBのtype4ドライバではgetTableTypesメソッドが未サポートの為です。
(HiRDBのマニュアルには、HiRDBのtype4ドライバはgetTableTypesメソッドを使用するとSQLExceptionをthrowすると説明があります。)

そこで、確認用のコードのgetTableTypeメソッドをコメントアウトし、
getTablesメソッドでSYNONYMを渡した場合にエラーが発生するか確認したところ、
確かにエラーが発生します。(下記参照)
//ResultSet rs = dbmd.getTableType();
//while (rs.next()) {
//  System.out.println(rs.getString(1));
//}
//rs.close();
dbmd.getTables(null, schema, "%", new String[] {"SYNONYM"}); // SYNONUMでなくSYNONYMにしました。

上記実行時、テーブル型がSYNONYMなのが原因と思われるので、テーブル型を限定せずに実行し、
下記コードでテーブル型を出力すると、実表はOracleの場合はSYNONYM 、HiRDBの場合、BASE TABLEが出力されます。
ResultSet rs = dbmd.getTables(null, "%", "%", null);
while (rs.next()) {	
  System.out.println(rs.getString("TABLE_TYPE"));
}

以上のことから、HiRDBではgetTableTypesメソッドを使用してスキーマ情報を取得するのは不可のようですが、
getTablesメソッドでSYNONYMをBASE TABLEにすれば、スキーマ情報が取得できそうです。
ちなみに、HiRDBのテーブルの型は以下関係です。
表の型名 : 説明
SYSTEM TABLE : システム表
BASE TABEL : 実表
VIEW : ビュー表
ALIAS : 別表
(他にもありますが、省略します)


doltengでスキーマ情報取得時、取得対象のテーブルの型をgetTableTypesメソッドで指定しているならば、
上記で本問題は解決できそうですが御対応いただけますでしょうか?
doltengのスキーマ情報取得処理で誤り等ありましたら大変申し訳ございませんが、以上要望として提案させていただきます。

また、コミッタの件、大変ありがたいお話ですが、
少し検討してみますので、お返事は少々お待ち下さい。

-----Original Message-----
From: [E-MAIL ADDRESS DELETED] [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Koichi Kobayashi
Sent: Friday, October 19, 2007 11:00 PM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11158] Re: [dolteng]DatabaseViewでHiRDBのテーブルのスキーマ情報取得

小林 (koichik) です.

Date:    Fri, 19 Oct 2007 14:56:18 +0900
From:    <[E-MAIL ADDRESS DELETED]>
To:       <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:11135] [dolteng]DatabaseViewでHiRDBのテーブルのスキーマ情報取得

> ■エラー内容(Eclipseの[エラー・ログ]ビューの表示内容)
> [ESSR0072]SQLで例外発生(SQL[],Message=[KFPJ01017-E Invalid table 
> type,index=3 table type=SYNONYM[jdbMakerMetaData.getResultTables]]),
> ErrorCode=-1001017,SQLState=R2400)が発生しました
> 
> 上記エラー内容の、「KFPJ1017-E」がHiRDBのエラーコードですが、
> 「getTablesメソッドの引数でString型配列にしていたテーブルの型に誤りがある。」場合に表示されるメッセージです。
> (エラーメッセージの詳細ですが、indexはString型配列の添え字、
> typeは指定したテーブルの型の値。)

HiRDB では getTables() で SYNONYM を渡すと
エラーになるということでしょうか.
DatabaseMetaData#getTableTypes() から取得するのが
筋ではあるので,その方向で対処したいと思います.

念のため,以下のコードを実行して
確認していただけないでしょうか.

con = ...;
DatabaseMetaData dbmd = getMetaData();

ResultSet rs = dbmd.getTableType();
while (rs.next()) {
  System.out.println(rs.getString(1));
}
rs.close();
dbmd.getTables(null, schema, "%", new String[] {"SYNONUM"});


最後の行の schema は必要なら適切に指定してください.

おそらく,標準出力に SYNONYM が出力されず,最後の行で
KFPJ1017-E な例外がスローされるのだと思います.

P.S.
こちらでは HiRDB の環境もなければ情報もほとんど
持ち合わせていないので,HiRDB で動かなくても
対処が難しいこともありそうです.
できれば日立グループの何方かに Dolteng の
コミッタになっていただいて,HiRDB での動作確認や
問題の対処などでご協力いただけると助かります.



--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>

_______________________________________________
Seasar-user mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/seasar-user



Seasar-user メーリングリストの案内