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

井上忠彦 [E-MAIL ADDRESS DELETED]
2011年 1月 13日 (木) 20:45:33 JST


久保様

ご回答ありがとうございます。

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