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

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


高井です。

documentDefinitionMap は特にいじってないので、以下のようになっています。

map:{
    ; dataXlsTemplateRecordLimit = 0
}

xls のほうも予約語名テーブルのシートはありますね。
こちらも出力されるものに関しては問題はなさそうです。


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