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

kubo [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 18:11:05 JST


久保(jflute)です。

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

Docタスクの「エクセルデータテンプレート」の生成を行っていますか?
(documentDefinitionMapにてdataXlsTemplateRecordLimitを
  設定されていますか?)
多分、ここじゃないかと。。。

2008/12/2 高井朋幸 <[E-MAIL ADDRESS DELETED]>:
> 高井です。
>
> すみません、さっき 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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