[seasar-dotnet:314] Re: SQLコメントに : が含まれるとIndexOutOfRangeException
Ryo Miyagi
rmiyax @ yahoo.co.jp
2006年 7月 24日 (月) 17:31:11 JST
宮城です。
> 以下のような外だしSQLを記述していたとします。
>
> -- [SQL]
> -- ShopOrderDetailInfoDao_SelectListAsOrderDetailInfo()
> -- [Argument]
> -- 1. pb : Paging-bean
> -- 2. pmb : Sql-parameter-bean
> --
S2DAOでは、行コメント("--")には対応していません。
Java版でも同じだと思います。(何故だろう?)
この場合、/* */ のコメントを使用することで代用できます。
例:
/*
* [SQL]
* ShopOrderDetailInfoDao_SelectListAsOrderDetailInfo()
* [Argument]
* 1. pb : Paging-bean
* 2. pmb : Sql-parameter-bean
*/
select
shop_OrderDetail.order_detail_id as OrderDetailId
, shop_OrderDetail.order_id as OrderId
, shop_OrderDetail.mpfuid as Mpfuid
, shop_OrderDetail.sale_price as SalePrice
from shop_OrderDetail
where shop_OrderDetail.order_detail_id = ?
...(略)
上記例の場合、DBに投げられるSQL文は、
select
shop_OrderDetail.order_detail_id as OrderDetailId
, shop_OrderDetail.order_id as OrderId
, shop_OrderDetail.mpfuid as Mpfuid
, shop_OrderDetail.sale_price as SalePrice
from shop_OrderDetail
where shop_OrderDetail.order_detail_id = ?
...(略)
になります。
前ヴァージョンで行コメント("--")を含むSQL文が実行できた理由は、
使用しているDBもしくはデータプロバイダが
行コメントを認識していたからだと思います。
> Logに吐き出すSQL文字列生成のためにBind変数をsqlから
> 正規表現で抽出するところで、上記SQLのコメント部分の「:」を拾う
> ようになりました。
> 正規表現の[+]を[*]に変更したことによってこのようになったようです。
S2ADO側では、SQLコメントの解析処理を実装する予定はありません。
しかし、
"UPDATE emp SET ename = 'a:bcd' WHERE empno = :empno
のように、文字列中にBind変数に該当する文字が埋め込まれると
Bind変数を誤認識します。
このバグは次バージョンで修正する予定です。申し訳ありません。
> 一番良いのは、コメント中のBind変数は無視するとなりますが、
> それは労力要りそうなので(しかもDebugLogだけの話だし・・・)、
> せめてIndexOutOfRangeExceptionになる直前でチェックしてあげて、
> 「引数とBind変数の個数が違います。
> もしかしてSQLコメントにBind変数記号が入ったりしてませんか?」
> みたいなエラーを出してあげるとうれしいです。
御指摘ありがとうございます。
分かりやすいExceptionを出すように修正したいと思います。
以上
--------------------------------------
Let's start Yahoo! Auction - Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/
seasar-dotnet メーリングリストの案内