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

kubo [E-MAIL ADDRESS DELETED]
2011年 1月 16日 (日) 18:14:42 JST


久保(jflute)です。

おおお、とりあえずアプリで動きましたか!
ODP.NETへの移行できそうですね、良かったです。
それではお言葉に甘えてですが、

o CB - SetupSelect(Relation)
 -> http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/conditionbean/setupselect/index.html
 -> join の on 句のカラムがクォートされるか
o CB - SpecifyColumn
 -> http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/conditionbean/specify/specifycolumn.html
 -> select 句がちゃんと指定されたものだけになるかどうか
o CB - ExistsReferrer
 -> http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/conditionbean/query/existsreferrer.html
 -> 相関サブクエリの条件のカラムがクォートされるか
o CB - ColumnQuery
 -> http://dbflute.sandbox.seasar.org/ja/manual/function/ormapper/conditionbean/query/columnquery.html
 -> カラム同士の条件のカラム名がクォートされるか

といった機能を確認頂けると助かります。
(簡単でいいんで)

また、外だしSQLですが、クォートしない状態のSQLで、
OutsideSqlTest タスクで正常に実行されますか?
「JDBCドライバだと日本語にクォートが必要なのかどうか!?」
が気になったもので。

2011/1/16 井上忠彦 <[E-MAIL ADDRESS DELETED]>:
> 久保様
>
> アプリ側のテストですが、一通り通しまして、
> 特にエラー発生はございませんでした。
> (ほぼ基本的な機能しか使用していないのです)
>
> 気になる箇所ございましたら、ご指摘いただければ、
> 追加で確認を行いますので、ご連絡ください。
>
> 以上、よろしくお願いいたします。
>
> (11/01/15 (土) 18:31), kubo wrote:
>> 久保(jflute)です。
>>
>> 井上さん、ご確認ありがとうございます。
>>
>>> 本日14:12時点のSNAPSHOTになりますが、
>>> ExampleのBehaviorBasicTest同等の内容(outsideSql除く)のテストは
>>> エラーなくとおり、ログ上でテーブル名・カラム名(select,where,order)が
>>> クォートされていることが確認できました。
>>
>> おおお、なんか近づいてきましたね。
>>
>>> この後、再度アプリ側での、確認・テストを実施してみます。
>>
>> よろしくです。
>>
>> #
>> # ちなみに、日本語のストアドプロシージャとかがあっても、
>> # 何にも対処していません。でも、Pmbでのオーバーライド
>> # だけでなんとかなりそうではありますが...
>> #
>>
>> 2011/1/15 井上忠彦<[E-MAIL ADDRESS DELETED]>:
>>> 久保様
>>>
>>> 確認・返信が遅く申し訳ございません。
>>> またご教授、ご対応ありがとうございます。
>>>
>>>>> FindColumnName(columnNames, pt.Column
>>> Name)
>>>>> は、columnNames の方がクォートされているのではないかと。
>>>
>>> おっしゃるとおり、昨日のSNAPSHOTまでは、
>>> columnNamesの方がクォートされておりました。
>>>
>>> 本日14:12時点のSNAPSHOTになりますが、
>>> ExampleのBehaviorBasicTest同等の内容(outsideSql除く)のテストは
>>> エラーなくとおり、ログ上でテーブル名・カラム名(select,where,order)が
>>> クォートされていることが確認できました。
>>>
>>> この後、再度アプリ側での、確認・テストを実施してみます。
>>>
>>> 以上、よろしくお願いいたします。
>>>
>>> 井上
>>>
>>> (11/01/15 (土) 14:12), kubo wrote:
>>>> 久保(jflute)です。
>>>>
>>>> 論理的な分析ですが、
>>>>
>>>> InternalAbstractBeanMetaDataResultSetHandler
>>>> の CreateColumnNames() にて、CBで定義したカラム名に
>>>> スイッチしていることから(で、SQLはクォートされてるから)、
>>>> FindColumnName(columnNames, pt.ColumnName)
>>>> は、columnNames の方がクォートされているのではないかと。
>>>> 一方で、pt.ColumnNameは、プロパティのカラム名ということで、
>>>> つまり、これはEntityのColumn属性(S2Dao.NET)の値であって、
>>>> DBFluteのテンプレートの BaseEntity.vmnet をみると、
>>>> Seasar.Dao.Attrs.Column("${col.Name}") と
>>>> なっているので、クォートされてないはずです。
>>>> (クォートされるのは "${col.columnSqlName}")
>>>>
>>>> ※実際の値はこっちでは確認できないので確証はそちらでお願いします。
>>>>
>>>> そもそも、Java版のクォートの実現方法ですが、
>>>> 名前を以下のように目的別に取り扱っています。
>>>>
>>>> TableDbName = テーブル名そのまま(識別子として利用)
>>>> TableSqlName = SQLで使うテーブル名
>>>>
>>>> Column も同様です。ただ、Columnの場合はさらに結合など
>>>> のエリアス名が解決された ColumnRealName があります。
>>>>
>>>> このようにすることで、どこかのロジックで
>>>> "FOO" と FOO で一致しない、というようなことが発生しない
>>>> ようにしています。また、クォートを無視して管理する
>>>> Map(C#ではDictionary)やSetなどのコレクションもあります。
>>>>
>>>> C#版では、この目的別管理ができていないため動作しない、
>>>> というところが現状です。また、DBFlute.NET でそのように
>>>> 管理したとしても、S2Dao.NET ではそうなっていないので、
>>>> どこかでギャップが出てくる可能性があります。
>>>> (特に、S2Dao.NETとDBFlute.NETの境目あたりで)
>>>>
>>>> なので、
>>>> Seasar.Dao.Attrs.Column("${col.Name}")
>>>>>>>> Seasar.Dao.Attrs.Column("${col.columnSqlName}")
>>>> とすれば良いかというと、一概にそういうわけではありません。
>>>> このようにした場合、S2Dao.NETにはクォート付きの SqlName を
>>>> 保持することになりますが(pt.ColumnName)、DBFlute.NETで
>>>> その値を受け取りつつ DbName を期待している場合に、不一致が
>>>> 発生します。逆に動かなくなる処理が発生してしまうかもしれません。
>>>> トライアンドエラーはこの不一致を探す作業とも言えます。
>>>>
>>>> と、おおよそ理解してもらったところで、とりあえず DBFlute.NET では、
>>>> 「現状、既に DBFlute.NET + quoteColumnNameList は動かない」
>>>> ということが前提にあり、クォートしたときの挙動が変わっても問題ないため、
>>>> 思い切って Column 属性を columnSqlName にしました。
>>>> この Column 属性の値を使ってSQLを組み立てる箇所が何箇所もあり、
>>>> まずはこうしないと話が先に進まないんじゃないかと思うので。
>>>> で、この Column 属性の値と識別子である DbName と比較している箇所を
>>>> 洗い出してトライアンドエラーしていくのが良いかと思います。
>>>>
>>>> そして、さらに DBFlute.NET で論理的に分かる範囲において、
>>>> DbName と SqlName の区別を付けるようにして、かつ、
>>>> 一致のロジックにてクォートを無視して比較するようにしてみました。
>>>> AbstractSqlClause, DBMeta.HasColumn(), FindColumnInfo(),
>>>> AbstractConditionQuery.toColumnRealName()
>>>> InternalRowCreator.FindColumnName()
>>>> などの処理です。
>>>>
>>>> SNAPSHOT を上書きしてありますので、こちらでお試し下さい。
>>>> クォートしていない普通の環境(既存のExample)ではテストして
>>>> 問題ないことは確認しています。
>>>> このSNAPSHOTを元にトライアンドエラーをやってみて下さい。
>>>>
>>>>
>>>> 2011/1/14 井上忠彦<[E-MAIL ADDRESS DELETED]>:
>>>>> 久保様
>>>>>
>>>>> ご回答ありがとうございます。
>>>>>
>>>>> 現状DBFluteの仕様の旨、了解いたしました。
>>>>>
>>>>>> で、ここからはできればちょっとの修正や拡張で動くようにできれば
>>>>>> いいなというところで、トライアンドエラーで探っていくことになります。
>>>>>
>>>>> もう少しやってみまして、
>>>>> またご相談させていただきたいと思いますので、
>>>>> よろしくお願いします。
>>>>>
>>>>> 以上、よろしくお願いいたします。
>>>>>
>>>>> (11/01/14 (金) 21:02), kubo wrote:
>>>>>> 久保です。
>>>>>>
>>>>>> ご確認ありがとうございます。
>>>>>>
>>>>>>> ただその後、selectで下記エラーとなります。
>>>>>>> S2Dao側RowCreatorImpl.CreateColumnMetaData()内のFindColumnName()にてカラ
>>>>>>> ム名が取得できないところが起因となっているようです。
>>>>>>
>>>>>> ということですんなり動かなかったというところですね。
>>>>>>
>>>>>> それでは一旦ここで状況をまとめておきます。
>>>>>> 一応これが現状でのDBFlute.NETの仕様ということになります。
>>>>>> Java版との機能差の一つでもあり、正式な対応は現状のJava版を
>>>>>> 移植した後の DBFlute.NET-0.9.x にて(かもしれない)というところです。
>>>>>>
>>>>>> で、ここからはできればちょっとの修正や拡張で動くようにできれば
>>>>>> いいなというところで、トライアンドエラーで探っていくことになります。
>>>>>> 動くようにできたとしても、DBFlute.NETとして消極的サポートという
>>>>>> 扱いであり、また、アプリ側でも拡張が必要かもしれませんので、
>>>>>> 井上さんも S2Dao.NET のソースをある程度追いかけられるような
>>>>>> 環境にしておいた方が良いかと思います。
>>>>>> (S2Dao.NETのソースはSVNからチェックアウトできます)
>>>>>>
>>>>>> 例外の内容を分析してみると、
>>>>>> RowCreatorImpl.CreateColumnMetaData()で呼び出している
>>>>>> FindColumnName(columnNames, pt.ColumnName) の
>>>>>> "string.Compare(realColumnName, columnName, true) == 0"
>>>>>> で、恐らく一致していないのでしょうね。
>>>>>> それぞれの値がどうなっていて、なぜ一致しないのか、を
>>>>>> 確認してみて下さい。
>>>>>> (columnNames と pt.ColumnName のクォート状況など)
>>>>>> それにより、何をどう直せばさらに先に進めるのか考察できるかと。
>>>>>> また、ここのポイントを直せば動くのかどうかの確認のため、
>>>>>> 試しに一致するように書き換えてもう一度実行してみて下さい。
>>>>>> このクラスは、自動生成される AllCommon 配下のクラス、
>>>>>> InternalRowCreator にて拡張されているので、オーバーライドする
>>>>>> だけで簡単に試せます。
>>>>>> (InternalRowCreator は S2DaoMetaDataFactoryImpl.cs にあります)
>>>>>>
>>>>>> という感じで、何回かトライアンドエラーして完全に動くように
>>>>>> するために直すべきポイントを洗い出してみて下さい。
>>>>>> (ソースを分析する上で難しい点があればフォローしますので)
>>>>>> 現実的な修正(量や内容)であれば DBFlute.NET に反映します。
>>>>>> そうでない場合、アプリ側で S2Dao.NET の拡張修正が必要に
>>>>>> なる可能性もあります。
>>>>>>
>>>>>> 早速フォローですが、RowCreator は基点テーブルの一つのレコードを
>>>>>> 一つのEntity にマッピングするクラスです。(Row は一行分の Entity のこと)
>>>>>> DBFlute.NET では、S2Dao.NET の RowCreatorImpl を拡張して、
>>>>>> DBFluteの DBMeta を使ったマッピングを実現しています。
>>>>>> それが S2DaoMetaDataFactoryImpl.cs の InternalRowCreator です。
>>>>>> DBFluteがリフレクションを使わずにEntityにデータをマッピング
>>>>>> しているというのは、まさにここで実現されています。
>>>>>> http://dbflute.sandbox.seasar.org/ja/introduction/performance.html#noreflection
>>>>>>
>>>>>> また、RowCreatorImpl.CreateColumnMetaData() の "IList columnNames" は、
>>>>>> 出所は (AllCommon) InternalAbstractBeanMetaDataResultSetHandler の
>>>>>> CreateColumnNames() ですね。ADO.NETのインターフェースから、
>>>>>> SQL の select 句に定義されたカラム名を取得しています。
>>>>>>
>>>>>> 2011/1/14 井上忠彦<[E-MAIL ADDRESS DELETED]>:
>>>>>>> 久保様
>>>>>>>
>>>>>>>> 古いバージョンのログのような気がしますね。
>>>>>>> 失礼いたしました。私のログ保管間違いかもしれません。
>>>>>>>
>>>>>>>> 反映しました。SNAPSHOTが上書きされています。
>>>>>>> ありがとうございます。
>>>>>>>
>>>>>>> テーブル名・カラム名ともに、$$ALL$$指定にて確認させていただきました。
>>>>>>> 以下、日本語・アルファベットともに違いはありません。
>>>>>>>
>>>>>>> TableSqlName,getTableSqlName(),EntityのTable属性すべてクォートされています。
>>>>>>>
>>>>>>> ただその後、selectで下記エラーとなります。
>>>>>>> S2Dao側RowCreatorImpl.CreateColumnMetaData()内のFindColumnName()にてカラ
>>>>>>> ム名が取得できないところが起因となっているようです。
>>>>>>>
>>>>>>> たびたび申し訳ございませんが、ご確認をお願いできますでしょうか?
>>>>>>>
>>>>>>> --- ここから
>>>>>>> The SQL failed to execute!
>>>>>>> [Advice]
>>>>>>> Please confirm the Exception message.
>>>>>>> [Exception]
>>>>>>> Core.DBFlute.AllCommon.JavaLike.IllegalStateException
>>>>>>> The propertyCache should not be empty: bean=Tblcontrol
>>>>>>> [Behavior]
>>>>>>> TblcontrolBhv.SelectEntity()
>>>>>>> [ConditionBean]
>>>>>>> Core.DBFlute.CBean.TblcontrolCB
>>>>>>> [Statement]
>>>>>>> Oracle.DataAccess.Client.OracleCommand
>>>>>>> [Display SQL]
>>>>>>> select  dfloc."COLKEY" as c0, dfloc."COLNAME" as c1
>>>>>>>     from "TBLCONTROL" dfloc
>>>>>>>     where dfloc.COLKEY = 5
>>>>>>>
>>>>>>>     Core.DBFlute.AllCommon.JavaLike.IllegalStateException: The
>>>>>>> propertyCache should not be empty: bean=Tblcontrol
>>>>>>>      場所
>>>>>>> Core.DBFlute.AllCommon.S2Dao.InternalRowCreator.CreateRow(IDataReader
>>>>>>> reader, IColumnMetaData[] columns, Type beanType)
>>>>>>>      場所
>>>>>>> Core.DBFlute.AllCommon.S2Dao.Internal.RsHandler.InternalAbstractBeanMetaDataResultSetHandler.CreateRow(IDataReader
>>>>>>> reader, IColumnMetaData[] columns)
>>>>>>>      場所
>>>>>>> Core.DBFlute.AllCommon.S2Dao.Internal.RsHandler.InternalBeanListMetaDataResultSetHandler.Handle(IDataReader
>>>>>>> dataReader, IList list)
>>>>>>>      場所
>>>>>>> Core.DBFlute.AllCommon.S2Dao.Internal.RsHandler.InternalBeanGenericListMetaDataResultSetHandler.Handle(IDataReader
>>>>>>> dataReader)
>>>>>>>      場所
>>>>>>> Core.DBFlute.AllCommon.S2Dao.Internal.SqlHandler.InternalBasicSelectHandler.Execute(IDbCommand
>>>>>>> cmd, Object[] args)
>>>>>>> --- ここまで
>>>>>>>
>>>>>>>
>>>>>>> 以上、よろしくお願いいたします。
>>>>>>>
>>>>>>> (11/01/13 (木) 23:48), kubo wrote:
>>>>>>>> 久保です。
>>>>>>>>
>>>>>>>>> 以下のとおりです。
>>>>>>>>>
>>>>>>>>> --- 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 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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