[PHP-dev 155] PostgreSQL Session Save Handler Module.

Yasuo Ohgaki php-dev@php.gr.jp
Wed, 19 Dec 2001 01:19:03 +0900


This is a multi-part message in MIME format.
--------------050703020804020503080906
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

大垣です。
(php-devとpostgresqlのMLに送ったつもりが、php-devのメールアドレスを間違
えていました:)

PHP4.2.0-dev (CVS version)用のPostgreSQL Session Moduleを作りました。
今はプリミティブな状態ですが、GCをResource Shutdownに移動するなどすると
に非常にロードの高いWebサイトではGC時のページ表示の遅れなどが解消できます。
(これはそのうち変更するつもりです)

ベンチマークはとっていませんが、Zend.comに置いてあるPHPスクリプトとして
書いたPosrgreSQL Session Handlerと比べると早いはずです。(これも私が書い
たものですが、、)

まだ、あまりテストしていません。興味のある方は人柱になっていただけると助か
ります。特にビルド(configure)の問題があるかも知れません。

# そのうち、PHP4のCVSにコミットするつもりなので、次の4.2.0リリースでは
# 普通に使えるようになると思います。

機能的な面でのフィードバック/リクエストも歓迎します。

今の所考えているのは
1) GC実行のページ表示遅れの解消
3) 代替PostgreSQLサーバーの指定(いくつでも指定可)
4) セセッション名のDBへの保存

リクエストがあれば、テーブルがDBに存在しない場合、テーブル作成の自動実行
なども付け加えます。

英文ですが、README.MOD_PGSQLに簡単な説明が書いてあります。
もし、試してみてバグを見付けた場合はご連絡いただけると助かります。

# ./buildconfしないと有効になりません。念のため。

-- 
Yasuo Ohgaki
yohgaki@dd.iij4u.or.jp

--------------050703020804020503080906
Content-Type: text/plain;
 name="mod_pgsql.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="mod_pgsql.c"

LyogCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICB8IFBIUCBWZXJzaW9uIDQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCiAgIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgVGhlIFBIUCBH
cm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKICAgfCBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAyLjAy
IG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICB8CiAgIHwgdGhhdCBpcyBidW5kbGVkIHdpdGgg
dGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfAogICB8
IGF2YWlsYWJsZSBhdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKICAgfCBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8yXzAy
LnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgIHwgSWYgeW91IGRp
ZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxl
IHRvICAgfAogICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxl
YXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKICAgfCBsaWNlbnNlQHBocC5uZXQgc28g
d2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8CiAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKwogICB8IEF1dGhvcnM6IFlhc3VvIE9oZ2FraSA8eW9oZ2Fr
aUBwaHAubmV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCiAqLwoKLyogJElkOiBtb2RfcGdzcWwuYyx2IDEuMjAgMjAwMS8xMi8xMSAx
NTozMDoyMSBzZWJhc3RpYW4gRXhwICQgKi8KCiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRl
ICJjb25maWcuaCIKI2luY2x1ZGUgInBocC5oIgojaW5jbHVkZSAicGhwX3Nlc3Npb24uaCIK
I2luY2x1ZGUgIm1vZF9wZ3NxbC5oIgoKI2lmZGVmIEhBVkVfTElCUFEKCnBzX21vZHVsZSBw
c19tb2RfcGdzcWwgPSB7CglQU19NT0QocGdzcWwpCn07CgojaWZkZWYgWlRTCmludCBwc19w
Z3NxbF9nbG9iYWxzX2lkOwojZWxzZQpwaHBfcHNfcGdzcWxfZ2xvYmFscyBwc19wZ3NxbF9n
bG9iYWxzOwojZW5kaWYKCgojZGVmaW5lIFBTX1BHU1FMX0RBVEEgcHNfcGdzcWwgKmRhdGEg
PSBQU19HRVRfTU9EX0RBVEEoKQojZGVmaW5lIFFVRVJZX0JVRl9TSVpFIDUxMgoKc3RhdGlj
IGNoYXIqIGR1bW15ID0gImR1bW15IjsgLyogbW9kX2RhdGEgY2Fubm90IGJlIG51bGwuIEp1
c3QgYSBkdW1teSAqLwoKUEhQX01JTklUX0ZVTkNUSU9OKHBzX3Bnc3FsKQp7CiNpZmRlZiBa
VFMKCXBocF9wc19wZ3NxbF9nbG9iYWxzICpwc19wZ3NxbF9nbG9iYWxzOwoKCXRzX2FsbG9j
YXRlX2lkKCZwc19wZ3NxbF9nbG9iYWxzX2lkLCBzaXplb2YocGhwX3BzX3Bnc3FsX2dsb2Jh
bHMpLCBOVUxMLCBOVUxMKTsKCXBzX3Bnc3FsX2dsb2JhbHMgPSB0c19yZXNvdXJjZShwc19w
Z3NxbF9nbG9iYWxzX2lkKTsKI2VuZGlmCgoJUFNfUEdTUUwocGdzcWxfbGluaykgPSBQUWNv
bm5lY3RkYihQUyhzYXZlX3BhdGgpKTsKCWlmICghUFNfUEdTUUwocGdzcWxfbGluaykgfHwg
UFFzdGF0dXMoUFNfUEdTUUwocGdzcWxfbGluaykpICE9IENPTk5FQ1RJT05fT0spIHsKCQlQ
UWZpbmlzaChQU19QR1NRTChwZ3NxbF9saW5rKSk7Cgl9CglwaHBfc2Vzc2lvbl9yZWdpc3Rl
cl9tb2R1bGUoJnBzX21vZF9wZ3NxbCk7CglyZXR1cm4gU1VDQ0VTUzsKfQoKUEhQX01TSFVU
RE9XTl9GVU5DVElPTihwc19wZ3NxbCkKewovKiAgCVBHcmVzdWx0ICpwZ19yZXN1bHQ7ICov
CglpbnQgcmV0ID0gU1VDQ0VTUzsKCgkvKiBsaW5rIGlzIGNsb3NlZCBhdCBzaHV0ZG93biAq
LwoJaWYgKFBTX1BHU1FMKHBnc3FsX2xpbmspICYmIFBRc3RhdHVzKFBTX1BHU1FMKHBnc3Fs
X2xpbmspKSA9PSBDT05ORUNUSU9OX09LKSB7CgkJUFFmaW5pc2goUFNfUEdTUUwocGdzcWxf
bGluaykpOwoJCVBTX1BHU1FMKHBnc3FsX2xpbmspID0gTlVMTDsKCQlyZXQgPSBTVUNDRVNT
OwoJfQoJcmV0dXJuIHJldDsKfQoKUEhQX1JTSFVURE9XTl9GVU5DVElPTihwc19wZ3NxbCkK
ewoJUEdyZXN1bHQgKnBnX3Jlc3VsdDsKCWludCByZXQgPSBTVUNDRVNTOwoKCS8qIGNsZWFu
IHVwIGxpbmsganVzdCBpbiBjYXNlICovCglpZiAoUFNfUEdTUUwocGdzcWxfbGluaykpIHsK
CQlwZ19yZXN1bHQgPSBQUWV4ZWMoUFNfUEdTUUwocGdzcWxfbGluayksICJCRUdJTjtFTkQ7
Iik7CgkJaWYgKCFwZ19yZXN1bHQgfHwgUFFyZXN1bHRTdGF0dXMocGdfcmVzdWx0KSAhPSBQ
R1JFU19DT01NQU5EX09LKSB7CgkJCXJldCA9IEZBSUxVUkU7CgkJfQoJfQoJcmV0dXJuIHJl
dDsKfQoKCnN0YXRpYyBpbnQgcHNfcGdzcWxfdmFsaWRfc3RyKGNvbnN0IGNoYXIgKmtleSkK
ewoJc2l6ZV90IGxlbjsKCWNvbnN0IGNoYXIgKnA7CgljaGFyIGM7CglpbnQgcmV0ID0gMTsK
Cglmb3IgKHAgPSBrZXk7IChjID0gKnApOyBwKyspIHsKCQkvKiB2YWxpZCBjaGFyYWN0ZXJz
IGFyZSBhLi56LEEuLlosMC4uOSxfICovCgkJaWYgKCEoKGMgPj0gJ2EnICYmIGMgPD0gJ3on
KSB8fAoJCQkgIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKCQkJICAoYyA+PSAnMCcgJiYg
YyA8PSAnOScpIHx8CgkJCSAgKGMgPT0gJ18nKSkpIHsKCQkJcmV0ID0gMDsKCQkJYnJlYWs7
CgkJfQoJfQoJbGVuID0gcCAtIGtleTsKCWlmIChsZW4gIT0gMzIpCgkJcmV0ID0gMDsKCXJl
dHVybiByZXQ7Cn0KClBTX09QRU5fRlVOQyhwZ3NxbCkKewoJUEdyZXN1bHQgKnBnX3Jlc3Vs
dDsKCWludCByZXQgPSBTVUNDRVNTOwoKCSptb2RfZGF0YSA9ICh2b2lkICopIGR1bW15OyAv
KiBtb2RfZGF0YSBjYW5ub3QgYmUgTlVMTCAqLwoJaWYgKCFzZXNzaW9uX25hbWUgJiYgIXBz
X3Bnc3FsX3ZhbGlkX3N0cihzZXNzaW9uX25hbWUpKSB7CgkJcmV0ID0gRkFJTFVSRTsKCX0K
CWlmIChQUXN0YXR1cyhQU19QR1NRTChwZ3NxbF9saW5rKSkgIT0gQ09OTkVDVElPTl9PSykg
ewoJCS8qIGxpbmsgaXMgYmFkLi4uIFRyeSBhZ2FpbiAqLwoJCVBRcmVzZXQoUFNfUEdTUUwo
cGdzcWxfbGluaykpOwoJCWlmIChQUXN0YXR1cyhQU19QR1NRTChwZ3NxbF9saW5rKSkgIT0g
Q09OTkVDVElPTl9PSykgewoJCQlQUWZpbmlzaCgoUFNfUEdTUUwocGdzcWxfbGluaykpKTsK
CQkJcmV0ID0gRkFJTFVSRTsKCQl9Cgl9CgllbHNlIHsKCQlwZ19yZXN1bHQgPSBQUWV4ZWMo
UFNfUEdTUUwocGdzcWxfbGluayksICJCRUdJTjsiKTsKCQlpZiAoUFFyZXN1bHRTdGF0dXMo
cGdfcmVzdWx0KSAhPSBQR1JFU19DT01NQU5EX09LKSB7CgkJCXJldCA9IEZBSUxVUkU7CgkJ
fQoJCVBRY2xlYXIocGdfcmVzdWx0KTsKCX0KCXJldHVybiByZXQ7Cn0KClBTX0NMT1NFX0ZV
TkMocGdzcWwpCnsKCVBHcmVzdWx0ICpwZ19yZXN1bHQ7CglpbnQgcmV0ID0gU1VDQ0VTUzsK
CglQU19TRVRfTU9EX0RBVEEoTlVMTCk7IC8qIEl0J3Mgc2FmZSB0byBhc3NpZ24gTlVMTCAq
LwoJaWYgKFBRc3RhdHVzKFBTX1BHU1FMKHBnc3FsX2xpbmspKSAhPSBDT05ORUNUSU9OX09L
KSB7CgkJcmV0ID0gRkFJTFVSRTsKCX0KCWVsc2UgewoJCXBnX3Jlc3VsdCA9IFBRZXhlYyhQ
U19QR1NRTChwZ3NxbF9saW5rKSwgIkVORDsiKTsKCQlpZiAoUFFyZXN1bHRTdGF0dXMocGdf
cmVzdWx0KSAhPSBQR1JFU19DT01NQU5EX09LKSB7CgkJCXJldCA9IEZBSUxVUkU7CgkJfQoJ
CVBRY2xlYXIocGdfcmVzdWx0KTsKCX0KCXJldHVybiBTVUNDRVNTOwp9CgpQU19SRUFEX0ZV
TkMocGdzcWwpCnsKCVBHcmVzdWx0ICpwZ19yZXN1bHQ7CgljaGFyIHF1ZXJ5W1FVRVJZX0JV
Rl9TSVpFKzFdOwoJY2hhciAqcXVlcnlfdHBsID0gIlNFTEVDVCBzZXNzX2RhdGEgRlJPTSBw
aHBfc2Vzc2lvbiBXSEVSRSBzZXNzX21vZGlmaWVkID4gJWQgYW5kIHNlc3NfaWQgPSAnJXMn
OyI7CglpbnQgcmV0ID0gRkFJTFVSRTsKCUV4ZWNTdGF0dXNUeXBlIHN0YXR1czsKCglQU19Q
R1NRTChzZXNzX25ldykgPSAwOwoJKnZhbGxlbiA9IDA7CglpZiAocHNfcGdzcWxfdmFsaWRf
c3RyKGtleSkpIHsKCQlzbnByaW50ZihxdWVyeSwgUVVFUllfQlVGX1NJWkUsIHF1ZXJ5X3Rw
bCwgdGltZShOVUxMKSAtIFBTKGdjX21heGxpZmV0aW1lKSwga2V5KTsKCQkvKiBGSVhNRTog
Rm9sbG93aW5nIGxpbmUgaXMgKk5PVCogc2FmZSwgYXJncyBzaG91bGQgYmUgZXNjYXBlZCEg
aW4gcHJldmlvdXMgbGluZSAqLwoJCXBnX3Jlc3VsdCA9IFBRZXhlYyhQU19QR1NRTChwZ3Nx
bF9saW5rKSwgcXVlcnkpOwoJCXN0YXR1cyA9IFBRcmVzdWx0U3RhdHVzKHBnX3Jlc3VsdCk7
CgkJaWYgKFBRcmVzdWx0U3RhdHVzKHBnX3Jlc3VsdCkgPT0gUEdSRVNfVFVQTEVTX09LKSB7
CgkJCWlmIChQUW50dXBsZXMocGdfcmVzdWx0KSA9PSAwKSB7CgkJCQlQU19QR1NRTChzZXNz
X25ldykgPSAxOwoJCQl9CgkJCWVsc2UgewoJCQkJLyogUFFnZXR2YWx1ZSByZXV0dXJucyAi
IiBmb3IgTlVMTCAqLwoJCQkJKnZhbCA9IFBRZ2V0dmFsdWUocGdfcmVzdWx0LCAwLCAwKTsK
CQkJCWlmICgqdmFsKSB7CgkJCQkJKnZhbGxlbiA9IHN0cmxlbigqdmFsKTsKCQkJCQkqdmFs
ID0gc2FmZV9lc3RybmR1cCgqdmFsLCAqdmFsbGVuKTsKCQkJCX0KCQkJfQoJCQlyZXQgPSBT
VUNDRVNTOwoJCX0KCQllbHNlIHsKCQkJcGhwX2Vycm9yKEVfV0FSTklORywiU2Vzc2lvbiBw
Z3NxbCBxdWVyeSBmaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShQU19QR1NRTChwZ3NxbF9s
aW5rKSkpOwoJCQlyZXQgPSBGQUlMVVJFOwoJCX0KCQlQUWNsZWFyKHBnX3Jlc3VsdCk7CQoJ
fQoJaWYgKCp2YWxsZW4gPT0gMCkgewoJCSp2YWwgPSBzYWZlX2VzdHJuZHVwKCIiLDApOwoJ
fQoJcmV0dXJuIHJldDsKfQoKUFNfV1JJVEVfRlVOQyhwZ3NxbCkKewoJUEdyZXN1bHQgKnBn
X3Jlc3VsdDsKCXNpemVfdCBxdWVyeV9sZW47CgljaGFyICpxdWVyeTsKCWNoYXIgKnF1ZXJ5
X2luc2VydCA9CgkgICAiSU5TRVJUIElOVE8gcGhwX3Nlc3Npb24gKHNlc3NfaWQsIHNlc3Nf
Y3JlYXRlZCwgc2Vzc19tb2RpZmllZCwgc2Vzc19kYXRhKSAiCgkgICAiVkFMVUVTICgnJXMn
LCAlZCwgJWQsICclcycpOyI7CgljaGFyICpxdWVyeV91cGRhdGUgPQoJICAgIlVQREFURSBw
aHBfc2Vzc2lvbiBTRVQgc2Vzc19kYXRhID0gJyVzJywgc2Vzc19tb2RpZmllZCA9ICVkICIK
CSAgICJXSEVSRSBzZXNzX2lkID0gJyVzJzsiOwoJaW50IHJldCA9IEZBSUxVUkU7CgkKCWlm
IChQU19QR1NRTChzZXNzX25ldykpIHsKCQkvKiBJTlNFUlQgKi8KCQlxdWVyeV9sZW4gPSBz
dHJsZW4ocXVlcnlfaW5zZXJ0KSt2YWxsZW4rc3RybGVuKGtleSkrMTAwOwoJCXF1ZXJ5ID0g
ZW1hbGxvYyhxdWVyeV9sZW4rMSk7CgkJc3ByaW50ZihxdWVyeSwgcXVlcnlfaW5zZXJ0LCBr
ZXksIHRpbWUoTlVMTCksIHRpbWUoTlVMTCksIHZhbCk7CgkJcGdfcmVzdWx0ID0gUFFleGVj
KFBTX1BHU1FMKHBnc3FsX2xpbmspLCBxdWVyeSk7CgkJaWYgKFBRcmVzdWx0U3RhdHVzKHBn
X3Jlc3VsdCkgPT0gUEdSRVNfVFVQTEVTX09LKSB7CgkJCXJldCA9IFNVQ0NFU1M7CgkJfQoJ
fQoJZWxzZSB7CgkJLyogVVBEQVRFICovCgkJcXVlcnlfbGVuID0gc3RybGVuKHF1ZXJ5X3Vw
ZGF0ZSkrc3RybGVuKGtleSkrdmFsbGVuKzEwMDsKCQlxdWVyeSA9IGVtYWxsb2MocXVlcnlf
bGVuKzEpOwoJCXNwcmludGYocXVlcnksIHF1ZXJ5X3VwZGF0ZSwgdmFsLCB0aW1lKE5VTEwp
LCBrZXkpOwoJCXBnX3Jlc3VsdCA9IFBRZXhlYyhQU19QR1NRTChwZ3NxbF9saW5rKSwgcXVl
cnkpOwoJCWlmIChQUXJlc3VsdFN0YXR1cyhwZ19yZXN1bHQpID09IFBHUkVTX0NPTU1BTkRf
T0spIHsKCQkJcmV0ID0gU1VDQ0VTUzsKCQl9Cgl9CglQUWNsZWFyKHBnX3Jlc3VsdCk7Cgll
ZnJlZShxdWVyeSk7CglyZXR1cm4gcmV0Owp9CgpQU19ERVNUUk9ZX0ZVTkMocGdzcWwpCnsK
CVBHcmVzdWx0ICpwZ19yZXN1bHQ7CglzaXplX3QgcXVlcnlfbGVuOwoJY2hhciAqcXVlcnk7
CgljaGFyICpxdWVyeV91cGRhdGUgPSAiREVMRVRFIEZST00gcGhwX3Nlc3Npb24gV0hFUkUg
c2Vzc19pZCA9ICclcyc7IjsKCWludCByZXQgPSBGQUlMVVJFOwoKCWlmIChwc19wZ3NxbF92
YWxpZF9zdHIoa2V5KSkgewoJCXF1ZXJ5X2xlbiA9IHN0cmxlbihxdWVyeV91cGRhdGUpK3N0
cmxlbihrZXkpOwoJCXF1ZXJ5ID0gKGNoYXIgKillbWFsbG9jKHF1ZXJ5X2xlbisxKTsKCQlz
bnByaW50ZihxdWVyeSwgcXVlcnlfbGVuLCBrZXkpOwoJCXBnX3Jlc3VsdCA9IFBRZXhlYyhQ
U19QR1NRTChwZ3NxbF9saW5rKSwgcXVlcnkpOwoJCWlmIChQUXJlc3VsdFN0YXR1cyhwZ19y
ZXN1bHQpID09IFBHUkVTX1RVUExFU19PSykgewoJCQlyZXQgPSBTVUNDRVNTOwoJCX0KCQlQ
UWNsZWFyKHBnX3Jlc3VsdCk7CgkJZWZyZWUocXVlcnkpOwoJfQoJcmV0dXJuIHJldDsKfQoK
UFNfR0NfRlVOQyhwZ3NxbCkKewoJUEdyZXN1bHQgKnBnX3Jlc3VsdDsKCWNoYXIgcXVlcnlb
UVVFUllfQlVGX1NJWkUrMV07CgljaGFyICpxdWVyeV91cGRhdGUgPSAiREVMRVRFIEZST00g
cGhwX3Nlc3Npb24gV0hFUkUgc2Vzc19tb2RpZmllZCA8ICVkIjsKCWludCByZXQgPSBGQUlM
VVJFOwoKCXNwcmludGYocXVlcnksIHF1ZXJ5X3VwZGF0ZSwgdGltZShOVUxMKSAtIG1heGxp
ZmV0aW1lKTsKCXBnX3Jlc3VsdCA9IFBRZXhlYyhQU19QR1NRTChwZ3NxbF9saW5rKSwgcXVl
cnkpOwoJaWYgKFBRcmVzdWx0U3RhdHVzKHBnX3Jlc3VsdCkgPT0gUEdSRVNfVFVQTEVTX09L
KSB7CgkJKm5yZGVscyA9IGF0b2koUFFjbWRUdXBsZXMocGdfcmVzdWx0KSk7CgkJcmV0ID0g
U1VDQ0VTUzsKCX0KCVBRY2xlYXIocGdfcmVzdWx0KTsKCXJldHVybiByZXQ7Cn0KCnplbmRf
bW9kdWxlX2VudHJ5IHBocF9zZXNzaW9uX3Bnc3FsX21vZHVsZSA9IHsKCVNUQU5EQVJEX01P
RFVMRV9IRUFERVIsCgkic2Vzc2lvbiBwZ3NxbCIsCglOVUxMLAoJUEhQX01JTklUKHBzX3Bn
c3FsKSwgUEhQX01TSFVURE9XTihwc19wZ3NxbCksCglOVUxMLCBQSFBfUlNIVVRET1dOKHBz
X3Bnc3FsKSwKCU5VTEwsCiAgICBOT19WRVJTSU9OX1lFVCwKCVNUQU5EQVJEX01PRFVMRV9Q
Uk9QRVJUSUVTCn07CgoKI2VuZGlmCgovKgogKiBMb2NhbCB2YXJpYWJsZXM6CiAqIHRhYi13
aWR0aDogNAogKiBjLWJhc2ljLW9mZnNldDogNAogKiBFbmQ6CiAqIHZpbTYwMDogc3c9NCB0
cz00IGZkbT1tYXJrZXIKICogdmltPDYwMDogc3c9NCB0cz00CiAqLwo=
--------------050703020804020503080906
Content-Type: text/plain;
 name="mod_pgsql.h"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="mod_pgsql.h"

LyogCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICB8IFBIUCBWZXJzaW9uIDQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0rCiAgIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgVGhlIFBIUCBH
cm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSsKICAgfCBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAyLjAy
IG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICB8CiAgIHwgdGhhdCBpcyBidW5kbGVkIHdpdGgg
dGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfAogICB8
IGF2YWlsYWJsZSBhdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKICAgfCBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8yXzAy
LnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgIHwgSWYgeW91IGRp
ZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxl
IHRvICAgfAogICB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxl
YXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKICAgfCBsaWNlbnNlQHBocC5uZXQgc28g
d2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8CiAg
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKwogICB8IEF1dGhvcnM6IHlvaGdha2lAcGhwLm5ldCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0rCiAqLwoKI2lmbmRlZiBNT0RfUEdTUUxfSAojZGVmaW5lIE1PRF9QR1NRTF9I
CgojaW5jbHVkZSAiY29uZmlnLmgiCiNpbmNsdWRlICJwaHBfc2Vzc2lvbi5oIgoKI2lmZGVm
IEhBVkVfTElCUFEKI2luY2x1ZGUgPGxpYnBxLWZlLmg+CgpleHRlcm4gcHNfbW9kdWxlIHBz
X21vZF9wZ3NxbDsKI2RlZmluZSBwc19wZ3NxbF9wdHIgJnBzX21vZF9wZ3NxbAoKZXh0ZXJu
IHplbmRfbW9kdWxlX2VudHJ5IHBocF9zZXNzaW9uX3Bnc3FsX21vZHVsZTsKI2RlZmluZSBw
aHBleHRfcHNfcGdzcWxfcHRyICZwaHBfc2Vzc2lvbl9wZ3NxbF9tb2R1bGUKClBTX0ZVTkNT
KHBnc3FsKTsKCnR5cGVkZWYgc3RydWN0IF9waHBfcHNfcGdzcWxfZ2xvYmFscyB7CglQR2Nv
bm4gKnBnc3FsX2xpbms7CglpbnQgc2Vzc19uZXc7Cn0gcGhwX3BzX3Bnc3FsX2dsb2JhbHM7
IAoKI2lmZGVmIFpUUwpleHRlcm4gaW50IHBzX3Bnc3FsX2dsb2JhbHNfaWQ7CiNlbHNlCmV4
dGVybiBwaHBfcHNfcGdzcWxfZ2xvYmFscyBwc19wZ3NxbF9nbG9iYWxzOwojZW5kaWYKCiNp
ZmRlZiBaVFMKI2RlZmluZSBQU19QR1NRTCh2KSBUU1JNRyhwc19wZ3NxbF9nbG9iYWxzX2lk
LCBwaHBfcHNfcGdzcWxfZ2xvYmFscyAqLCB2KQojZWxzZQojZGVmaW5lIFBTX1BHU1FMKHYp
IChwc19wZ3NxbF9nbG9iYWxzLnYpCiNlbmRpZgoKI2VuZGlmCgojZWxzZQoKI2RlZmluZSBw
c19wZ3NxbF9wdHIgTlVMTAojZGVmaW5lIHBocGV4dF9wc19wZ3NxbF9wdHIgTlVMTAoKI2Vu
ZGlmCgo=
--------------050703020804020503080906
Content-Type: text/plain;
 name="mod_pgsql.diff"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="mod_pgsql.diff"

SW5kZXg6IE1ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5
L3BocDQvZXh0L3Nlc3Npb24vTWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NwpkaWZmIC11IC1yMS43IE1ha2VmaWxlLmluCi0tLSBNYWtlZmlsZS5pbgkyIE1heSAyMDAw
IDA0OjAxOjE1IC0wMDAwCTEuNworKysgTWFrZWZpbGUuaW4JMTggRGVjIDIwMDEgMTU6MzA6
NDYgLTAwMDAKQEAgLTEsNiArMSw2IEBACiAKIExUTElCUkFSWV9OQU1FICAgID0gbGlic2Vz
c2lvbi5sYQotTFRMSUJSQVJZX1NPVVJDRVMgPSBzZXNzaW9uLmMgbW9kX2ZpbGVzLmMgbW9k
X21tLmMgbW9kX3VzZXIuYworTFRMSUJSQVJZX1NPVVJDRVMgPSBzZXNzaW9uLmMgbW9kX2Zp
bGVzLmMgbW9kX21tLmMgbW9kX3VzZXIuYyBtb2RfcGdzcWwuYwogTFRMSUJSQVJZX1NIQVJF
RF9OQU1FID0gc2Vzc2lvbi5sYQogTFRMSUJSQVJZX1NIQVJFRF9MSUJBREQgPSAkKFNFU1NJ
T05fU0hBUkVEX0xJQkFERCkKIApJbmRleDogY29uZmlnLm00Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9yZXBvc2l0b3J5L3BocDQvZXh0L3Nlc3Npb24vY29uZmlnLm00LHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXIxLjE2IGNvbmZpZy5tNAotLS0gY29uZmln
Lm00CTMwIE5vdiAyMDAxIDE4OjU5OjU2IC0wMDAwCTEuMTYKKysrIGNvbmZpZy5tNAkxOCBE
ZWMgMjAwMSAxNTozMDo0NiAtMDAwMApAQCAtOCw2ICs4LDkgQEAKIFBIUF9BUkdfV0lUSCht
bSxmb3IgbW0gc3VwcG9ydCwKIFsgIC0td2l0aC1tbVs9RElSXSAgICAgICAgIEluY2x1ZGUg
bW0gc3VwcG9ydCBmb3Igc2Vzc2lvbiBzdG9yYWdlXSkKIAorUEhQX0FSR19XSVRIKHBnc3Fs
LGZvciBwZ3NxbCBzZXNzc2lvbiBzdXBwb3J0LAorWyAgLS13aXRoLXNlc3Npb24tcGdzcWxb
PURJUl0gSW5jbHVkZSBwZ3NxbCBzdXBwb3J0IGZvciBzZXNzaW9uIHN0b3JhZ2VdKQorCiBp
ZiB0ZXN0ICIkUEhQX01NIiAhPSAibm8iOyB0aGVuCiAgIGZvciBpIGluIC91c3IvbG9jYWwg
L3VzciAkUEhQX01NOyBkbwogICAgIGlmIHRlc3QgLWYgIiRpL2luY2x1ZGUvbW0uaCI7IHRo
ZW4KQEAgLTIzLDYgKzI2LDI5IEBACiAgIFBIUF9BRERfSU5DTFVERSgkTU1fRElSL2luY2x1
ZGUpCiAgIEFDX0RFRklORShIQVZFX0xJQk1NLCAxLCBbV2hldGhlciB5b3UgaGF2ZSBsaWJt
bV0pCiAgIFBIUF9NT0RVTEVfUFRSKHBocGV4dF9wc19tbV9wdHIpCitmaQorCitpZiB0ZXN0
ICIkUEhQX1NFU1NJT05fUEdTUUwiICE9ICJubyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJFBI
UF9TRVNTT05fUEdTUUwiOyB0aGVuCisgICAgaWYgdGVzdCAtZiAiJFBIUF9TRVNTSU9OX1BH
U1FML2luY2x1ZGUvbGlicHEtZmUuaCI7IHRoZW4KKyAgICAgIFNFU1NJT05fUEdTUUxfRElS
PSRpCisgICAgZmkKKyAgZWxzZQorICAgIGZvciBpIGluIC91c3IvbG9jYWwvcGdzcWwgOyBk
bworICAgICAgaWYgdGVzdCAtZiAiJGkvaW5jbHVkZS9saWJwcS1mZS5oIjsgdGhlbgorICAg
ICAgICBTRVNTSU9OX1BHU1FMX0RJUj0kaQorICAgICAgZmkKKyAgICBkb25lCisgIGZpCisK
KyAgaWYgdGVzdCAteiAiJFNFU1NJT05fUEdTUUxfRElSIiA7IHRoZW4KKyAgICBBQ19NU0df
RVJST1IoY2Fubm90IGZpbmQgUG9zcmdyZVNRTChsaWJwcSkgbGlicmFyeSkKKyAgZmkKKyAg
CisgIFBIUF9BRERfTElCUkFSWV9XSVRIX1BBVEgocHEsICRTRVNTSU9OX1BHU1FMX0RJUi9s
aWIsIFNFU1NJT05fU0hBUkVEX0xJQkFERCkKKyAgUEhQX0FERF9JTkNMVURFKCRTRVNTSU9O
X1BHU1FMX0RJUi9pbmNsdWRlKQorICBBQ19ERUZJTkUoSEFWRV9MSUJQUSwgMSwgW1doZXRo
ZXIgeW91IGhhdmUgbGlicHFdKQorICBQSFBfTU9EVUxFX1BUUihwaHBleHRfcHNfcGdzcWxf
cHRyKQogZmkKIAogaWYgdGVzdCAiJFBIUF9TRVNTSU9OIiAhPSAibm8iOyB0aGVuCkluZGV4
OiBzZXNzaW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvcGhwNC9l
eHQvc2Vzc2lvbi9zZXNzaW9uLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjY3CmRpZmYg
LXUgLXIxLjI2NyBzZXNzaW9uLmMKLS0tIHNlc3Npb24uYwkxMSBEZWMgMjAwMSAxNTozMDoy
MSAtMDAwMAkxLjI2NworKysgc2Vzc2lvbi5jCTE4IERlYyAyMDAxIDE1OjMwOjQ3IC0wMDAw
CkBAIC00Nyw2ICs0Nyw3IEBACiAKICNpbmNsdWRlICJleHQvc3RhbmRhcmQvcGhwX3NtYXJ0
X3N0ci5oIgogCisjaW5jbHVkZSAibW9kX3Bnc3FsLmgiCiAjaW5jbHVkZSAibW9kX2ZpbGVz
LmgiCiAjaW5jbHVkZSAibW9kX3VzZXIuaCIKIApAQCAtMTcyLDcgKzE3Myw4IEBACiAKIHN0
YXRpYyBwc19tb2R1bGUgKnBzX21vZHVsZXNbTUFYX01PRFVMRVMgKyAxXSA9IHsKIAlwc19m
aWxlc19wdHIsCi0JcHNfdXNlcl9wdHIKKwlwc191c2VyX3B0ciwKKwlwc19wZ3NxbF9wdHIK
IH07CiAKIGludCBwaHBfc2Vzc2lvbl9yZWdpc3Rlcl9zZXJpYWxpemVyKGNvbnN0IGNoYXIg
Km5hbWUsIAo=
--------------050703020804020503080906
Content-Type: text/plain;
 name="README.MOD_PGSQL"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="README.MOD_PGSQL"

UkVBRE1FLk1PRF9QR1NRTAoKKldBUk5JTkcqClRoaXMgc2Vzc2lvbiBzYXZlIGhhbmRsZXIg
aXMgRVhQRVJJTUVOVEFMLgoKbW9kX3Bnc3FsIGlzIGEgc2Vzc2lvbiBzYXZlIGhhbmRsZXIg
bW9kdWxlLiBJdCBwcm92aWRlcyBzZXNzaW9uIHN0cmFnZQp3aXRoIFBvc3RncmVTUUwgZGF0
YWJhc2UuIFRoaXMgbW9kdWxlIGlzIHdyaXR0ZW4gYnkgeW9oZ2FraUBwaHAubmV0LiAKUGxl
YXNlIHJlcG9ydCBwcm9ibGVtcyB0byBodHRwOi8vYnVncy5waHAubmV0LyBvciBwaHAtZGV2
QGxpc3RzLnBocC5uZXQuCgpTZXNzaW9uIFRhYmxlIERlZmluaXRpb24KCkNSRUFURSBUQUJM
RSBwaHBfc2Vzc2lvbiAoCiAgc2Vzc19pZCAgICAgICAgY2hhcigzMikgUFJJTUFSWSBLRVks
CiAgc2Vzc19uYW1lICAgICAgY2hhcigzMiksICAgICAgICAtLSBOb3QgdXNlZCBmb3Igbm93
LgogIHNlc3NfY3JlYXRlZCAgIGludGVnZXIsICAgICAgICAgLS0gVU5JWCB0aW1lCiAgc2Vz
c19tb2RpZmllZCAgaW50ZWdlciwgICAgICAgICAtLSBVTklYIHRpbWUKICBzZXNzX2RhdGEg
ICAgICB0ZXh0LCAgICAgICAgICAgIC0tIE1heCAxR0IgZm9yIDcuMSwgYWJvdXQgOEtCIGZv
ciA3LjAgb3IgbG93ZXIuCiAgc2Vzc19yZXNlcnZlZDEgaW50ZWdlciwKICBzZXNzX3Jlc2Vy
dmVkMiBpbnRlZ2VyLAogIHNlc3NfcmVzZXJ2ZWQzIGludGVnZXIsCiAgc2Vzc19yZXNlcnZl
ZDQgaW50ZWdlciwKICBzZXNzX3Jlc2VydmVkNSBpbnRlZ2VyLAogIHNlc3NfcmVzZXJ2ZWQ2
IGludGVnZXIsCiAgc2Vzc19yZXNlcnZlZDcgaW50ZWdlciwKICBzZXNzX3Jlc2VydmVkOCBp
bnRlZ2VyCik7CgpVc2VyIG1heSAqYXBwZW5kKiBhZGRpdGlvbmFsIGZpZWxkcywgc2Vzc19y
ZXNlcnZlZCogZmllbGRzIGFyZSBwbGFjZQpob2xkZXIgZm9yIGFkZGl0aW9uYWwgZmV0dXJl
LiBTaW5jZSBtb2RfcGdzcWwgYWNjZXNzZXMgZmllbGQgdXNpbmcKZmllbGQgaW5kZXgsIHVz
ZXIgbXVzdCB1c2UgdGhpcyBmaWVsZCBvcmRlci4KCkhvdyB0byB1c2UKClRvIGNvbXBpbGUg
UEhQIHdpdGggbW9kX3Bnc3FsLCB5b3UgbmVlZCAiLS13aXRoLXNlc3Npb24tcGdzcWxbPURJ
Ul0iCndoZW4geW91IGNvbmZpZ3VyZSBQSFAuIFs9RElSXSBpcyBpbnN0YWxsYXRpb24gcGF0
aCBmb3IKUG9zdGdyZVNRTC4gWW91IGRvbid0IGhhdmUgdG8gY29tcGlsZSBQSFAgd2l0aCBQ
b3N0Z3JlU1FMIG1vZHVsZSwgYnV0CnlvdXIgc3lzdGVtIG11c3QgaGF2ZSBsaWJwcSBhbmQg
aGVhZGVycyBpbnN0YWxsZWQuCgpGb2xsb3dpbmcgcGhwLmluaSBkaXJlY3RpdmVzIGhhcyBz
cGVjaWFsIG1lYW5pbmdzIGZvciBtb2RfcGdzcWwKCnNlc3Npb24uc2F2ZV9oYW5kbGVyIDog
InBnc3FsIiBmb3IgbW9kX3Bnc3FsIHNlc3Npb24uCnNlc3Npb24uc2F2ZV9wYXRoICAgIDog
VmFsaWQgUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHN0cmluZy4gCgpIb3cgaXQg
d29ya3MKCkl0IHVzZXMgbGlicHEgd2hpY2ggaXMgd3JpdHRlbiBpbiBDLiBJdCBhbHNvIHVz
ZXMgYXluYyBxdWVyeSBmb3IKZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGVyZWZvcmUsIHVzZXIg
d2lsbCBub3QgZXhwZXJpZW5jZSBkZWxleSBldmVuIGlmCmJhcmJhZ2UgY29sbGVjdGlvbiBp
cyBwZXJmb3JtZWQuIFRoaXMgbW9kdWxlIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQKdGhhbiB1
c2VyIGhhbmRsZXJzIHdyaXR0ZW4gaW4gUEhQLgoKSG93IHRvIGN1c3RvbWl6ZQoKU2luY2Ug
bW9kX3Bnc3FsIHVzZXMgUG9zdGdyZVNRTCBkYXRhYmFzZS4gVXNlciBjYW4gYWRkIG1vcmUg
ZmllbGRzIHRvCnNlc3Npb24gZGF0YWJhc2UgYW5kIGNyZWF0ZSBzZXNzaW9uIGFjY2VzcyBm
dW5jdGlvbnMgYXMgdXNlcgp3YW50LiBLZWVwIGluIG1pbmQgdGhhdCB1c2VyIGlzIG5vdCBz
dXBwb3NlZCB0byBvcmRlciBvZiBzdGFuZGFyZApmaWVsZHMuIFVzZXIgZmllbGRzIGFyZSBt
dXN0IGJlIGRlZmluZWQgYWZ0ZXIgbW9kX3Bnc3FsIGZpZWxkcy4KCg==
--------------050703020804020503080906--

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/