チケット #24763

ERDDBコメントのMySQL対応

登録: 2011-04-03 00:59 最終更新: 2011-05-15 01:13

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
1

詳細

元の投稿はこちら: http://sourceforge.jp/forum/message.php?msg_id=56556

現在(Version 1.0.8)、OracleとSybaseだけのようですが、MySQLに対応して頂けないでしょうか?

MySQLのDBコメントの仕様はちょっと特殊なので、Oracleなどに比べて実装がややこしいのは承知の上ですが、一応ニーズがあるということで要望として挙げさせてください。

以下は、MySQLにおけるDBコメントの設定方法の例です。

CREATE TABLE MEMBER (
MEMBER_ID INTEGER NOT NULL auto_increment COMMENT '会員ID',
MEMBER_NAME varchar(50) NOT NULL COMMENT '会員名称',
...
) ENGINE=InnoDB COMMENT='会員' ;

チケットの履歴 (7 件中 3 件表示)

2011-04-03 00:59 更新者: takezoe
  • 新しいチケット "[ERD]DBコメントのMySQL対応" が作成されました
2011-05-14 19:55 更新者: jflute
コメント

こちらで、直接ソースを修正して試してみました。対応する際の参考になればと思います。

正常に論理名が DDL に出力され、実際にMySQLで試しコメントが登録されました。 (Mac OS X 10.5 の Eclipse-3.6.1 にて)

# ----------------------------------------------------------
#                                       AbstractDialectの修正
#                                       --------------------
AbstractDialect.createColumnDDL() の引数に、
「boolean comment」を追加。オーバーライド、
呼び出している箇所を随時修正。

AbstractDialect.createTableDDL()の
304行目付近を以下のように修正。

/- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
<旧>
sb.append(LS);
sb.append(")").append(separator).append(LS);;

<新>
sb.append(LS);
sb.append(")");
setupTableOption(root, model, schema, drop, alterTable, comment, additions, sb);
sb.append(separator).append(LS);;
- - - - - - - - - -/

AbstractDialectに、メソッドを新しく追加。

/- - - - - - - - - - - - - - - - - - - - - - - - - - - -
protected void setupTableOption(RootModel root, TableModel model,
		boolean schema, boolean drop, boolean alterTable, boolean comment,
		StringBuilder additions, StringBuffer sb) {
    // do nothing as default
}
- - - - - - - - - -/


# ----------------------------------------------------------
#                                             MySQLクラスの修正
#                                             --------------
MySQLDialect.createColumnDDL() の
AUTO_INCREMENT の処理の後にコメント処理の追加。

/- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
if(comment) {
	if(columnModel.getLogicalName() != null && columnModel.getLogicalName().length() > 0) {
		ddl += " COMMENT '" + columnModel.getLogicalName() + "'";
	}
}
- - - - - - - - - -/

MySQLDialectにて、setupTableOption() を
オーバーライドしてコメント処理を追加。

/- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
@Override
protected void setupTableOption(RootModel root, TableModel model,
		boolean schema, boolean drop, boolean alterTable, boolean comment,
		StringBuilder additions, StringBuffer sb) {
	super.setupTableOption(root, model, schema, drop, alterTable, comment, additions, sb);
	if(comment) {
		if(model.getLogicalName() != null && model.getLogicalName().length() > 0) {
			sb.append("COMMENT='").append(model.getLogicalName()).append("'");
		}
	}
}
- - - - - - - - - -/
2011-05-14 20:01 更新者: jflute
コメント

ちなみに、MySQLのコメント領域は、60文字までという制限があるようですが、 ひとまず論理名に関しては現実的に60文字を超えることはないかなと思われるので、 特に何も考慮しない形になっています。恐らく、別件の「説明」もコメントに追加する 処理を対応する場合は考慮が必要になってくるかと思います。

2011-05-14 20:35 更新者: takezoe
コメント

こちらの対応、よろしければ修正されたソースをメールでお送りいただけないでしょうか?

2011-05-14 21:26 更新者: jflute
コメント

こちらの対応、よろしければ修正されたソースをメールでお送りいただけないでしょうか?

mysql-comment.zip を添付致しました。 重要な修正は、AbstractDialect と MySQLDialect ですが、 メソッド引数の追加で影響を受けたクラスも含まれてます。

JDK5で存在しない(はず)の java.sql.Types の定数への参照箇所を自分の環境ではコメントアウトしているのですが、zip に固める前に元に戻しています。 具体的には MSSQLDialect と PostgreSQLDialect です。(Types.NCHAR, Types.NVARCHAR, Types.SQLXML)

2011-05-15 01:13 更新者: takezoe
  • チケット完了時刻2011-05-15 01:13 に更新されました
  • 状況オープン から 完了 に更新されました
コメント

ありがとうございます。取り込ませていただきました。

添付ファイルリスト

  • mysql-comment.zip(10KB)
    • 試してみたソース (詳しくはコメント欄にて)

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする