[Seasar-user:3092] Re: [S2DAO]幾何データ演算子の使用について

上原 慶三 keizou
2006年 1月 17日 (火) 05:28:17 JST


上原です。
Nobuhiro Ito wrote:
> 伊東です。
> 
> s2daoを使用して、PostgresSQLの幾何データ型を扱っているのですが、
> PostgresSQLがサポートしている幾何データ演算子の中には
>  ?# のように「?」を含む演算子があります。
> 
> 例:select A.name from road as A, road as B where A.path ?# B.path and
> B.name = 'hoge';
> 
> この演算子を使用したSQLを発行しようとすると、「?」がバインド変数とみなされ
> て、
> java.sql.SQLExceptionが発生してしまいます。
> 
> ログで実行されたSQLをみてみると、
> select A.name from road as A, road as B where A.path null# B.path and B.name
> = 'hoge';
> となっています。
> 
> org.seasar.framework.util.PreparedStatementUtilで
> java.sql.PreparedStatementを使用している以上、
> s2daoでPostgresSQLの幾何データ演算子を使用することはできないのでしょうか?
> 
> ちなみに、単独でjava.sql.Statementを使用して同じSQLを発行すると、
> 正常に問い合わせが行われました。
> 
> 何かよい方法があれば、教えてください。
> よろしくお願い致します。
S2daoはまったく関係なく単純にPostgreSQLの話になってしまうのですが、
JDBCドライバのソースを見る限り、?をエスケープするような方法はない
みたいです。

詳しくは知らないのですが、PostgreSQLの演算子は内部で関数を呼び出す
ようになっているらしいので演算子の変わりに関数を呼び出すよう
にしたらうまくいかないでしょうか。

たとえばpath同士の?#はpath_iterを呼び出していることが
pg_operatorテーブルからわかるのでpath_iter(A.path,B.path)
とすればうまくいかないでしょうか。


-- 
---
上原 慶三<[E-MAIL ADDRESS DELETED]>



Seasar-user メーリングリストの案内