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

高井朋幸 [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 13:16:27 JST


久保様
高井です。

> こちらで試せてないので、お手数ですが試していただけるとありがたいです。

修正ありがとうございます。
試したところ落ちずに動いて予約語テーブルも 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 メーリングリストの案内