[PHP-users 4041] psql の \copy 相当機能を pgsql 拡張モジュールに追加する patch
Youichi Iwakiri
php-users@php.gr.jp
Sun, 02 Dec 2001 12:06:04 +0900
This is a multi-part message in MIME format.
--------=_1007262294.FFE207BF.FFE201A3
Content-Type: text/plain; charset=iso-2022-jp
いわきりです
先日、PHP-usersにpgsql拡張モジュール用のpatchを送ったのですが
余りにも間抜けなメモリリークがあったので修正しました。
また、
COPY "table_name" TO STDOUT USING DELIMITERS 'delim' WITH NULL AS 'null string'
だけでは片手落ちなので
COPY "table_name" FROM STDIN USING DELIMITERS 'delim' WITH NULL AS 'null string'
に対応する関数も併せて追加しました。
# "COPY FROM 〜"は pg_put_line(), pg_end_copy()があるので要らないと
# 言えば要らないのですが
関数名も変更しています。
このpatchにより追加される関数
array pg_copy_to(int connection_id, string table_name,
[, string delim [, string null_as]])
array pg_copy_from(int connection_id, string table_name, array rows
[, string delim [, string null_as]])
psqlの\copyコマンドとの違いは、ファイル操作を行わず、配列を介してのみ
機能する点です。
使用例1
$conn = pg_connect("dbname=db");
unset($rows);
$rows[] = "data1,data2,data3"; // データは`,'区切り
$rows[] = "data4,data5,data6";
$rows[] = "data7,data8,data9";
pg_copy_from($conn, "table_name", $rows, ',');
$res = pg_copy_to($conn, "table_name", ',');
$print_r($res);
pg_close($conn);
使用例2 (ファイルを介在する場合)
$conn = pg_connect("dbname=db");
$rows = file(file_path1);
/*
こちらの記述でもかまわず
$fd = fopen(file_path1, "r");
$rows = explode("\n", fread($fd, filesize(file_path1)));
fclose($fd);
*/
pg_copy_from($conn, "table_name", $rows);
$res = pg_copy_to($conn, "table_name");
$fd = fopen(file_path2, "w");
fwrite($fd, implode("\n", $res));
fclose($fd);
pg_close($conn);
※行末の`\n'は付いていても付いていなくても構いません
添付ファイルは2つのファイルを含んでいます。
-rw-r--r-- install/wheel 7945 Dec 2 10:47 2001 php4_0_6_pgsql_copy_func.diff
-rw-r--r-- install/wheel 7524 Dec 2 10:53 2001 php4_2_0_pgsql_copy_func.diff
現安定版の4.0.6用と開発版4.2.0-dev用です。
開発版4.2.0-dev用は大垣さんのpgsql非同期関数のpatchを当てたものに
更にpatchを当てる形になります。
ご意見等ありましたら、php-dev@php.gr.jpphp-dev宛で
お願いします。
--------=_1007262294.FFE207BF.FFE201A3
Content-Type: model/vrml,x-world/x-vrml; name="php_pgsql_patch.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="php_pgsql_patch.tar.gz"
H4sIAEGKCTwAA+1ae3PaOBDvv+RT6HLTxgSSGgIkpZNMcylpuUkIBXKd5tLx
uCASpmD7bNP0MXz329XDL2yeaXKds6YNtrRa7WpXK/3ktW6tkqZqFc26cf4Z
al3T+qb1x0Z3tzfo95/cTymoaqVUIk8IKeyXVfyFIn+hrlQoELJfUot7aqmg
VqCqXFaLT4h6T+PPLGPH1W1CngwMeBgOE+nubilNbv1ly87ODmGm3+1mzk2D
/Dk2CCmBUapqpbqnkqKqFjZyuRzZ3X3O6O4G7i16yXPZqw09XtMuIUVSUKul
YlXd471evSI7B3v5CsnB3wPy6tUGyTTfNrXTmmLdaEPTpnoPZjyfaVyenWUj
jYORZdpuPhPbSL+GGnOBRubArpnc1rfNUdyQ1tjVhgODxg5JjR7r7Tf+PuiT
t8d/1bTmu5Ozeq3RqTVOLl7XG2+Y2vv7+6j3/v6LfLFc4apnWrXOZauhnR6f
tWsvN9D1J+yvqO+0LqE6N9nIPd8mk8mEbD/fyG3kfu/RPoiVOblofvjj8rRd
v8ocFF4UsQnofvz4QSzbdE0yMFzi66/ga9c0DNp1B6aRJ45rD4wb4uqfhlQz
9BElf3uVPTocjAYutQN1xng41HTn40eYQpCxDTPA6naAbDQwdJf2PJ4m+aR3
PyOFQ+0v1EbB2dxdNk469YtGwC7A7QfY5PsXfUi2t31p8vDGIxDY4DM5JDjN
WOnJhi9CKJilTPcWVu32P2Nqf/NeYRhG7rdDTXwfzaUjawhawFCbOLXkevN6
k3QuSLvz+uKyQ17Xzurn9U6t1SZb1S3yvt55y2Qix1CxtYnscIoHPWCwU8DX
5hucb8LV4BU2dcZDV1Rp/A1bal9pt+3q7tjpfLMozCM+Spai0yFRZQ3OXc80
qKxjemDlp3H/b98vPvo6dp0vQKzwlyzK7XNHCeDFgYXcvVWuao3XWuPyXDtu
vWkr2SxB82S6ukNJsYqPGXB05TsugBvqapZug7XAHI5GvyrFPHnmWw1efINm
Dw9Pj+tnl62aYBn1f6yasL/SbCDx1rW79VJWCstBtaP3qUbB3XpjS9m8htLY
zHK6TxBFPr/0ZN6bK/Nesszw4rnbEvKD2cHpXfBuja8IHMZn9DKq5PaV1u60
/jo+05rNOLpV9C7N1bu0mN7wLMZfzYIrKhfsJcef0hQioQ5Lg6v6vnXReKM1
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
SUta0pKWtKQlLWlJS1rS8h8q/wIzMsUrAFAAAA==
--------=_1007262294.FFE207BF.FFE201A3--