[pgsql-jp: 33019] Re: C言語埋め込みでのビット演算

TFL)久村 孝之 hisamura.takayuki @ tfl.fujitsu.com
2004年 5月 28日 (金) 14:33:06 JST


自己レスです。

ecpgでプリコンパイルして生成されるCのソースに問題が
あるようです。
.pgcのソースファイル中のビット演算を行っている箇所の
変換が失敗しています。

プリコンパイル後、次のように変換されます。
 .pgc(埋め込みSQLソースファイル)
  (ID & X'FF0000') = X'010000'
 .c(ecpgでプリコンパイル済みソースファイル)
  (ID & ' ) = '

16進の記述が抜け落ちてしまっています。
.cのソースに足りない箇所を追加したところ、正しく動作
しました。直接、.cのファイルをいじるのではあんまりな
ので、最後の手段かと思っています。

.pgcでの指定時に何かお作法があるのでしょうか。
ご存知の方がいらっしゃいましたらご教授ください。

よろしくお願い致します。

以上
----- Original Message ----- 
From: "TFL)久村 孝之" <hisamura.takayuki @ tfl.fujitsu.com>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Friday, May 28, 2004 1:53 PM
Subject: [pgsql-jp: 33018] C言語埋め込みでのビット演算


> こんにちは。久村と申します。
> 
> ecpgを利用してC言語埋め込みSQLで開発しています。
> SQL文でビット演算を行いたいのですが、以下のようなメッセージが
> 表示され、実行時にエラーとなります。
>  (-400:'ERROR:  pg_atoi: error in "XFF0000": can't parse "
>  XFF0000"' in line )
> 
> 実行しているSQLは次のようなものです。
>  SELECT DATA FROM TABLE WHERE (ID & 'XFF0000') = 'X010000';
>  SELECT DATA FROM TABLE WHERE (ID & X'FF0000') = X'010000';
> いずれも実行時にエラーでした。
> 
> psqlでコマンドラインから確認したところ、以下は問題なく動作
> しました。
>  SELECT DATA FROM TABLE WHERE (ID & X'FF0000') = X'010000';
> 
> 以下はpsqlでもだめでした。
>  SELECT DATA FROM TABLE WHERE (ID & 'XFF0000') = 'X010000';
> 
> 環境は次の通りです。
>  OS        :Linux 2.2.19-6.2.16
>  PostgreSQL:7.2.1
> 
> 埋め込みSQLでビット演算を行う方法をご存知の方がいらっしゃい
> ましたらご教授ください。
> 
> よろしくお願い致します。
> 
> 以上
> ---------------------------------------------------------------------
> 久村 孝之
> e-mail:hisamura.takayuki @ tfl.fujitsu.com
> ---------------------------------------------------------------------
> 



pgsql-jp メーリングリストの案内