待辦事項 #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='会員' ;

Ticket History (3/7 Histories)

2011-04-03 00:59 Updated by: takezoe
  • New Ticket "ERDDBコメントのMySQL対応" created
2011-05-14 19:55 Updated by: 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 Updated by: jflute
評語

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

2011-05-14 20:35 Updated by: takezoe
評語

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

2011-05-14 21:26 Updated by: jflute
評語

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

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

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

2011-05-15 01:13 Updated by: takezoe
  • 狀態 Update from 開啟 to 關閉
  • Ticket Close date is changed to 2011-05-15 01:13
評語

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

Attachment File List

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

編輯

Please login to add comment to this ticket » 登入