[seasar-dotnet:2373] Re: DBFlute.NETに要望

kubo [E-MAIL ADDRESS DELETED]
2014年 9月 15日 (月) 21:36:47 JST


久保(jflute)です

竹内さん、遅くなりましたが、
Firebirdの情報ありがとうございます!

> 別のプロジェクトにて replace-schema.bat を実行してみましたら、
> table, view, trigger, procedure は削除されました (!!!)
>
> が、generator, domain, exception, function, role は削除されませんでした。

なるほど、理解しました。
まあ、table, view, trigger, procedure は、
DBFluteのデフォルトでdropするオブジェクトなので、
JDBCドライバでメタデータが取れる限りdropされます。
(triggerは...何もしてないはずだけどprocedureと同じ扱いなのかな...!?)

それ以外のものは、Firebird固有のものということでdropされないですね。
環境作ってメタデータを取得する方法を調べてdropする実装しないとですね。

ありがとうございます。
いま他にやることがたまっているので遅々としてしまいますが、
やるべきことはハッキリしましたので、
アプローチできるタイミング見計らってときにやってみたいと思います。

> 現状、replace-schema.bat を実行させる際には「FlameRobin」というツールにて
> 「Recreate empty database」コマンドを実行して、空のdbファイルを作成しております。

とりあえずは、replace-schema.bat|shを修正して、
そのコマンドを組み込んでしまえばですね。





2014-09-01 11:15 GMT+09:00 竹内学 <mtakeuchi @ ailesys.co.jp>:
> TO:久保(jflute)さん
>
> 竹内です。お世話様です。
>
> 別のプロジェクトにて replace-schema.bat を実行してみましたら、
> table, view, trigger, procedure は削除されました (!!!)
>
> が、generator, domain, exception, function, role は削除されませんでした。
>
> 一応
> ; objectTypeTargetList = list:{TABLE ; VIEW ; DOMAIN ; EXCEPTION ; FUNCTION
> ; GENERATOR ; ROLE }
>
> と指定はしていますが、そもそも合っているのかしら?
> # まぁ、Firebird は非対応ですから、動くことが驚きです。
>
> よろしくお願いします。
>
>
>
> 2014年9月1日 10:56 竹内学 <mtakeuchi @ ailesys.co.jp>:
>
>> TO:久保(jflute)さん
>>
>> 竹内です。レス遅くなって申し訳ございませんでした。
>>
>> MacOS X に入れた事は無いので、足りないところは判らないですが、
>> Windows 7 では、jaybird-full-2.2.5.jar を入れているぐらいです。
>>
>> ただ、JNI 関連とのことですので、(私は入れていませんが...) jaybird22.dll (Windowsの場合)か
>> libjaybird22.so (Linuxの場合)が必要なのかも知れません (MacOS X 用は無いのか???)。
>>
>> ちなみに、databaseInfoMap.dfprop はどの様にされていますか?
>>
>> 私の環境では
>>
>> map:{
>>     ; driver   = org.firebirdsql.jdbc.FBDriver
>>     ; url      =
>> jdbc:firebirdsql://localhost:3050/DBFILE.FDB?encoding=UNICODE_FSS
>>     ; schema   = DBFILE
>>     ; user     = SYSDBA
>>     ; password = masterkey
>> }
>>
>> の様にしています。
>>
>> この設定は Embedded では無くて、Super Server での接続ですが...
>> # ${FIREBIRD_HOME}/aliases.conf にエイリアスを記述しておくと、フルパスで接続しなくても良いです。
>>
>>
>> > あと、ReplaceSchemaを実行したときのdropされないときの
>> > エラー内容はどのようなものでしょうか?
>>
>> こちらは既存のスキーマ取得に失敗しているのか、既存オブジェクトを削除するようには動いていないようです。
>>
>> その為、古いオブジェクトが残ったまま、create xxx が動こうとするので、
>> unsuccessful metadata update が発生しています。
>>
>> 現状、replace-schema.bat を実行させる際には「FlameRobin」というツールにて「Recreate empty
>> database」コマンドを実行して、空のdbファイルを作成しております。
>>
>> ログの抜粋を貼り付けておきます。
>>
>> > [df-replace-schema] 2014-09-01 10:33:46,633 INFO  - ...Preparing data
>> > source:
>> > [df-replace-schema] 2014-09-01 10:33:46,635 INFO  -   driver =
>> > org.firebirdsql.jdbc.FBDriver
>> > [df-replace-schema] 2014-09-01 10:33:46,636 INFO  -   url    =
>> > jdbc:firebirdsql://localhost:3050/DBNAME.FDB?encoding=UNICODE_FSS
>> > [df-replace-schema] 2014-09-01 10:33:46,639 INFO  -   user   = SYSDBA
>> > [df-replace-schema] 2014-09-01 10:33:46,657 INFO  - ...Connecting to
>> > database by data source:
>> > [df-replace-schema] 2014-09-01 10:33:46,818 INFO  -   product = Firebird
>> > 2.53WI WI-V2.5.1.26351
>> > [df-replace-schema] 2014-09-01 10:33:46,819 INFO  -   driver  = Jaybird
>> > JCA/JDBC driver 2.2 for JDBC 4.1
>> > [df-replace-schema] 2014-09-01 10:33:46,833 INFO  -
>> > [df-replace-schema] 2014-09-01 10:33:46,834 INFO  - * * * * * * * * * *
>> > *
>> > [df-replace-schema] 2014-09-01 10:33:46,835 INFO  - *
>> > *
>> > [df-replace-schema] 2014-09-01 10:33:46,836 INFO  - * Initialize Schema
>> > *
>> > [df-replace-schema] 2014-09-01 10:33:46,836 INFO  - *
>> > *
>> > [df-replace-schema] 2014-09-01 10:33:46,837 INFO  - * * * * * * * * * *
>> > *
>> > [df-replace-schema] 2014-09-01 10:33:46,850 INFO  - ...Getting tables:
>> > [df-replace-schema] 2014-09-01 10:33:46,851 INFO  -   schema = {DBFILE
>> > as main}
>> > [df-replace-schema] 2014-09-01 10:33:46,852 INFO  -   types  = [TABLE,
>> > VIEW]
>> > [df-replace-schema] 2014-09-01 10:33:46,894 INFO  -
>> > [df-replace-schema] 2014-09-01 10:33:46,895 INFO  - * * * * * * * * *
>> > [df-replace-schema] 2014-09-01 10:33:46,895 INFO  - *               *
>> > [df-replace-schema] 2014-09-01 10:33:46,896 INFO  - * Create Schema *
>> > [df-replace-schema] 2014-09-01 10:33:46,896 INFO  - *               *
>> > [df-replace-schema] 2014-09-01 10:33:46,897 INFO  - * * * * * * * * *
>> > [df-replace-schema] 2014-09-01 10:33:46,900 INFO  - ...Firing:
>> > replace-schema-0000000000.sql
>> > [df-replace-schema] 2014-09-01 10:33:46,906 INFO  -
>>
>> > [df-replace-schema] create domain T_BOOL as smallint
>> > [df-replace-schema]     default 0
>> > [df-replace-schema]     check ((value is null) or (value in (0, 1)))
>> > [df-replace-schema] 2014-09-01 10:29:48,549 INFO  - {Create Schema}:
>> > success=0 failure=1 *break (in 1 files)
>> > [df-replace-schema] 2014-09-01 10:29:48,582 ERROR - Look! Read the
>> > message below.
>> > [df-replace-schema] /* * * * * * * * * * * * * * * * * * * * * * * * * *
>> > * * * * * * * *
>> > [df-replace-schema] Failed to execute DBFlute Task 'ReplaceSchema'.
>> > [df-replace-schema]
>> > [df-replace-schema] [Advice]
>> > [df-replace-schema] Check the exception messages and the stack traces.
>> > [df-replace-schema]
>> > [df-replace-schema] [Database Product]
>> > [df-replace-schema] Firebird 2.53WI WI-V2.5.1.26351
>> > [df-replace-schema]
>> > [df-replace-schema] [JDBC Driver]
>> > [df-replace-schema] Jaybird JCA/JDBC driver 2.2 for JDBC 4.1
>> > [df-replace-schema] * * * * * * * * * */
>> > [df-replace-schema] org.seasar.dbflute.exception.SQLFailureException:
>> > Look! Read the message below.
>> > [df-replace-schema] /* * * * * * * * * * * * * * * * * * * * * * * * * *
>> > * * * * * * * *
>>
>>
>> > [df-replace-schema] create domain T_BOOL as smallint
>> > [df-replace-schema]     default 0
>> > [df-replace-schema]     check ((value is null) or (value in (0, 1)))
>> > [df-replace-schema]
>> > [df-replace-schema] [SQLState]
>> > [df-replace-schema] 42000
>> > [df-replace-schema]
>> > [df-replace-schema] [ErrorCode]
>> > [df-replace-schema] 335544351
>> > [df-replace-schema]
>> > [df-replace-schema] [SQLException]
>> > [df-replace-schema] org.firebirdsql.jdbc.FBSQLException
>> > [df-replace-schema] GDS Exception. 335544351. unsuccessful metadata
>> > update
>> > [df-replace-schema] STORE RDB$FIELDS failed
>> > [df-replace-schema] null
>> > [df-replace-schema] null
>> > [df-replace-schema] attempt to store duplicate value (visible to active
>> > transactions) in unique index "RDB$INDEX_2"
>> > [df-replace-schema] * * * * * * * * * */
>> > [df-replace-schema]     at
>> > org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileRunnerBase.throwSQLFailureException(DfSqlFileRunnerBase.java:588)
>> > [df-replace-schema]     at
>> > org.seasar.dbflute.helper.jdbc.sqlfile.DfSqlFileRunnerExecute.execSQL(DfSqlFileRunnerExecute.java:80)
>>
>>
>>
>> > ※片手間で、Firebirdアプローチしてみようかと思います
>>
>> 有り難うございます。取りあえず開発は滞りなく出来ましたので、
>> 全然急いでおりません。
>>
>> ご面倒をお掛けいたしますが、何卒よろしくお願いいたします。
>>
>>
>>
>>
>> 2014年8月30日 22:32 kubo <dbflute @ gmail.com>:
>>
>>> 久保(jflute)です
>>>
>>> 竹内さん、
>>> すいません、ちょっとFirebirdについて教えて頂けないでしょうか?
>>>
>>> JDBCドライバのjarファイルは同梱されていないので、
>>> extlibに配置する必要があると思いますが、
>>> 配置しているのは、jaybird-full-2.2.5.jar でしょうか?
>>>
>>> また、それ以外に特別に用意したものはあるでしょうか?
>>>
>>> MacOSXに入れて試してみたのですが、
>>> (色々と壁を乗り越えながら...)
>>> java.lang.UnsatisfiedLinkError: no jaybird22 in java.library.path
>>> となり、JNIの設定が別途必要かなと。
>>>
>>>
>>> あと、ReplaceSchemaを実行したときのdropされないときの
>>> エラー内容はどのようなものでしょうか?
>>>
>>>
>>> ※片手間で、Firebirdアプローチしてみようかと思います
>>>
>>>
>>>
>>>
>>>
>>> 2014-08-29 15:14 GMT+09:00 kubo <dbflute @ gmail.com>:
>>> > 久保(jflute)です
>>> >
>>> >> > > 1) 主キー以外を参照する additionalForeignKey
>>> >> > ${referrer.localColumnAsOne.javaNative}
>>> >>
>>> >> こちらのパッチで問題ございませんでした。
>>> > ご確認ありがとうございました!
>>> > こちら本体にも入れておきますね。
>>> >
>>> >> > 私のところではDateTime?やint?として正しく生成されています。
>>> >> そうですか... Firebird の影響かなぁ... もう少し調べてみます。
>>> > 自分も問題なく動作していますが(dbflute.net-quill-exampleにて)、
>>> > DBMSがそこに影響するとは考えにくいですねぇ...
>>> > ちょうどその部分のプログラムは、以下のように感じです。
>>> > 行コメントであっても、ParameterBeanの!!であればフィルターしないと。
>>> >
>>> >     protected String replaceCommentQuestionMarkIfNeeds(String line) {
>>> >         if (line.indexOf("--!!") >= 0 || line.indexOf("-- !!") >= 0) {
>>> >             // If the line comment is for a property of parameter-bean,
>>> >             // it does not replace question mark.
>>> >             return line;
>>> >         }
>>> >         return super.replaceCommentQuestionMarkIfNeeds(line);
>>> >     }
>>> >
>>> > ちょっとうーむー、ですね。。。
>>> >
>>> >
>>> > #
>>> > # AutoDetectを使うと、単なるDateTimeになっちゃうんでしたっけ。。。
>>> > # C#では、はてなを自動で判別できるようにしないとですね。
>>> > #
>>> >
>>> >
>>> > 2014-08-29 14:10 GMT+09:00 竹内学 <mtakeuchi @ ailesys.co.jp>:
>>> >> jfluteさん
>>> >>
>>> >> 竹内です。早速のレス有り難うございました。
>>> >>
>>> >>> > 1) 主キー以外を参照する additionalForeignKey
>>> >>> ${referrer.localColumnAsOne.javaNative}
>>> >>
>>> >> こちらのパッチで問題ございませんでした。
>>> >>
>>> >>
>>> >>> > 2) 外だしSQLの引数にNullable型の使用
>>> >>> お、こちらですが、EntityではなくParameterBeanの方でしょうか?
>>> >>
>>> >> スミマセン。ParameterBean の方でした m(_~_)m
>>> >>
>>> >>
>>> >>> taknb2nch さん
>>> >>> SQLServer、PostgreSQLでしか分かりませんが、
>>> >>> 私のところではDateTime?やint?として正しく生成されています。
>>> >>
>>> >> そうですか... Firebird の影響かなぁ... もう少し調べてみます。
>>> >>
>>> >>
>>> >>
>>> >>> しかも、Firebirdとは(^^。
>>> >>
>>> >> スミマセン。Firebird とは長い付き合いなもので...
>>> >>
>>> >> しかも、ローカル実行用に Embedded 版があるので、
>>> >> 必要な実行環境もデータファイルもファイルコピーで済むので、
>>> >> セットアップ作るのが簡単なんですよ。
>>> >>
>>> >> この手軽さに匹敵するのは MS-Access ぐらいですが、
>>> >> こちらはちょっとクセが強くて orz
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> 2014年8月29日 11:32 kubo <dbflute @ gmail.com>:
>>> >>>
>>> >>> jfluteです
>>> >>>
>>> >>>
>>> >>> 竹内さん、こんにちは
>>> >>> DBFlute.NETのご利用ありがとうございます!
>>> >>> しかも、Firebirdとは(^^。
>>> >>> やはり、しっかりサポートしないとですね。
>>> >>>
>>> >>> > 1) 主キー以外を参照する additionalForeignKey
>>> >>> ちょっと試してもらえませんでしょか?
>>> >>> mydbflute の BaseBhv.vmnet の 223 行目を
>>> >>> ${table.getPrimaryKeyJavaNativeAsOne()}
>>> >>>  ↓
>>> >>> ${referrer.localColumnAsOne.javaNative}
>>> >>> と変更してみたら、どうでしょう?
>>> >>>
>>> >>> > 2) 外だしSQLの引数にNullable型の使用
>>> >>> お、こちらですが、EntityではなくParameterBeanの方でしょうか?
>>> >>> birthDateのプロパティ型が DateTimeQ になってしまっているとか。
>>> >>> (CODEカラムは、##指定により string!?)
>>> >>>
>>> >>> > 3) replace-schema.bat で既存のオブジェクトが削除されない
>>> >>> > 4) isIncrementSequenceToDataMax = true の対応
>>> >>> こちらは、Alto DBFluteパートなので、
>>> >>> jfluteがちゃんとExample作った対応しないとですね。
>>> >>> ちょっとすぐの対応がなかなか難しいですが、
>>> >>> Firebirdも少なくともAltoは動くようにしたいなと。
>>> >>>
>>> >>>
>>> >>> 2014-08-29 10:26 GMT+09:00 竹内学 <mtakeuchi @ ailesys.co.jp>:
>>> >>> > 竹内です。お世話になります。
>>> >>> >
>>> >>> > DBFlute.NET 0.8.9.58 + Firebird 2.5 (非公式ですが) で開発しておりました (ほぼ完了)。
>>> >>> >
>>> >>> > DBFlute.NET いいですよー。バシバシ使い倒したいと思っております。
>>> >>> >
>>> >>> > で、開発途中、ちょっと修正して貰えたらなぁと言うのがいくつかありましたので、
>>> >>> > 要望としてメールします。
>>> >>> >
>>> >>> > 1) 主キー以外を参照する additionalForeignKey で自動生成コードのデータ型
>>> >>> >    次の様なテーブルがあったとします。
>>> >>> >
>>> >>> > create table DEPARTMENT (
>>> >>> > ID bigint not null
>>> >>> > , CODE varchar(20) not null
>>> >>> > , NAME varchar(80) not null
>>> >>> > , constraint DEPARTMENT_PK primary key (ID)
>>> >>> > , constraint DEPARTMENT_UQ1 unique (CODE)
>>> >>> > );
>>> >>> >
>>> >>> > create table EMPLOYEE (
>>> >>> > ID bigint not null
>>> >>> > , CODE varchar(20) not null
>>> >>> > , NAME varchar(20) not null
>>> >>> > , BIRTH_DATE DATE
>>> >>> > , DEPARTMENT_CODE varchar(20) not null -- DEPARTMENT.CODE を参照
>>> >>> > , constraint EMPLOYEE_PK primary key (ID)
>>> >>> > , constraint EMPLOYEE_UQ1 unique (CODE)
>>> >>> > );
>>> >>> >
>>> >>> > additionalForeignKeyMap.dfprop に次の様に宣言をしました。
>>> >>> > map:{
>>> >>> > ; EMPLOYEE_FK1 = map:{
>>> >>> > ; localTableName = EMPLOYEE ; foreignTableName = DEPARTMENT
>>> >>> > ; localColumnName = DEPARTMENT_CODE ; foreignColumnName = CODE
>>> >>> >  }
>>> >>> > }
>>> >>> >
>>> >>> > この状態で generate.bat を実行しますと、BsDeparmentBhv.cs に
>>> >>> >
>>> >>> > public virtual void LoadInventoryTempList(IList<Department>
>>> >>> > departmentList,
>>> >>> > LoadReferrerOption<InventoryTempCB, InventoryTemp>
>>> >>> > loadReferrerOption) {
>>> >>> > AssertObjectNotNull("departmentList", departmentList);
>>> >>> > AssertObjectNotNull("loadReferrerOption", loadReferrerOption);
>>> >>> > if (departmentList.Count == 0) { return; }
>>> >>> > InventoryTempBhv referrerBhv =
>>> >>> > xgetBSFLR().Select<InventoryTempBhv>();
>>> >>> > HelpLoadReferrerInternally<Department, long?, InventoryTempCB,
>>> >>> > InventoryTemp>
>>> >>> > (departmentList, loadReferrerOption, new
>>> >>> > MyInternalLoadInventoryTempListCallback(referrerBhv));
>>> >>> > }
>>> >>> >
>>> >>> > protected class MyInternalLoadInventoryTempListCallback :
>>> >>> > InternalLoadReferrerCallback<Department, String, InventoryTempCB,
>>> >>> > InventoryTemp> {
>>> >>> > ... 略 ...
>>> >>> >
>>> >>> >   の様に出力されます (他にも似たコードが...)。
>>> >>> >
>>> >>> >   ここの問題は、MyInternalLoadInventoryTempListCallback
>>> >>> > で宣言されている型引数の第2パラメータは
>>> >>> > String
>>> >>> > となっています。
>>> >>> >   しかし、LoadInventoryTempList の中では long? として宣言しています。
>>> >>> >   まぁ、手で直せるレベルだったので、手で直しましたが、
>>> >>> >   generate.bat を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんと出力して頂けたらなぁと。
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> > 2) 外だしSQLの引数にNullable型の使用
>>> >>> >    外だしSQLを次の様に宣言をしたとします。
>>> >>> >
>>> >>> > /*
>>> >>> > [df:title]
>>> >>> > 社員コードの検索
>>> >>> > */
>>> >>> > -- #df:entity#
>>> >>> > -- ##string CODE##
>>> >>> > -- !df:pmb!
>>> >>> > -- !!DateTime? birthDate!!
>>> >>> > select CODE
>>> >>> > from EMPLOYEE
>>> >>> > /*BEGIN*/
>>> >>> > where
>>> >>> > /*IF pmb.BirthDate != null*/
>>> >>> > BIRTH_DATE >= /*pmb.BirthDate*/'2001/01/01'
>>> >>> > /*END*/
>>> >>> > /*END*/
>>> >>> > order by CODE asc
>>> >>> >
>>> >>> >   これで sql2entity.bat で生成された entity クラスのデータ型は DateTime? ではなくて
>>> >>> > DateTimeQ
>>> >>> > となっています。
>>> >>> >   これも、手で直せるレベルだったので、手で直しましたが、
>>> >>> >   sql2entity.bat
>>> >>> > を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんとしたデータ型で出力して頂けたらなぁと。
>>> >>> >
>>> >>> >   あと、結果をスカラ型受けるのって対応していない? 色々チャレンジしてみましたが、途中で諦めました。
>>> >>> >
>>> >>> >
>>> >>> > --- 以下は Firebird が非対応である事は承知の上で... ---
>>> >>> > 3) replace-schema.bat で既存のオブジェクトが削除されない
>>> >>> > 4) isIncrementSequenceToDataMax = true の対応
>>> >>> >
>>> >>> >
>>> >>> > 以上です。
>>> >>> >
>>> >>> > ご検討頂けましたら、幸いに存じます。
>>> >>> >
>>> >>> > よろしくお願いします。
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> > --
>>> >>> > 竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
>>> >>> > 株式会社エールシステム
>>> >>> >
>>> >>> >
>>> >>> > _______________________________________________
>>> >>> > seasar-dotnet mailing list
>>> >>> > seasar-dotnet @ ml.seasar.org
>>> >>> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>> >>> >
>>> >>> _______________________________________________
>>> >>> seasar-dotnet mailing list
>>> >>> seasar-dotnet @ ml.seasar.org
>>> >>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>> >>>
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> 竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
>>> >> 株式会社エールシステム
>>> >> 〒384-0083 長野県小諸市大字市665-9
>>> >> Phone: 0267-25-5990
>>> >> Facsimile: 0267-26-1324
>>> >>
>>> >> _______________________________________________
>>> >> seasar-dotnet mailing list
>>> >> seasar-dotnet @ ml.seasar.org
>>> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>> >>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> seasar-dotnet @ ml.seasar.org
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>>
>>
>>
>> --
>> 竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
>> 株式会社エールシステム
>> 〒384-0083 長野県小諸市大字市665-9
>> Phone: 0267-25-5990
>> Facsimile: 0267-26-1324
>
>
>
>
> --
> 竹内 学 <mailto:mtakeuchi @ ailesys.co.jp>
> 株式会社エールシステム
> 〒384-0083 長野県小諸市大字市665-9
> Phone: 0267-25-5990
> Facsimile: 0267-26-1324
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内