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

kubo [E-MAIL ADDRESS DELETED]
2011年 1月 13日 (木) 23:48:11 JST


久保です。

> 以下のとおりです。
>
> --- 8.9.23-SNAPSHOT ここから
> 2011-01-12 22:40:15,235 [main] INFO
> (TorqueJDBCTransformTask#generateXML():267) - $ MY.TBLCONTROL(TABLE)
> 2011-01-12 22:40:15,391 [main] INFO
> (TorqueJDBCTransformTask#generateXML():267) - $ MY.コントロール(TABLE)
> 2011-01-12 22:40:15,437 [main] WARN
> (TorqueJDBCTransformTask#generateXML():365) - Failed to get unique
> column information! But continue...
> java.sql.SQLException: コールに無効な引数があります。
> --- 8.9.23-SNAPSHOT ここまで

古いバージョンのログのような気がしますね。
generateXML():365 では、そのようなログは出してないし、
「Failed to get unique column information! But continue...」
という文言自体、最新のソースではもうどこにもありません。

>> $$ALL$$ って指定すると「全てのテーブルに付与する」って
>> いう機能をこれから実装しようかなと思ってました。
>
> ありがとうございます。非常に助かります。
> 期待して待たせていただきます。

反映しました。SNAPSHOTが上書きされています。
dfpropのドキュメントも更新しています。


#
# JDBCドライバで、DatabaseMetaData.needsQuote(name)
# みたいなメソッドがあったらいいのにって思いますよね...
# (そしたら、必要な名前にだけ自動でクォートってなことが)
#

2011/1/13 井上忠彦 <[E-MAIL ADDRESS DELETED]>:
> 久保様
>
> ご回答ありがとうございます。
>
>> このWARNのログって、どんなログですか?
> 以下のとおりです。
>
> --- 8.9.23-SNAPSHOT ここから
> 2011-01-12 22:40:15,235 [main] INFO
> (TorqueJDBCTransformTask#generateXML():267) - $ MY.TBLCONTROL(TABLE)
> 2011-01-12 22:40:15,391 [main] INFO
> (TorqueJDBCTransformTask#generateXML():267) - $ MY.コントロール(TABLE)
> 2011-01-12 22:40:15,437 [main] WARN
> (TorqueJDBCTransformTask#generateXML():365) - Failed to get unique
> column information! But continue...
> java.sql.SQLException: コールに無効な引数があります。
> --- 8.9.23-SNAPSHOT ここまで
>
>> 確認ですが、dfprop のエンコーディングは合っていますか?
> 大変失礼いたしました。SJISでした。
> UTF-8に修正したところ、WARNもERRORも発生しなくなりました。
>
> dfpropのエンコードを修正し、8.9.23-SNAPSHOTでの確認結果です。
>
> テーブル名がアルファベットの場合、
> TableSqlname →○
> getTableSqlName() →○
> EntityのTable属性 →○
>
> テーブル名が日本語の場合、
> TableSqlname →○
> getTableSqlName() →○
> EntityのTable属性 →○
>
> と言うわけで、こちらはdfpropのエンコードが原因だったようです。
> ありがとうございます。引き続きその他確認をしてみます。
>
>> $$ALL$$ って指定すると「全てのテーブルに付与する」って
>> いう機能をこれから実装しようかなと思ってました。
>
> ありがとうございます。非常に助かります。
> 期待して待たせていただきます。
>
> 以上、よろしくお願いいたします。
>
> 井上
>
> (11/01/13 (木) 18:14), kubo wrote:
>> 久保です。
>>
>> 井上さん、ご確認ありがとうございます。
>>
>>>> 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 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 メーリングリストの案内