PEAR::CodeGen_PECLのspecファイルのDTD

PEAR::CodeGen_PECLのspecファイルはXML形式ですが、当然(?)DTDが定義されています。しかし、PEARパッケージには含まれていません。で、どこにあるかというと。。。cvsリポジトリにしかないようです :-(
これを見ると、examplesディレクトリあるspecファイルに書かれていない要素・属性が見つかったり、要素の位置関係がハッキリして、「おお!ここにも書ける!」とか色々発見があります。
お陰で、specファイルの要素/属性と生成されるCのソースコード/テストケースの関係がだいぶ見えてきました :-)
PROP_GET_LONG/PROP_SET_LONGマクロ

PEAR::CodeGen_PECLのexamplesディレクトリにあるclass_properties.xmlから生成したCのソースコード(class_properties.c)には
- PROP_GET_LONG
- PROP_SET_LONG
というマクロっぽい名前が見つかります。動作を確認してみると、それぞれクラスのプロパティへのアクセサっぽいんですが、どうも他の拡張モジュールやPHPのソースコード、Building Custom PHP Extensions

Building Custom Php Extensions
- 作者: Blake Schwendiman
- 出版社/メーカー: Lulu.Com
- 発売日: 2003/09/18
- メディア: ペーパーバック
- クリック: 1回
- この商品を含むブログ (4件) を見る

Extending and Embedding PHP (Developer's Library)
- 作者: Sara Golemon
- 出版社/メーカー: Sams
- 発売日: 2006/05/30
- メディア: ペーパーバック
- 購入: 1人 クリック: 7回
- この商品を含むブログ (11件) を見る
定義はどこだろ?と思っていたら、何てコトはない、PEAR::CodeGen_PECLで生成されたヘッダファイル(php_class_properties.h)にありました。。。orz
#define PROP_GET_LONG(name) Z_LVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC)) #define PROP_SET_LONG(name, l) zend_update_property_long(_this_ce, _this_zval, #name, strlen(#name), l TSRMLS_CC) #define PROP_GET_DOUBLE(name) Z_DVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC)) #define PROP_SET_DOUBLE(name, d) zend_update_property_double(_this_ce, _this_zval, #name, strlen(#name), d TSRMLS_CC) #define PROP_GET_STRING(name) Z_STRVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC)) #define PROP_GET_STRLEN(name) Z_STRLEN_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC)) #define PROP_SET_STRING(name, s) zend_update_property_string(_this_ce, _this_zval, #name, strlen(#name), s TSRMLS_CC) #define PROP_SET_STRINGL(name, s, l) zend_update_property_string(_this_ce, _this_zval, #name, strlen(#name), s, l TSRMLS_CC)
LONGの他、STRINGやSTRLEN(名前のまま。文字列長です)、STRINGL(文字列長を指定)もありました。これのお陰で、結構楽できそうです :-)
Oracle Instant Client 10.2.0.1は248日目にハングする
うーん。Instant Clientじゃないですが、9iの時にもあったような。。。
すでに10.2.0.3が出ているので、使っていたらサクッと差し替えちゃいましょう。
いきなり結論で書いたとおり Oracle 10.2.0.1 Instant Client は OS 起動後 248 日でハングします。64 bit 環境なら 198 日でハングします。patch を適用して 10.2.0.2 へ upgrade すれば問題は回避できます。