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

takai [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 22:39:58 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 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 メーリングリストの案内