[seasar-dotnet:1199] Re: [DBFlute] 予約語とテーブル名の重複について

kubo [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 14:35:52 JST


久保(jflute)です。

>> こちらで試せてないので、お手数ですが試していただけるとありがたいです。
>
> 修正ありがとうございます。
> 試したところ落ちずに動いて予約語テーブルも schema.xml に反映されました。
> jdbc.bat generate.bat 双方とも OK です。

ご報告ありがとうございます!
そのままの修正を次バージョンで反映しますね。

> 参考にファイルを作って動かしてみました。
> 今のところ additionalPrimaryKeyとadditionalForeignKey もしっかり
> 機能しています。
>
> これで開発がスムーズに進みそうです。
> ありがとうございます。

おお、よかったです。
これからもよろしくお願いします。


2008/12/2 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
> 久保様
> 高井です。
>
>> こちらで試せてないので、お手数ですが試していただけるとありがたいです。
>
> 修正ありがとうございます。
> 試したところ落ちずに動いて予約語テーブルも schema.xml に反映されました。
> jdbc.bat generate.bat 双方とも OK です。
>
>
>>> additionalPrimaryKeyとadditionalForeignKeyという手段がありましたか。
>>
>> [additionalPrimaryKeyMap]
>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/dbflute_exampledb/dfprop/additionalPrimaryKeyMap.dfprop
>>
>> [additionalForeignKeyMap]
>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/dbflute_exampledb/dfprop/additionalForeignKeyMap.dfprop
>>
>> が参考になると思います。
>> 実際にExampleではSUMMARY_PRODUCTというViewに対して、
>> PKとFKを付与しています。
>
> 参考にファイルを作って動かしてみました。
> 今のところ additionalPrimaryKeyとadditionalForeignKey もしっかり
> 機能しています。
>
> これで開発がスムーズに進みそうです。
> ありがとうございます。
>
>
>> 久保(jflute)です。
>>
>>> https://www.seasar.org/issues/browse/DBFLUTE-393
>>
>> http://dbflute.sandbox.seasar.org/download/dbflute/patch/dbflute-0.8.7-393.jar
>> にてJDBCタスクでは落ちないような修正を入れてみました。
>> パッチ扱いで、問題なければ同じ修正が次バージョンに反映されます。
>> こちらで試せてないので、お手数ですが試していただけるとありがたいです。
>> ダウンロードしたjarファイルを、
>> 「mydbflute/dbflute-0.8.7/lib/forExecute/dbflute.jar」と
>> 差し替えてください。
>>
>>> additionalPrimaryKeyとadditionalForeignKeyという手段がありましたか。
>>
>> [additionalPrimaryKeyMap]
>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/dbflute_exampledb/dfprop/additionalPrimaryKeyMap.dfprop
>>
>> [additionalForeignKeyMap]
>> https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example/dbflute_exampledb/dfprop/additionalForeignKeyMap.dfprop
>>
>> が参考になると思います。
>> 実際にExampleではSUMMARY_PRODUCTというViewに対して、
>> PKとFKを付与しています。
>>
>> 2008/12/2 takai <[E-MAIL ADDRESS DELETED]>:
>>> 久保様
>>> 高井です。
>>>
>>> 早速回答ありがとうございます。
>>> 菊池様も回答ありがとうございます。
>>>
>>> SQLServer は [ ] で囲むのが正しいとは知りませんでした。
>>> 確かに DB によってエスケープの仕方が違うのは難点ですね…。
>>>
>>>
>>>> > テーブル名がデータベースの予約語
>>>> User テーブルを無視リストに加えて、
>>>> 新たに気の利いた名前のViewを作ることをお奨めします。
>>>> additionalPrimaryKeyとadditionalForeignKeyを設定することで、
>>>> CRUD全て可能になりますし、関連も元の「User」テーブルと
>>>> 全く同じように振る舞うことが可能です。
>>>
>>> additionalPrimaryKeyとadditionalForeignKeyという手段がありましたか。
>>> この方法で行こうと思います。
>>>
>>>
>>>> > ダブルコーテーションを付加するなどの回避策はないでしょうか?
>>>> > Dbm 名前空間のソースをいじっても変更されなかったようなのでどのあたりを
>>>> > いじればいいか教えていただけると幸いです。
>>>> 基本的には、ConditionBean.getTableSqlName()がCBで発行するSQLの
>>>> テーブル名の基盤となります。ただ、本当にそこが完全に全ての基に
>>>> なっているかどうかは確認は別途必要です。
>>>> (JavaだとEclipseで参照をすぐに調べられましたが、
>>>> C#はちょっと今手元に環境がないもので。。。)
>>>
>>> あ、そこだったんですか。
>>> 明日にでも少し探ってみようかと思います。
>>>
>>>
>>>> 【DBFluteの予約語対応について】
>>>> 予約語対応をDBFluteがするかどうかはそもそも決定していません。
>>>> 下手に対応していることで逆に予約語でDBを作られてしまうことが
>>>> あるのを懸念しているのと「除外テーブル(*1) + View + additionalXxxKey」
>>>> で回避ができることが理由となります。(単純にリソースの問題も...)
>>>> しかも、そのViewを作ることによって、外だしSQLも楽になるし、
>>>> DBFluteだけでなく他のツール(SQL*Plusとか)でSQL発行するときも
>>>> 扱いが楽になりますので、仮にDBFluteが予約語対応していたとしても
>>>> Viewを作る方が断然お奨めです。
>>>> (そう考えると予約語対応の対費用効果が薄いのです)
>>>
>>> 確かに費用対効果が薄いですね。
>>> そもそも予約語と同じ名前のテーブルを作ること自体あまり良くない気がする。
>>>
>>>
>>>> それでも、JDBCタスクで落ちちゃうのは課題とさせて頂きますね。
>>>> 少なくとも自動生成までできるようになっていれば、そのテーブルだけは
>>>> 全て外だしSQLっていう選択肢もできるようになるので。
>>>> https://www.seasar.org/issues/browse/DBFLUTE-393
>>>
>>> 自動生成だけでもできるとありがたいです。
>>> 最初落ちたとき少し悩んでしまいました。
>>>
>>>
>>>> 久保(jflute)です。
>>>>
>>>> 高井さん、こんばんは
>>>>
>>>> > テーブル名がデータベースの予約語
>>>> User テーブルを無視リストに加えて、
>>>> 新たに気の利いた名前のViewを作ることをお奨めします。
>>>> additionalPrimaryKeyとadditionalForeignKeyを設定することで、
>>>> CRUD全て可能になりますし、関連も元の「User」テーブルと
>>>> 全く同じように振る舞うことが可能です。
>>>>
>>>> > ダブルコーテーションを付加するなどの回避策はないでしょうか?
>>>> > Dbm 名前空間のソースをいじっても変更されなかったようなのでどのあたりを
>>>> > いじればいいか教えていただけると幸いです。
>>>> 基本的には、ConditionBean.getTableSqlName()がCBで発行するSQLの
>>>> テーブル名の基盤となります。ただ、本当にそこが完全に全ての基に
>>>> なっているかどうかは確認は別途必要です。
>>>> (JavaだとEclipseで参照をすぐに調べられましたが、
>>>> C#はちょっと今手元に環境がないもので。。。)
>>>>
>>>> また、菊池さんのアドバイス通り、
>>>> SQLServerではダブルコーテーションではなく「[]」となります。
>>>> (これまたDBによって違うのが結構悩みの種。。。)
>>>>
>>>> ※菊池さんフォローありがとうございます!
>>>>
>>>> 【DBFluteの予約語対応について】
>>>> 予約語対応をDBFluteがするかどうかはそもそも決定していません。
>>>> 下手に対応していることで逆に予約語でDBを作られてしまうことが
>>>> あるのを懸念しているのと「除外テーブル(*1) + View + additionalXxxKey」
>>>> で回避ができることが理由となります。(単純にリソースの問題も...)
>>>> しかも、そのViewを作ることによって、外だしSQLも楽になるし、
>>>> DBFluteだけでなく他のツール(SQL*Plusとか)でSQL発行するときも
>>>> 扱いが楽になりますので、仮にDBFluteが予約語対応していたとしても
>>>> Viewを作る方が断然お奨めです。
>>>> (そう考えると予約語対応の対費用効果が薄いのです)
>>>>
>>>> *1: http://d.hatena.ne.jp/jflute/20081014/1223976741
>>>>
>>>>
>>>> それでも、JDBCタスクで落ちちゃうのは課題とさせて頂きますね。
>>>> 少なくとも自動生成までできるようになっていれば、そのテーブルだけは
>>>> 全て外だしSQLっていう選択肢もできるようになるので。
>>>> https://www.seasar.org/issues/browse/DBFLUTE-393
>>>>
>>>> 2008/12/1 菊池和彦 <[E-MAIL ADDRESS DELETED]>:
>>>> > 菊池です
>>>> >
>>>> > SQL Server の場合、テーブル名やカラム名で予約語が含まれる可能性がある場合、
>>>> > [ ] で名前を括る事で表現できますね。
>>>> >
>>>> > select ... from [User]
>>>> >
>>>> > Userという名前のテーブルからselect
>>>> >
>>>> > update [User] set [passwd]='xxxx' where [USERID]=xx;
>>>> >
>>>> > カラム名やテーブル名に . (ドット)を含む場合にも[]によるクォートが必要になります。
>>>> >
>>>> > DBFluteでどうやるかは…悩ましいですね。
>>>> >
>>>> >
>>>> > 2008/12/01 20:12 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
>>>> >> 久保様
>>>> >> 高井です。
>>>> >>
>>>> >> DBFlute 0.8.7 リリースお疲れ様です、というところすみませんが
>>>> >> 予約語とテーブル名が重なった場合の対処についてアドバイスいただ
>>>> >> ければと思います。
>>>> >>
>>>> >> SQLServer2005 で「User」のようにテーブル名がデータベースの予約語
>>>> >> とかぶっていると jdbc.bat や SQL 発行で以下のようにエラーが発生
>>>> >> してしまいます。
>>>> >>
>>>> >> -------------------------
>>>> >> SQLException: primaryKeyColumnName=USER_ID
>>>> tableMetaInfo=dbo.USER(TABLE): nu
>>>> >> ll ignoredMessage=キーワード 'User' 付近に不適切な構文があります。
>>>> >> -------------------------
>>>> >>
>>>> >> とりあえず User テーブルを無視リストに加えて JDBC.bat 実行後に User
>>>> >> テーブル用の schema.xml を書き加えて強引に generate.bat で
>>>> >> C# のクラスを作って対処しました (table name="User" として)。
>>>> >> それを利用すると発行される SQL でやはり同じように SQLException
>>>> >> が発生してしまいます。
>>>> >>
>>>> >> C# のクラスは作成できているので、
>>>> >> ベタなコーディングでもよいのですが、発行される SQL のテーブル名に
>>>> >> ダブルコーテーションを付加するなどの回避策はないでしょうか?
>>>> >> Dbm 名前空間のソースをいじっても変更されなかったようなのでどのあたりを
>>>> >> いじればいいか教えていただけると幸いです。
>>>> >>
>>>> >> 本当は根本原因を解決したいところなのですが…。
>>>> >> 既存のシステムで利用されている DB なのでテーブル名を変更する
>>>> >> ことができなくて頭が痛いところです。
>>>> >> しかも、CRUD すべて対象だし・・・
>>>> >>
>>>> >> よろしくお願いいたします。
>>>> >>
>>>> >> _______________________________________________
>>>> >> seasar-dotnet mailing list
>>>> >> [E-MAIL ADDRESS DELETED]
>>>> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>> >>
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> >  Kazuhiko Kikuchi <[E-MAIL ADDRESS DELETED]>
>>>> >  Microsoft Valueable Professional - Visual C# 2004-2007
>>>> > _______________________________________________
>>>> > seasar-dotnet mailing list
>>>> > [E-MAIL ADDRESS DELETED]
>>>> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>> >
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>>> --
>>> Takai ICT 株式会社
>>> 高井朋幸 <[E-MAIL ADDRESS DELETED]>
>>> TEL: 090-6192-6789
>>> http://www.takaiict.com/
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>
>
> --
> Takai ICT 株式会社
> 高井朋幸 <[E-MAIL ADDRESS DELETED]>
> TEL: 090-6192-6789
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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