S2JDBC-GENでバージョン管理をしない with SVN
前回の
S2JDBC-Genでデータのバージョン管理をしないようにする
だとSVNに入れたときに不都合がでたので、少し修正です。
問題点
migrateフォルダの中を消していましたが、svnで管理すると.svnフォルダができますので、整合性があわなくなります。。。そこで少しだけ違う方法で.svnフォルダを消さなくて済むようにしてみました。
前提
├─db │ │ ddl-info.txt │ │ │ └─migrate │ └─0001 │ ├─create │ └─drop
一回だけgen-ddlした状態から0000を削除した状態でsvnにコミットします。すでに何回かgen-ddlしてしまった場合にはdbフォルダ以下すべて消してから作り直してください。
(重要)このときにはまだデフォルトのs2jdbc-gen-build.xmlを使ってください!
準備
ddl-info.txtをコピーしてddl-info.txt_baseを作ります。
├─db │ │ ddl-info.txt │ │ ddl-info.txt_base │ │ │ └─migrate │ └─0001 │ ├─create │ └─drop
これはあとで利用するのですが、初期状態のddl-info.txtを保存しておきます。中身は1と書いてあるテキストファイルになります。
gen-ddlの流れ
- gen-ddl(0002フォルダにddlを作成する)
- 0002フォルダの中身を0001フォルダに上書きする
- 0002フォルダを削除する
- ddl-info.txtをddl-info.txt_baseで上書きする
これでいけます。0002を作成してからコピーして、バージョン番号を1に戻してあげます。基本的にはこれで差分があるファイルだけsvnでわかるので逆に便利かもしれません。。。
(重要)欠点として、テーブルごと削除した場合には消えませんので手で作業する必要はあります。
実際の処理
<target name="gen-ddl"> <gen-ddl ...(略)... /> <gen-test ...(略)... /> <gen-condition ...(略)... /> <gen-names ...(略)... /> <gen-service ...(略)... /> <gen-comment ...(略)... /> <gen-trigger ...(略)... /> <delete dir="db/migrate/0000"/> <copy todir="db/migrate/0001"> <fileset dir="db/migrate/0002"/> </copy> <delete dir="db/migrate/0002"/> <copy file="db/ddl-info.txt_base" tofile="db/ddl-info.txt" overwrite="true" /> </target>
gen-serviceの後ろから追加しています。
migrate時
<target name="migrate"> <clean-database rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <migrate classpathdir="${classpathdir}" statementDelimiter="/" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <exec-sql classpathref="classpath"> <sqlFileList dir="db"> <file name="dropschema.sql"/> </sqlFileList> </exe-sql> </target>
(重要)このままだとテーブルが削除されませんので、自分で全て削除する自作タスクを呼んで掃除してからmigrateする必要があります。
最後には「DROP TABLE SCHEMA_INFO」と書いたSQLを実行してSCHEMA_INFOテーブルを削除しています。この作業はなくても動きますが、邪魔な場合には削除してくださいね。
ここまでの作業を行うと、S2JDBCを利用していないプロジェクトでもS2JDBC-Genを利用してデータベースの構成管理がSVNでできるようになります!