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

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


高井です。

すみません、さっき doc.bat を実行するのを忘れてました。
実行した結果 html は出力されるのですが、コンソールに表示される
ログでは予約語テーブル名部分でエラーメッセージが表示されます。
出力される html には予約語のテーブル情報も正しく載っています。

--------------------------------------------
[torque-doc] 2008-12-02 15:01:00,389 INFO  - Failed to extract data of User:
 キーワード 'User' 付近に不適切な構文があります。
--------------------------------------------

動作的には問題ないのですが、気になったので一応報告いたします。


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