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

kubo [E-MAIL ADDRESS DELETED]
2014年 8月 30日 (土) 22:32:30 JST


久保(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 メーリングリストの案内