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

takai [E-MAIL ADDRESS DELETED]
2008年 12月 2日 (火) 00:14:55 JST


久保様
高井です。

早速回答ありがとうございます。
菊池様も回答ありがとうございます。

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