[seasar-dotnet:1905] Re: 自動発行SQLのテーブル名にクォート

kubo [E-MAIL ADDRESS DELETED]
2011年 1月 13日 (木) 18:14:38 JST


久保です。

井上さん、ご確認ありがとうございます。

>> dbflute-0.8.9.23-SNAPSHOT.zip
> こちらで実行したところ、エラーは回避されました。
> WARNのログ出力となり、schema.xmlが出力されることが確認できました。

このWARNのログって、どんなログですか?
今回の修正では、例外時に「クォートして再実行」としている
だけなので、今回の現象に関するWARNログは出力していない
はずなのですが。

>> (ユニーク制約とインデックス情報ちゃんと取れるかな...!?)
> 申し訳ございませんが、現状ここまでの確認はできておりません。

まあ、後で Doc タスクの SchemaHTML を見て頂ければと。
(ユニーク制約やインデックスを使ったテーブルで試したときに)

> テーブル名が日本語の場合、
> TableSqlName →×
> getTableSqlName() →×

日本語だと x っていうのが変ですね。
確認ですが、dfprop のエンコーディングは合っていますか?
http://dbflute.sandbox.seasar.org/ja/manual/reference/dfprop/about.html#propspec
(dfprop は UTF-8 です。例えば、Shift_JIS だとプログラム内部で
文字化けしてしまった文字列を判定に使ってしまうかも...!?)

>> (あと、DaoインターフェースのBean属性の値)
> こちらは、BsDao以下にあるクラスでよろしいのでしょうか?
> 見たところここのクラスには文字列の記載がありませんでした。

ごめんなさい。完全に間違えてました。
Daoインターフェースじゃなくて Entity です。
Seasar.Dao.Attrs.Table 属性が定義されているはずです。

> 上記の方法でうまくいったとしましても、
> テーブルが300近くあり、まだ機能変更・追加も頻繁に行われている状況で、
> 現実的に難しいと考えています。
> お手数ですが、他に何かよいアイデアあればご教授いただけませんでしょうか?

まあ、そんなところじゃないかと思っていたので、
$$ALL$$ って指定すると「全てのテーブルに付与する」って
いう機能をこれから実装しようかなと思ってました。
これは、ちょっとお待ち下さい(今帰って来たばかりで...)。

2011/1/13 井上忠彦 <[E-MAIL ADDRESS DELETED]>:
> 久保様
>
> 早急なご回答ありがとうございます。
>
>> dbflute-0.8.9.23-SNAPSHOT.zip
> こちらで実行したところ、エラーは回避されました。
> WARNのログ出力となり、schema.xmlが出力されることが確認できました。
> generate.batもエラーなく動作しました。
>
>> (ユニーク制約とインデックス情報ちゃんと取れるかな...!?)
> 申し訳ございませんが、現状ここまでの確認はできておりません。
>
>
> クォートの件、0.8.9.23-SNAPSHOTにてあらためて試してみました。
> ご教授いただいたとおり、まずはソース上での確認です。
>
> テーブル名がアルファベットの場合、
> TableSqlName →○:「\"~\"」となっている。
> getTableSqlName() →○:「\"~\"」となっている。
>
> テーブル名が日本語の場合、
> TableSqlName →×
> getTableSqlName() →×
>
>> (あと、DaoインターフェースのBean属性の値)
> こちらは、BsDao以下にあるクラスでよろしいのでしょうか?
> 見たところここのクラスには文字列の記載がありませんでした。
>
> littleAdjustmentMap.dfpropの設定は次のとおりとしています。
>    ; quoteTableNameList = list:{コントロール; TblControl}
>    ; quoteColumnNameList = list:{キー; 名称; ColKey; ColName}
>
>
> あらためてご相談させてください。
> 上記の方法でうまくいったとしましても、
> テーブルが300近くあり、まだ機能変更・追加も頻繁に行われている状況で、
> 現実的に難しいと考えています。
> お手数ですが、他に何かよいアイデアあればご教授いただけませんでしょうか?
>
>
> 以上、よろしくお願いいたします。
>
> (11/01/13 (木) 9:16), kubo wrote:
>> 久保(jflute)です。
>>
>> なんか昔の記憶で、
>> Oracle の JDBCドライバが、とあるメソッドだけ
>> 日本語を許さないというのがあるのを思い出しました。
>> (PKやFKは大丈夫なのに、なぜかUQやIndexだけ
>> 日本語テーブルを受け付けない)
>>
>> 取り急ぎですが(本当に取り急ぎですが)、
>> dbflute-0.8.9.23-SNAPSHOT.zip
>> を使ってみて下さい。
>> Oracleのときだけ例外が発生したらリトライで
>> クォートして再実行するようにしています。
>> (ユニーク制約とインデックス情報ちゃんと取れるかな...!?)
>>
>> http://dbflute.net.sandbox.seasar.org/ja/environment/newest.html#snapshot
>>
>>> 0.8.9.15までは「WARN」ですが、0.8.9.16以降は「ERROR」となります。
>>
>> こういった現象・問題が明確に上がってくるようにするために、
>> 例外をつぶすのはやめました。まさに今回の件が合致しましたね。
>>
>>> またquoteTableNameListについてですが、
>>> ログに出力されるSQLが変わるかどうか?という判断で問題ないでしょうか?
>>> 0.8.9.15にて試している現状では、
>>> ログ中のSQLをみるところ、テーブル名にダブルクォートはついておりません。
>>
>> 少なくとも CB の判断はそれでOKです。
>> S2Daoに任せているところ(insert, update など)も
>> 基本的にそれでOKだと思います(が、多分というところで)。
>>
>> ただ、そのまえに、DBMetaの TableSqlName や
>> ConditionQuery の getTableSqlName() の値が、
>> クォートされているかソース上で確認してみて下さい。
>> (あと、DaoインターフェースのBean属性の値)
>> これらがクォートされていなければ、そもそも設定の段階で
>> うまくいってないということになります。
>>
>> #
>> # やはり、英語圏で作られたツールで日本語使うと、
>> # どの世界でもトラブル発生しやすいものですね...
>> #
>>
>> 2011/1/12 井上忠彦<[E-MAIL ADDRESS DELETED]>:
>>> 久保様
>>>
>>> ご回答ありがとうございます。
>>>
>>> ご教授いただきましたquoteTableNameListにて
>>> 試してみようとしておりますが、現状うまくいっておらず、
>>> たびたび申し訳ございませんが、確認させていただけませんでしょうか。
>>> (見づらいメールとなり、申し訳ございません。)
>>>
>>> まず、DBFluteを0.8.9.9→0.8.9.22とアップグレードしたところ、
>>> jdbc.batがエラーとなってしまいました。
>>>
>>> --- ここから
>>> 2011-01-12 22:13:48,079 [main] INFO
>>> (TorqueJDBCTransformTask#generateXML():265) - $ [Table List]
>>> 2011-01-12 22:13:48,095 [main] INFO
>>> (TorqueJDBCTransformTask#processTable():296) - $ MY.TBLCONTROL(TABLE)
>>> 2011-01-12 22:13:48,516 [main] INFO
>>> (TorqueJDBCTransformTask#processTable():296) - $ MY.コントロール(TABLE)
>>> 2011-01-12 22:13:48,547 [main] ERROR
>>> (DfDBFluteTaskUtil#logException():156) - Look! Read the message below.
>>> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>> Failed to execute DBFlute Task 'JDBC'.
>>>
>>> [Advice]
>>> Check the exception messages and the stack traces.
>>>
>>> [Database Product]
>>> Oracle Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
>>>
>>> [JDBC Driver]
>>> Oracle JDBC driver 11.1.0.7.0-Production for JDBC 11.1
>>> * * * * * * * * * */
>>> java.lang.IllegalStateException: java.sql.SQLException: コールに無効な引
>>> 数があります。
>>> --- ここまで
>>>
>>> アップグレード前のバージョン(0.8.9.9)でのdbflute.logの同様の箇所は次の
>>> とおりです。
>>>
>>> --- ここから
>>> 2011-01-12 22:12:28,628 [main] INFO
>>> (TorqueJDBCTransformTask#generateXML():273) - $ MY.TBLCONTROL(TABLE)
>>> 2011-01-12 22:12:40,453 [main] INFO
>>> (TorqueJDBCTransformTask#generateXML():273) - $ MY.コントロール(TABLE)
>>> 2011-01-12 22:12:40,484 [main] WARN
>>> (TorqueJDBCTransformTask#generateXML():369) - Failed to get unique
>>> column information! But continue...
>>> java.sql.SQLException: コールに無効な引数があります。
>>> --- ここまで
>>>
>>> 試しに他のバージョンでも試してみたところ、
>>> 0.8.9.15までは「WARN」ですが、0.8.9.16以降は「ERROR」となります。
>>> 初歩的なことかもしれませんが、何か情報ございましたら、
>>> ご教授いただけませんでしょうか?
>>>
>>> またquoteTableNameListについてですが、
>>> ログに出力されるSQLが変わるかどうか?という判断で問題ないでしょうか?
>>> 0.8.9.15にて試している現状では、
>>> ログ中のSQLをみるところ、テーブル名にダブルクォートはついておりません。
>>>
>>>
>>> 以上、よろしくお願いいたします。
>>>
>>> (11/01/12 (水) 22:42), kubo wrote:
>>>> 久保(jflute)です。
>>>>
>>>> 一応、報告です。
>>>> quoteTableNameList と quoteColumnNameList は、
>>>> ReplaceSchema の LoadData に対応していませんでしたが、
>>>> 次のバージョンでは対応されます(既に修正しました)。
>>>> dbflute-mysql-example に Example があります。
>>>>
>>>> 2011/1/12 kubo<[E-MAIL ADDRESS DELETED]>:
>>>>> 久保(jflute)です。
>>>>>
>>>>> 井上さん、おはようございます。
>>>>>
>>>>> こちらをご覧下さい。
>>>>> http://dbflute.sandbox.seasar.org/ja/environment/supported.html#unsupportedname
>>>>>
>>>>> どうにもならない状況であれば、こちらで
>>>>> 言及されているオプションを試してみて下さい。
>>>>>
>>>>> Java版のDBFluteでは、積極的サポートしていないと言いつつ、
>>>>> 実はテストもそれなりにされており、ほとんどの機能が動く状態です。
>>>>> しかしながら、DBFlute.NET(C#版)ではその限りではありません。
>>>>> 実際に動かしてもらわないとその精度はなんとも言えません。
>>>>> また、DBFlute.NETはS2Dao.NETに処理を委譲しているため、
>>>>> DBFluteの方で、EntityのBean属性にクォーテーションをしたとしても、
>>>>> S2Dao.NETでそれをうまく受け取ってくれるかどうかは不明です。
>>>>> (結局、とりあえず試してもらう以外にありません)
>>>>>
>>>>> また、そのオプションが 0.8.9.9 でサポートされていたかどうか、
>>>>> ちょっとパッとコメントできませんので、これも実際にお試し下さい。
>>>>> (カラム名の方は比較的最近なので、できないかもしれません)
>>>>> もし、アップグレード可能であればその方が確実です。
>>>>>
>>>>> #
>>>>> # 質問の背景が明確なので、コメントしやすくとても助かります。
>>>>> # すいませんがこの後、夜までメール見れないのでご了承下さい。
>>>>> #
>>>>>
>>>>> 2011/1/11 井上忠彦<[E-MAIL ADDRESS DELETED]>:
>>>>>> 井上と申します。
>>>>>>
>>>>>> 質問させてください。
>>>>>>
>>>>>> DBFluteにて自動発行されるSQLのテーブル名・カラム名全てに
>>>>>> ダブルクォートを付けることは可能でしょうか?
>>>>>>
>>>>>> 環境は次のとおりです。
>>>>>>
>>>>>> 開発言語:C#
>>>>>> 開発環境:VisualStudio2008
>>>>>> DB:Oracle 11.1.0.6
>>>>>> S2Container.net:1.3.17
>>>>>> DBFlute.net:0.8.9.9
>>>>>>
>>>>>>
>>>>>> そもそも問題としましては、次の通りとなります。
>>>>>>
>>>>>> 既に稼働済みのシステムのデータプロバイダーを
>>>>>> ODP.NETに変更するため調査・確認を行っております。
>>>>>>
>>>>>> テーブル名・カラム名に日本語を使用しており、
>>>>>> 環境によりエラーが発生します。
>>>>>>
>>>>>> 実行環境
>>>>>> OS:7、Vista
>>>>>> オラクルクライアント:11.1.0.6
>>>>>> →エラーとならない。
>>>>>> OS:XP
>>>>>> オラクルクライアント:11.1.0.6
>>>>>> →エラーとなる。
>>>>>>
>>>>>> エラーの内容は一定でないため、添付させていただきませんが、
>>>>>> まずは日本語テーブル名・カラム名の対応と思い、
>>>>>> 上記のとおり、質問をさせていただきました。
>>>>>>
>>>>>>
>>>>>> 以上、よろしくお願いいたします。
>>>>>>
>>>>>> 井上
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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
>>>>
>>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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