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

kubo [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 20:27:56 JST


久保(jflute)です。

> documentDefinitionMap は特にいじってないので、以下のようになっています。
>
> map:{
>    ; dataXlsTemplateRecordLimit = 0
> }
>
> xls のほうも予約語名テーブルのシートはありますね。
> こちらも出力されるものに関しては問題はなさそうです。

ありがとうございます。
「0」以上を設定したときのデータダンプのところで
落ちてるようですね。(続行してるのでInfoだけ)
データのテンプレート的な用途のものなので、
特にお困りでなければ気にする必要はありません。

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


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