<div dir="ltr"><div class="gmail_default" style><div class="gmail_default" style><font face="ms gothic, monospace">竹内です。お世話になります。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div>
<div class="gmail_default" style><font face="ms gothic, monospace">DBFlute.NET 0.8.9.58 + Firebird 2.5 (非公式ですが) で開発しておりました (ほぼ完了)。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div>
<div class="gmail_default" style><font face="ms gothic, monospace">DBFlute.NET いいですよー。バシバシ使い倒したいと思っております。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style>
<font face="ms gothic, monospace">で、開発途中、ちょっと修正して貰えたらなぁと言うのがいくつかありましたので、</font></div><div class="gmail_default" style><font face="ms gothic, monospace">要望としてメールします。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br>
</font></div><div class="gmail_default" style><font face="ms gothic, monospace">1) 主キー以外を参照する additionalForeignKey で自動生成コードのデータ型</font></div><div class="gmail_default" style><font face="ms gothic, monospace"> 次の様なテーブルがあったとします。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>create table DEPARTMENT (</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>ID<span class="" style="white-space:pre">        </span>bigint not null</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>CODE<span class="" style="white-space:pre">        </span>varchar(20) not null</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>NAME<span class="" style="white-space:pre">        </span>varchar(80) not null</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>constraint DEPARTMENT_PK primary key (ID)</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>constraint DEPARTMENT_UQ1 unique (CODE)</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>);</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>create table EMPLOYEE (</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>ID<span class="" style="white-space:pre">                </span>bigint not null</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>CODE<span class="" style="white-space:pre">                </span>varchar(20) not null</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>NAME<span class="" style="white-space:pre">                </span>varchar(20) not null</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>BIRTH_DATE<span class="" style="white-space:pre">        </span>DATE</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>DEPARTMENT_CODE varchar(20) not null<span class="" style="white-space:pre">        </span>-- DEPARTMENT.CODE を参照</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>constraint EMPLOYEE_PK primary key (ID)</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>,<span class="" style="white-space:pre">        </span>constraint EMPLOYEE_UQ1 unique (CODE)</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>);</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>additionalForeignKeyMap.dfprop に次の様に宣言をしました。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>map:{</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>; EMPLOYEE_FK1 = map:{</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                        </span>; localTableName<span class="" style="white-space:pre">        </span>= EMPLOYEE<span class="" style="white-space:pre">                        </span>; foreignTableName<span class="" style="white-space:pre">        </span>= DEPARTMENT</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                        </span>; localColumnName<span class="" style="white-space:pre">        </span>= DEPARTMENT_CODE<span class="" style="white-space:pre">        </span>; foreignColumnName<span class="" style="white-space:pre">        </span>= CODE</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span> }</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>}</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>この状態で generate.bat を実行しますと、BsDeparmentBhv.cs に</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>public virtual void LoadInventoryTempList(IList<Department> departmentList, LoadReferrerOption<InventoryTempCB, InventoryTemp> loadReferrerOption) {</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>AssertObjectNotNull("departmentList", departmentList); AssertObjectNotNull("loadReferrerOption", loadReferrerOption);</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>if (departmentList.Count == 0) { return; }</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>InventoryTempBhv referrerBhv = xgetBSFLR().Select<InventoryTempBhv>();</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>HelpLoadReferrerInternally<Department, long?, InventoryTempCB, InventoryTemp></font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">                        </span>(departmentList, loadReferrerOption, new MyInternalLoadInventoryTempListCallback(referrerBhv));</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>}</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>protected class MyInternalLoadInventoryTempListCallback : InternalLoadReferrerCallback<Department, String, InventoryTempCB, InventoryTemp> {</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>... 略 ...</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"> の様に出力されます (他にも似たコードが...)。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"> ここの問題は、MyInternalLoadInventoryTempListCallback で宣言されている型引数の第2パラメータは String となっています。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"> しかし、LoadInventoryTempList の中では long? として宣言しています。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"> まぁ、手で直せるレベルだったので、手で直しましたが、</font></div><div class="gmail_default" style><font face="ms gothic, monospace"> generate.bat を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんと出力して頂けたらなぁと。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br>
</font></div><div class="gmail_default" style><font face="ms gothic, monospace">2) 外だしSQLの引数にNullable型の使用</font></div><div class="gmail_default" style><font face="ms gothic, monospace"> 外だしSQLを次の様に宣言をしたとします。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>/*</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span> [df:title]</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span> 社員コードの検索</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span> */</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>-- #df:entity#</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>-- ##string CODE##</font></div><div class="gmail_default" style><span class="" style="white-space:pre"><font face="ms gothic, monospace">        </font></span></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>-- !df:pmb!</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>-- !!DateTime? birthDate!!</font></div>
<div class="gmail_default" style><span class="" style="white-space:pre"><font face="ms gothic, monospace">        </font></span></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>select CODE</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>from EMPLOYEE</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>/*BEGIN*/</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>where</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>/*IF pmb.BirthDate != null*/</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>BIRTH_DATE >= /*pmb.BirthDate*/'2001/01/01'</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">                </span>/*END*/</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>/*END*/</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><span class="" style="white-space:pre">        </span>order by CODE asc</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"> これで sql2entity.bat で生成された entity クラスのデータ型は DateTime? ではなくて DateTimeQ となっています。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"> これも、手で直せるレベルだったので、手で直しましたが、</font></div><div class="gmail_default" style><font face="ms gothic, monospace"> sql2entity.bat を実行する度に修正をしなければならなかったので、出来れば自動生成の際にちゃんとしたデータ型で出力して頂けたらなぁと。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"> あと、結果をスカラ型受けるのって対応していない? 色々チャレンジしてみましたが、途中で諦めました。</font></div><div class="gmail_default" style>
<font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace">--- 以下は Firebird が非対応である事は承知の上で... ---</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace">3) replace-schema.bat で既存のオブジェクトが削除されない</font></div><div class="gmail_default" style><font face="ms gothic, monospace">4) isIncrementSequenceToDataMax = true の対応</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace">以上です。</font></div>
<div class="gmail_default" style><font face="ms gothic, monospace"><br></font></div><div class="gmail_default" style><font face="ms gothic, monospace">ご検討頂けましたら、幸いに存じます。</font></div><div class="gmail_default" style><font face="ms gothic, monospace"><br>
</font></div><div class="gmail_default" style><font face="ms gothic, monospace">よろしくお願いします。</font></div><div class="gmail_default" style="font-family:'ms gothic',monospace"><br></div></div><div class="gmail_default" style="font-family:'ms gothic',monospace">
<br></div><div><br></div>-- <br><div dir="ltr">竹内 学 <mailto:<a href="mailto:mtakeuchi@ailesys.co.jp" target="_blank">mtakeuchi@ailesys.co.jp</a>><br>株式会社エールシステム<br><br></div>
</div>